File indexing completed on 2023-12-03 04:55:10
0001 /* 0002 SPDX-FileCopyrightText: 2008 Marco Gittler <g.marco@freenet.de> 0003 0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "positionwidget.h" 0008 0009 #include "kdenlivesettings.h" 0010 #include "timecodedisplay.h" 0011 0012 #include <QHBoxLayout> 0013 #include <QLabel> 0014 #include <QSlider> 0015 0016 PositionWidget::PositionWidget(const QString &name, int pos, int min, int max, const QString &comment, QWidget *parent) 0017 : QWidget(parent) 0018 { 0019 auto *layout = new QHBoxLayout(this); 0020 QLabel *label = new QLabel(name, this); 0021 m_slider = new QSlider(Qt::Horizontal, this); 0022 m_slider->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred)); 0023 m_slider->setRange(min, max); 0024 0025 m_display = new TimecodeDisplay(this); 0026 m_display->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred)); 0027 m_display->setRange(min, max); 0028 0029 layout->addWidget(label); 0030 layout->addWidget(m_slider); 0031 layout->addWidget(m_display); 0032 0033 m_slider->setValue(pos); 0034 m_display->setValue(pos); 0035 connect(m_slider, SIGNAL(valueChanged(int)), m_display, SLOT(setValue(int))); 0036 connect(m_slider, &QAbstractSlider::valueChanged, this, &PositionWidget::valueChanged); 0037 connect(m_display, &TimecodeDisplay::timeCodeEditingFinished, this, &PositionWidget::slotUpdatePosition); 0038 0039 setToolTip(comment); 0040 } 0041 0042 PositionWidget::~PositionWidget() = default; 0043 0044 int PositionWidget::getPosition() const 0045 { 0046 return m_slider->value(); 0047 } 0048 0049 void PositionWidget::setPosition(int pos) 0050 { 0051 m_slider->setValue(pos); 0052 } 0053 0054 void PositionWidget::slotUpdatePosition() 0055 { 0056 m_slider->blockSignals(true); 0057 m_slider->setValue(m_display->getValue()); 0058 m_slider->blockSignals(false); 0059 Q_EMIT valueChanged(); 0060 } 0061 0062 void PositionWidget::setRange(int min, int max, bool absolute) 0063 { 0064 if (absolute) { 0065 m_slider->setRange(min, max); 0066 m_display->setRange(min, max); 0067 } else { 0068 m_slider->setRange(0, max - min); 0069 m_display->setRange(0, max - min); 0070 } 0071 m_slider->setSingleStep(std::ceil((max - min) / 10.)); 0072 } 0073 0074 bool PositionWidget::isValid() const 0075 { 0076 return m_slider->minimum() != m_slider->maximum(); 0077 } 0078 0079 void PositionWidget::slotShowComment(bool show) 0080 { 0081 Q_UNUSED(show); 0082 }