File indexing completed on 2024-04-28 04:48:36

0001 /*
0002     SPDX-FileCopyrightText: 2005 Max Howell <max.howell@methylblue.com>
0003     SPDX-FileCopyrightText: 2007 Ian Monroe <ian@monroe.nu>
0004 
0005     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #include "adjustSizeButton.h"
0009 
0010 #include <KGuiItem>
0011 #include <KLocalizedString>
0012 
0013 #include <QApplication>
0014 #include <QEvent>
0015 #include <QLabel>
0016 #include <QLayout>
0017 #include <QPainter>
0018 #include <QPushButton>
0019 #include <QTimerEvent>
0020 #include <QVBoxLayout>
0021 
0022 #include "theStream.h"
0023 #include "videoWindow.h" //videoWindow()
0024 
0025 namespace Dragon
0026 {
0027 AdjustSizeButton::AdjustSizeButton(QWidget *parent)
0028     : QFrame(parent)
0029     , m_counter(0)
0030     , m_stage(1)
0031     , m_offset(0)
0032 {
0033     parent->installEventFilter(this);
0034 
0035     setPalette(QApplication::palette()); // videoWindow has different palette
0036     setFrameStyle(QFrame::Plain | QFrame::Box);
0037 
0038     m_preferred = new QPushButton(QIcon::fromTheme(QStringLiteral("viewmag")), i18nc("@action:button", "Preferred Scale"), this);
0039     connect(m_preferred, &QAbstractButton::clicked, Dragon::mainWindow(), &QWidget::adjustSize);
0040     connect(m_preferred, &QAbstractButton::clicked, this, &QObject::deleteLater);
0041 
0042     m_oneToOne = new QPushButton(QIcon::fromTheme(QStringLiteral("viewmag1")), i18nc("@action:button", "Scale 100%"), this);
0043     connect(m_oneToOne, &QAbstractButton::clicked, videoWindow(), &VideoWindow::resetZoom);
0044     connect(m_oneToOne, &QAbstractButton::clicked, this, &QObject::deleteLater);
0045 
0046     QBoxLayout *hbox = new QHBoxLayout(this);
0047     QBoxLayout *vbox = new QVBoxLayout(this);
0048     hbox->addLayout(vbox);
0049     vbox->addWidget(new QLabel(i18n("<b>Adjust video scale?</b>"), this));
0050     vbox->addWidget(m_preferred);
0051     vbox->addWidget(m_oneToOne);
0052     hbox->addWidget(m_thingy = new QFrame(this));
0053 
0054     m_thingy->setFixedWidth(fontMetrics().horizontalAdvance(QLatin1String("X")));
0055     m_thingy->setFrameStyle(QFrame::Plain | QFrame::Box);
0056     {
0057         QPalette palette;
0058         palette.setColor(m_thingy->backgroundRole(), palette.color(QPalette::Window).darker());
0059         m_thingy->setPalette(palette);
0060     }
0061 
0062     QEvent e(QEvent::Resize);
0063     eventFilter(nullptr, &e);
0064 
0065     adjustSize();
0066     show();
0067 
0068     m_timerId = startTimer(5);
0069 }
0070 
0071 void AdjustSizeButton::timerEvent(QTimerEvent *)
0072 {
0073     QFrame *&h = m_thingy;
0074 
0075     switch (m_stage) {
0076     case 1: // raise
0077         move();
0078         m_offset++;
0079 
0080         if (m_offset > height())
0081             killTimer(m_timerId), m_timerId = startTimer(40), m_stage = 2;
0082 
0083         break;
0084 
0085     case 2: // fill in pause timer bar
0086         if (m_counter < h->height() - 3)
0087             QPainter(h).fillRect(2, 2, h->width() - 4, m_counter, palette().color(QPalette::Active, QPalette::Highlight));
0088 
0089         if (!testAttribute(Qt::WA_UnderMouse))
0090             m_counter++;
0091 
0092         if (m_counter > h->height() + 5) // pause for 360ms before lowering
0093             m_stage = 3, killTimer(m_timerId), m_timerId = startTimer(6);
0094 
0095         break;
0096 
0097     case 3: // lower
0098         if (testAttribute(Qt::WA_UnderMouse)) {
0099             m_stage = 1;
0100             m_counter = 0;
0101             m_thingy->repaint();
0102             break;
0103         }
0104 
0105         m_offset--;
0106         move();
0107 
0108         if (m_offset < 0)
0109             deleteLater();
0110     }
0111 }
0112 
0113 bool AdjustSizeButton::eventFilter(QObject * /*o*/, QEvent *e)
0114 {
0115     if (e->type() == QEvent::Resize) {
0116         const QSize preferredSize = TheStream::profile().readEntry<QSize>("Preferred Size", QSize());
0117         const QSize defaultSize = TheStream::defaultVideoSize();
0118         const QSize parentSize = parentWidget()->size();
0119 
0120         m_preferred->setEnabled(preferredSize.isValid() && parentSize != preferredSize && defaultSize != preferredSize);
0121         m_oneToOne->setEnabled(defaultSize != parentSize);
0122 
0123         move();
0124 
0125         if (!m_preferred->isEnabled() && !m_oneToOne->isEnabled() && m_counter == 0)
0126             deleteLater();
0127     }
0128 
0129     return false;
0130 }
0131 }
0132 
0133 #include "moc_adjustSizeButton.cpp"