]> git.sesse.net Git - kdenlive/commitdiff
When missing or invalid clips, open only one dialog box instead of one for each clip
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 14 Oct 2011 21:40:08 +0000 (21:40 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 14 Oct 2011 21:40:08 +0000 (21:40 +0000)
svn path=/trunk/kdenlive/; revision=5966

src/projectlist.cpp
src/projectlist.h

index 2109bfa921b2ed6befda0046b4df37a1c9f22e5c..13615f7efceb895501de3da44978df787aa1840b 100644 (file)
 #include <QHeaderView>
 #include <QInputDialog>
 #include <QtConcurrentRun>
+#include <QVBoxLayout>
+
+InvalidDialog::InvalidDialog(const QString &caption, const QString &message, bool infoOnly, QWidget *parent) : KDialog(parent)
+{
+    setCaption(caption);
+    if (infoOnly) setButtons(KDialog::Ok);
+    else setButtons(KDialog::Yes | KDialog::No);
+    QWidget *w = new QWidget(this);
+    QVBoxLayout *l = new QVBoxLayout;
+    l->addWidget(new QLabel(message));
+    m_clipList = new QListWidget;
+    l->addWidget(m_clipList);
+    w->setLayout(l);
+    setMainWidget(w);
+}
+
+InvalidDialog::~InvalidDialog()
+{
+    delete m_clipList;
+}
+
+
+void InvalidDialog::addClip(const QString &id, const QString &path)
+{
+    QListWidgetItem *item = new QListWidgetItem(path);
+    item->setData(Qt::UserRole, id);
+    m_clipList->addItem(item);
+}
+
+QStringList InvalidDialog::getIds() const
+{
+    QStringList ids;
+    for (int i = 0; i < m_clipList->count(); i++) {
+        ids << m_clipList->item(i)->data(Qt::UserRole).toString();
+    }
+    return ids;
+}
+
 
 ProjectList::ProjectList(QWidget *parent) :
     QWidget(parent),
@@ -78,7 +116,8 @@ ProjectList::ProjectList(QWidget *parent) :
     m_doc(NULL),
     m_refreshed(false),
     m_thumbnailQueue(),
-    m_abortAllProxies(false)
+    m_abortAllProxies(false),
+    m_invalidClipDialog(NULL)
 {
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
@@ -1342,13 +1381,28 @@ void ProjectList::slotRemoveInvalidClip(const QString &id, bool replace)
         const QString path = item->referencedClip()->fileURL().path();
         if (item->referencedClip()->isPlaceHolder()) replace = false;
         if (!path.isEmpty()) {
+            if (m_invalidClipDialog) {
+                m_invalidClipDialog->addClip(id, path);
+                return;
+            }
+            else {
+                if (replace)
+                    m_invalidClipDialog = new InvalidDialog(i18n("Invalid clip"),  i18n("Clip <b>%1</b><br />is invalid, will be removed from project.", QString()), replace, kapp->activeWindow());
+                else {
+                    m_invalidClipDialog = new InvalidDialog(i18n("Invalid clip"),  i18n("Clip <b>%1</b><br />is missing or invalid. Remove it from project?", QString()), replace, kapp->activeWindow());
+                }
+                m_invalidClipDialog->addClip(id, path);
+                int result = m_invalidClipDialog->exec();
+                if (result == KDialog::Yes) replace = true;
+            }
+        }
+        if (m_invalidClipDialog) {
             if (replace)
-                KMessageBox::sorry(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid, will be removed from project.", path));
-            else if (KMessageBox::questionYesNo(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is missing or invalid. Remove it from project?", path), i18n("Invalid clip")) == KMessageBox::Yes)
-                replace = true;
+                emit deleteProjectClips(m_invalidClipDialog->getIds(), QMap <QString, QString>());
+            delete m_invalidClipDialog;
+            m_invalidClipDialog = NULL;
         }
-        if (replace)
-            emit deleteProjectClips(QStringList() << id, QMap <QString, QString>());
+        
     }
 }
 
index 9d7727f2046ee1335d319ed5d26d2e6be3b966db..98f9b7d62f7c2d8182b8a7a1fd66f39c9b4857d4 100644 (file)
@@ -32,6 +32,7 @@
 #include <QApplication>
 #include <QFuture>
 #include <QFutureSynchronizer>
+#include <QListWidget>
 
 #include <KTreeWidgetSearchLine>
 #include <KUrl>
@@ -47,6 +48,7 @@
 #include "kdenlivesettings.h"
 #include "folderprojectitem.h"
 #include "subprojectitem.h"
+#include <kdialog.h>
 
 namespace Mlt
 {
@@ -70,6 +72,19 @@ const int NameRole = Qt::UserRole;
 const int DurationRole = NameRole + 1;
 const int UsageRole = NameRole + 2;
 
+class InvalidDialog: public KDialog
+{
+    Q_OBJECT
+public:
+    InvalidDialog(const QString &caption, const QString &message, bool infoOnly, QWidget *parent = 0);
+    virtual ~InvalidDialog();
+    void addClip(const QString &id, const QString &path);
+    QStringList getIds() const;
+private:
+    QListWidget *m_clipList;
+};
+
+
 class ItemDelegate: public QStyledItemDelegate
 {
 public:
@@ -293,6 +308,7 @@ private:
     bool m_abortAllProxies;
     QList <PROXYINFO> m_proxyList;
     QFutureSynchronizer<void> m_proxyThreads;
+    InvalidDialog *m_invalidClipDialog;
     
     void requestClipThumbnail(const QString id);