From: Jean-Baptiste Mardelle Date: Mon, 7 Jan 2008 23:03:06 +0000 (+0000) Subject: start implementing folders in project view X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=afd4cf52b55321f22507425b5273589d9228d7be;p=kdenlive start implementing folders in project view svn path=/branches/KDE4/; revision=1797 --- diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 95a81b30..d372a33c 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -183,5 +183,10 @@ int KdenliveDoc::height() return m_height; } +KUrl KdenliveDoc::url() +{ + return m_url; +} + #include "kdenlivedoc.moc" diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 246c4d1b..4788639c 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -41,6 +41,7 @@ class KdenliveDoc:public QObject { double fps(); int width(); int height(); + KUrl url(); void setProducers(QDomElement doc); Timecode timecode(); QDomDocument toXml(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7d9e2388..3efa1c45 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -220,14 +220,15 @@ void MainWindow::openFile(const QString &inputFileName) //new KdenliveDoc *doc = new KdenliveDoc(KUrl(inputFileName), 25, 720, 576); TrackView *trackView = new TrackView(doc); m_timelineArea->setCurrentIndex(m_timelineArea->addTab(trackView, QIcon(), doc->documentName())); + m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), doc->url().path()); connectDocument(trackView, doc); - } void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //changed { //m_projectMonitor->stop(); if (m_activeDocument) { + if (m_activeDocument == doc) return; m_activeDocument->setProducers(m_projectList->producersList()); m_activeDocument->setRenderer(NULL); } diff --git a/src/projectitem.cpp b/src/projectitem.cpp index a9004041..a5c4e9de 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -6,6 +6,7 @@ #include #include +#include #include "projectitem.h" @@ -17,8 +18,9 @@ const int ClipTypeRole = NameRole + 3; ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, QDomElement xml, int clipId) - : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_element(xml), m_clipType(DocClipBase::NONE), m_clipId(clipId) + : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(false) { + m_element = xml.cloneNode().toElement(); setSizeHint(0, QSize(65, 45)); setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); if (!m_element.isNull()) { @@ -29,7 +31,30 @@ ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, QDom slotSetToolTip(); } } - +} + +ProjectItem::ProjectItem(QTreeWidgetItem * parent, const QStringList & strings, QDomElement xml, int clipId) + : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(false) +{ + m_element = xml.cloneNode().toElement(); + setSizeHint(0, QSize(65, 45)); + setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); + if (!m_element.isNull()) { + m_element.setAttribute("id", clipId); + QString cType = m_element.attribute("type", QString::null); + if (!cType.isEmpty()) { + m_clipType = (DocClipBase::CLIPTYPE) cType.toInt(); + slotSetToolTip(); + } + } +} + +ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings) + : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_element(QDomElement()), m_clipType(DocClipBase::NONE), m_clipId(-1), m_isGroup(true) +{ + setSizeHint(0, QSize(65, 45)); + setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled); + setIcon(0, KIcon("folder")); } ProjectItem::~ProjectItem() @@ -41,6 +66,12 @@ int ProjectItem::clipId() return m_clipId; } +bool ProjectItem::isGroup() +{ + return m_isGroup; +} + + QStringList ProjectItem::names() { QStringList result; diff --git a/src/projectitem.h b/src/projectitem.h index 3422a5b7..72fa3a03 100644 --- a/src/projectitem.h +++ b/src/projectitem.h @@ -13,12 +13,15 @@ class ProjectItem : public QTreeWidgetItem { public: ProjectItem(QTreeWidget * parent, const QStringList & strings, QDomElement xml, int clipId); + ProjectItem(QTreeWidgetItem * parent, const QStringList & strings, QDomElement xml, int clipId); + ProjectItem(QTreeWidget * parent, const QStringList & strings); ~ProjectItem(); QDomElement toXml(); void setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata); int clipId(); QStringList names(); + bool isGroup(); private: QDomElement m_element; @@ -27,7 +30,7 @@ class ProjectItem : public QTreeWidgetItem DocClipBase::CLIPTYPE m_clipType; int m_clipId; void slotSetToolTip(); - + bool m_isGroup; }; #endif diff --git a/src/projectlist.cpp b/src/projectlist.cpp index a20b9533..b4580532 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -87,8 +87,8 @@ ProjectList::ProjectList(QWidget *parent) addButton->setPopupMode(QToolButton::MenuButtonPopup); m_toolbar->addWidget (addButton); - QAction *addClip = addMenu->addAction (KIcon("document-new"), i18n("Add Clip")); - connect(addClip, SIGNAL(triggered()), this, SLOT(slotAddClip())); + QAction *addClipButton = addMenu->addAction (KIcon("document-new"), i18n("Add Clip")); + connect(addClipButton, SIGNAL(triggered()), this, SLOT(slotAddClip())); QAction *addColorClip = addMenu->addAction (KIcon("document-new"), i18n("Add Color Clip")); connect(addColorClip, SIGNAL(triggered()), this, SLOT(slotAddColorClip())); @@ -99,7 +99,7 @@ ProjectList::ProjectList(QWidget *parent) QAction *editClip = m_toolbar->addAction (KIcon("document-properties"), i18n("Edit Clip")); connect(editClip, SIGNAL(triggered()), this, SLOT(slotEditClip())); - addButton->setDefaultAction( addClip ); + addButton->setDefaultAction( addClipButton ); layout->addWidget( m_toolbar ); layout->addWidget( listView ); @@ -109,7 +109,7 @@ ProjectList::ProjectList(QWidget *parent) searchView->setTreeWidget(listView); listView->setColumnCount(3); listView->setDragEnabled(true); - listView->setDragDropMode(QAbstractItemView::DragOnly); + listView->setDragDropMode(QAbstractItemView::DragDrop); QStringList headers; headers<setHeaderLabels(headers); @@ -133,7 +133,7 @@ void ProjectList::setRenderer(Render *projectRender) void ProjectList::slotClipSelected() { ProjectItem *item = (ProjectItem*) listView->currentItem(); - if (item) emit clipSelected(item->toXml()); + if (item && !item->isGroup()) emit clipSelected(item->toXml()); } void ProjectList::slotEditClip() @@ -152,25 +152,29 @@ void ProjectList::slotRemoveClip() void ProjectList::selectItemById(const int clipId) { - QTreeWidgetItem *parent = 0; - int count = - parent ? parent->childCount() : listView->topLevelItemCount(); - - for (int i = 0; i < count; i++) - { - QTreeWidgetItem *item = - parent ? parent->child(i) : listView->topLevelItem(i); - if (((ProjectItem *)item)->clipId() == clipId) { - listView->setCurrentItem(item); - break; - } - } + ProjectItem *item = getItemById(clipId); + if (item) listView->setCurrentItem(item); } void ProjectList::addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url) { kDebug()<<"///////// ADDING VCLIP=: "< groupList = listView->findItems(group, Qt::MatchExactly, 1); + ProjectItem *groupItem; + if (groupList.isEmpty()) { + QStringList groupName; + groupName<setData(1, FullPathRole, url.path()); } @@ -186,19 +190,8 @@ void ProjectList::addClip(const QStringList &name, const QDomElement &elem, cons void ProjectList::deleteClip(const int clipId) { - QTreeWidgetItem *parent = 0; - int count = - parent ? parent->childCount() : listView->topLevelItemCount(); - - for (int i = 0; i < count; i++) - { - QTreeWidgetItem *item = - parent ? parent->child(i) : listView->topLevelItem(i); - if (((ProjectItem *)item)->clipId() == clipId) { - delete item; - break; - } - } + ProjectItem *item = getItemById(clipId); + if (item) delete item; } void ProjectList::slotAddClip() @@ -255,14 +248,6 @@ void ProjectList::slotAddColorClip() } delete dia_ui; delete dia; - /*for (it = list.begin(); it != list.end(); it++) { - QStringList itemEntry; - itemEntry.append(QString::null); - itemEntry.append((*it).fileName()); - ProjectItem *item = new ProjectItem(listView, itemEntry, QDomElement()); - item->setData(1, FullPathRole, (*it).path()); - emit getFileProperties((*it), 0); - }*/ } void ProjectList::setDocument(KdenliveDoc *doc) @@ -276,7 +261,7 @@ void ProjectList::setDocument(KdenliveDoc *doc) listView->clear(); for (int i = 0; i < ct ; i++) { - QDomElement e = prods.item(i).cloneNode().toElement(); + QDomElement e = prods.item(i).toElement(); kDebug()<<"// IMPORT: "<childCount() : listView->topLevelItemCount(); - - for (int i = 0; i < count; i++) - { - QTreeWidgetItem *item = - parent ? parent->child(i) : listView->topLevelItem(i); - prods.appendChild(doc.importNode(((ProjectItem *)item)->toXml(), true)); - } + QTreeWidgetItemIterator it(listView); + while (*it) { + if (!((ProjectItem *)(*it))->isGroup()) + prods.appendChild(doc.importNode(((ProjectItem *)(*it))->toXml(), true)); + ++it; + } return prods; } void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) { - QTreeWidgetItem *parent = 0; - int count = - parent ? parent->childCount() : listView->topLevelItemCount(); - - for (int i = 0; i < count; i++) - { - QTreeWidgetItem *item = - parent ? parent->child(i) : listView->topLevelItem(i); - - if (((ProjectItem *)item)->clipId() == clipId) { - ((ProjectItem *) item)->setProperties(properties, metadata); - break; - } - } + ProjectItem *item = getItemById(clipId); + if (item) item->setProperties(properties, metadata); } void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) { - QTreeWidgetItem *parent = 0; - int count = - parent ? parent->childCount() : listView->topLevelItemCount(); - - for (int i = 0; i < count; i++) - { - QTreeWidgetItem *item = - parent ? parent->child(i) : listView->topLevelItem(i); + ProjectItem *item = getItemById(clipId); + if (item) item->setIcon(0, pix); +} - if (((ProjectItem *)item)->clipId() == clipId) { - item->setIcon(0, pix); - break; - } - } +ProjectItem *ProjectList::getItemById(int id) +{ + QTreeWidgetItemIterator it(listView); + while (*it) { + if (((ProjectItem *)(*it))->clipId() == id) + break; + ++it; + } + return ((ProjectItem *)(*it)); } diff --git a/src/projectlist.h b/src/projectlist.h index 7d8b390b..042ed4d7 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -13,6 +13,8 @@ #include "renderer.h" #include "timecode.h" +class ProjectItem; + class ProjectList : public QWidget { Q_OBJECT @@ -43,6 +45,7 @@ class ProjectList : public QWidget KUndoStack *m_commandStack; int m_clipIdCounter; void selectItemById(const int clipId); + ProjectItem *getItemById(int id); private slots: void slotAddClip();