]> git.sesse.net Git - kdenlive/commitdiff
Fix unnecessary refresh of effect stack, set effect param description as tooltip
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 16 Feb 2013 22:46:02 +0000 (23:46 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 16 Feb 2013 22:46:02 +0000 (23:46 +0100)
src/clipitem.cpp
src/customtrackview.cpp
src/customtrackview.h
src/doubleparameterwidget.cpp
src/effectstack/parametercontainer.cpp
src/initeffects.cpp

index 0e5dd9dc34e894797d45e231e2553ab205db342b..d5372fda6e2eea88558e147ff63db60ad1ac46f9 100644 (file)
@@ -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;
 }
index ff2ca772e3707ae73df0d0a035f029fda0511169..0d219f3bcaa009b5f30c395f29423f32c5eecd30 100644 (file)
@@ -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 <ClipItem *>(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<QGraphicsItem *> 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<ClipItem *>(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;
 }
 
index eba626a517ea858514977866eb63a395e410efd8..71aff974c499d5729682aec2b6651b5521ecade1 100644 (file)
@@ -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);
index 9aa55e9b2495a3804a9cc9a8ae4ee6fe6268156e..0a30fa1a0a9efae2f237f0ff9047e41c8f42f9a0 100644 (file)
@@ -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"
index 0cbe58ceb8bc39bd960f850335cc1937b9581e50..d8f209d8c10c7068777851ac430d832a1ae6c260 100644 (file)
@@ -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;
index df29192a01f90ca80bc92d0e97a602407873c7ae..e2f7734e6e4073ecbfe7f96b5d9766af4579d69d 100644 (file)
@@ -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);
             }