* Small cmake cleanup

* Introduce Kdenlive plugins, first example is a countdown generator (currently requires MLT's pango producer)

svn path=/branches/KDE4/; revision=2866
parent 5c9bfe55
......@@ -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)
......
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src
${KDE4_INCLUDES}
${QT4_INCLUDES}
)
ADD_SUBDIRECTORY(sampleplugin)
\ No newline at end of file
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})
<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>
/***************************************************************************
* 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)
/***************************************************************************
* 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
......@@ -11,6 +24,6 @@ target_link_libraries(kdenlive_render
${QT_QTCORE_LIBRARY}
${QT_QTDBUS_LIBRARY}
)
install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR})
......@@ -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)
......
<?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>
......
......@@ -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<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 @@ 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: "<<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 @@ 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() ) );
}
......
......@@ -183,6 +183,13 @@ private:
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 @@ private slots:
void slotGetNewStuff();
void slotAutoTransition();
void slotRunWizard();
void generateClip();
};
......
......@@ -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()) {
......
......@@ -23,6 +23,7 @@
#include <QDomNodeList>
#include <QToolBar>
#include <QToolButton>
#include <QTreeWidget>
#include <QPainter>
#include <QItemDelegate>
......@@ -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 <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();
......
......@@ -141,7 +141,7 @@ void ProjectListView::dropEvent(QDropEvent *event) {
}
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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment