File indexing completed on 2024-05-12 08:20:32
0001 // SPDX-FileCopyrightText: 2021 Jesper K. Pedersen <blackie@kde.org> 0002 // SPDX-FileCopyrightText: 2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 #include "VideoToolBar.h" 0007 #include "Slider.h" 0008 0009 #include <QHBoxLayout> 0010 #include <QLabel> 0011 #include <QTime> 0012 #include <QToolButton> 0013 #include <QToolTip> 0014 #include <kiconloader.h> 0015 0016 namespace Viewer 0017 { 0018 0019 VideoToolBar::VideoToolBar(QWidget *parent) 0020 : QWidget(parent) 0021 { 0022 auto hLay = new QHBoxLayout(this); 0023 0024 m_currentOffset = new QLabel; 0025 hLay->addWidget(m_currentOffset); 0026 0027 m_offsetSlider = new Slider; 0028 hLay->addWidget(m_offsetSlider); 0029 0030 connect(m_offsetSlider, &Slider::onHover, this, &VideoToolBar::onTimeSliderHover); 0031 connect(m_offsetSlider, &Slider::sliderMoved, this, &VideoToolBar::positionChanged); 0032 connect(m_offsetSlider, &Slider::onLeave, this, &VideoToolBar::closePreview); 0033 0034 m_totalTime = new QLabel; 0035 hLay->addWidget(m_totalTime); 0036 0037 m_muteButton = new QToolButton; 0038 hLay->addWidget(m_muteButton); 0039 connect(m_muteButton, &QToolButton::clicked, this, [this] { setMuted(!m_isMuted); }); 0040 0041 m_volumeSlider = new QSlider(Qt::Horizontal); 0042 hLay->addWidget(m_volumeSlider); 0043 m_volumeSlider->setMaximumWidth(200); 0044 m_volumeSlider->setRange(0, 100); 0045 connect(m_volumeSlider, &QSlider::valueChanged, this, &VideoToolBar::volumeChanged); 0046 setMuted(false); // force loading the icon 0047 0048 m_percentageLabel = new QLabel; 0049 hLay->addWidget(m_percentageLabel); 0050 m_percentageLabel->setFixedWidth(fontMetrics().horizontalAdvance(QString::fromLatin1("100%"))); 0051 m_percentageLabel->setAlignment(Qt::AlignVCenter | Qt::AlignRight); 0052 } 0053 0054 int VideoToolBar::maximum() const 0055 { 0056 return m_offsetSlider->maximum(); 0057 } 0058 0059 void VideoToolBar::setRange(int min, int max) 0060 { 0061 m_offsetSlider->setRange(min, max); 0062 m_totalTime->setText(QTime(0, 0, 0).addMSecs(max).toString(format())); 0063 } 0064 0065 void VideoToolBar::setPosition(qint64 value) 0066 { 0067 m_offsetSlider->setValue(value); 0068 m_currentOffset->setText(QTime(0, 0, 0).addMSecs(value).toString(format())); 0069 } 0070 0071 int VideoToolBar::volume() const 0072 { 0073 return m_volumeSlider->value(); 0074 } 0075 0076 void VideoToolBar::setVolume(int volume) 0077 { 0078 m_volumeSlider->setValue(volume); 0079 m_percentageLabel->setText(QString::fromLatin1("%1%").arg(volume)); 0080 } 0081 0082 bool VideoToolBar::isMuted() const 0083 { 0084 return m_isMuted; 0085 } 0086 0087 void VideoToolBar::setMuted(bool b) 0088 { 0089 QString icon = b ? QString::fromLatin1("audio-volume-muted") : QString::fromLatin1("audio-volume-medium"); 0090 m_muteButton->setIcon(QIcon::fromTheme(icon) 0091 .pixmap(KIconLoader::StdSizes::SizeSmall)); 0092 m_volumeSlider->setEnabled(!b); 0093 if (b != m_isMuted) { 0094 m_isMuted = b; 0095 Q_EMIT muted(b); 0096 } 0097 } 0098 0099 void VideoToolBar::onTimeSliderHover(const QPoint &pos, int value) 0100 { 0101 QToolTip::showText(pos, QTime(0, 0, 0).addMSecs(value).toString(format())); 0102 } 0103 0104 void VideoToolBar::setSeekSliderEnabled(bool b) 0105 { 0106 m_offsetSlider->setEnabled(b); 0107 } 0108 0109 QString VideoToolBar::format() const 0110 { 0111 if (m_offsetSlider->maximum() > 60 * 60 * 1000) 0112 return QString::fromLatin1("HH:mm:ss"); 0113 else 0114 return QString::fromLatin1("mm:ss"); 0115 } 0116 0117 } // namespace Viewer 0118 0119 #include "moc_VideoToolBar.cpp"