From: <j-...@us...> - 2009-01-03 19:51:41
|
Revision: 2866 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2866&view=rev Author: j-b-m Date: 2009-01-03 19:51:35 +0000 (Sat, 03 Jan 2009) Log Message: ----------- * Small cmake cleanup * Introduce Kdenlive plugins, first example is a countdown generator (currently requires MLT's pango producer) Modified Paths: -------------- branches/KDE4/CMakeLists.txt branches/KDE4/renderer/CMakeLists.txt branches/KDE4/src/CMakeLists.txt branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h branches/KDE4/src/projectlistview.cpp branches/KDE4/thumbnailer/CMakeLists.txt Added Paths: ----------- branches/KDE4/plugins/ branches/KDE4/plugins/CMakeLists.txt branches/KDE4/plugins/sampleplugin/ branches/KDE4/plugins/sampleplugin/CMakeLists.txt branches/KDE4/plugins/sampleplugin/countdown_ui.ui branches/KDE4/plugins/sampleplugin/sampleplugin.cpp branches/KDE4/plugins/sampleplugin/sampleplugin.h Modified: branches/KDE4/CMakeLists.txt =================================================================== --- branches/KDE4/CMakeLists.txt 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -11,8 +11,7 @@ include(MacroOptionalAddSubdirectory) set(catalogname kdenlive) -add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) -include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES} ${CMAKE_SOURCE_DIR}/widgets) +add_definitions (${QT_DEFINITIONS}) FIND_PACKAGE(LIBMLT REQUIRED) FIND_PACKAGE(LIBMLTPLUS REQUIRED) @@ -28,6 +27,7 @@ add_subdirectory(src src/cmake_bindir) add_subdirectory(renderer renderer/cmake_bindir) add_subdirectory(thumbnailer thumbnailer/cmake_bindir) +add_subdirectory(plugins) add_subdirectory(effects) add_subdirectory(export) add_subdirectory(icons) Added: branches/KDE4/plugins/CMakeLists.txt =================================================================== --- branches/KDE4/plugins/CMakeLists.txt (rev 0) +++ branches/KDE4/plugins/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -0,0 +1,7 @@ + + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src + ${KDE4_INCLUDES} + ${QT4_INCLUDES} + ) + + ADD_SUBDIRECTORY(sampleplugin) \ No newline at end of file Added: branches/KDE4/plugins/sampleplugin/CMakeLists.txt =================================================================== --- branches/KDE4/plugins/sampleplugin/CMakeLists.txt (rev 0) +++ branches/KDE4/plugins/sampleplugin/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -0,0 +1,27 @@ + +include_directories ( + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${KDE4_INCLUDES} +) + +add_definitions( ${KDE4_DEFINITIONS} ) + +#add_definitions (${QT_DEFINITIONS}) +ADD_DEFINITIONS(-DQT_PLUGIN) +#ADD_DEFINITIONS(-DQT_NO_DEBUG) +ADD_DEFINITIONS(-DQT_SHARED) + +kde4_add_ui_files(plugin_UI countdown_ui.ui) + +SET(sampleplugindir_SRCS + sampleplugin.cpp) + +KDE4_ADD_PLUGIN(kdenlive_sampleplugin WITH_PREFIX ${sampleplugindir_SRCS} ${plugin_UI}) +#ADD_LIBRARY(kdenlive_sampleplugin SHARED ${sampleplugindir_SRCS}) + +TARGET_LINK_LIBRARIES(kdenlive_sampleplugin ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${KDE4_KDEUI_LIBS} ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS}) + +INSTALL(TARGETS kdenlive_sampleplugin DESTINATION ${PLUGIN_INSTALL_DIR}) + Added: branches/KDE4/plugins/sampleplugin/countdown_ui.ui =================================================================== --- branches/KDE4/plugins/sampleplugin/countdown_ui.ui (rev 0) +++ branches/KDE4/plugins/sampleplugin/countdown_ui.ui 2009-01-03 19:51:35 UTC (rev 2866) @@ -0,0 +1,115 @@ +<ui version="4.0" > + <class>CountDown_UI</class> + <widget class="QDialog" name="CountDown_UI" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>288</width> + <height>98</height> + </rect> + </property> + <property name="windowTitle" > + <string>Dialog</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <item row="0" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Save to</string> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="KUrlRequester" name="path" /> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Duration (seconds)</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="3" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="2" column="0" > + <spacer name="verticalSpacer" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="2" > + <widget class="KIntSpinBox" name="duration" > + <property name="maximum" > + <number>10000</number> + </property> + <property name="value" > + <number>10</number> + </property> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>KIntSpinBox</class> + <extends>QSpinBox</extends> + <header>knuminput.h</header> + </customwidget> + <customwidget> + <class>KUrlRequester</class> + <extends>QFrame</extends> + <header>kurlrequester.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>CountDown_UI</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>CountDown_UI</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> Added: branches/KDE4/plugins/sampleplugin/sampleplugin.cpp =================================================================== --- branches/KDE4/plugins/sampleplugin/sampleplugin.cpp (rev 0) +++ branches/KDE4/plugins/sampleplugin/sampleplugin.cpp 2009-01-03 19:51:35 UTC (rev 2866) @@ -0,0 +1,81 @@ +/*************************************************************************** + * Copyright (C) 2009 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#include <QtGui> +#include <QDialog> +#include <QDomDocument> + +#include <KUrlRequester> +#include <KIntSpinBox> +#include <KDebug> +#include <KMessageBox> + +#include "sampleplugin.h" +#include "ui_countdown_ui.h" + + QStringList SamplePlugin::generators() const + { + return QStringList() << tr("Countdown"); + } + + +KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height) { + int ct = 0; + QString counter = QString::number(ct).rightJustified(5, '0', false); + while (QFile::exists(projectFolder.path() + "/counter" + counter + ".westley")) { + ct++; + counter = QString::number(ct).rightJustified(5, '0', false); + } + QDialog d; + d.setWindowTitle(tr("Create Countdown Clip")); + Ui::CountDown_UI view; + view.setupUi(&d); + QString clipFile = projectFolder.path() + "/counter" + counter + ".westley"; + view.path->setPath(clipFile); + if (d.exec() == QDialog::Accepted) { + QDomDocument doc; + QDomElement westley = doc.createElement("westley"); + QDomElement playlist = doc.createElement("playlist"); + for (int i = 0; i < view.duration->value(); i++) { + // Create the producers + QDomElement prod = doc.createElement("producer"); + prod.setAttribute("mlt_service", "pango"); + prod.setAttribute("in", "0"); + prod.setAttribute("out", QString::number((int) fps)); + prod.setAttribute("markup", QString::number(view.duration->value() - i)); + playlist.appendChild(prod); + } + westley.appendChild(playlist); + doc.appendChild(westley); + QFile file(view.path->url().path()); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + kWarning() << "////// ERROR writing to file: " << view.path->url().path(); + KMessageBox::error(0, i18n("Cannot write to file %1", view.path->url().path())); + return KUrl(); + } + QTextStream out(&file); + out << doc.toString(); + file.close(); + return view.path->url(); + } + return KUrl(); +} + +Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin) Added: branches/KDE4/plugins/sampleplugin/sampleplugin.h =================================================================== --- branches/KDE4/plugins/sampleplugin/sampleplugin.h (rev 0) +++ branches/KDE4/plugins/sampleplugin/sampleplugin.h 2009-01-03 19:51:35 UTC (rev 2866) @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2009 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#ifndef SAMPLEPLUGIN_H +#define SAMPLEPLUGIN_H + +#include <QObject> +#include <QStringList> + +#include <KUrl> + +#include "interfaces.h" + +class SamplePlugin : public QObject, public ClipGenerator +{ + Q_OBJECT + Q_INTERFACES(ClipGenerator) + + public: + QStringList generators() const; + KUrl generatedClip(const QString &generator, const KUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height); + }; + + + #endif \ No newline at end of file Modified: branches/KDE4/renderer/CMakeLists.txt =================================================================== --- branches/KDE4/renderer/CMakeLists.txt 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/renderer/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -1,5 +1,18 @@ - + +include_directories ( + ${QDBUS_INCLUDE_DIRS} + ${KDE4_INCLUDES} + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} +) + +LINK_LIBRARIES( +${LIBMLT_LIBRARY} +${LIBMLTPLUS_LIBRARY} +${NEPOMUK_LIBRARIES} +) + set(kdenlive_render_SRCS kdenlive_render.cpp renderjob.cpp @@ -11,6 +24,6 @@ ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ) - + install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR}) Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -4,7 +4,12 @@ find_package(Nepomuk REQUIRED) -include_directories( +include_directories ( + ${QDBUS_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${KDE4_INCLUDES} + ${CMAKE_SOURCE_DIR}/src/widgets ${LIBMLT_INCLUDE_DIR} ${LIBMLTPLUS_INCLUDE_DIR} @@ -139,6 +144,8 @@ movegroupcommand.cpp ) +add_definitions( ${KDE4_DEFINITIONS} ) + if(NO_JOGSHUTTLE) add_definitions(-DNO_JOGSHUTTLE) else(NO_JOGSHUTTLE) Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/kdenliveui.rc 2009-01-03 19:51:35 UTC (rev 2866) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="29"> +<gui name="kdenlive" version="30"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -14,6 +14,14 @@ </Menu> <Menu name="project" ><text>Project</text> + <Action name="add_clip" /> + <Action name="add_color_clip" /> + <Action name="add_slide_clip" /> + <Action name="add_text_clip" /> + <Action name="add_folder" /> + <Menu name="generators" ><text>Generators</text> + </Menu> + <Separator /> <Action name="project_render" /> <Action name="project_settings" /> </Menu> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/mainwindow.cpp 2009-01-03 19:51:35 UTC (rev 2866) @@ -84,6 +84,8 @@ #include "markerdialog.h" #include "clipitem.h" +#include "interfaces.h" + static const int ID_STATUS_MSG = 1; static const int ID_EDITMODE_MSG = 2; static const int ID_TIMELINE_MSG = 3; @@ -211,10 +213,12 @@ setCentralWidget(m_timelineArea); setupGUI(); + loadPlugins(); //kDebug() << factory() << " " << factory()->container("video_effects_menu", this); m_projectMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone); m_clipMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast<QMenu*>(factory()->container("marker_menu", this))); + m_projectList->setupGeneratorMenu(static_cast<QMenu*>(factory()->container("generators", this))); // build effects menus QAction *action; @@ -376,6 +380,78 @@ return true; } + +void MainWindow::loadPlugins() { + foreach (QObject *plugin, QPluginLoader::staticInstances()) + populateMenus(plugin); + + QStringList directories = KGlobal::dirs()->findDirs("module", QString()); + QStringList filters; + filters << "libkdenlive*"; + foreach(const QString &folder, directories) { + kDebug()<<"// PARSING FIOLER: "<<folder; + QDir pluginsDir(folder); + foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files)) { + kDebug()<<"// FOUND PLUGIN: "<<fileName<<"= "<<pluginsDir.absoluteFilePath(fileName); + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (plugin) { + populateMenus(plugin); + m_pluginFileNames += fileName; + } + else kDebug()<<"// ERROR LOADING PLUGIN: "<<fileName<<", "<<loader.errorString (); + } + } + //exit(1); +} + +void MainWindow::populateMenus(QObject *plugin) +{ + kDebug()<<"// POP MENU"; + QMenu *addMenu = static_cast<QMenu*>(factory()->container("generators", this)); + ClipGenerator *iGenerator = qobject_cast<ClipGenerator *>(plugin); + kDebug()<<"// POP MENU 2"; + if (addMenu) kDebug()<<"// POP MENU 3"; + if (iGenerator) + addToMenu(plugin, iGenerator->generators(), addMenu, SLOT(generateClip()), + NULL); +} + +void MainWindow::addToMenu(QObject *plugin, const QStringList &texts, + QMenu *menu, const char *member, + QActionGroup *actionGroup) +{ + kDebug()<<"// ADD to MENU"<<texts; + foreach (QString text, texts) { + QAction *action = new QAction(text, plugin); + connect(action, SIGNAL(triggered()), this, member); + menu->addAction(action); + + if (actionGroup) { + action->setCheckable(true); + actionGroup->addAction(action); + } + } +} + +void MainWindow::aboutPlugins() +{ + //PluginDialog dialog(pluginsDir.path(), m_pluginFileNames, this); + //dialog.exec(); +} + + +void MainWindow::generateClip() +{ + QAction *action = qobject_cast<QAction *>(sender()); + ClipGenerator *iGenerator = qobject_cast<ClipGenerator *>(action->parent()); + + KUrl clipUrl = iGenerator->generatedClip(action->text(), m_activeDocument->projectFolder(), QStringList(), QStringList(), 25, 720, 576); + if (!clipUrl.isEmpty()) { + m_projectList->slotAddClip(clipUrl); + } +} + void MainWindow::saveProperties(KConfig*) { // save properties here,used by session management saveFile(); @@ -904,6 +980,36 @@ connect(collection, SIGNAL(actionHovered(QAction*)), this, SLOT(slotDisplayActionMessage(QAction*))); + + + QAction *addClip = new KAction(KIcon("kdenlive-add-clip"), i18n("Add Clip"), this); + collection->addAction("add_clip", addClip); + connect(addClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddClip())); + + QAction *addColorClip = new KAction(KIcon("kdenlive-add-color-clip"), i18n("Add Color Clip"), this); + collection->addAction("add_color_clip", addColorClip); + connect(addColorClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddColorClip())); + + QAction *addSlideClip = new KAction(KIcon("kdenlive-add-slide-clip"), i18n("Add Slideshow Clip"), this); + collection->addAction("add_slide_clip", addSlideClip); + connect(addSlideClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddSlideshowClip())); + + QAction *addTitleClip = new KAction(KIcon("kdenlive-add-text-clip"), i18n("Add Title Clip"), this); + collection->addAction("add_text_clip", addTitleClip); + connect(addTitleClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddTitleClip())); + + QAction *addFolderButton = new KAction(KIcon("folder-new"), i18n("Create Folder"), this); + collection->addAction("add_folder", addFolderButton); + connect(addFolderButton , SIGNAL(triggered()), m_projectList, SLOT(slotAddFolder())); + + QMenu *addClips = new QMenu(); + addClips->addAction(addClip); + addClips->addAction(addColorClip); + addClips->addAction(addSlideClip); + addClips->addAction(addTitleClip); + addClips->addAction(addFolderButton); + m_projectList->setupMenu(addClips, addClip); + //connect(collection, SIGNAL( clearStatusText() ), //statusBar(), SLOT( clear() ) ); } Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/mainwindow.h 2009-01-03 19:51:35 UTC (rev 2866) @@ -183,6 +183,13 @@ void findAhead(); void doOpenFile(const KUrl &url, KAutoSaveFile *stale); void recoverFiles(QList<KAutoSaveFile *> staleFiles); + void loadPlugins(); + void populateMenus(QObject *plugin); + void addToMenu(QObject *plugin, const QStringList &texts, + QMenu *menu, const char *member, + QActionGroup *actionGroup); + void aboutPlugins(); + QStringList m_pluginFileNames; public slots: void openFile(const KUrl &url); @@ -274,6 +281,7 @@ void slotGetNewStuff(); void slotAutoTransition(); void slotRunWizard(); + void generateClip(); }; Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/projectlist.cpp 2009-01-03 19:51:35 UTC (rev 2866) @@ -65,35 +65,16 @@ m_toolbar = new QToolBar("projectToolBar", this); m_toolbar->addWidget(searchView); - QToolButton *addButton = new QToolButton(m_toolbar); - QMenu *addMenu = new QMenu(this); - addButton->setMenu(addMenu); - addButton->setPopupMode(QToolButton::MenuButtonPopup); - m_toolbar->addWidget(addButton); + m_addButton = new QToolButton(m_toolbar); + m_addButton->setPopupMode(QToolButton::MenuButtonPopup); + m_toolbar->addWidget(m_addButton); - QAction *addClipButton = addMenu->addAction(KIcon("kdenlive-add-clip"), i18n("Add Clip")); - connect(addClipButton, SIGNAL(triggered()), this, SLOT(slotAddClip())); - - QAction *addColorClip = addMenu->addAction(KIcon("kdenlive-add-color-clip"), i18n("Add Color Clip")); - connect(addColorClip, SIGNAL(triggered()), this, SLOT(slotAddColorClip())); - - QAction *addSlideClip = addMenu->addAction(KIcon("kdenlive-add-slide-clip"), i18n("Add Slideshow Clip")); - connect(addSlideClip, SIGNAL(triggered()), this, SLOT(slotAddSlideshowClip())); - - QAction *addTitleClip = addMenu->addAction(KIcon("kdenlive-add-text-clip"), i18n("Add Title Clip")); - connect(addTitleClip, SIGNAL(triggered()), this, SLOT(slotAddTitleClip())); - m_deleteAction = m_toolbar->addAction(KIcon("edit-delete"), i18n("Delete Clip")); connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(slotRemoveClip())); m_editAction = m_toolbar->addAction(KIcon("document-properties"), i18n("Edit Clip")); connect(m_editAction, SIGNAL(triggered()), this, SLOT(slotEditClip())); - QAction *addFolderButton = addMenu->addAction(KIcon("folder-new"), i18n("Create Folder")); - connect(addFolderButton, SIGNAL(triggered()), this, SLOT(slotAddFolder())); - - addButton->setDefaultAction(addClipButton); - layout->addWidget(m_toolbar); layout->addWidget(listView); setLayout(layout); @@ -101,22 +82,12 @@ searchView->setTreeWidget(listView); - m_menu = new QMenu(); - m_menu->addAction(addClipButton); - m_menu->addAction(addColorClip); - m_menu->addAction(addSlideClip); - m_menu->addAction(addTitleClip); - m_menu->addAction(m_editAction); - m_menu->addAction(m_deleteAction); - m_menu->addAction(addFolderButton); - m_menu->insertSeparator(m_deleteAction); - connect(listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected())); connect(listView, SIGNAL(focusMonitor()), this, SLOT(slotClipSelected())); connect(listView, SIGNAL(pauseMonitor()), this, SLOT(slotPauseMonitor())); connect(listView, SIGNAL(requestMenu(const QPoint &, QTreeWidgetItem *)), this, SLOT(slotContextMenu(const QPoint &, QTreeWidgetItem *))); connect(listView, SIGNAL(addClip()), this, SLOT(slotAddClip())); - connect(listView, SIGNAL(addClip(QUrl, const QString &)), this, SLOT(slotAddClip(QUrl, const QString &))); + connect(listView, SIGNAL(addClip(KUrl, const QString &)), this, SLOT(slotAddClip(KUrl, const QString &))); connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotItemEdited(QTreeWidgetItem *, int))); connect(listView, SIGNAL(showProperties(DocClipBase *)), this, SIGNAL(showClipProperties(DocClipBase *))); @@ -129,6 +100,29 @@ delete m_toolbar; } +void ProjectList::setupMenu(QMenu *addMenu, QAction *defaultAction) +{ + m_addButton->setMenu(addMenu); + m_addButton->setDefaultAction(defaultAction); + m_menu = new QMenu(); + m_menu->addActions(addMenu->actions()); +} + +void ProjectList::setupGeneratorMenu(QMenu *addMenu) +{ + + QMenu *menu = m_addButton->menu(); + menu->addMenu(addMenu); + m_addButton->setMenu(menu); + + m_menu->addMenu(addMenu); + if (addMenu->isEmpty()) addMenu->setEnabled(false); + m_menu->addAction(m_editAction); + m_menu->addAction(m_deleteAction); + m_menu->insertSeparator(m_deleteAction); +} + + QByteArray ProjectList::headerInfo() { return listView->header()->saveState(); } @@ -367,7 +361,7 @@ } void ProjectList::slotProcessNextClipInQueue() { - if (m_infoQueue.isEmpty()) { + if (m_infoQueue.isEmpty()) { listView->setEnabled(true); return; } @@ -420,7 +414,7 @@ QTimer::singleShot(500, this, SLOT(slotCheckForEmptyQueue())); } -void ProjectList::slotAddClip(QUrl givenUrl, QString group) { +void ProjectList::slotAddClip(KUrl givenUrl, QString group) { if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; if (givenUrl.isEmpty()) { Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/projectlist.h 2009-01-03 19:51:35 UTC (rev 2866) @@ -23,6 +23,7 @@ #include <QDomNodeList> #include <QToolBar> +#include <QToolButton> #include <QTreeWidget> #include <QPainter> #include <QItemDelegate> @@ -112,6 +113,8 @@ void updateAllClips(); QByteArray headerInfo(); void setHeaderInfo(const QByteArray &state); + void setupMenu(QMenu *addMenu, QAction *defaultAction); + void setupGeneratorMenu(QMenu *addMenu); public slots: void setDocument(KdenliveDoc *doc); @@ -125,6 +128,7 @@ void slotRemoveInvalidClip(const QString &id); void slotSelectClip(const QString &ix); void slotRemoveClip(); + void slotAddClip(KUrl givenUrl = KUrl(), QString group = QString()); private: ProjectListView *listView; @@ -143,13 +147,13 @@ KdenliveDoc *m_doc; ProjectItem *m_selectedItem; bool m_refreshed; + QToolButton *m_addButton; QMap <QString, QDomElement> m_infoQueue; void requestClipInfo(const QDomElement xml, const QString id); QList <QString> m_thumbnailQueue; void requestClipThumbnail(const QString &id); private slots: - void slotAddClip(QUrl givenUrl = QUrl(), QString group = QString()); void slotEditClip(); void slotClipSelected(); void slotAddColorClip(); Modified: branches/KDE4/src/projectlistview.cpp =================================================================== --- branches/KDE4/src/projectlistview.cpp 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/src/projectlistview.cpp 2009-01-03 19:51:35 UTC (rev 2866) @@ -141,7 +141,7 @@ } const QList <QUrl> list = event->mimeData()->urls(); foreach(const QUrl &url, list) { - emit addClip(url, groupName); + emit addClip(KUrl(url), groupName); } } else if (event->mimeData()->hasFormat("kdenlive/producerslist")) { Modified: branches/KDE4/thumbnailer/CMakeLists.txt =================================================================== --- branches/KDE4/thumbnailer/CMakeLists.txt 2009-01-02 00:16:53 UTC (rev 2865) +++ branches/KDE4/thumbnailer/CMakeLists.txt 2009-01-03 19:51:35 UTC (rev 2866) @@ -1,7 +1,13 @@ ########### next target ############### +include_directories ( + ${KDE4_INCLUDES} + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} +) + set(westleypreview_PART_SRCS westleypreview.cpp) kde4_add_plugin(westleypreview ${westleypreview_PART_SRCS}) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |