From a956ade6f5864410de7bc494eb3f3010747af76e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 3 Jan 2009 19:51:35 +0000 Subject: [PATCH] * Small cmake cleanup * Introduce Kdenlive plugins, first example is a countdown generator (currently requires MLT's pango producer) svn path=/branches/KDE4/; revision=2866 --- CMakeLists.txt | 4 +- plugins/CMakeLists.txt | 7 ++ plugins/sampleplugin/CMakeLists.txt | 27 ++++++ plugins/sampleplugin/countdown_ui.ui | 115 ++++++++++++++++++++++++++ plugins/sampleplugin/sampleplugin.cpp | 81 ++++++++++++++++++ plugins/sampleplugin/sampleplugin.h | 42 ++++++++++ renderer/CMakeLists.txt | 17 +++- src/CMakeLists.txt | 9 +- src/kdenliveui.rc | 10 ++- src/mainwindow.cpp | 106 ++++++++++++++++++++++++ src/mainwindow.h | 8 ++ src/projectlist.cpp | 64 +++++++------- src/projectlist.h | 6 +- src/projectlistview.cpp | 2 +- thumbnailer/CMakeLists.txt | 6 ++ 15 files changed, 461 insertions(+), 43 deletions(-) create mode 100644 plugins/CMakeLists.txt create mode 100644 plugins/sampleplugin/CMakeLists.txt create mode 100644 plugins/sampleplugin/countdown_ui.ui create mode 100644 plugins/sampleplugin/sampleplugin.cpp create mode 100644 plugins/sampleplugin/sampleplugin.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 028c1048..995fb801 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,8 +11,7 @@ INCLUDE(FindGettext) 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 @@ find_program(XGETTEXT_EXECUTABLE xgettext) 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) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt new file mode 100644 index 00000000..fee66b15 --- /dev/null +++ b/plugins/CMakeLists.txt @@ -0,0 +1,7 @@ + + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src + ${KDE4_INCLUDES} + ${QT4_INCLUDES} + ) + + ADD_SUBDIRECTORY(sampleplugin) \ No newline at end of file diff --git a/plugins/sampleplugin/CMakeLists.txt b/plugins/sampleplugin/CMakeLists.txt new file mode 100644 index 00000000..279aaec4 --- /dev/null +++ b/plugins/sampleplugin/CMakeLists.txt @@ -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}) + diff --git a/plugins/sampleplugin/countdown_ui.ui b/plugins/sampleplugin/countdown_ui.ui new file mode 100644 index 00000000..ce360549 --- /dev/null +++ b/plugins/sampleplugin/countdown_ui.ui @@ -0,0 +1,115 @@ + + CountDown_UI + + + + 0 + 0 + 288 + 98 + + + + Dialog + + + + + + Save to + + + + + + + + + + Duration (seconds) + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 10000 + + + 10 + + + + + + + + KIntSpinBox + QSpinBox +
knuminput.h
+
+ + KUrlRequester + QFrame +
kurlrequester.h
+
+
+ + + + buttonBox + accepted() + CountDown_UI + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + CountDown_UI + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/plugins/sampleplugin/sampleplugin.cpp b/plugins/sampleplugin/sampleplugin.cpp new file mode 100644 index 00000000..a816322a --- /dev/null +++ b/plugins/sampleplugin/sampleplugin.cpp @@ -0,0 +1,81 @@ +/*************************************************************************** + * Copyright (C) 2009 by Jean-Baptiste Mardelle (jb@kdenlive.org) * + * * + * 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 +#include +#include + +#include +#include +#include +#include + +#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) diff --git a/plugins/sampleplugin/sampleplugin.h b/plugins/sampleplugin/sampleplugin.h new file mode 100644 index 00000000..50abc9d4 --- /dev/null +++ b/plugins/sampleplugin/sampleplugin.h @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2009 by Jean-Baptiste Mardelle (jb@kdenlive.org) * + * * + * 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 +#include + +#include + +#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 diff --git a/renderer/CMakeLists.txt b/renderer/CMakeLists.txt index de832e1c..c7e4a738 100644 --- a/renderer/CMakeLists.txt +++ b/renderer/CMakeLists.txt @@ -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 @@ target_link_libraries(kdenlive_render ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ) - + install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 717781c5..47516e01 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,7 +4,12 @@ add_subdirectory( mimetypes ) 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 @@ set(kdenlive_SRCS movegroupcommand.cpp ) +add_definitions( ${KDE4_DEFINITIONS} ) + if(NO_JOGSHUTTLE) add_definitions(-DNO_JOGSHUTTLE) else(NO_JOGSHUTTLE) diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index 070744a7..605ace09 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -1,6 +1,6 @@ - + Extra Toolbar @@ -14,6 +14,14 @@ Project + + + + + + Generators + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a2062545..dbae087f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent setCentralWidget(m_timelineArea); setupGUI(); + loadPlugins(); //kDebug() << factory() << " " << factory()->container("video_effects_menu", this); m_projectMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone); m_clipMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast(factory()->container("marker_menu", this))); + m_projectList->setupGeneratorMenu(static_cast(factory()->container("generators", this))); // build effects menus QAction *action; @@ -376,6 +380,78 @@ bool MainWindow::queryClose() { 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: "<(factory()->container("generators", this)); + ClipGenerator *iGenerator = qobject_cast(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"<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(sender()); + ClipGenerator *iGenerator = qobject_cast(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 @@ void MainWindow::setupActions() { 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() ) ); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 7788f4b6..7b886f46 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -183,6 +183,13 @@ private: void findAhead(); void doOpenFile(const KUrl &url, KAutoSaveFile *stale); void recoverFiles(QList 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 @@ private slots: void slotGetNewStuff(); void slotAutoTransition(); void slotRunWizard(); + void generateClip(); }; diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 0e58a447..c54f52ec 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -65,23 +65,9 @@ ProjectList::ProjectList(QWidget *parent) 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); - - 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_addButton = new QToolButton(m_toolbar); + m_addButton->setPopupMode(QToolButton::MenuButtonPopup); + m_toolbar->addWidget(m_addButton); m_deleteAction = m_toolbar->addAction(KIcon("edit-delete"), i18n("Delete Clip")); connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(slotRemoveClip())); @@ -89,11 +75,6 @@ ProjectList::ProjectList(QWidget *parent) 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 @@ ProjectList::ProjectList(QWidget *parent) 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 @@ ProjectList::~ProjectList() { 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::requestClipInfo(const QDomElement xml, const QString id) { } void ProjectList::slotProcessNextClipInQueue() { - if (m_infoQueue.isEmpty()) { + if (m_infoQueue.isEmpty()) { listView->setEnabled(true); return; } @@ -420,7 +414,7 @@ void ProjectList::updateAllClips() { 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()) { diff --git a/src/projectlist.h b/src/projectlist.h index 33a0a597..8be45a43 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -112,6 +113,8 @@ public: 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 @@ public slots: 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 @@ private: KdenliveDoc *m_doc; ProjectItem *m_selectedItem; bool m_refreshed; + QToolButton *m_addButton; QMap m_infoQueue; void requestClipInfo(const QDomElement xml, const QString id); QList m_thumbnailQueue; void requestClipThumbnail(const QString &id); private slots: - void slotAddClip(QUrl givenUrl = QUrl(), QString group = QString()); void slotEditClip(); void slotClipSelected(); void slotAddColorClip(); diff --git a/src/projectlistview.cpp b/src/projectlistview.cpp index 08bc3d65..74cafd6c 100644 --- a/src/projectlistview.cpp +++ b/src/projectlistview.cpp @@ -141,7 +141,7 @@ void ProjectListView::dropEvent(QDropEvent *event) { } const QList 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")) { diff --git a/thumbnailer/CMakeLists.txt b/thumbnailer/CMakeLists.txt index a56b8391..64c6d1ae 100644 --- a/thumbnailer/CMakeLists.txt +++ b/thumbnailer/CMakeLists.txt @@ -1,6 +1,12 @@ ########### next target ############### +include_directories ( + ${KDE4_INCLUDES} + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} +) + set(westleypreview_PART_SRCS westleypreview.cpp) -- 2.39.2