/***************************************************************************
- geomeytrval.cpp - description
+ positionedit.cpp - description
-------------------
begin : 03 Aug 2008
copyright : (C) 2008 by Marco Gittler
***************************************************************************/
#include "positionedit.h"
+#include "timecodedisplay.h"
#include "kdenlivesettings.h"
#include <KDebug>
-PositionEdit::PositionEdit(const QString name, int pos, int min, int max, const Timecode tc, QWidget* parent) :
- QWidget(parent),
- m_tc(tc)
+#include <QLabel>
+#include <QSlider>
+#include <QHBoxLayout>
+
+PositionEdit::PositionEdit(const QString &name, int pos, int min, int max, const Timecode&tc, QWidget* parent) :
+ QWidget(parent)
+{
+ QHBoxLayout *layout = new QHBoxLayout(this);
+
+ QLabel *label = new QLabel(name, this);
+
+ m_slider = new QSlider(Qt::Horizontal);
+ m_slider->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred));
+ m_slider->setRange(min, max);
+
+ m_display = new TimecodeDisplay(tc, this);
+ m_display->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred));
+ m_display->setRange(min, max);
+
+ layout->addWidget(label);
+ layout->addWidget(m_slider);
+ layout->addWidget(m_display);
+
+ connect(m_slider, SIGNAL(valueChanged(int)), m_display, SLOT(setValue(int)));
+ connect(m_slider, SIGNAL(valueChanged(int)), this, SIGNAL(parameterChanged(int)));
+ connect(m_display, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotUpdatePosition()));
+ m_slider->setValue(pos);
+}
+
+PositionEdit::~PositionEdit()
{
- m_ui.setupUi(this);
- m_ui.label->setText(name);
- m_ui.horizontalSlider->setRange(min, max);
- connect(m_ui.horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(slotUpdateTimecode()));
- connect(m_ui.krestrictedline, SIGNAL(editingFinished()), this, SLOT(slotUpdatePosition()));
- m_ui.horizontalSlider->setValue(pos);
- if (KdenliveSettings::frametimecode()) {
- m_ui.krestrictedline->setInputMask("000000000000");
- m_ui.krestrictedline->setText(QString::number(pos));
- } else m_ui.krestrictedline->setText(m_tc.getTimecodeFromFrames(pos));
+ m_display->blockSignals(true);
+ m_slider->blockSignals(true);
+ delete m_slider;
+ delete m_display;
+}
+
+void PositionEdit::updateTimecodeFormat()
+{
+ m_display->slotUpdateTimeCodeFormat();
}
int PositionEdit::getPosition() const
{
- return m_ui.horizontalSlider->value();
+ return m_slider->value();
}
void PositionEdit::setPosition(int pos)
{
- m_ui.horizontalSlider->setValue(pos);
- if (KdenliveSettings::frametimecode()) m_ui.krestrictedline->setText(QString::number(pos));
- else m_ui.krestrictedline->setText(m_tc.getTimecodeFromFrames(pos));
+ m_slider->setValue(pos);
}
-void PositionEdit::slotUpdateTimecode()
+void PositionEdit::slotUpdatePosition()
{
- if (KdenliveSettings::frametimecode()) m_ui.krestrictedline->setText(QString::number(m_ui.horizontalSlider->value()));
- else m_ui.krestrictedline->setText(m_tc.getTimecodeFromFrames(m_ui.horizontalSlider->value()));
- emit parameterChanged();
+ m_slider->blockSignals(true);
+ m_slider->setValue(m_display->getValue());
+ m_slider->blockSignals(false);
+ emit parameterChanged(m_display->getValue());
}
-void PositionEdit::slotUpdatePosition()
+void PositionEdit::setRange(int min, int max, bool absolute)
{
- m_ui.horizontalSlider->blockSignals(true);
- int pos;
- if (KdenliveSettings::frametimecode()) pos = m_ui.krestrictedline->text().toInt();
- else pos = m_tc.getFrameCount(m_ui.krestrictedline->text());
- m_ui.horizontalSlider->setValue(pos);
- if (pos != m_ui.horizontalSlider->value()) {
- // Value out of range
- if (KdenliveSettings::frametimecode()) m_ui.krestrictedline->setText(QString::number(m_ui.horizontalSlider->value()));
- else m_ui.krestrictedline->setText(m_tc.getTimecodeFromFrames(m_ui.horizontalSlider->value()));
+ if (absolute) {
+ m_slider->setRange(min, max);
+ m_display->setRange(min, max);
+ } else {
+ m_slider->setRange(0, max - min);
+ m_display->setRange(0, max - min);
}
- m_ui.horizontalSlider->blockSignals(false);
- emit parameterChanged();
}
+#include "positionedit.moc"