* Introduce Kdenlive plugins, first example is a countdown generator (currently requires MLT's pango producer)
svn path=/branches/KDE4/; revision=2866
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)
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)
--- /dev/null
+
+ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src
+ ${KDE4_INCLUDES}
+ ${QT4_INCLUDES}
+ )
+
+ ADD_SUBDIRECTORY(sampleplugin)
\ No newline at end of file
--- /dev/null
+
+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})
+
--- /dev/null
+<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>
--- /dev/null
+/***************************************************************************
+ * 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 <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)
--- /dev/null
+/***************************************************************************
+ * 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 <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
-
+
+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
${QT_QTCORE_LIBRARY}
${QT_QTDBUS_LIBRARY}
)
-
+
install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR})
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}
movegroupcommand.cpp
)
+add_definitions( ${KDE4_DEFINITIONS} )
+
if(NO_JOGSHUTTLE)
add_definitions(-DNO_JOGSHUTTLE)
else(NO_JOGSHUTTLE)
<?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" />
</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>
#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;
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;
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();
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() ) );
}
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);
void slotGetNewStuff();
void slotAutoTransition();
void slotRunWizard();
+ void generateClip();
};
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()));
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);
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 *)));
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();
}
}
void ProjectList::slotProcessNextClipInQueue() {
- if (m_infoQueue.isEmpty()) {
+ if (m_infoQueue.isEmpty()) {
listView->setEnabled(true);
return;
}
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()) {
#include <QDomNodeList>
#include <QToolBar>
+#include <QToolButton>
#include <QTreeWidget>
#include <QPainter>
#include <QItemDelegate>
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);
void slotRemoveInvalidClip(const QString &id);
void slotSelectClip(const QString &ix);
void slotRemoveClip();
+ void slotAddClip(KUrl givenUrl = KUrl(), QString group = QString());
private:
ProjectListView *listView;
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();
}
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")) {
########### next target ###############
+include_directories (
+ ${KDE4_INCLUDES}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_BINARY_DIR}
+)
+
set(westleypreview_PART_SRCS westleypreview.cpp)