]> git.sesse.net Git - kdenlive/commitdiff
start implementing folders in project view
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 7 Jan 2008 23:03:06 +0000 (23:03 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 7 Jan 2008 23:03:06 +0000 (23:03 +0000)
svn path=/branches/KDE4/; revision=1797

src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/projectitem.cpp
src/projectitem.h
src/projectlist.cpp
src/projectlist.h

index 95a81b304d4c959438393bada9fe01c55a7a137f..d372a33cdcd54d2e27fedbbfa2a4d987329daf49 100644 (file)
@@ -183,5 +183,10 @@ int KdenliveDoc::height()
   return m_height;
 }
 
+KUrl KdenliveDoc::url()
+{
+  return m_url;
+}
+
 #include "kdenlivedoc.moc"
 
index 246c4d1ba442d520c49bfb252dfe4de902bb68a8..4788639cddef3a18d60edd1f3c6c910aa60d26ab 100644 (file)
@@ -41,6 +41,7 @@ class KdenliveDoc:public QObject {
     double fps();
     int width();
     int height();
+    KUrl url();
     void setProducers(QDomElement doc);
     Timecode timecode();
     QDomDocument toXml();
index 7d9e238840a37e6153f8a5a3ee43a4b4e7319fc4..3efa1c4581655150345f4b7abcf926d499173a0f 100644 (file)
@@ -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);
   }
index a900404125810d5ad61e120d3bd23f6f9eb0e639..a5c4e9dec0b91de181a061fbb1b34135dfd913fd 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <KDebug>
 #include <KLocale>
+#include <KIcon>
 
 
 #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;
index 3422a5b7972ff56b1e9fe9a382c4464bb4b83b4c..72fa3a03abf03b3745036e2965bcb98976821338 100644 (file)
@@ -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
index a20b953351b68218a54e247f43014fc0baa4fdd0..b458053267660c4221bd268a6365efdd7b37da96 100644 (file)
@@ -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<<i18n("Thumbnail")<<i18n("Filename")<<i18n("Description");
   listView->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=: "<<name;
-  ProjectItem *item = new ProjectItem(listView, name, elem, clipId);
+  ProjectItem *item;
+  QString group = elem.attribute("group", QString::null);
+  if (!group.isEmpty()) {
+    // Clip is in a group
+    QList<QTreeWidgetItem *> groupList = listView->findItems(group, Qt::MatchExactly, 1);
+    ProjectItem *groupItem;
+    if (groupList.isEmpty())  {
+       QStringList groupName;
+       groupName<<QString::null<<group;
+       kDebug()<<"-------  CREATING NEW GRP: "<<groupName;
+       groupItem = new ProjectItem(listView, groupName);
+    }
+    else groupItem = (ProjectItem *) groupList.first();
+    item = new ProjectItem(groupItem, name, elem, clipId);
+  }
+  else item = new ProjectItem(listView, name, elem, clipId);
   if (!url.isEmpty()) {
     item->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: "<<i<<", :"<<e.attribute("id", "non")<<", NAME: "<<e.attribute("name", "non");
     if (!e.isNull()) addProducer(e);
   }
@@ -290,57 +275,40 @@ QDomElement ProjectList::producersList()
   QDomDocument doc;
   QDomElement prods = doc.createElement("producerlist");
   doc.appendChild(prods);
-  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);
-      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));
 }
 
 
index 7d8b390baa28c66d36318afb2235c9231c5e1300..042ed4d7e5cbd5d41cb371e06c90a57d0f84cfcf 100644 (file)
@@ -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();