File indexing completed on 2024-04-28 04:21:27

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"