#include <KLocale>
#include <KFileDialog>
#include <KInputDialog>
-#include <kio/netaccess.h>
#include <KMessageBox>
#include <nepomuk/global.h>
addButton->setPopupMode(QToolButton::MenuButtonPopup);
m_toolbar->addWidget(addButton);
- QAction *addClipButton = addMenu->addAction(KIcon("document-new"), i18n("Add Clip"));
+ QAction *addClipButton = addMenu->addAction(KIcon("kdenlive-add-clip"), i18n("Add Clip"));
connect(addClipButton, SIGNAL(triggered()), this, SLOT(slotAddClip()));
- QAction *addColorClip = addMenu->addAction(KIcon("document-new"), i18n("Add Color Clip"));
+ 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("document-new"), i18n("Add Slideshow Clip"));
+ 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("document-new"), i18n("Add Title Clip"));
+ 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"));
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);
void ProjectList::slotEditClip() {
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
- if (item && !item->isGroup()) emit clipSelected(item->toXml());
+ if (item && !item->isGroup()) emit clipSelected(item->referencedClip());
emit showClipProperties(item->referencedClip());
}
void ProjectList::slotClipSelected() {
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && !item->isGroup()) {
- if (item == m_selectedItem) {
- // if user clicked on the active clip item, just focus monitor, don't update it.
- emit clipSelected(QDomElement());
- return;
- }
m_selectedItem = item;
- emit clipSelected(item->toXml());
+ emit clipSelected(item->referencedClip());
}
}
-void ProjectList::slotUpdateClipProperties(int id, QMap <QString, QString> properties) {
+void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties) {
ProjectItem *item = getItemById(id);
if (item) {
slotUpdateClipProperties(item, properties);
Nepomuk::Resource f(clip->clipUrl().path());
if (f.isValid()) f.setDescription(properties.value("description"));
}
+ emit projectModified();
}
}
void ProjectList::slotRemoveClip() {
if (!listView->currentItem()) return;
ProjectItem *item = static_cast <ProjectItem *>(listView->currentItem());
- QList <int> ids;
- QMap <QString, int> folderids;
+ QList <QString> ids;
+ QMap <QString, QString> folderids;
if (item->clipType() == FOLDER) folderids[item->groupName()] = item->clipId();
else ids << item->clipId();
if (item->numReferences() > 0) {
if (!folderids.isEmpty()) m_doc->deleteProjectFolder(folderids);
}
-void ProjectList::selectItemById(const int clipId) {
+void ProjectList::selectItemById(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
if (item) listView->setCurrentItem(item);
}
-void ProjectList::slotDeleteClip(int clipId) {
+void ProjectList::slotDeleteClip(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
QTreeWidgetItem *p = item->parent();
if (p) {
m_doc->slotAddFolder(i18n("Folder")); //folderName);
}
-void ProjectList::slotAddFolder(const QString foldername, int clipId, bool remove, bool edit) {
+void ProjectList::slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit) {
if (remove) {
ProjectItem *item;
QTreeWidgetItemIterator it(listView);
}
void ProjectList::slotAddClip(DocClipBase *clip) {
- const int parent = clip->toXML().attribute("groupid").toInt();
+ const QString parent = clip->toXML().attribute("groupid");
ProjectItem *item = NULL;
if (parent != 0) {
ProjectItem *parentitem = getItemById(parent);
emit getFileProperties(clip->toXML(), clip->getId());
}
-void ProjectList::slotUpdateClip(int id) {
+void ProjectList::slotUpdateClip(const QString &id) {
ProjectItem *item = getItemById(id);
item->setData(1, UsageRole, QString::number(item->numReferences()));
}
void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK";
KUrl::List list;
- if (givenUrl.isEmpty())
- list = KFileDialog::getOpenUrls(KUrl(), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg *.m2t *.dv video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr");
- else list.append(givenUrl);
+ if (givenUrl.isEmpty()) {
+ list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this);
+ } else list.append(givenUrl);
if (list.isEmpty()) return;
- KUrl::List::Iterator it;
- int groupId = -1;
+
+ QString groupId = QString();
if (group.isEmpty()) {
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
groupId = item->clipId();
}
}
- for (it = list.begin(); it != list.end(); it++) {
- m_doc->slotAddClipFile(*it, group, groupId);
+ m_doc->slotAddClipList(list, group, groupId);
+}
+
+void ProjectList::slotRemoveInvalidClip(const QString &id) {
+ ProjectItem *item = getItemById(id);
+ if (item) {
+ QString path = item->referencedClip()->fileURL().path();
+ if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path));
+
}
+ QList <QString> ids;
+ ids << id;
+ m_doc->deleteProjectClip(ids);
}
void ProjectList::slotAddColorClip() {
color = color.replace(0, 1, "0x") + "ff";
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
if (dia->exec() == QDialog::Accepted) {
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
groupId = item->clipId();
}
- m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), group, groupId);
+ m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), group, groupId);
}
delete dia;
}
+
void ProjectList::slotAddTitleClip() {
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
return prods;
}
-void ProjectList::slotRefreshClipThumbnail(int clipId) {
+void ProjectList::slotRefreshClipThumbnail(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
if (item) slotRefreshClipThumbnail(item);
}
void ProjectList::slotRefreshClipThumbnail(ProjectItem *item) {
if (item) {
- int height = 50;
- int width = (int)(height * m_render->dar());
- QPixmap pix = KThumb::getImage(item->toXml(), item->referencedClip()->getProjectThumbFrame(), width, height);
- //QPixmap pix = KThumb::getFrame(item->toXml()), 0, width, height);
+ int height = 50;
+ int width = (int)(height * m_render->dar());
+ QPixmap pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height);
item->setIcon(0, pix);
}
}
-void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
+void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
ProjectItem *item = getItemById(clipId);
if (item) {
item->setProperties(properties, metadata);
- listView->setCurrentItem(item);
+ item->referencedClip()->setProducer(producer);
emit receivedClipDuration(clipId, item->clipMaxDuration());
- }
+ } else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
}
-void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) {
+void ProjectList::slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h) {
ProjectItem *item = getItemById(clipId);
if (item) item->setIcon(0, pix);
}
-ProjectItem *ProjectList::getItemById(int id) {
+ProjectItem *ProjectList::getItemById(const QString &id) {
QTreeWidgetItemIterator it(listView);
while (*it) {
if (((ProjectItem *)(*it))->clipId() == id)
return NULL;
}
+void ProjectList::slotSelectClip(const QString &ix) {
+ ProjectItem *p = getItemById(ix);
+ if (p) {
+ listView->setCurrentItem(p);
+ listView->scrollToItem(p);
+ }
+}
+
#include "projectlist.moc"