From: Marco Gittler Date: Sat, 19 Nov 2011 21:35:43 +0000 (+0100) Subject: create menu for video stabilize X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=sidebyside;h=8123bfd0f8d094d2cf8abf5264b2a7e534651565;p=kdenlive create menu for video stabilize --- diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index a17892b7..ba3cede3 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -25,6 +25,8 @@ + Stabilize + Transcode Generators diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e073b9d4..a3250118 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -475,15 +475,19 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & loadPlugins(); loadTranscoders(); + loadStabilize(); m_projectMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone, NULL, m_loopClip); m_clipMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast(factory()->container("marker_menu", this))); QMenu *clipInTimeline = static_cast(factory()->container("clip_in_timeline", this)); clipInTimeline->setIcon(KIcon("go-jump")); - m_projectList->setupGeneratorMenu(static_cast(factory()->container("generators", this)), - static_cast(factory()->container("transcoders", this)), - clipInTimeline); + QHash menus; + menus.insert("addMenu",static_cast(factory()->container("generators", this))); + menus.insert("transcodeMenu",static_cast(factory()->container("transcoders", this))); + menus.insert("stabilizeMenu",static_cast(factory()->container("stabilize", this))); + menus.insert("inTimelineMenu",clipInTimeline); + m_projectList->setupGeneratorMenu(menus); // build themes menus QMenu *themesMenu = static_cast(factory()->container("themes_menu", this)); @@ -2679,6 +2683,7 @@ void MainWindow::updateConfiguration() // Update list of transcoding profiles loadTranscoders(); + loadStabilize(); #ifdef USE_JOGSHUTTLE activateShuttleDevice(); #endif @@ -3773,6 +3778,25 @@ void MainWindow::slotMaximizeCurrent(bool) kDebug() << "CURRENT WIDGET: " << par->objectName(); } +void MainWindow::loadStabilize() +{ + QMenu* stabMenu= static_cast(factory()->container("stabilize", this)); + stabMenu->clear(); + Mlt::Profile profile; + if (Mlt::Factory::filter(profile,(char*)"videostab")){ + QAction *action=stabMenu->addAction("Videostab (vstab)"); + action->setData("videostab"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize())); + } + if (Mlt::Factory::filter(profile,(char*)"videostab2")){ + QAction *action=stabMenu->addAction("Videostab (transcode)"); + action->setData("videostab2"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize())); + } + + +} + void MainWindow::loadTranscoders() { QMenu *transMenu = static_cast(factory()->container("transcoders", this)); @@ -3794,6 +3818,18 @@ void MainWindow::loadTranscoders() } } +void MainWindow::slotStabilize(KUrl::List urls) +{ + QString condition; + if (urls.isEmpty()) { + QAction *action = qobject_cast(sender()); + if (action){ + QString filtername=action->data().toString(); + urls = m_projectList->getConditionalUrls(condition); + } + } +} + void MainWindow::slotTranscode(KUrl::List urls) { QString params; diff --git a/src/mainwindow.h b/src/mainwindow.h index b2232914..2f9484e6 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -294,6 +294,7 @@ private: QStringList m_pluginFileNames; QByteArray m_timelineState; void loadTranscoders(); + void loadStabilize(); QPixmap createSchemePreviewIcon(const KSharedConfigPtr &config); /** @brief Checks that the Kdenlive mime type is correctly installed. @@ -476,6 +477,7 @@ private slots: void slotShowTimeline(bool show); void slotMaximizeCurrent(bool show); void slotTranscode(KUrl::List urls = KUrl::List()); + void slotStabilize(KUrl::List urls = KUrl::List()); void slotTranscodeClip(); /** @brief Archive project: creates a copy of the project file with all clips in a new folder. */ void slotArchiveProject(); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 9ad7bf92..6b6b8f3f 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -112,6 +112,7 @@ ProjectList::ProjectList(QWidget *parent) : m_commandStack(NULL), m_openAction(NULL), m_reloadAction(NULL), + m_stabilizeAction(NULL), m_transcodeAction(NULL), m_doc(NULL), m_refreshed(false), @@ -229,25 +230,42 @@ void ProjectList::setupMenu(QMenu *addMenu, QAction *defaultAction) m_menu->addActions(addMenu->actions()); } -void ProjectList::setupGeneratorMenu(QMenu *addMenu, QMenu *transcodeMenu, QMenu *inTimelineMenu) +void ProjectList::setupGeneratorMenu(const QHash& menus) { - if (!addMenu) + if (!menus.contains("addMenu") && ! menus.value("addMenu") ) return; QMenu *menu = m_addButton->menu(); - menu->addMenu(addMenu); - m_addButton->setMenu(menu); - - m_menu->addMenu(addMenu); - if (addMenu->isEmpty()) - addMenu->setEnabled(false); - m_menu->addMenu(transcodeMenu); - if (transcodeMenu->isEmpty()) - transcodeMenu->setEnabled(false); - m_transcodeAction = transcodeMenu; + if (menus.contains("addMenu") && menus.value("addMenu")){ + QMenu* addMenu=menus.value("addMenu"); + menu->addMenu(addMenu); + m_addButton->setMenu(menu); + + m_menu->addMenu(addMenu); + if (addMenu->isEmpty()) + addMenu->setEnabled(false); + } + if (menus.contains("transcodeMenu") && menus.value("transcodeMenu") ){ + QMenu* transcodeMenu=menus.value("transcodeMenu"); + m_menu->addMenu(transcodeMenu); + if (transcodeMenu->isEmpty()) + transcodeMenu->setEnabled(false); + m_transcodeAction = transcodeMenu; + } + if (menus.contains("stabilizeMenu") && menus.value("stabilizeMenu") ){ + QMenu* stabilizeMenu=menus.value("stabilizeMenu"); + m_menu->addMenu(stabilizeMenu); + if (stabilizeMenu->isEmpty()) + stabilizeMenu->setEnabled(false); + m_stabilizeAction=stabilizeMenu; + + } m_menu->addAction(m_reloadAction); m_menu->addAction(m_proxyAction); - m_menu->addMenu(inTimelineMenu); - inTimelineMenu->setEnabled(false); + if (menus.contains("inTimelineMenu") && menus.value("inTimelineMenu")){ + QMenu* inTimelineMenu=menus.value("inTimelineMenu"); + m_menu->addMenu(inTimelineMenu); + inTimelineMenu->setEnabled(false); + } m_menu->addAction(m_editButton->defaultAction()); m_menu->addAction(m_openAction); m_menu->addAction(m_deleteButton->defaultAction()); @@ -636,6 +654,7 @@ void ProjectList::slotClipSelected() m_openAction->setEnabled(false); m_reloadAction->setEnabled(false); m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); } else { if (item->type() == PROJECTSUBCLIPTYPE) { // this is a sub item, use base clip @@ -645,6 +664,7 @@ void ProjectList::slotClipSelected() SubProjectItem *sub = static_cast (item); emit clipSelected(clip->referencedClip(), sub->zone()); m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); m_reloadAction->setEnabled(false); adjustProxyActions(clip); return; @@ -656,6 +676,7 @@ void ProjectList::slotClipSelected() m_deleteButton->defaultAction()->setEnabled(true); m_reloadAction->setEnabled(true); m_transcodeAction->setEnabled(true); + m_stabilizeAction->setEnabled(true); if (clip && clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) { m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp())); m_openAction->setEnabled(true); @@ -667,6 +688,7 @@ void ProjectList::slotClipSelected() } // Display relevant transcoding actions only adjustTranscodeActions(clip); + adjustStabilizeActions(clip); // Display uses in timeline emit findInTimeline(clip->clipId()); } @@ -677,6 +699,7 @@ void ProjectList::slotClipSelected() m_openAction->setEnabled(false); m_reloadAction->setEnabled(false); m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); } adjustProxyActions(clip); } @@ -693,6 +716,17 @@ void ProjectList::adjustProxyActions(ProjectItem *clip) const m_proxyAction->blockSignals(false); } +void ProjectList::adjustStabilizeActions(ProjectItem *clip) const +{ + + if (clip == NULL || clip->type() != PROJECTCLIPTYPE || clip->clipType() == COLOR || clip->clipType() == TEXT || clip->clipType() == PLAYLIST || clip->clipType() == SLIDESHOW) { + m_stabilizeAction->setEnabled(false); + return; + } + m_stabilizeAction->setEnabled(true); + +} + void ProjectList::adjustTranscodeActions(ProjectItem *clip) const { if (clip == NULL || clip->type() != PROJECTCLIPTYPE || clip->clipType() == COLOR || clip->clipType() == TEXT || clip->clipType() == PLAYLIST || clip->clipType() == SLIDESHOW) { @@ -840,21 +874,25 @@ void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item) m_deleteButton->defaultAction()->setEnabled(enable); m_reloadAction->setEnabled(enable); m_transcodeAction->setEnabled(enable); + m_stabilizeAction->setEnabled(enable); if (enable) { ProjectItem *clip = NULL; if (m_listView->currentItem()->type() == PROJECTSUBCLIPTYPE) { clip = static_cast (item->parent()); m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); adjustProxyActions(clip); } else if (m_listView->currentItem()->type() == PROJECTCLIPTYPE) { clip = static_cast (item); // Display relevant transcoding actions only adjustTranscodeActions(clip); + adjustStabilizeActions(clip); adjustProxyActions(clip); // Display uses in timeline emit findInTimeline(clip->clipId()); } else { m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); } if (clip && clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) { m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp())); @@ -932,6 +970,7 @@ void ProjectList::updateButtons() const m_openAction->setEnabled(true); m_reloadAction->setEnabled(true); m_transcodeAction->setEnabled(true); + m_stabilizeAction->setEnabled(true); return; } else if (item && item->type() == PROJECTFOLDERTYPE && item->childCount() > 0) { @@ -942,6 +981,7 @@ void ProjectList::updateButtons() const m_openAction->setEnabled(false); m_reloadAction->setEnabled(false); m_transcodeAction->setEnabled(false); + m_stabilizeAction->setEnabled(false); m_proxyAction->setEnabled(false); } @@ -2053,6 +2093,7 @@ void ProjectList::slotSelectClip(const QString &ix) m_deleteButton->defaultAction()->setEnabled(true); m_reloadAction->setEnabled(true); m_transcodeAction->setEnabled(true); + m_stabilizeAction->setEnabled(true); if (clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) { m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp())); m_openAction->setEnabled(true); diff --git a/src/projectlist.h b/src/projectlist.h index 02c32199..24d1ba0c 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -22,6 +22,7 @@ #define PROJECTLIST_H #include +#include #include #include #include @@ -203,7 +204,7 @@ public: void setHeaderInfo(const QByteArray &state); void updateProjectFormat(Timecode t); void setupMenu(QMenu *addMenu, QAction *defaultAction); - void setupGeneratorMenu(QMenu *addMenu, QMenu *transcodeMenu, QMenu *inTimelineMenu); + void setupGeneratorMenu(const QHash& menus); QString currentClipUrl() const; KUrl::List getConditionalUrls(const QString &condition) const; QDomDocument generateTemplateXml(QString data, const QString &replaceString); @@ -290,6 +291,7 @@ private: QAction *m_openAction; QAction *m_reloadAction; QMenu *m_transcodeAction; + QMenu *m_stabilizeAction; KdenliveDoc *m_doc; ItemDelegate *m_listViewDelegate; /** @brief False if we have not yet finished opening the document. */ @@ -326,6 +328,8 @@ private: /** @brief Enables and disables transcode actions based on the selected clip's type. */ void adjustTranscodeActions(ProjectItem *clip) const; + /** @brief Enables and disables stabilize actions based on the selected clip's type. */ + void adjustStabilizeActions(ProjectItem *clip) const; /** @brief Enables and disables proxy action based on the selected clip. */ void adjustProxyActions(ProjectItem *clip) const;