X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectlist.cpp;h=d65d84a2efe350aae9f9c0de2a7831643bb73788;hb=9bec6403481cb25f92067e78a0f4adce39285924;hp=815a9b804cd359953d2cfe6039d957a3e6aab236;hpb=08d4f1a4f211a4d2c37e7940c7856cadc751554e;p=kdenlive diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 815a9b80..d65d84a2 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -54,8 +54,20 @@ #include #include -ProjectList::ProjectList(QWidget *parent) - : QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL), m_selectedItem(NULL), m_infoQueue(QMap ()), m_thumbnailQueue(QList ()), m_refreshed(false), m_editAction(NULL), m_openAction(NULL), m_deleteAction(NULL), m_reloadAction(NULL) { +ProjectList::ProjectList(QWidget *parent) : + QWidget(parent), + m_render(NULL), + m_fps(-1), + m_commandStack(NULL), + m_editAction(NULL), + m_deleteAction(NULL), + m_openAction(NULL), + m_reloadAction(NULL), + m_selectedItem(NULL), + m_refreshed(false), + m_infoQueue(), + m_thumbnailQueue() +{ listView = new ProjectListView(this);; QVBoxLayout *layout = new QVBoxLayout; @@ -82,7 +94,7 @@ ProjectList::ProjectList(QWidget *parent) 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(KUrl, const QString &)), this, SLOT(slotAddClip(KUrl, const QString &))); + connect(listView, SIGNAL(addClip(const QList , const QString &)), this, SLOT(slotAddClip(const QList , const QString &))); connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotItemEdited(QTreeWidgetItem *, int))); connect(listView, SIGNAL(showProperties(DocClipBase *)), this, SIGNAL(showClipProperties(DocClipBase *))); @@ -98,12 +110,14 @@ ProjectList::ProjectList(QWidget *parent) } } -ProjectList::~ProjectList() { +ProjectList::~ProjectList() +{ delete m_menu; delete m_toolbar; } -void ProjectList::setupMenu(QMenu *addMenu, QAction *defaultAction) { +void ProjectList::setupMenu(QMenu *addMenu, QAction *defaultAction) +{ QList actions = addMenu->actions(); for (int i = 0; i < actions.count(); i++) { if (actions.at(i)->data().toString() == "clip_properties") { @@ -135,7 +149,8 @@ void ProjectList::setupMenu(QMenu *addMenu, QAction *defaultAction) { m_menu->addActions(addMenu->actions()); } -void ProjectList::setupGeneratorMenu(QMenu *addMenu) { +void ProjectList::setupGeneratorMenu(QMenu *addMenu) +{ if (!addMenu) return; QMenu *menu = m_addButton->menu(); menu->addMenu(addMenu); @@ -151,15 +166,18 @@ void ProjectList::setupGeneratorMenu(QMenu *addMenu) { } -QByteArray ProjectList::headerInfo() { +QByteArray ProjectList::headerInfo() +{ return listView->header()->saveState(); } -void ProjectList::setHeaderInfo(const QByteArray &state) { +void ProjectList::setHeaderInfo(const QByteArray &state) +{ listView->header()->restoreState(state); } -void ProjectList::slotEditClip() { +void ProjectList::slotEditClip() +{ ProjectItem *item = static_cast (listView->currentItem()); if (item && !item->isGroup()) { emit clipSelected(item->referencedClip()); @@ -167,7 +185,8 @@ void ProjectList::slotEditClip() { } } -void ProjectList::slotOpenClip() { +void ProjectList::slotOpenClip() +{ ProjectItem *item = static_cast (listView->currentItem()); if (item && !item->isGroup()) { if (item->clipType() == IMAGE) { @@ -181,7 +200,8 @@ void ProjectList::slotOpenClip() { } } -void ProjectList::slotReloadClip() { +void ProjectList::slotReloadClip() +{ ProjectItem *item = static_cast (listView->currentItem()); if (item && !item->isGroup()) { if (item->clipType() == IMAGE) { @@ -191,12 +211,14 @@ void ProjectList::slotReloadClip() { } } -void ProjectList::setRenderer(Render *projectRender) { +void ProjectList::setRenderer(Render *projectRender) +{ m_render = projectRender; listView->setIconSize(QSize(40 * m_render->dar(), 40)); } -void ProjectList::slotClipSelected() { +void ProjectList::slotClipSelected() +{ if (listView->currentItem()) { ProjectItem *clip = static_cast (listView->currentItem()); if (!clip->isGroup()) { @@ -222,11 +244,13 @@ void ProjectList::slotClipSelected() { } } -void ProjectList::slotPauseMonitor() { +void ProjectList::slotPauseMonitor() +{ if (m_render) m_render->pause(); } -void ProjectList::slotUpdateClipProperties(const QString &id, QMap properties) { +void ProjectList::slotUpdateClipProperties(const QString &id, QMap properties) +{ ProjectItem *item = getItemById(id); if (item) { slotUpdateClipProperties(item, properties); @@ -235,7 +259,8 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap properties) { +void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap properties) +{ if (!clip) return; if (!clip->isGroup()) clip->setProperties(properties); if (properties.contains("name")) { @@ -258,7 +283,8 @@ void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap (item); if (column == 2) { if (clip->referencedClip()) { @@ -295,7 +321,8 @@ void ProjectList::slotItemEdited(QTreeWidgetItem *item, int column) { } } -void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item) { +void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item) +{ bool enable = false; if (item) { enable = true; @@ -316,7 +343,8 @@ void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item) { m_menu->popup(pos); } -void ProjectList::slotRemoveClip() { +void ProjectList::slotRemoveClip() +{ if (!listView->currentItem()) return; QList ids; QMap folderids; @@ -347,13 +375,15 @@ void ProjectList::slotRemoveClip() { } } -void ProjectList::selectItemById(const QString &clipId) { +void ProjectList::selectItemById(const QString &clipId) +{ ProjectItem *item = getItemById(clipId); if (item) listView->setCurrentItem(item); } -void ProjectList::slotDeleteClip(const QString &clipId) { +void ProjectList::slotDeleteClip(const QString &clipId) +{ ProjectItem *item = getItemById(clipId); if (!item) { kDebug() << "/// Cannot find clip to delete"; @@ -363,18 +393,21 @@ void ProjectList::slotDeleteClip(const QString &clipId) { } -void ProjectList::editFolder(const QString folderName, const QString oldfolderName, const QString &clipId) { +void ProjectList::editFolder(const QString folderName, const QString oldfolderName, const QString &clipId) +{ EditFolderCommand *command = new EditFolderCommand(this, folderName, oldfolderName, clipId, false); m_commandStack->push(command); m_doc->setModified(true); } -void ProjectList::slotAddFolder() { +void ProjectList::slotAddFolder() +{ AddFolderCommand *command = new AddFolderCommand(this, i18n("Folder"), QString::number(m_doc->clipManager()->getFreeFolderId()), true); m_commandStack->push(command); } -void ProjectList::slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit) { +void ProjectList::slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit) +{ if (remove) { ProjectItem *item = getFolderItemById(clipId); if (item) { @@ -409,7 +442,8 @@ void ProjectList::slotAddFolder(const QString foldername, const QString &clipId, -void ProjectList::deleteProjectFolder(QMap map) { +void ProjectList::deleteProjectFolder(QMap map) +{ QMapIterator i(map); QUndoCommand *delCommand = new QUndoCommand(); delCommand->setText(i18n("Delete Folder")); @@ -421,7 +455,8 @@ void ProjectList::deleteProjectFolder(QMap map) { m_doc->setModified(true); } -void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) { +void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) +{ if (getProperties) listView->setEnabled(false); listView->blockSignals(true); const QString parent = clip->getProperty("groupid"); @@ -454,7 +489,8 @@ void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) { listView->blockSignals(false); } -void ProjectList::slotResetProjectList() { +void ProjectList::slotResetProjectList() +{ listView->clear(); emit clipSelected(NULL); m_thumbnailQueue.clear(); @@ -462,14 +498,16 @@ void ProjectList::slotResetProjectList() { m_refreshed = false; } -void ProjectList::requestClipInfo(const QDomElement xml, const QString id) { +void ProjectList::requestClipInfo(const QDomElement xml, const QString id) +{ kDebug() << " PRG LIST REQUEST CLP INFO: " << id; m_infoQueue.insert(id, xml); listView->setEnabled(false); if (m_infoQueue.count() == 1) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue())); } -void ProjectList::slotProcessNextClipInQueue() { +void ProjectList::slotProcessNextClipInQueue() +{ if (m_infoQueue.isEmpty()) { listView->setEnabled(true); return; @@ -484,14 +522,16 @@ void ProjectList::slotProcessNextClipInQueue() { if (m_infoQueue.isEmpty()) listView->setEnabled(true); } -void ProjectList::slotUpdateClip(const QString &id) { +void ProjectList::slotUpdateClip(const QString &id) +{ ProjectItem *item = getItemById(id); listView->blockSignals(true); if (item) item->setData(1, UsageRole, QString::number(item->numReferences())); listView->blockSignals(false); } -void ProjectList::updateAllClips() { +void ProjectList::updateAllClips() +{ QTreeWidgetItemIterator it(listView); while (*it) { ProjectItem *item = static_cast (*it); @@ -534,12 +574,30 @@ void ProjectList::updateAllClips() { QTimer::singleShot(500, this, SLOT(slotCheckForEmptyQueue())); } -void ProjectList::slotAddClip(KUrl givenUrl, QString group) { +void ProjectList::slotAddClip(const QList givenList, QString group) +{ if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; - if (givenUrl.isEmpty()) { - list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive video/x-flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/x-matroska 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-tga 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 audio/x-flac audio/mp4 video/x-matroska audio/x-matroska", this); - } else list.append(givenUrl); + if (givenList.isEmpty()) { + // Build list of mime types + QStringList mimeTypes = QStringList() << "application/x-kdenlive" << "video/x-flv" << "application/vnd.rn-realmedia" << "video/x-dv" << "video/dv" << "video/x-msvideo" << "video/x-matroska" << "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-tga" << "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" << "audio/x-flac" << "audio/mp4" << "video/x-matroska" << "audio/x-matroska"; + + QString allExtensions; + foreach(const QString& mimeType, mimeTypes) { + KMimeType::Ptr mime(KMimeType::mimeType(mimeType)); + if (mime) { + allExtensions.append(mime->patterns().join(" ")); + allExtensions.append(' '); + } + } + QString dialogFilter = allExtensions + ' ' + QLatin1Char('|') + i18n("All Supported Files"); + dialogFilter.append("\n*" + QLatin1Char('|') + i18n("All Files")); + list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), dialogFilter, this); + + } else { + for (int i = 0; i < givenList.count(); i++) + list << givenList.at(i); + } if (list.isEmpty()) return; QString groupId; @@ -559,7 +617,8 @@ void ProjectList::slotAddClip(KUrl givenUrl, QString group) { m_doc->slotAddClipList(list, group, groupId); } -void ProjectList::slotRemoveInvalidClip(const QString &id) { +void ProjectList::slotRemoveInvalidClip(const QString &id) +{ ProjectItem *item = getItemById(id); if (item) { const QString path = item->referencedClip()->fileURL().path(); @@ -572,7 +631,8 @@ void ProjectList::slotRemoveInvalidClip(const QString &id) { else listView->setEnabled(true); } -void ProjectList::slotAddColorClip() { +void ProjectList::slotAddColorClip() +{ if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; QDialog *dia = new QDialog(this); Ui::ColorClip_UI *dia_ui = new Ui::ColorClip_UI(); @@ -605,7 +665,8 @@ void ProjectList::slotAddColorClip() { } -void ProjectList::slotAddSlideshowClip() { +void ProjectList::slotAddSlideshowClip() +{ if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; SlideshowClip *dia = new SlideshowClip(this); @@ -631,7 +692,8 @@ void ProjectList::slotAddSlideshowClip() { delete dia; } -void ProjectList::slotAddTitleClip() { +void ProjectList::slotAddTitleClip() +{ QString group; QString groupId; ProjectItem *item = static_cast (listView->currentItem()); @@ -649,7 +711,8 @@ void ProjectList::slotAddTitleClip() { m_doc->slotCreateTextClip(group, groupId); } -void ProjectList::setDocument(KdenliveDoc *doc) { +void ProjectList::setDocument(KdenliveDoc *doc) +{ listView->blockSignals(true); listView->clear(); emit clipSelected(NULL); @@ -678,7 +741,8 @@ void ProjectList::setDocument(KdenliveDoc *doc) { m_toolbar->setEnabled(true); } -QDomElement ProjectList::producersList() { +QDomElement ProjectList::producersList() +{ QDomDocument doc; QDomElement prods = doc.createElement("producerlist"); doc.appendChild(prods); @@ -692,32 +756,37 @@ QDomElement ProjectList::producersList() { return prods; } -void ProjectList::slotCheckForEmptyQueue() { +void ProjectList::slotCheckForEmptyQueue() +{ if (!m_refreshed && m_thumbnailQueue.isEmpty() && m_infoQueue.isEmpty()) { m_refreshed = true; emit loadingIsOver(); } else QTimer::singleShot(500, this, SLOT(slotCheckForEmptyQueue())); } -void ProjectList::requestClipThumbnail(const QString &id) { +void ProjectList::requestClipThumbnail(const QString &id) +{ m_thumbnailQueue.append(id); if (m_thumbnailQueue.count() == 1) QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail())); } -void ProjectList::slotProcessNextThumbnail() { +void ProjectList::slotProcessNextThumbnail() +{ if (m_thumbnailQueue.isEmpty()) { return; } slotRefreshClipThumbnail(m_thumbnailQueue.takeFirst(), false); } -void ProjectList::slotRefreshClipThumbnail(const QString &clipId, bool update) { +void ProjectList::slotRefreshClipThumbnail(const QString &clipId, bool update) +{ ProjectItem *item = getItemById(clipId); if (item) slotRefreshClipThumbnail(item, update); else slotProcessNextThumbnail(); } -void ProjectList::slotRefreshClipThumbnail(ProjectItem *item, bool update) { +void ProjectList::slotRefreshClipThumbnail(ProjectItem *item, bool update) +{ if (item) { if (!item->referencedClip()) return; int height = 50; @@ -736,7 +805,8 @@ void ProjectList::slotRefreshClipThumbnail(ProjectItem *item, bool update) { } } -void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata, bool replace) { +void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata, bool replace) +{ ProjectItem *item = getItemById(clipId); if (item && producer) { listView->blockSignals(true); @@ -750,7 +820,8 @@ void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Produce else listView->setEnabled(true); } -void ProjectList::slotReplyGetImage(const QString &clipId, const QPixmap &pix) { +void ProjectList::slotReplyGetImage(const QString &clipId, const QPixmap &pix) +{ ProjectItem *item = getItemById(clipId); if (item) { listView->blockSignals(true); @@ -760,7 +831,8 @@ void ProjectList::slotReplyGetImage(const QString &clipId, const QPixmap &pix) { } } -ProjectItem *ProjectList::getItemById(const QString &id) { +ProjectItem *ProjectList::getItemById(const QString &id) +{ ProjectItem *item; QTreeWidgetItemIterator it(listView); while (*it) { @@ -772,7 +844,8 @@ ProjectItem *ProjectList::getItemById(const QString &id) { return NULL; } -ProjectItem *ProjectList::getFolderItemById(const QString &id) { +ProjectItem *ProjectList::getFolderItemById(const QString &id) +{ ProjectItem *item; QTreeWidgetItemIterator it(listView); while (*it) { @@ -784,7 +857,8 @@ ProjectItem *ProjectList::getFolderItemById(const QString &id) { return NULL; } -void ProjectList::slotSelectClip(const QString &ix) { +void ProjectList::slotSelectClip(const QString &ix) +{ ProjectItem *clip = getItemById(ix); if (clip) { listView->setCurrentItem(clip);