]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Fix possible crash on effect change
[kdenlive] / src / projectlist.cpp
index a36a0232c14bdf09bf555ec383f3e270cbdd8ccb..bb5f18f012666ca2ecd0c7ddc9d682f06ef8d218 100644 (file)
@@ -63,6 +63,7 @@ ProjectList::ProjectList(QWidget *parent) :
         m_deleteAction(NULL),
         m_openAction(NULL),
         m_reloadAction(NULL),
+        m_transcodeAction(NULL),
         m_selectedItem(NULL),
         m_refreshed(false),
         m_infoQueue(),
@@ -164,6 +165,7 @@ void ProjectList::setupGeneratorMenu(QMenu *addMenu, QMenu *transcodeMenu)
     if (addMenu->isEmpty()) addMenu->setEnabled(false);
     m_menu->addMenu(transcodeMenu);
     if (transcodeMenu->isEmpty()) transcodeMenu->setEnabled(false);
+    m_transcodeAction = transcodeMenu;
     m_menu->addAction(m_reloadAction);
     m_menu->addAction(m_editAction);
     m_menu->addAction(m_openAction);
@@ -207,9 +209,11 @@ void ProjectList::slotOpenClip()
     }
 }
 
-void ProjectList::slotReloadClip()
+void ProjectList::slotReloadClip(const QString &id)
 {
-    QList<QTreeWidgetItem *> selected = m_listView->selectedItems();
+    QList<QTreeWidgetItem *> selected;
+    if (id.isEmpty()) selected = m_listView->selectedItems();
+    else selected.append(getItemById(id));
     ProjectItem *item;
     for (int i = 0; i < selected.count(); i++) {
         item = static_cast <ProjectItem *>(selected.at(i));
@@ -243,6 +247,7 @@ void ProjectList::slotClipSelected()
         m_editAction->setEnabled(true);
         m_deleteAction->setEnabled(true);
         m_reloadAction->setEnabled(true);
+        m_transcodeAction->setEnabled(true);
         if (clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) {
             m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp()));
             m_openAction->setEnabled(true);
@@ -256,6 +261,7 @@ void ProjectList::slotClipSelected()
         m_deleteAction->setEnabled(false);
         m_openAction->setEnabled(false);
         m_reloadAction->setEnabled(false);
+        m_transcodeAction->setEnabled(false);
     }
 }
 
@@ -356,6 +362,7 @@ void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item)
     m_editAction->setEnabled(enable);
     m_deleteAction->setEnabled(enable);
     m_reloadAction->setEnabled(enable);
+    m_transcodeAction->setEnabled(enable);
     if (enable) {
         ProjectItem *clip = static_cast <ProjectItem*>(item);
         if (clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) {
@@ -398,6 +405,7 @@ void ProjectList::slotRemoveClip()
         m_deleteAction->setEnabled(false);
         m_openAction->setEnabled(false);
         m_reloadAction->setEnabled(false);
+        m_transcodeAction->setEnabled(false);
     }
 }
 
@@ -761,6 +769,8 @@ void ProjectList::setDocument(KdenliveDoc *doc)
     m_commandStack = doc->commandStack();
     m_doc = doc;
 
+    connect(m_doc->clipManager(), SIGNAL(reloadClip(const QString &)), this, SLOT(slotReloadClip(const QString &)));
+
     QMap <QString, QString> flist = doc->clipManager()->documentFolderList();
     QMapIterator<QString, QString> f(flist);
     while (f.hasNext()) {
@@ -934,6 +944,7 @@ void ProjectList::slotSelectClip(const QString &ix)
         m_editAction->setEnabled(true);
         m_deleteAction->setEnabled(true);
         m_reloadAction->setEnabled(true);
+        m_transcodeAction->setEnabled(true);
         if (clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) {
             m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp()));
             m_openAction->setEnabled(true);