#include <KLocale>
#include "addfoldercommand.h"
-#include "kdenlivedoc.h"
+#include "projectlist.h"
-AddFolderCommand::AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt)
- : m_doc(doc), m_name(folderName), m_id(clipId), m_doIt(doIt) {
+AddFolderCommand::AddFolderCommand(ProjectList *view, const QString folderName, const QString &clipId, bool doIt, QUndoCommand *parent) : QUndoCommand(parent), m_view(view), m_name(folderName), m_id(clipId), m_doIt(doIt) {
if (doIt) setText(i18n("Add folder"));
else setText(i18n("Delete folder"));
}
// virtual
void AddFolderCommand::undo() {
- if (m_doIt) m_doc->deleteFolder(m_name, m_id);
- else m_doc->addFolder(m_name, m_id, false);
+ if (m_doIt) m_view->slotAddFolder(m_name, m_id, true);
+ else m_view->slotAddFolder(m_name, m_id, false);
}
// virtual
void AddFolderCommand::redo() {
- if (m_doIt) m_doc->addFolder(m_name, m_id, false);
- else m_doc->deleteFolder(m_name, m_id);
+ if (m_doIt) m_view->slotAddFolder(m_name, m_id, false);
+ else m_view->slotAddFolder(m_name, m_id, true);
}
#include <QUndoCommand>
-class KdenliveDoc;
+class ProjectList;
class AddFolderCommand : public QUndoCommand {
public:
- AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt);
+ AddFolderCommand(ProjectList *view, const QString folderName, const QString &clipId, bool doIt, QUndoCommand *parent = 0);
virtual void undo();
virtual void redo();
private:
- KdenliveDoc *m_doc;
+ ProjectList *m_view;
QString m_name;
QString m_id;
bool m_doIt;
m_doc->setThumbsProgress(message, progress);
}
-QList <DocClipBase*> ClipManager::documentClipList() {
+QList <DocClipBase*> ClipManager::documentClipList() const {
return m_clipList;
}
+QMap <QString, QString> ClipManager::documentFolderList() const {
+ return m_folderList;
+}
+
void ClipManager::addClip(DocClipBase *clip) {
m_clipList.append(clip);
const QString id = clip->getId();
return m_doc->projectFolder().path();
}
+void ClipManager::addFolder(const QString &id, const QString &name) {
+ m_folderList.insert(id, name);
+}
-
+void ClipManager::deleteFolder(const QString &id) {
+ m_folderList.remove(id);
+}
\ No newline at end of file
void slotDeleteClip(const QString & clipId);
void setThumbsProgress(const QString &message, int progress);
void checkAudioThumbs();
- QList <DocClipBase*> documentClipList();
+ QList <DocClipBase*> documentClipList() const;
+ QMap <QString, QString> documentFolderList() const;
int getFreeClipId();
int getFreeFolderId();
int lastClipId() const;
void askForAudioThumb(const QString &id);
QString projectFolder() const;
void resetProducersList(QList <Mlt::Producer *> prods);
+ void addFolder(const QString&, const QString&);
+ void deleteFolder(const QString&);
public slots:
void updatePreviewSettings();
private: // Private attributes
/** the list of clips in the document */
QList <DocClipBase*> m_clipList;
+ QMap <QString, QString> m_folderList;
QList <QString> m_audioThumbsQueue;
/** the document undo stack*/
KdenliveDoc *m_doc;
#include <KLocale>
#include "editfoldercommand.h"
-#include "kdenlivedoc.h"
+#include "projectlist.h"
-EditFolderCommand::EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt)
- : m_doc(doc), m_name(newfolderName), m_oldname(oldfolderName), m_id(clipId), m_doIt(doIt) {
+EditFolderCommand::EditFolderCommand(ProjectList *view, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt, QUndoCommand *parent) : QUndoCommand(parent), m_view(view), m_name(newfolderName), m_oldname(oldfolderName), m_id(clipId), m_doIt(doIt) {
setText(i18n("Rename folder"));
}
// virtual
void EditFolderCommand::undo() {
- m_doc->addFolder(m_oldname, m_id, true);
+ m_view->slotAddFolder(m_oldname, m_id, false, true);
}
// virtual
void EditFolderCommand::redo() {
- if (m_doIt) m_doc->addFolder(m_name, m_id, true);
+ if (m_doIt) m_view->slotAddFolder(m_name, m_id, false, true);
m_doIt = true;
}
#include <QUndoCommand>
-class KdenliveDoc;
+class ProjectList;
class EditFolderCommand : public QUndoCommand {
public:
- EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt);
+ EditFolderCommand(ProjectList *view, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt, QUndoCommand *parent = 0);
virtual void undo();
virtual void redo();
private:
- KdenliveDoc *m_doc;
+ ProjectList *m_view;
QString m_name;
QString m_oldname;
QString m_id;
#include "kdenlivesettings.h"
#include "renderer.h"
#include "clipmanager.h"
-#include "addfoldercommand.h"
-#include "editfoldercommand.h"
#include "titlewidget.h"
#include "mainwindow.h"
const int max = producers.count();
const int infomax = infoproducers.count();
+ QDomNodeList folders = m_document.elementsByTagName("folder");
+ for (int i = 0; i < folders.count(); i++) {
+ e = folders.item(i).cloneNode().toElement();
+ m_clipManager->addFolder(e.attribute("id"), e.attribute("name"));
+ }
+
if (max > 0) {
m_documentLoadingStep = 100.0 / (max + infomax + m_document.elementsByTagName("entry").count());
parent->slotGotProgressInfo(i18n("Loading project clips"), (int) m_documentLoadingProgress);
addedXml.setAttribute("tracks", getTracksInfo());
addedXml.setAttribute("zoom", m_zoom);
+ // save project folders
+ QMap <QString, QString> folderlist = m_clipManager->documentFolderList();
+
+ QMapIterator<QString, QString> f(folderlist);
+ while (f.hasNext()) {
+ f.next();
+ QDomElement folder = sceneList.createElement("folder");
+ folder.setAttribute("id", f.key());
+ folder.setAttribute("name", f.value());
+ addedXml.appendChild(folder);
+ }
+
+ // Save project clips
QDomElement e;
QList <DocClipBase*> list = m_clipManager->documentClipList();
for (int i = 0; i < list.count(); i++) {
}
}
-void KdenliveDoc::addFolder(const QString foldername, const QString &clipId, bool edit) {
- emit addProjectFolder(foldername, clipId, false, edit);
-}
-
-void KdenliveDoc::deleteFolder(const QString foldername, const QString &clipId) {
- emit addProjectFolder(foldername, clipId, true);
-}
-
void KdenliveDoc::deleteProjectClip(QList <QString> ids) {
for (int i = 0; i < ids.size(); ++i) {
emit deleteTimelineClip(ids.at(i));
setModified(true);
}
-void KdenliveDoc::deleteProjectFolder(QMap <QString, QString> map) {
- QMapIterator<QString, QString> i(map);
- while (i.hasNext()) {
- i.next();
- slotDeleteFolder(i.key(), i.value());
- }
- setModified(true);
-}
-
void KdenliveDoc::deleteClip(const QString &clipId) {
emit signalDeleteProjectClip(clipId);
m_clipManager->deleteClip(clipId);
setModified(true);
}
-void KdenliveDoc::slotAddFolder(const QString folderName) {
- AddFolderCommand *command = new AddFolderCommand(this, folderName, QString::number(m_clipManager->getFreeFolderId()), true);
- commandStack()->push(command);
- setModified(true);
-}
-
-void KdenliveDoc::slotDeleteFolder(const QString folderName, const QString &id) {
- AddFolderCommand *command = new AddFolderCommand(this, folderName, id, false);
- commandStack()->push(command);
- setModified(true);
-}
-
-void KdenliveDoc::slotEditFolder(const QString newfolderName, const QString oldfolderName, const QString &clipId) {
- EditFolderCommand *command = new EditFolderCommand(this, newfolderName, oldfolderName, clipId, false);
- commandStack()->push(command);
- setModified(true);
-}
-
const QString&KdenliveDoc::getFreeClipId() {
return QString::number(m_clipManager->getFreeClipId());
}
ClipManager *clipManager();
void addClip(QDomElement elem, QString clipId, bool createClipItem = true);
void addClipInfo(QDomElement elem, QDomElement orig, QString clipId);
- void addFolder(const QString foldername, const QString &clipId, bool edit);
- void deleteFolder(const QString foldername, const QString &clipId);
void slotAddClipFile(const KUrl url, const QString group, const QString &groupId = QString());
void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId = QString());
- void slotAddFolder(const QString folderName);
- void slotDeleteFolder(const QString folderName, const QString &id);
- void slotEditFolder(const QString folderName, const QString oldfolderName, const QString &clipId);
void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId = QString());
void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId = QString());
void deleteClip(const QString &clipId);
DocClipBase *getBaseClip(const QString &clipId);
void updateClip(const QString &id);
void deleteProjectClip(QList <QString> ids);
- void deleteProjectFolder(QMap <QString, QString> map);
/** Inform application of the audio thumbnails generation progress */
void setThumbsProgress(const QString &message, int progress);
QString profilePath() const;
signals:
void addProjectClip(DocClipBase *, bool getInfo = true);
- void addProjectFolder(const QString, const QString &, bool, bool edit = false);
void signalDeleteProjectClip(const QString &);
void updateClipDisplay(const QString&);
void deleteTimelineClip(const QString&);
disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool)));
- disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool)));
disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &)));
disconnect(m_activeDocument, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &)));
disconnect(m_activeDocument, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &)));
connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int)));
connect(doc, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool)));
- connect(doc, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool)));
connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &)));
connect(doc, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &)));
connect(doc, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &)));
#include "projectlist.h"
#include "projectitem.h"
+#include "addfoldercommand.h"
#include "kdenlivesettings.h"
#include "slideshowclip.h"
#include "ui_colorclip_ui.h"
#include "titlewidget.h"
-
-
#include "definitions.h"
#include "clipmanager.h"
#include "docclipbase.h"
#include "kthumb.h"
#include "projectlistview.h"
#include "editclipcommand.h"
+#include "editfoldercommand.h"
ProjectList::ProjectList(QWidget *parent)
: QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL), m_selectedItem(NULL), m_infoQueue(QMap <QString, QDomElement> ()), m_thumbnailQueue(QList <QString> ()), m_refreshed(false) {
}
} else if (column == 1) {
if (clip->isGroup()) {
- m_doc->slotEditFolder(item->text(1), clip->groupName(), clip->clipId());
+ editFolder(item->text(1), clip->groupName(), clip->clipId());
clip->setGroupName(item->text(1));
+ m_doc->clipManager()->addFolder(clip->clipId(), item->text(1));
const int children = item->childCount();
for (int i = 0; i < children; i++) {
ProjectItem *child = static_cast <ProjectItem *>(item->child(i));
}
}
if (!ids.isEmpty()) m_doc->deleteProjectClip(ids);
- if (!folderids.isEmpty()) m_doc->deleteProjectFolder(folderids);
+ if (!folderids.isEmpty()) deleteProjectFolder(folderids);
if (listView->topLevelItemCount() == 0) {
m_editAction->setEnabled(false);
m_deleteAction->setEnabled(false);
}
}
-void ProjectList::slotAddFolder() {
- // QString folderName = KInputDialog::getText(i18n("New Folder"), i18n("Enter new folder name: "));
- // if (folderName.isEmpty()) return;
- m_doc->slotAddFolder(i18n("Folder")); //folderName);
+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() {
+ 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) {
if (remove) {
- ProjectItem *item;
- QTreeWidgetItemIterator it(listView);
- while (*it) {
- item = static_cast <ProjectItem *>(*it);
- if (item->isGroup() && item->clipId() == clipId) {
- delete item;
- break;
- }
- ++it;
+ ProjectItem *item = getFolderItemById(clipId);
+ if (item) {
+ m_doc->clipManager()->deleteFolder(clipId);
+ delete item;
}
} else {
if (edit) {
- ProjectItem *item;
+ ProjectItem *item = getFolderItemById(clipId);
QTreeWidgetItemIterator it(listView);
- while (*it) {
- item = static_cast <ProjectItem *>(*it);
- if (item->isGroup() && item->clipId() == clipId) {
- listView->blockSignals(true);
- item->setGroupName(foldername);
- listView->blockSignals(false);
- const int children = item->childCount();
- for (int i = 0; i < children; i++) {
- ProjectItem *child = static_cast <ProjectItem *>(item->child(i));
- child->setProperty("groupname", foldername);
- }
- break;
+ if (item) {
+ listView->blockSignals(true);
+ item->setGroupName(foldername);
+ listView->blockSignals(false);
+ m_doc->clipManager()->addFolder(clipId, foldername);
+ const int children = item->childCount();
+ for (int i = 0; i < children; i++) {
+ ProjectItem *child = static_cast <ProjectItem *>(item->child(i));
+ child->setProperty("groupname", foldername);
}
- ++it;
}
} else {
QStringList text;
text << QString() << foldername;
+ listView->blockSignals(true);
(void) new ProjectItem(listView, text, clipId);
+ m_doc->clipManager()->addFolder(clipId, foldername);
+ listView->blockSignals(false);
}
}
}
+
+
+void ProjectList::deleteProjectFolder(QMap <QString, QString> map) {
+ QMapIterator<QString, QString> i(map);
+ QUndoCommand *delCommand = new QUndoCommand();
+ delCommand->setText(i18n("Delete Folder"));
+ while (i.hasNext()) {
+ i.next();
+ new AddFolderCommand(this, i.key(), i.value(), false, delCommand);
+ }
+ m_commandStack->push(delCommand);
+ m_doc->setModified(true);
+}
+
void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) {
if (getProperties) listView->setEnabled(false);
listView->blockSignals(true);
m_thumbnailQueue.clear();
m_infoQueue.clear();
m_refreshed = false;
+ QMap <QString, QString> flist = doc->clipManager()->documentFolderList();
+ QMapIterator<QString, QString> f(flist);
+ while (f.hasNext()) {
+ f.next();
+ (void) new ProjectItem(listView, QStringList() << QString() << f.value(), f.key());
+ }
+
QList <DocClipBase*> list = doc->clipManager()->documentClipList();
for (int i = 0; i < list.count(); i++) {
slotAddClip(list.at(i), false);
void slotSelectClip(const QString &ix);
void slotRemoveClip();
void slotAddClip(KUrl givenUrl = KUrl(), QString group = QString());
+ void slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit = false);
private:
ProjectListView *listView;
void requestClipInfo(const QDomElement xml, const QString id);
QList <QString> m_thumbnailQueue;
void requestClipThumbnail(const QString &id);
+ void deleteProjectFolder(QMap <QString, QString> map);
+ void editFolder(const QString folderName, const QString oldfolderName, const QString &clipId);
private slots:
void slotEditClip();
void slotAddTitleClip();
void slotContextMenu(const QPoint &pos, QTreeWidgetItem *);
void slotAddFolder();
- void slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit);
/** This is triggered when a clip description has been modified */
void slotItemEdited(QTreeWidgetItem *item, int column);
void slotUpdateClipProperties(ProjectItem *item, QMap <QString, QString> properties);