From d9e091ef9ba5f2afb46f27843fd6d19e03b060cd Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 16 Feb 2010 07:23:40 +0000 Subject: [PATCH] Fix project tree butons update when adding/removing clips svn path=/trunk/kdenlive/; revision=4308 --- src/clipmanager.cpp | 4 +++- src/kdenlivedoc.cpp | 8 ------- src/kdenlivedoc.h | 1 - src/mainwindow.cpp | 12 +++++++++++ src/mainwindow.h | 1 + src/monitormanager.cpp | 2 +- src/projectlist.cpp | 48 ++++++++++++++++++++++++++++++++---------- src/projectlist.h | 4 +++- 8 files changed, 57 insertions(+), 23 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 74c2f6fc..8521d78d 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -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; } } diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 13b1791c..cd1de382 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -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) { diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 06e4f733..7e2f768f 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -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; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3dcb07f7..82843be0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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)), this, SLOT(slotDeleteProjectClips(QStringList, QMap))); connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *))); connect(m_projectList, SIGNAL(showClipProperties(QList , QMap)), this, SLOT(slotShowClipProperties(QList , QMap))); 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 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" diff --git a/src/mainwindow.h b/src/mainwindow.h index ee841e25..67a8d6ab 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -341,6 +341,7 @@ private slots: void slotSwitchMonitors(); void slotInsertZoneToTree(); void slotInsertZoneToTimeline(); + void slotDeleteProjectClips(QStringList ids, QMap folderids); signals: Q_SCRIPTABLE void abortRenderJob(const QString &url); diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index d76355a8..968de22e 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -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(); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 86f802bd..894cd0fa 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -350,7 +350,7 @@ void ProjectList::trashUnusedClips() it2++; } - m_doc->deleteProjectClip(ids); + emit deleteProjectClips(ids, QMap ()); 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 ()); } } @@ -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())); } diff --git a/src/projectlist.h b/src/projectlist.h index 32c111b8..a3e31063 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -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 map); public slots: void setDocument(KdenliveDoc *doc); @@ -206,12 +207,12 @@ private: void requestClipInfo(const QDomElement xml, const QString id); QList m_thumbnailQueue; void requestClipThumbnail(const QString id); - void deleteProjectFolder(QMap map); void editFolder(const QString folderName, const QString oldfolderName, const QString &clipId); QStringList getGroup() const; void regenerateTemplate(ProjectItem *clip); void editClipSelection(QList 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 folderids); }; #endif -- 2.39.2