]> git.sesse.net Git - kdenlive/commitdiff
Fix project tree butons update when adding/removing clips
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 16 Feb 2010 07:23:40 +0000 (07:23 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 16 Feb 2010 07:23:40 +0000 (07:23 +0000)
svn path=/trunk/kdenlive/; revision=4308

src/clipmanager.cpp
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/mainwindow.h
src/monitormanager.cpp
src/projectlist.cpp
src/projectlist.h

index 74c2f6fc3710fea03b917e73d0b66b7329533278..8521d78dbf6669b8949a962325f36a7397cefb66 100644 (file)
@@ -170,7 +170,9 @@ void ClipManager::deleteClip(const QString &clipId)
                 // listen for file change
                 m_fileWatcher.removeFile(m_clipList.at(i)->fileURL().path());
             }
-            delete m_clipList.takeAt(i);
+            DocClipBase *clip = m_clipList.takeAt(i);
+            delete clip;
+            clip = NULL;
             break;
         }
     }
index 13b1791c22611869eaca9160856dc77e2d208ce8..cd1de3829b0b49bd2005867776d38621dc26f5c0 100644 (file)
@@ -1020,14 +1020,6 @@ void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId
     }
 }
 
-void KdenliveDoc::deleteProjectClip(QStringList ids)
-{
-    for (int i = 0; i < ids.size(); ++i) {
-        emit deleteTimelineClip(ids.at(i));
-    }
-    m_clipManager->slotDeleteClips(ids);
-    setModified(true);
-}
 
 void KdenliveDoc::deleteClip(const QString &clipId)
 {
index 06e4f7337614666f8d77ea1506e529ec49ea3bb2..7e2f768fdc94b60dec901fa0d1538380a4a5d5c0 100644 (file)
@@ -74,7 +74,6 @@ Q_OBJECT public:
     int getFramePos(QString duration);
     DocClipBase *getBaseClip(const QString &clipId);
     void updateClip(const QString id);
-    void deleteProjectClip(QStringList ids);
     /** Inform application of the audio thumbnails generation progress */
     void setThumbsProgress(const QString &message, int progress);
     const QString &profilePath() const;
index 3dcb07f70c40ed74e67a54688bdbab975a6fd55e..82843be02ad1acf5f3f999dc04acc6eef99585da 100644 (file)
@@ -705,6 +705,7 @@ void MainWindow::slotConnectMonitors()
 
     m_projectList->setRenderer(m_projectMonitor->render);
     //connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
+    connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap<QString, QString>)), this, SLOT(slotDeleteProjectClips(QStringList, QMap<QString, QString>)));
     connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
     connect(m_projectList, SIGNAL(showClipProperties(QList <DocClipBase *>, QMap<QString, QString>)), this, SLOT(slotShowClipProperties(QList <DocClipBase *>, QMap<QString, QString>)));
     connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, int, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, bool)));
@@ -3291,5 +3292,16 @@ void MainWindow::slotInsertZoneToTimeline()
     m_activeTimeline->projectView()->insertClipCut(m_clipMonitor->activeClip(), info.at(1).toInt(), info.at(2).toInt());
 }
 
+
+void MainWindow::slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids)
+{
+    for (int i = 0; i < ids.size(); ++i) {
+        m_activeTimeline->slotDeleteClip(ids.at(i));
+    }
+    m_activeDocument->clipManager()->slotDeleteClips(ids);
+    if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids);
+
+}
+
 #include "mainwindow.moc"
 
index ee841e25891a95886515da84826cc39e1ba9a63e..67a8d6abd57b0353fbd9ddff38650810d6b31df8 100644 (file)
@@ -341,6 +341,7 @@ private slots:
     void slotSwitchMonitors();
     void slotInsertZoneToTree();
     void slotInsertZoneToTimeline();
+    void slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids);
 
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
index d76355a864b8296e8374c1ee7e9b031ea7a40a5a..968de22e77b26f6962f0b9c3893d210ee16a7347 100644 (file)
@@ -70,7 +70,7 @@ void MonitorManager::slotSwitchMonitors(bool activateClip)
         m_projectMonitor->start();
         m_activeMonitor = m_projectMonitor->name();
         emit raiseClipMonitor(false);
-    } else if (activateClip && m_projectMonitor->isActive()){
+    } else if (activateClip && m_projectMonitor->isActive()) {
         m_projectMonitor->stop();
         m_clipMonitor->start();
         m_activeMonitor = m_clipMonitor->name();
index 86f802bd4de0f0168f7ede75a1cc0cd2b7b6ad1b..894cd0fa4b751094676111907a86313d938f4792 100644 (file)
@@ -350,7 +350,7 @@ void ProjectList::trashUnusedClips()
         it2++;
     }
 
-    m_doc->deleteProjectClip(ids);
+    emit deleteProjectClips(ids, QMap <QString, QString>());
     for (int i = 0; i < urls.count(); i++) {
         KIO::NetAccess::del(KUrl(urls.at(i)), this);
     }
@@ -629,15 +629,30 @@ void ProjectList::slotRemoveClip()
 
     if (delCommand->childCount() == 0) delete delCommand;
     else m_commandStack->push(delCommand);
-    if (!ids.isEmpty()) m_doc->deleteProjectClip(ids);
-    if (!folderids.isEmpty()) deleteProjectFolder(folderids);
+    emit deleteProjectClips(ids, folderids);
+}
+
+void ProjectList::updateButtons() const
+{
     if (m_listView->topLevelItemCount() == 0) {
-        m_editAction->setEnabled(false);
         m_deleteAction->setEnabled(false);
-        m_openAction->setEnabled(false);
-        m_reloadAction->setEnabled(false);
-        m_transcodeAction->setEnabled(false);
+    } else {
+        m_deleteAction->setEnabled(true);
+        if (!m_listView->currentItem()) m_listView->setCurrentItem(m_listView->topLevelItem(0));
+        QTreeWidgetItem *item = m_listView->currentItem();
+        if (item && item->type() == PROJECTCLIPTYPE) {
+            m_editAction->setEnabled(true);
+            m_openAction->setEnabled(true);
+            m_reloadAction->setEnabled(true);
+            m_transcodeAction->setEnabled(true);
+            return;
+        }
     }
+
+    m_editAction->setEnabled(false);
+    m_openAction->setEnabled(false);
+    m_reloadAction->setEnabled(false);
+    m_transcodeAction->setEnabled(false);
 }
 
 void ProjectList::selectItemById(const QString &clipId)
@@ -655,10 +670,13 @@ void ProjectList::slotDeleteClip(const QString &clipId)
         return;
     }
     m_listView->blockSignals(true);
+    QTreeWidgetItem *newSelectedItem = m_listView->itemAbove(item);
+    if (!newSelectedItem) newSelectedItem = m_listView->itemBelow(item);
     delete item;
     m_doc->clipManager()->deleteClip(clipId);
     m_listView->blockSignals(false);
-    slotClipSelected();
+    if (newSelectedItem) m_listView->setCurrentItem(newSelectedItem);
+    else updateButtons();
 }
 
 
@@ -681,7 +699,11 @@ void ProjectList::slotAddFolder(const QString foldername, const QString &clipId,
         FolderProjectItem *item = getFolderItemById(clipId);
         if (item) {
             m_doc->clipManager()->deleteFolder(clipId);
+            QTreeWidgetItem *newSelectedItem = m_listView->itemAbove(item);
+            if (!newSelectedItem) newSelectedItem = m_listView->itemBelow(item);
             delete item;
+            if (newSelectedItem) m_listView->setCurrentItem(newSelectedItem);
+            else updateButtons();
         }
     } else {
         if (edit) {
@@ -705,6 +727,7 @@ void ProjectList::slotAddFolder(const QString foldername, const QString &clipId,
             m_doc->clipManager()->addFolder(clipId, foldername);
             m_listView->blockSignals(false);
         }
+        updateButtons();
     }
     m_doc->setModified(true);
 }
@@ -786,8 +809,10 @@ void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties)
             }
         }
     }
-
-    if (getProperties && m_listView->isEnabled()) m_listView->blockSignals(false);
+    if (m_listView->isEnabled()) {
+        updateButtons();
+        if (getProperties) m_listView->blockSignals(false);
+    }
     if (getProperties && !m_queueTimer.isActive()) m_queueTimer.start();
 }
 
@@ -938,7 +963,7 @@ void ProjectList::slotRemoveInvalidClip(const QString &id, bool replace)
         }
         QStringList ids;
         ids << id;
-        if (replace) m_doc->deleteProjectClip(ids);
+        if (replace) emit deleteProjectClips(ids, QMap <QString, QString>());
     }
 }
 
@@ -1097,6 +1122,7 @@ void ProjectList::slotCheckForEmptyQueue()
         emit displayMessage(QString(), -1);
         m_listView->blockSignals(false);
         m_listView->setEnabled(true);
+        updateButtons();
     } else if (!m_refreshed) QTimer::singleShot(300, this, SLOT(slotCheckForEmptyQueue()));
 }
 
index 32c111b8a8e8815d5b8ff5425e0ca08ee74e4102..a3e31063cb9102d8d30b815c2415dc2eb2eb1568 100644 (file)
@@ -154,6 +154,7 @@ public:
     void focusTree() const;
     SubProjectItem *getSubItem(ProjectItem *clip, QPoint zone);
     void doUpdateClipCut(const QString &id, const QPoint oldzone, const QPoint zone, const QString &comment);
+    void deleteProjectFolder(QMap <QString, QString> map);
 
 public slots:
     void setDocument(KdenliveDoc *doc);
@@ -206,12 +207,12 @@ private:
     void requestClipInfo(const QDomElement xml, const QString id);
     QList <QString> m_thumbnailQueue;
     void requestClipThumbnail(const QString id);
-    void deleteProjectFolder(QMap <QString, QString> map);
     void editFolder(const QString folderName, const QString oldfolderName, const QString &clipId);
     QStringList getGroup() const;
     void regenerateTemplate(ProjectItem *clip);
     void editClipSelection(QList<QTreeWidgetItem *> list);
     void adjustTranscodeActions(ProjectItem *clip) const;
+    void updateButtons() const;
 
 private slots:
     void slotClipSelected();
@@ -241,6 +242,7 @@ signals:
     void clipNameChanged(const QString, const QString);
     void clipNeedsReload(const QString&, bool);
     void refreshClip();
+    void deleteProjectClips(QStringList ids, QMap <QString, QString> folderids);
 };
 
 #endif