From: Jean-Baptiste Mardelle Date: Mon, 21 Feb 2011 23:04:43 +0000 (+0000) Subject: Effects context menu: use submenu structure similar to effects list widget folders X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=31876575e55aa5fa3b86dc9651b4b4dc16105e61;p=kdenlive Effects context menu: use submenu structure similar to effects list widget folders svn path=/trunk/kdenlive/; revision=5448 --- diff --git a/src/effectslistview.cpp b/src/effectslistview.cpp index 7e10b322..9935394c 100644 --- a/src/effectslistview.cpp +++ b/src/effectslistview.cpp @@ -35,8 +35,8 @@ EffectsListView::EffectsListView(QWidget *parent) : { setupUi(this); - QMenu *menu = new QMenu(this); - m_effectsList = new EffectsListWidget(menu); + QMenu *contextMenu = new QMenu(this); + m_effectsList = new EffectsListWidget(contextMenu); QVBoxLayout *lyr = new QVBoxLayout(effectlistframe); lyr->addWidget(m_effectsList); lyr->setContentsMargins(0, 0, 0, 0); @@ -53,7 +53,7 @@ EffectsListView::EffectsListView(QWidget *parent) : else infopanel->hide(); - menu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect())); + contextMenu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect())); connect(type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterList(int))); connect(buttonInfo, SIGNAL(clicked()), this, SLOT(showInfoPanel())); @@ -121,9 +121,9 @@ void EffectsListView::slotUpdateInfo() infopanel->setText(m_effectsList->currentInfo()); } -void EffectsListView::reloadEffectList() +void EffectsListView::reloadEffectList(QMenu *effectsMenu, KActionCategory *effectActions) { - m_effectsList->initList(); + m_effectsList->initList(effectsMenu, effectActions); } void EffectsListView::slotRemoveEffect() diff --git a/src/effectslistview.h b/src/effectslistview.h index 4970bb16..3fd0f89f 100644 --- a/src/effectslistview.h +++ b/src/effectslistview.h @@ -32,6 +32,7 @@ class EffectsList; class EffectsListWidget; class QTreeWidget; +class KActionCategory; /** * @class EffectsListView @@ -47,7 +48,8 @@ public: EffectsListView(QWidget *parent = 0); /** @brief Re-initializes the list of effects. */ - void reloadEffectList(); + void reloadEffectList(QMenu *effectsMenu, KActionCategory *effectActions); + QMenu* getEffectsMenu(); //void slotAddEffect(GenTime pos, int track, QString name); private: diff --git a/src/effectslistwidget.cpp b/src/effectslistwidget.cpp index 10c0d315..350d0851 100644 --- a/src/effectslistwidget.cpp +++ b/src/effectslistwidget.cpp @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -39,9 +40,9 @@ const int TypeRole = Qt::UserRole; const int IdRole = TypeRole + 1; -EffectsListWidget::EffectsListWidget(QMenu *menu, QWidget *parent) : +EffectsListWidget::EffectsListWidget(QMenu *contextMenu, QWidget *parent) : QTreeWidget(parent), - m_menu(menu) + m_menu(contextMenu) { setColumnCount(1); setDragEnabled(true); @@ -55,7 +56,6 @@ EffectsListWidget::EffectsListWidget(QMenu *menu, QWidget *parent) : QPalette p = palette(); p.setBrush(QPalette::Base, Qt::NoBrush); setPalette(p); - initList(); connect(this, SIGNAL(activated(const QModelIndex &)), this, SLOT(slotExpandItem(const QModelIndex &))); } @@ -68,13 +68,14 @@ void EffectsListWidget::slotExpandItem(const QModelIndex & index) setExpanded(index, !isExpanded(index)); } -void EffectsListWidget::initList() +void EffectsListWidget::initList(QMenu *effectsMenu, KActionCategory *effectActions) { QString current; QString currentFolder; QTreeWidgetItem *item = NULL; bool found = false; - + effectsMenu->clear(); + if (currentItem()) { current = currentItem()->text(0); if (currentItem()->parent()) @@ -94,7 +95,7 @@ void EffectsListWidget::initList() QStringList folderNames; QDomNodeList groups = doc.documentElement().elementsByTagName("group"); for (int i = 0; i < groups.count(); i++) { - folderNames << groups.at(i).firstChild().firstChild().nodeValue(); + folderNames << i18n(groups.at(i).firstChild().firstChild().nodeValue().toUtf8().constData()); } for (int i = 0; i < topLevelItemCount(); i++) { topLevelItem(i)->takeChildren(); @@ -165,6 +166,20 @@ void EffectsListWidget::initList() } setSortingEnabled(true); sortByColumn(0, Qt::AscendingOrder); + + // populate effects menu + for (int i = 0; i < topLevelItemCount(); i++) { + QMenu *sub = new QMenu(topLevelItem(i)->text(0), effectsMenu); + effectsMenu->addMenu(sub); + for (int j = 0; j < topLevelItem(i)->childCount(); j++) { + QTreeWidgetItem *item = topLevelItem(i)->child(j); + KAction *a = new KAction(KIcon(item->icon(0)), item->text(0), sub); + a->setData(item->data(0, IdRole)); + a->setIconVisibleInMenu(false); + sub->addAction(a); + effectActions->addAction("video_effect_" + item->text(0), a); + } + } } void EffectsListWidget::loadEffects(const EffectsList *effectlist, KIcon icon, QTreeWidgetItem *defaultFolder, const QList *folders, const QString type, const QString current, bool *found) @@ -176,6 +191,7 @@ void EffectsListWidget::loadEffects(const EffectsList *effectlist, KIcon icon, Q for (int ix = 0; ix < ct; ix ++) { effectInfo = effectlist->effectIdInfo(ix); + effectInfo.append(type); parentItem = NULL; if (folders) { diff --git a/src/effectslistwidget.h b/src/effectslistwidget.h index 04ee8544..9f8ac428 100644 --- a/src/effectslistwidget.h +++ b/src/effectslistwidget.h @@ -24,6 +24,8 @@ #include #include +#include + class EffectsList; class KIcon; @@ -32,12 +34,12 @@ class EffectsListWidget : public QTreeWidget Q_OBJECT public: - explicit EffectsListWidget(QMenu *menu, QWidget *parent = 0); + explicit EffectsListWidget(QMenu *contextMenu, QWidget *parent = 0); virtual ~EffectsListWidget(); const QDomElement currentEffect() const; QString currentInfo(); const QDomElement itemEffect(QTreeWidgetItem *item) const; - void initList(); + void initList(QMenu *effectsMenu, KActionCategory *effectActions); protected: virtual void dragMoveEvent(QDragMoveEvent *event); diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index d173667c..c0fb9ba2 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -1,6 +1,6 @@ - + Extra Toolbar @@ -105,11 +105,7 @@ - Add Video Effect - - Add Audio Effect - - Add Custom Effect + Add Effect diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5c36eb9a..1b3ffe25 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -485,33 +485,18 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & connect(themesMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotChangePalette(QAction*))); // Setup and fill effects and transitions menus. - m_videoEffectsMenu = static_cast(factory()->container("video_effects_menu", this)); - for (int i = 0; i < videoEffects.count(); ++i) - m_videoEffectsMenu->addAction(m_videoEffects[i]); - m_audioEffectsMenu = static_cast(factory()->container("audio_effects_menu", this)); - for (int i = 0; i < audioEffects.count(); ++i) - m_audioEffectsMenu->addAction(m_audioEffects[i]); - m_customEffectsMenu = static_cast(factory()->container("custom_effects_menu", this)); - if (customEffects.isEmpty()) - m_customEffectsMenu->setEnabled(false); - else - m_customEffectsMenu->setEnabled(true); - for (int i = 0; i < customEffects.count(); ++i) - m_customEffectsMenu->addAction(m_customEffects[i]); + m_effectsMenu = static_cast(factory()->container("video_effects_menu", this)); + m_effectActions = new KActionCategory(i18n("Effects"), actionCollection()); + m_effectList->reloadEffectList(m_effectsMenu, m_effectActions); + m_transitionsMenu = new QMenu(i18n("Add Transition"), this); for (int i = 0; i < transitions.count(); ++i) m_transitionsMenu->addAction(m_transitions[i]); - connect(m_videoEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddVideoEffect(QAction *))); - connect(m_audioEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddAudioEffect(QAction *))); - connect(m_customEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddCustomEffect(QAction *))); + connect(m_effectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddVideoEffect(QAction *))); connect(m_transitionsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddTransition(QAction *))); - QMenu *newEffect = new QMenu(this); - newEffect->addMenu(m_videoEffectsMenu); - newEffect->addMenu(m_audioEffectsMenu); - newEffect->addMenu(m_customEffectsMenu); - m_effectStack->setMenu(newEffect); + m_effectStack->setMenu(m_effectsMenu); QMenu *viewMenu = static_cast(factory()->container("dockwindows", this)); const QList viewActions = createPopupMenu()->actions(); @@ -543,9 +528,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_timelineContextClipMenu->addMenu(markersMenu); m_timelineContextClipMenu->addSeparator(); m_timelineContextClipMenu->addMenu(m_transitionsMenu); - m_timelineContextClipMenu->addMenu(m_videoEffectsMenu); - m_timelineContextClipMenu->addMenu(m_audioEffectsMenu); - m_timelineContextClipMenu->addMenu(m_customEffectsMenu); + m_timelineContextClipMenu->addMenu(m_effectsMenu); m_timelineContextTransitionMenu->addAction(actionCollection()->action("edit_item_duration")); m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_item")); @@ -760,26 +743,8 @@ void MainWindow::readProperties(const KConfigGroup &config) void MainWindow::slotReloadEffects() { - m_customEffectsMenu->clear(); initEffects::parseCustomEffectsFile(); - QAction *action; - QStringList effectInfo; - QMap effectsList; - for (int ix = 0; ix < customEffects.count(); ix++) { - effectInfo = customEffects.effectIdInfo(ix); - effectsList.insert(effectInfo.at(0).toLower(), effectInfo); - } - if (effectsList.isEmpty()) - m_customEffectsMenu->setEnabled(false); - else - m_customEffectsMenu->setEnabled(true); - - foreach(const QStringList & value, effectsList) { - action = new QAction(value.at(0), this); - action->setData(value); - m_customEffectsMenu->addAction(action); - } - m_effectList->reloadEffectList(); + m_effectList->reloadEffectList(m_effectsMenu, m_effectActions); } #ifndef NO_JOGSHUTTLE @@ -1616,36 +1581,6 @@ void MainWindow::setupActions() // Setup effects and transitions actions. m_effectsActionCollection = new KActionCollection(this, KGlobal::mainComponent()); - //KActionCategory *videoEffectActions = new KActionCategory(i18n("Video Effects"), m_effectsActionCollection); - KActionCategory *videoEffectActions = new KActionCategory(i18n("Video Effects"), collection); - m_videoEffects = new KAction*[videoEffects.count()]; - for (int i = 0; i < videoEffects.count(); ++i) { - QStringList effectInfo = videoEffects.effectIdInfo(i); - m_videoEffects[i] = new KAction(KIcon("kdenlive-show-video"), effectInfo.at(0), this); - m_videoEffects[i]->setData(effectInfo); - m_videoEffects[i]->setIconVisibleInMenu(false); - videoEffectActions->addAction("video_effect_" + effectInfo.at(0), m_videoEffects[i]); - } - //KActionCategory *audioEffectActions = new KActionCategory(i18n("Audio Effects"), m_effectsActionCollection); - KActionCategory *audioEffectActions = new KActionCategory(i18n("Audio Effects"), collection); - m_audioEffects = new KAction*[audioEffects.count()]; - for (int i = 0; i < audioEffects.count(); ++i) { - QStringList effectInfo = audioEffects.effectIdInfo(i); - m_audioEffects[i] = new KAction(KIcon("kdenlive-show-audio"), effectInfo.at(0), this); - m_audioEffects[i]->setData(effectInfo); - m_audioEffects[i]->setIconVisibleInMenu(false); - audioEffectActions->addAction("audio_effect_" + effectInfo.at(0), m_audioEffects[i]); - } - //KActionCategory *customEffectActions = new KActionCategory(i18n("Custom Effects"), m_effectsActionCollection); - KActionCategory *customEffectActions = new KActionCategory(i18n("Custom Effects"), collection); - m_customEffects = new KAction*[customEffects.count()]; - for (int i = 0; i < customEffects.count(); ++i) { - QStringList effectInfo = customEffects.effectIdInfo(i); - m_customEffects[i] = new KAction(KIcon("kdenlive-custom-effect"), effectInfo.at(0), this); - m_customEffects[i]->setData(effectInfo); - m_customEffects[i]->setIconVisibleInMenu(false); - customEffectActions->addAction("custom_effect_" + effectInfo.at(0), m_customEffects[i]); - } //KActionCategory *transitionActions = new KActionCategory(i18n("Transitions"), m_effectsActionCollection); KActionCategory *transitionActions = new KActionCategory(i18n("Transitions"), collection); m_transitions = new KAction*[transitions.count()]; @@ -3017,10 +2952,19 @@ void MainWindow::slotAddTransition(QAction *result) void MainWindow::slotAddVideoEffect(QAction *result) { if (!result) return; + const int EFFECT_VIDEO = 1; + const int EFFECT_AUDIO = 2; QStringList info = result->data().toStringList(); - if (info.isEmpty()) return; - QDomElement effect = videoEffects.getEffectByTag(info.at(1), info.at(2)); - slotAddEffect(effect); + if (info.isEmpty() || info.size() < 3) return; + QDomElement effect ; + if (info.at(2) == QString::number((int) EFFECT_VIDEO)) + effect = videoEffects.getEffectByTag(info.at(0), info.at(1)); + else if (info.at(2) == QString::number((int) EFFECT_AUDIO)) + effect = audioEffects.getEffectByTag(info.at(0), info.at(1)); + else + effect = customEffects.getEffectByTag(info.at(0), info.at(1)); + if (!effect.isNull()) slotAddEffect(effect); + else m_messageLabel->setMessage(i18n("Cannot find effect %1 / %2").arg(info.at(0)).arg(info.at(1)), ErrorMessage); } void MainWindow::slotAddAudioEffect(QAction *result) diff --git a/src/mainwindow.h b/src/mainwindow.h index 6b698328..7b4e2e2f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -197,9 +197,8 @@ private: QList m_gfxScopesList; QList m_audioScopesList; - QMenu *m_videoEffectsMenu; - QMenu *m_audioEffectsMenu; - QMenu *m_customEffectsMenu; + KActionCategory *m_effectActions; + QMenu *m_effectsMenu; QMenu *m_transitionsMenu; QMenu *m_timelineContextMenu; QMenu *m_timelineContextClipMenu;