From 897ec70d85cb2fb6b12e0af3143e20e9d507f2a8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 16 Feb 2013 23:46:02 +0100 Subject: [PATCH] Fix unnecessary refresh of effect stack, set effect param description as tooltip --- src/clipitem.cpp | 2 +- src/customtrackview.cpp | 43 +++++++++++++++++++------- src/customtrackview.h | 2 ++ src/doubleparameterwidget.cpp | 20 ++---------- src/effectstack/parametercontainer.cpp | 6 ++++ src/initeffects.cpp | 6 ++++ 6 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 0e5dd9dc..d5372fda 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -1800,7 +1800,7 @@ void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) e.removeAttribute("kdenlive_ix"); } CustomTrackView *view = (CustomTrackView *) scene()->views()[0]; - if (view) view->slotAddEffect(e, m_info.startPos, track()); + if (view) view->slotDropEffect(this, e, m_info.startPos, track()); } else return; } diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index ff2ca772..0d219f3b 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1653,12 +1653,12 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint &pos) { QPointF framePos = mapToScene(pos); int track = framePos.y() / KdenliveSettings::trackheight(); - m_scene->clearSelection(); - m_dragItem = NULL; - resetSelectionGroup(false); m_clipDrag = data->hasFormat("kdenlive/clip") || data->hasFormat("kdenlive/producerslist"); // This is not a clip drag, maybe effect or other... if (!m_clipDrag) return false; + m_scene->clearSelection(); + m_dragItem = NULL; + resetSelectionGroup(false); if (track < 0 || track > m_document->tracksCount() - 1 || m_document->trackInfoAt(m_document->tracksCount() - track - 1).isLocked) return true; if (data->hasFormat("kdenlive/clip")) { QStringList list = QString(data->data("kdenlive/clip")).split(';'); @@ -1882,7 +1882,7 @@ void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect) if (!m_document->renderer()->mltAddEffect(track, pos, params)) emit displayMessage(i18n("Problem adding effect to clip"), ErrorMessage); clip->setSelectedEffect(params.paramValue("kdenlive_ix").toInt()); - if (clip->isSelected()) emit clipItemSelected(clip); + if (clip->isMainSelectedClip()) emit clipItemSelected(clip); } else emit displayMessage(i18n("Cannot find clip to add effect"), ErrorMessage); } @@ -1917,8 +1917,8 @@ void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect) } ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track); if (clip) { - clip->deleteEffect(index); - emit clipItemSelected(clip); + clip->deleteEffect(index); + if (clip->isMainSelectedClip()) emit clipItemSelected(clip); } } @@ -1933,6 +1933,9 @@ void CustomTrackView::slotAddGroupEffect(QDomElement effect, AbstractGroupItem * else effectName = i18n("effect"); effectCommand->setText(i18n("Add %1", effectName)); for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == GROUPWIDGET) { + itemList << itemList.at(i)->childItems(); + } if (itemList.at(i)->type() == AVWIDGET) { ClipItem *item = static_cast (itemList.at(i)); if (effect.tagName() == "effectgroup") { @@ -1974,12 +1977,27 @@ void CustomTrackView::slotAddEffect(ClipItem *clip, QDomElement effect) if (clip) slotAddEffect(effect, clip->startPos(), clip->track()); } +void CustomTrackView::slotDropEffect(ClipItem *clip, QDomElement effect, GenTime pos, int track) +{ + if (clip == NULL) return; + slotAddEffect(effect, pos, track); + if (clip->parentItem()) { + // Clip is in a group, should not happen + kDebug()<<"/// DROPPED ON ITEM IN GRP"; + } + else if (clip != m_dragItem) { + clearSelection(false); + m_dragItem = clip; + clip->setSelected(true); + emit clipItemSelected(clip); + } +} + void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track) { QList itemList; QUndoCommand *effectCommand = new QUndoCommand(); QString effectName; - int offset = effect.attribute("clipstart").toInt(); if (effect.tagName() == "effectgroup") { effectName = effect.attribute("name"); @@ -2033,19 +2051,20 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track) if (effectCommand->childCount() > 0) { m_commandStack->push(effectCommand); setDocumentModified(); - if (effectCommand->childCount() == 1) { + /*if (effectCommand->childCount() == 1) { // Display newly added clip effect for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { ClipItem *clip = static_cast(itemList.at(i)); clip->setSelectedEffect(clip->effectsCount()); - if (!clip->isSelected()) { + if (!clip->isSelected() && (!m_dragItem || !itemList.contains(m_dragItem))) { + kDebug()<<"// CLIP WAS NO SELECTED, DRG: "<<(m_dragItem == NULL); clearSelection(false); clip->setSelected(true); m_dragItem = clip; + emit clipItemSelected(clip); + break; } - emit clipItemSelected(clip); - break; } } } @@ -2059,7 +2078,7 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track) } } } - } + }*/ } else delete effectCommand; } diff --git a/src/customtrackview.h b/src/customtrackview.h index eba626a5..71aff974 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -80,6 +80,8 @@ public: void addData(const QString &id, const QString &key, const QString &data); void setScale(double scaleFactor, double verticalScale); void deleteClip(const QString &clipId); + /** @brief An effect was dropped on @param clip */ + void slotDropEffect(ClipItem *clip, QDomElement effect, GenTime pos, int track); /** @brief Add effect to current clip */ void slotAddEffect(QDomElement effect, GenTime pos, int track); void slotAddGroupEffect(QDomElement effect, AbstractGroupItem *group, AbstractClipItem *dropTarget = NULL); diff --git a/src/doubleparameterwidget.cpp b/src/doubleparameterwidget.cpp index 9aa55e9b..0a30fa1a 100644 --- a/src/doubleparameterwidget.cpp +++ b/src/doubleparameterwidget.cpp @@ -32,8 +32,7 @@ DoubleParameterWidget::DoubleParameterWidget(const QString &name, double value, double min, double max, double defaultValue, const QString &comment, int id, const QString suffix, int decimals, QWidget *parent) : - QWidget(parent), - m_commentLabel(NULL) + QWidget(parent) { setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum); QGridLayout *layout = new QGridLayout(this); @@ -44,14 +43,7 @@ DoubleParameterWidget::DoubleParameterWidget(const QString &name, double value, layout->addWidget(m_dragVal, 0, 1); if (!comment.isEmpty()) { - m_commentLabel = new QLabel(comment, this); - m_commentLabel->setWordWrap(true); - m_commentLabel->setTextFormat(Qt::RichText); - m_commentLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop); - m_commentLabel->setFrameShape(QFrame::StyledPanel); - m_commentLabel->setFrameShadow(QFrame::Raised); - m_commentLabel->setHidden(true); - layout->addWidget(m_commentLabel, 1, 0, 1, -1); + setToolTip(comment); } m_dragVal->setValue(value, false); connect(m_dragVal, SIGNAL(valueChanged(double, bool)), this, SLOT(slotSetValue(double, bool))); @@ -61,7 +53,6 @@ DoubleParameterWidget::DoubleParameterWidget(const QString &name, double value, DoubleParameterWidget::~DoubleParameterWidget() { delete m_dragVal; - if (m_commentLabel) delete m_commentLabel; } int DoubleParameterWidget::spinSize() @@ -105,13 +96,6 @@ void DoubleParameterWidget::setInTimelineProperty(bool intimeline) void DoubleParameterWidget::slotShowComment( bool show) { - if (m_commentLabel) { - m_commentLabel->setVisible(show); - if (show) - layout()->setContentsMargins(0, 0, 0, 15); - else - layout()->setContentsMargins(0, 0, 0, 0); - } } #include "doubleparameterwidget.moc" diff --git a/src/effectstack/parametercontainer.cpp b/src/effectstack/parametercontainer.cpp index 0cbe58ce..d8f209d8 100644 --- a/src/effectstack/parametercontainer.cpp +++ b/src/effectstack/parametercontainer.cpp @@ -189,6 +189,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect } if (!value.isEmpty()) lsval->list->setCurrentIndex(listitems.indexOf(value)); lsval->name->setText(paramName); + lsval->setToolTip(comment); lsval->labelComment->setText(comment); lsval->widgetComment->setHidden(true); m_valueItems[paramName] = lsval; @@ -201,6 +202,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect bval->setupUi(toFillin); bval->checkBox->setCheckState(value == "0" ? Qt::Unchecked : Qt::Checked); bval->name->setText(paramName); + bval->name->setToolTip(comment); bval->labelComment->setText(comment); bval->widgetComment->setHidden(true); m_valueItems[paramName] = bval; @@ -278,6 +280,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect if (value.startsWith('#')) value = value.replace('#', "0x"); ChooseColorWidget *choosecolor = new ChooseColorWidget(paramName, value, pa.hasAttribute("alpha"), parent); + choosecolor->setToolTip(comment); m_vbox->addWidget(choosecolor); m_valueItems[paramName] = choosecolor; connect(choosecolor, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int))); @@ -292,6 +295,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect pos = m_out - pos; } PositionEdit *posedit = new PositionEdit(paramName, pos, 0, m_out - m_in, m_metaInfo->timecode); + posedit->setToolTip(comment); connect(this, SIGNAL(updateRange(int,int)), posedit, SLOT(setRange(int,int))); m_vbox->addWidget(posedit); m_valueItems[paramName+"position"] = posedit; @@ -412,6 +416,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect Urlval *cval = new Urlval; cval->setupUi(toFillin); cval->label->setText(paramName); + cval->setToolTip(comment); cval->urlwidget->fileDialog()->setFilter(ProjectList::getExtensions()); m_valueItems[paramName] = cval; cval->urlwidget->setUrl(KUrl(value)); @@ -423,6 +428,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect kval->setupUi(toFillin); kval->label->setText(paramName); kval->lineeditwidget->setText(value); + kval->setToolTip(comment); QDomElement klistelem = pa.firstChildElement("keywords"); QDomElement kdisplaylistelem = pa.firstChildElement("keywordsdisplay"); QStringList keywordlist; diff --git a/src/initeffects.cpp b/src/initeffects.cpp index df29192a..e2f7734e 100644 --- a/src/initeffects.cpp +++ b/src/initeffects.cpp @@ -526,6 +526,12 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, QDomElement pname = ret.createElement("name"); pname.appendChild(ret.createTextNode(paramdesc.get("title"))); params.appendChild(pname); + + if (paramdesc.get("description")) { + QDomElement desc = ret.createElement("comment"); + desc.appendChild(ret.createTextNode(paramdesc.get("description"))); + params.appendChild(desc); + } eff.appendChild(params); } -- 2.39.2