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"