From 0d36c01ede44e63319f51e3fc13d2c70c09cb815 Mon Sep 17 00:00:00 2001 From: Till Theato Date: Sun, 22 Aug 2010 09:08:27 +0000 Subject: [PATCH] Allow to reset single effect parameters: http://www.kdenlive.org/mantis/view.php?id=1753 svn path=/trunk/kdenlive/; revision=4746 --- src/doubleparameterwidget.cpp | 25 ++++++++++++++++---- src/doubleparameterwidget.h | 8 ++++++- src/effectstackedit.cpp | 3 ++- src/keyframeedit.cpp | 43 +++++++++++++++++++---------------- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/doubleparameterwidget.cpp b/src/doubleparameterwidget.cpp index 28d32f16..f876c07c 100644 --- a/src/doubleparameterwidget.cpp +++ b/src/doubleparameterwidget.cpp @@ -24,10 +24,15 @@ #include #include #include +#include +#include +#include -DoubleParameterWidget::DoubleParameterWidget(const QString &name, int value, int min, int max, const QString suffix, QWidget *parent) : - QWidget(parent) + +DoubleParameterWidget::DoubleParameterWidget(const QString &name, int value, int min, int max, int defaultValue, const QString suffix, QWidget *parent) : + QWidget(parent), + m_default(defaultValue) { QHBoxLayout *layout = new QHBoxLayout(this); @@ -41,12 +46,20 @@ DoubleParameterWidget::DoubleParameterWidget(const QString &name, int value, int m_spinBox = new QSpinBox(this); m_spinBox->setRange(min, max); + m_spinBox->setKeyboardTracking(false); if (!suffix.isEmpty()) m_spinBox->setSuffix(suffix); layout->addWidget(m_spinBox); + QToolButton *reset = new QToolButton(this); + reset->setAutoRaise(true); + reset->setIcon(KIcon("edit-undo")); + reset->setToolTip(i18n("Reset to default value")); + layout->addWidget(reset); + connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); connect(m_spinBox, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); + connect(reset, SIGNAL(clicked(bool)), this, SLOT(slotReset())); m_spinBox->setValue(value); } @@ -70,10 +83,14 @@ int DoubleParameterWidget::getValue() return m_spinBox->value(); } - void DoubleParameterWidget::setName(const QString& name) { m_name->setText(name); } -#include "doubleparameterwidget.moc" \ No newline at end of file +void DoubleParameterWidget::slotReset() +{ + m_spinBox->setValue(m_default); +} + +#include "doubleparameterwidget.moc" diff --git a/src/doubleparameterwidget.h b/src/doubleparameterwidget.h index 448bbc87..23e757c8 100644 --- a/src/doubleparameterwidget.h +++ b/src/doubleparameterwidget.h @@ -44,9 +44,10 @@ public: * @param value Value of the parameter * @param min Minimum value * @param max maximum value + * @param defaultValue Value used when using reset functionality * @param suffix (optional) Suffix to display in spinbox * @param parent (optional) Parent Widget */ - DoubleParameterWidget(const QString &name, int value, int min, int max, const QString suffix = QString(), QWidget* parent = 0); + DoubleParameterWidget(const QString &name, int value, int min, int max, int defaultValue, const QString suffix = QString(), QWidget* parent = 0); /** @brief Updates the label to display @param name. */ void setName(const QString &name); /** @brief Gets the parameter's value. */ @@ -56,7 +57,12 @@ public slots: /** @brief Sets the value to @param value. */ void setValue(int value); +private slots: + /** @brief Sets value to m_default. */ + void slotReset(); + private: + int m_default; QLabel *m_name; QSlider *m_slider; QSpinBox *m_spinBox; diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index 4bf8b971..5b87920d 100644 --- a/src/effectstackedit.cpp +++ b/src/effectstackedit.cpp @@ -217,7 +217,8 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in else max = pa.attribute("max").toInt(); - DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, (int)(value.toDouble() + 0.5), min, max, pa.attribute("suffix", QString()), this); + DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, (int)(value.toDouble() + 0.5), min, max, + pa.attribute("default").toInt(), pa.attribute("suffix"), this); m_vbox->addWidget(doubleparam); m_valueItems[paramName] = doubleparam; connect(doubleparam, SIGNAL(valueChanged(int)), this, SLOT(collectAllParameters())); diff --git a/src/keyframeedit.cpp b/src/keyframeedit.cpp index 71f9dde1..b18d39fe 100644 --- a/src/keyframeedit.cpp +++ b/src/keyframeedit.cpp @@ -16,6 +16,7 @@ ***************************************************************************/ #include "keyframeedit.h" +#include "doubleparameterwidget.h" #include "kdenlivesettings.h" #include @@ -89,11 +90,12 @@ void KeyframeEdit::addParameter(QDomElement e) int columnId = keyframe_list->columnCount(); keyframe_list->insertColumn(columnId); keyframe_list->setHorizontalHeaderItem(columnId, new QTableWidgetItem(paramName)); - m_slidersLayout->addWidget(new QLabel(paramName), columnId, 0); - QSlider *sl = new QSlider(Qt::Horizontal, this); - sl->setRange(m_params.at(columnId).attribute("min").toInt(), m_params.at(columnId).attribute("max").toInt()); - connect(sl, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); - m_slidersLayout->addWidget(sl, columnId, 1); + + DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, 0, + m_params.at(columnId).attribute("min").toInt(), m_params.at(columnId).attribute("max").toInt(), + m_params.at(columnId).attribute("default").toInt(), m_params.at(columnId).attribute("suffix"), this); + connect(doubleparam, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); + m_slidersLayout->addWidget(doubleparam, columnId, 0); QStringList frames = e.attribute("keyframes").split(";", QString::SkipEmptyParts); for (int i = 0; i < frames.count(); i++) { @@ -132,13 +134,14 @@ void KeyframeEdit::setupParam() kDebug() << " INSERT COL: " << col << ", " << paramName; keyframe_list->insertColumn(col); keyframe_list->setHorizontalHeaderItem(col, new QTableWidgetItem(paramName)); - m_slidersLayout = new QGridLayout; - m_slidersLayout->addWidget(new QLabel(paramName), 0, 0); - QSlider *sl = new QSlider(Qt::Horizontal, this); - sl->setRange(m_params.at(0).attribute("min").toInt(), m_params.at(0).attribute("max").toInt()); - connect(sl, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); - m_slidersLayout->addWidget(sl, 0, 1); - param_sliders->setLayout(m_slidersLayout); + m_slidersLayout = new QGridLayout(param_sliders); + + DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, 0, + m_params.at(0).attribute("min").toInt(), m_params.at(0).attribute("max").toInt(), + m_params.at(0).attribute("default").toInt(), m_params.at(0).attribute("suffix"), this); + connect(doubleparam, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); + m_slidersLayout->addWidget(doubleparam, 0, 0); + keyframe_list->setSelectionBehavior(QAbstractItemView::SelectRows); keyframe_list->setSelectionMode(QAbstractItemView::SingleSelection); @@ -333,12 +336,12 @@ void KeyframeEdit::slotAdjustKeyframeInfo(bool seek) keyframe_pos->setValue(getPos(item->row())); keyframe_pos->blockSignals(false); for (int col = 0; col < keyframe_list->columnCount(); col++) { - QSlider *sl = static_cast (m_slidersLayout->itemAtPosition(col, 1)->widget()); - if (!sl) + DoubleParameterWidget *doubleparam = static_cast (m_slidersLayout->itemAtPosition(col, 0)->widget()); + if (!doubleparam) continue; - sl->blockSignals(true); - sl->setValue(keyframe_list->item(item->row(), col)->text().toInt()); - sl->blockSignals(false); + doubleparam->blockSignals(true); + doubleparam->setValue(keyframe_list->item(item->row(), col)->text().toInt()); + doubleparam->blockSignals(false); } if (KdenliveSettings::keyframeseek() && seek) emit seekToPos(keyframe_pos->value() - m_min); @@ -357,10 +360,10 @@ void KeyframeEdit::slotAdjustKeyframeValue(int /*value*/) { QTableWidgetItem *item = keyframe_list->currentItem(); for (int col = 0; col < keyframe_list->columnCount(); col++) { - QSlider *sl = static_cast (m_slidersLayout->itemAtPosition(col, 1)->widget()); - if (!sl) + DoubleParameterWidget *doubleparam = static_cast (m_slidersLayout->itemAtPosition(col, 0)->widget()); + if (!doubleparam) continue; - int val = sl->value(); + int val = doubleparam->getValue(); QTableWidgetItem *nitem = keyframe_list->item(item->row(), col); if (nitem->text().toInt() != val) nitem->setText(QString::number(val)); -- 2.39.2