]> git.sesse.net Git - kdenlive/commitdiff
Add option to remove unused clips from project tree:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 15 Sep 2009 22:40:49 +0000 (22:40 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 15 Sep 2009 22:40:49 +0000 (22:40 +0000)
http://www.kdenlive.org/mantis/view.php?id=1140

svn path=/trunk/kdenlive/; revision=3894

src/clipmanager.cpp
src/clipmanager.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/projectlist.cpp
src/projectlist.h

index 32602a7d12745da9ff839668e2d8e4034efcd662..5465081edfdcc187e98ec15a77616383996571f5 100644 (file)
@@ -148,13 +148,18 @@ void ClipManager::addClip(DocClipBase *clip)
     if (!gid.isEmpty() && gid.toInt() >= m_folderIdCounter) m_folderIdCounter = gid.toInt() + 1;
 }
 
-void ClipManager::slotDeleteClip(const QString &clipId)
+void ClipManager::slotDeleteClips(QStringList ids)
 {
-    DocClipBase *clip = getClipById(clipId);
-    if (clip) {
-        AddClipCommand *command = new AddClipCommand(m_doc, clip->toXML(), clipId, false);
-        m_doc->commandStack()->push(command);
+    QUndoCommand *delClips = new QUndoCommand();
+    delClips->setText(i18np("Delete clip", "Delete clips", ids.size()));
+    
+    for (int i = 0; i < ids.size(); i++) {
+        DocClipBase *clip = getClipById(ids.at(i));
+        if (clip) {
+            new AddClipCommand(m_doc, clip->toXML(), ids.at(i), false, delClips);
+        }
     }
+    m_doc->commandStack()->push(delClips);
 }
 
 void ClipManager::deleteClip(const QString &clipId)
index d5e2bbb34d4f7c6a69076902a0cc930d4aba366c..470de23d7f236aba6e7c23b11c7ac7e5a927007d 100644 (file)
@@ -63,7 +63,7 @@ Q_OBJECT public:
     void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId);
     DocClipBase *getClipById(QString clipId);
     const QList <DocClipBase *> getClipByResource(QString resource);
-    void slotDeleteClip(const QString & clipId);
+    void slotDeleteClips(QStringList ids);
     void setThumbsProgress(const QString &message, int progress);
     void checkAudioThumbs();
     QList <DocClipBase*> documentClipList() const;
index ad0ab37c8416eb718b86b62afe6dea94decbf022..d76aa59bb8390ac0c548a15bd72150abb585ef6e 100644 (file)
@@ -1030,12 +1030,12 @@ void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId
     }
 }
 
-void KdenliveDoc::deleteProjectClip(QList <QString> ids)
+void KdenliveDoc::deleteProjectClip(QStringList ids)
 {
     for (int i = 0; i < ids.size(); ++i) {
         emit deleteTimelineClip(ids.at(i));
-        m_clipManager->slotDeleteClip(ids.at(i));
     }
+    m_clipManager->slotDeleteClips(ids);
     setModified(true);
 }
 
index 6f6bfd3c653942bd10c6d1feb9ed4d456b9fae27..423705444f05e6ded8e69d740225325f9f321133 100644 (file)
@@ -74,7 +74,7 @@ Q_OBJECT public:
     int getFramePos(QString duration);
     DocClipBase *getBaseClip(const QString &clipId);
     void updateClip(const QString id);
-    void deleteProjectClip(QList <QString> ids);
+    void deleteProjectClip(QStringList ids);
     /** Inform application of the audio thumbnails generation progress */
     void setThumbsProgress(const QString &message, int progress);
     const QString &profilePath() const;
index b099be387ac2681010f957ad73b39b076d203915..cfe35999e64d10a154c25a5b59e394dd65d49c43 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="45">
+<gui name="kdenlive" version="46">
   <ToolBar name="extraToolBar" >
     <text>Extra Toolbar</text>
        <Action name="project_render" />
@@ -40,6 +40,7 @@
       <Action name="edit_clip" />
       <Action name="delete_clip" />
       <Separator />
+      <Action name="project_clean" />
       <Action name="project_render" />
       <Action name="project_settings" />
     </Menu>
index 867f6ccd3e30bcb895a0332bbab70fcc2bc1bc8e..a6019f7feb55850242fcf0b28769ecfefdcda1e0 100644 (file)
@@ -853,6 +853,10 @@ void MainWindow::setupActions()
     projectRender->setShortcut(Qt::CTRL + Qt::Key_Return);
     connect(projectRender, SIGNAL(triggered(bool)), this, SLOT(slotRenderProject()));
 
+    KAction* projectClean = new KAction(KIcon("edit-clear"), i18n("Clean Project"), this);
+    collection->addAction("project_clean", projectClean);
+    connect(projectClean, SIGNAL(triggered(bool)), this, SLOT(slotCleanProject()));
+    
     KAction* monitorPlay = new KAction(KIcon("media-playback-start"), i18n("Play"), this);
     KShortcut playShortcut;
     playShortcut.setPrimary(Qt::Key_Space);
@@ -1684,6 +1688,12 @@ void MainWindow::setRenderingFinished(const QString &url, int status, const QStr
     if (m_renderWidget) m_renderWidget->setRenderStatus(url, status, error);
 }
 
+void MainWindow::slotCleanProject()
+{
+    if (KMessageBox::warningContinueCancel(this, i18n("This will remove all unused clips from your project."), i18n("Clean up project")) == KMessageBox::Cancel) return;
+    m_projectList->cleanup();
+}
+
 void MainWindow::slotUpdateMousePosition(int pos)
 {
     if (m_activeDocument)
index 1abc23caac92c8762cf24fba7e292057e361867d..b1aa4a766c3816aae355c0e0f4d37626e4d4f627 100644 (file)
@@ -312,6 +312,7 @@ private slots:
     void slotUpdateTimecodeFormat(int ix);
     /** Removes the focus of anything */
     void slotRemoveFocus();
+    void slotCleanProject();
 
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
index 38fdad2c849f59efc1b99695558265039c6cc816..a8f76657421fdd781cef7ed2b89e7ebc7eda29f9 100644 (file)
@@ -212,6 +212,19 @@ void ProjectList::slotOpenClip()
     }
 }
 
+void ProjectList::cleanup()
+{
+    m_listView->clearSelection();
+    QTreeWidgetItemIterator it(m_listView);
+    ProjectItem *item;
+    while (*it) {
+        item = static_cast <ProjectItem *>(*it);
+        if (item->numReferences() == 0) item->setSelected(true);
+        it++;
+    }
+    slotRemoveClip();
+}
+
 void ProjectList::slotReloadClip(const QString &id)
 {
     QList<QTreeWidgetItem *> selected;
@@ -383,7 +396,7 @@ void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item)
 void ProjectList::slotRemoveClip()
 {
     if (!m_listView->currentItem()) return;
-    QList <QString> ids;
+    QStringList ids;
     QMap <QString, QString> folderids;
     QList<QTreeWidgetItem *> selected = m_listView->selectedItems();
     ProjectItem *item;
@@ -670,7 +683,7 @@ void ProjectList::slotRemoveInvalidClip(const QString &id, bool replace)
                 if (KMessageBox::questionYesNo(this, i18n("Clip <b>%1</b><br>is missing or invalid. Remove it from project?", path), i18n("Invalid clip")) == KMessageBox::Yes) replace = true;
             }
         }
-        QList <QString> ids;
+        QStringList ids;
         ids << id;
         if (replace) m_doc->deleteProjectClip(ids);
     }
index 7b1310c81ab4711c24fc9e837a2e15bd6ff8e660..319437a8cb44c8fa7334d9c1134db5f504f8350f 100644 (file)
@@ -71,7 +71,7 @@ public:
       extendItem(w,
     }
     */
-    void drawFocus ( QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect ) const {
+    void drawFocus ( QPainter *, const QStyleOptionViewItem &, const QRect & ) const {
     }
     
     void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
@@ -133,6 +133,7 @@ public:
     QString currentClipUrl() const;
     void reloadClipThumbnails();
     QDomDocument generateTemplateXml(QString data, const QString &replaceString);
+    void cleanup();
 
 public slots:
     void setDocument(KdenliveDoc *doc);