]> git.sesse.net Git - kdenlive/commitdiff
project tree view: Add drag and drop support
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 16 Jan 2008 10:47:26 +0000 (10:47 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 16 Jan 2008 10:47:26 +0000 (10:47 +0000)
svn path=/branches/KDE4/; revision=1802

src/addclipcommand.cpp
src/addclipcommand.h
src/projectitem.cpp
src/projectitem.h
src/projectlist.cpp
src/projectlist.h
src/projectlistview.cpp
src/projectlistview.h

index 2121c3db58169731638ee792b25626670fa9fb9c..0242f69410a0cd238c17757e253a314f0731a1c8 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "addclipcommand.h"
 
-AddClipCommand::AddClipCommand(ProjectList *list, const QStringList &names, const QDomElement &xml, const int id, const KUrl &url, bool doIt)
-         : m_list(list), m_names(names), m_xml(xml), m_id(id), m_url(url), m_doIt(doIt) {
+AddClipCommand::AddClipCommand(ProjectList *list, const QStringList &names, const QDomElement &xml, const int id, const KUrl &url, const QString &group, bool doIt)
+         : m_list(list), m_names(names), m_xml(xml), m_id(id), m_url(url), m_group(group), m_doIt(doIt) {
            if (doIt) setText(i18n("Add clip"));
            else setText(i18n("Delete clip"));
          }
@@ -32,14 +32,14 @@ void AddClipCommand::undo()
   if (!m_list) kDebug()<<"----  ERROR, NO LIST FOR undoing action";
 kDebug()<<"----  undoing action";
   if (m_doIt) m_list->deleteClip(m_id);
-  else m_list->addClip(m_names, m_xml, m_id, m_url);
+  else m_list->addClip(m_names, m_xml, m_id, m_url, m_group);
 }
 // virtual 
 void AddClipCommand::redo()
 {
   if (!m_list) kDebug()<<"----  ERROR, NO LIST FOR redoing action";
 kDebug()<<"----  redoing action";
-  if (m_doIt) m_list->addClip(m_names, m_xml, m_id, m_url);
+  if (m_doIt) m_list->addClip(m_names, m_xml, m_id, m_url, m_group);
   else m_list->deleteClip(m_id);
 }
 
index 2fb455bd80b017736cf78cf7a6dba1d42bcdf0d3..705815dd5fbbbc4ea5d36c2b68e47b128569d829 100644 (file)
@@ -29,7 +29,7 @@
 class AddClipCommand : public QUndoCommand
  {
  public:
-     AddClipCommand(ProjectList *list, const QStringList &names, const QDomElement &xml, const int id, const KUrl &url, bool doIt);
+     AddClipCommand(ProjectList *list, const QStringList &names, const QDomElement &xml, const int id, const KUrl &url, const QString &group, bool doIt);
 
     virtual void undo();
     virtual void redo();
@@ -41,6 +41,7 @@ class AddClipCommand : public QUndoCommand
      int m_id;
      KUrl m_url;
      bool m_doIt;
+     QString m_group;
  };
 
 #endif
index bcdac14a94dc2fdc6af92f96700dc890c4b93d2d..db4c4ca7f76d4411ab7b37a7eb676b80a1b98ea0 100644 (file)
@@ -68,8 +68,8 @@ ProjectItem::ProjectItem(QTreeWidgetItem * parent, const QStringList & strings,
   }
 }
 
-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)
+ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, int clipId)
+    : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_element(QDomElement()), m_clipType(DocClipBase::NONE), m_clipId(clipId), m_isGroup(true)
 {
   setSizeHint(0, QSize(65, 45));
   setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
@@ -80,18 +80,39 @@ ProjectItem::~ProjectItem()
 {
 }
 
-int ProjectItem::clipId()
+ProjectItem *ProjectItem::clone() const
+{
+  ProjectItem *item = (ProjectItem *) this->QTreeWidgetItem::clone();
+  /*if (isGroup())
+  {
+    item = new ProjectItem(new QTreeWidget(), names(), clipId());
+  }  
+  else {
+    if (parent())
+      item = new ProjectItem(new QTreeWidgetItem(), names(), toXml().cloneNode().toElement(), clipId());
+    else 
+      item = new ProjectItem(new QTreeWidget(), names(), toXml().cloneNode().toElement(), clipId());
+  }*/
+  return item;
+}
+
+int ProjectItem::clipId() const
 {
   return m_clipId;
 }
 
-bool ProjectItem::isGroup()
+bool ProjectItem::isGroup() const
 {
   return m_isGroup;
 }
 
+const QString &ProjectItem::groupName() const
+{
+  if (isGroup()) return text(1);
+  else return QString::null;
+}
 
-QStringList ProjectItem::names()
+QStringList ProjectItem::names() const
 {
   QStringList result;
   result.append(text(0));
@@ -100,7 +121,7 @@ QStringList ProjectItem::names()
   return result;
 }
 
-QDomElement ProjectItem::toXml()
+QDomElement ProjectItem::toXml() const
 {
     return m_element;
 }
index 34d39f9d813f6600cf12b5aed68b01c68676e124..23d0acf203709bcc2e558246459ba2a4c4bc478f 100644 (file)
@@ -34,14 +34,16 @@ 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(QTreeWidget * parent, const QStringList & strings, int clipId);
     virtual ~ProjectItem();
-    QDomElement toXml();
+    QDomElement toXml() const;
 
     void setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata);
-    int clipId();
-    QStringList names();
-    bool isGroup();
+    int clipId() const;
+    QStringList names() const;
+    bool isGroup() const;
+    const QString &groupName() const;
+    virtual ProjectItem *clone() const;
 
   private:
     QDomElement m_element;
index f6c33a5ac1b311ca551ffd58b5baef16fa75994d..f4a9111528565794509de969dbf5249c3af32367 100644 (file)
@@ -28,6 +28,7 @@
 #include <KAction>
 #include <KLocale>
 #include <KFileDialog>
+#include <KInputDialog>
 #include <nepomuk/resourcemanager.h>
 #include <kio/netaccess.h>
 
@@ -107,7 +108,7 @@ ProjectList::ProjectList(QWidget *parent)
   addButton->setMenu( addMenu );
   addButton->setPopupMode(QToolButton::MenuButtonPopup);
   m_toolbar->addWidget (addButton);
-  
+
   QAction *addClipButton = addMenu->addAction (KIcon("document-new"), i18n("Add Clip"));
   connect(addClipButton, SIGNAL(triggered()), this, SLOT(slotAddClip()));
 
@@ -120,6 +121,9 @@ ProjectList::ProjectList(QWidget *parent)
   m_editAction = m_toolbar->addAction (KIcon("document-properties"), i18n("Edit Clip"));
   connect(m_editAction, SIGNAL(triggered()), this, SLOT(slotEditClip()));
 
+  QAction *addFolderButton = addMenu->addAction (KIcon("folder-new"), i18n("Create Folder"));
+  connect(addFolderButton, SIGNAL(triggered()), this, SLOT(slotAddFolder()));
+
   addButton->setDefaultAction( addClipButton );
 
   layout->addWidget( m_toolbar );
@@ -129,8 +133,6 @@ ProjectList::ProjectList(QWidget *parent)
 
   searchView->setTreeWidget(listView);
   listView->setColumnCount(3);
-  listView->setDragEnabled(true);
-  listView->setDragDropMode(QAbstractItemView::DragDrop);
   QStringList headers;
   headers<<i18n("Thumbnail")<<i18n("Filename")<<i18n("Description");
   listView->setHeaderLabels(headers);
@@ -141,11 +143,13 @@ ProjectList::ProjectList(QWidget *parent)
   m_menu->addAction(addColorClip);
   m_menu->addAction(m_editAction);
   m_menu->addAction(m_deleteAction);
+  m_menu->addAction(addFolderButton);
   m_menu->insertSeparator(m_deleteAction);
 
   connect(listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected()));
   connect(listView, SIGNAL(requestMenu ( const QPoint &, QTreeWidgetItem * )), this, SLOT(slotContextMenu(const QPoint &, QTreeWidgetItem *)));
   connect(listView, SIGNAL(addClip ()), this, SLOT(slotAddClip()));
+  connect(listView, SIGNAL(addClip (QUrl, const QString &)), this, SLOT(slotAddClip(QUrl, const QString &)));
 
 
   listView->setItemDelegate(new ItemDelegate(listView));
@@ -199,7 +203,7 @@ void ProjectList::slotRemoveClip()
   if (!m_commandStack) kDebug()<<"!!!!!!!!!!!!!!!!  NO CMD STK";
   if (!listView->currentItem()) return;
   ProjectItem *item = ((ProjectItem *)listView->currentItem());
-  AddClipCommand *command = new AddClipCommand(this, item->names(), item->toXml(), item->clipId(), KUrl(item->data(1, FullPathRole).toString()), false);
+  AddClipCommand *command = new AddClipCommand(this, item->names(), item->toXml(), item->clipId(), KUrl(item->data(1, FullPathRole).toString()), item->groupName(), false);
   m_commandStack->push(command);
 
 }
@@ -210,24 +214,36 @@ void ProjectList::selectItemById(const int clipId)
   if (item) listView->setCurrentItem(item);
 }
 
-void ProjectList::addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url, int parentId)
+void ProjectList::addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url, const QString &group, int parentId)
 {
   kDebug()<<"/////////  ADDING VCLIP=: "<<name;
   ProjectItem *item;
   ProjectItem *groupItem = NULL;
-  QString group = elem.attribute("group", QString::null);
+  QString groupName;
+  if (group.isEmpty()) groupName = elem.attribute("group", QString::null);
+  else groupName = group;
+  if (elem.isNull() && url.isEmpty()) {
+    // this is a folder
+    groupName = name.at(1);
+    QList<QTreeWidgetItem *> groupList = listView->findItems(groupName, Qt::MatchExactly, 1);
+    if (groupList.isEmpty())  {
+       (void) new ProjectItem(listView, name, clipId);
+    }
+    return;
+  }
+
   if (parentId != -1) {
     groupItem = getItemById(parentId);
   }
-  else if (!group.isEmpty()) {
+  else if (!groupName.isEmpty()) {
     // Clip is in a group
-    QList<QTreeWidgetItem *> groupList = listView->findItems(group, Qt::MatchExactly, 1);
+    QList<QTreeWidgetItem *> groupList = listView->findItems(groupName, Qt::MatchExactly, 1);
 
     if (groupList.isEmpty())  {
-       QStringList groupName;
-       groupName<<QString::null<<group;
-       kDebug()<<"-------  CREATING NEW GRP: "<<groupName;
-       groupItem = new ProjectItem(listView, groupName);
+       QStringList itemName;
+       itemName<<QString::null<<groupName;
+       kDebug()<<"-------  CREATING NEW GRP: "<<itemName;
+       groupItem = new ProjectItem(listView, itemName, m_clipIdCounter++);
     }
     else groupItem = (ProjectItem *) groupList.first();
   }
@@ -280,10 +296,24 @@ void ProjectList::deleteClip(const int clipId)
   if (item) delete item;
 }
 
-void ProjectList::slotAddClip()
+void ProjectList::slotAddFolder()
+{
+  QString folderName = KInputDialog::getText(i18n("New Folder"), i18n("Enter new folder name: "));
+  if (folderName.isEmpty()) return;
+  QStringList itemEntry;
+  itemEntry.append(QString::null);
+  itemEntry.append(folderName);
+  AddClipCommand *command = new AddClipCommand(this, itemEntry, QDomElement(), m_clipIdCounter++, KUrl(), folderName, true);
+  m_commandStack->push(command);
+}
+
+void ProjectList::slotAddClip(QUrl givenUrl, const QString &group)
 {
   if (!m_commandStack) kDebug()<<"!!!!!!!!!!!!!!!!  NO CMD STK";
-  KUrl::List 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/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");
+  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/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 (list.isEmpty()) return;
   KUrl::List::Iterator it;
   KUrl url;
@@ -293,7 +323,7 @@ void ProjectList::slotAddClip()
       QStringList itemEntry;
       itemEntry.append(QString::null);
       itemEntry.append((*it).fileName());
-      AddClipCommand *command = new AddClipCommand(this, itemEntry, QDomElement(), m_clipIdCounter++, *it, true);
+      AddClipCommand *command = new AddClipCommand(this, itemEntry, QDomElement(), m_clipIdCounter++, *it, group, true);
       m_commandStack->push(command);
       //item = new ProjectItem(listView, itemEntry, QDomElement());
       //item->setData(1, FullPathRole, (*it).path());
@@ -324,7 +354,7 @@ void ProjectList::slotAddColorClip()
     QStringList itemEntry;
     itemEntry.append(QString::null);
     itemEntry.append(dia_ui->clip_name->text());
-    AddClipCommand *command = new AddClipCommand(this, itemEntry, element, m_clipIdCounter++, KUrl(), true);
+    AddClipCommand *command = new AddClipCommand(this, itemEntry, element, m_clipIdCounter++, KUrl(), QString::null, true);
     m_commandStack->push(command);
     // ProjectItem *item = new ProjectItem(listView, itemEntry, element, m_clipIdCounter++);
     /*QPixmap pix(60, 40);
@@ -412,6 +442,7 @@ void ProjectList::addProducer(QDomElement producer, int parentId)
 
   //kDebug()<<"//////  ADDING PRODUCER:\n "<<doc.toString()<<"\n+++++++++++++++++";
   int id = producer.attribute("id").toInt();
+  QString groupName = producer.attribute("group");
   if (id >= m_clipIdCounter) m_clipIdCounter = id + 1;
   else if (id == 0) id = m_clipIdCounter++;
 
@@ -422,7 +453,7 @@ void ProjectList::addProducer(QDomElement producer, int parentId)
       QStringList itemEntry;
       itemEntry.append(QString::null);
       itemEntry.append(resource.fileName());
-      addClip(itemEntry, producer, id, resource, parentId);
+      addClip(itemEntry, producer, id, resource, groupName, parentId);
       /*AddClipCommand *command = new AddClipCommand(this, itemEntry, producer, id, resource, true);
       m_commandStack->push(command);*/
 
@@ -441,7 +472,7 @@ void ProjectList::addProducer(QDomElement producer, int parentId)
     QStringList itemEntry;
     itemEntry.append(QString::null);
     itemEntry.append(producer.attribute("name", i18n("Color clip")));
-    addClip(itemEntry, producer, id, KUrl(), parentId);
+    addClip(itemEntry, producer, id, KUrl(), groupName, parentId);
     /*AddClipCommand *command = new AddClipCommand(this, itemEntry, producer, id, KUrl(), true);
     m_commandStack->push(command);*/
     //ProjectItem *item = new ProjectItem(listView, itemEntry, producer);
index 8e555fb99dbf6c6588e2cf7d3e5144f20aa53433..fc59cd42d04ad54b75a256207b27bf8ce534e8fa 100644 (file)
@@ -47,7 +47,7 @@ class ProjectList : public QWidget
     QDomElement producersList();
     void setRenderer(Render *projectRender);
 
-    void addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url = KUrl(), int parentId = -1);
+    void addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url = KUrl(), const QString &group = QString::null, int parentId = -1);
     void deleteClip(const int clipId);
 
   public slots:
@@ -73,13 +73,14 @@ class ProjectList : public QWidget
     QAction *m_deleteAction;
 
   private slots:
-    void slotAddClip();
+    void slotAddClip(QUrl givenUrl = QUrl(), const QString &group = QString::null);
     void slotRemoveClip();
     void slotEditClip();
     void slotClipSelected();
     void slotAddColorClip();
     void slotEditClip(QTreeWidgetItem *, int);
     void slotContextMenu( const QPoint &pos, QTreeWidgetItem * );
+    void slotAddFolder();
     //void slotShowMenu(const QPoint &pos);
 
 
index 9e1033f036a9caa42e11c3bf135d07f653ad202f..a6338a024df93d8edb312eb8100829ada3aa77f0 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
  ***************************************************************************/
 
+#include "QApplication"
+
+#include "KDebug"
+
+#include "projectitem.h"
 #include "projectlistview.h"
 
 
 ProjectListView::ProjectListView(QWidget *parent)
-    : QTreeWidget(parent)
+    : QTreeWidget(parent), m_dragStarted(false)
 {
-
+  setSelectionMode(QAbstractItemView::ExtendedSelection);
+  setDragDropMode(QAbstractItemView::DragDrop);
+  setDropIndicatorShown(true);
+  setDragEnabled(true);
+  setAcceptDrops(true);
 }
 
 ProjectListView::~ProjectListView()
@@ -33,14 +42,164 @@ ProjectListView::~ProjectListView()
 // virtual
 void ProjectListView::contextMenuEvent ( QContextMenuEvent * event )
 {
-    emit requestMenu(event->globalPos(), itemAt(event->pos()));
+  emit requestMenu(event->globalPos(), itemAt(event->pos()));
 }
 
 // virtual
 void ProjectListView::mouseDoubleClickEvent ( QMouseEvent * event )
 {
-    if (!itemAt(event->pos())) emit addClip();
+  if (!itemAt(event->pos())) emit addClip();
+}
+
+// virtual
+void ProjectListView::dragEnterEvent(QDragEnterEvent *event)
+{
+  if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) {
+          kDebug()<<"////////////////  DRAG ENTR OK";
+  }
+  event->acceptProposedAction();
+}
+
+// virtual
+void ProjectListView::dropEvent(QDropEvent *event)
+{
+      kDebug()<<"////////////////  DROPPED EVENT";
+  if (event->mimeData()->hasUrls()) {
+    QTreeWidgetItem *item = itemAt(event->pos());
+    QString groupName;
+    if (item) {
+      if (((ProjectItem *) item)->isGroup()) groupName = item->text(1);
+      else if (item->parent() && ((ProjectItem *) item->parent())->isGroup()) 
+      groupName = item->parent()->text(1);
+    }
+    QList <QUrl> list;
+    list = event->mimeData()->urls();
+    foreach (QUrl url, list) {
+      emit addClip(url, groupName);
+    }
+
+  }
+  else if (event->mimeData()->hasText())
+  {
+    QTreeWidgetItem *item = itemAt(event->pos());
+    if (item) {
+      if (item->parent()) item = item->parent();
+      if (((ProjectItem *) item)->isGroup()) {
+      //emit addClip(event->mimeData->text());
+      kDebug()<<"////////////////  DROPPED RIGHT 1";
+      QList <QTreeWidgetItem *> list;
+      list = selectedItems ();
+      ProjectItem *clone;
+      foreach (QTreeWidgetItem *it, list) {
+       // TODO allow dragging of folders
+       if (!((ProjectItem *) it)->isGroup()) {
+         if (it->parent()) clone = (ProjectItem* ) it->parent()->takeChild(it->parent()->indexOfChild(it));
+         else clone = (ProjectItem* ) takeTopLevelItem(indexOfTopLevelItem(it));
+         if (clone) item->addChild(clone);
+       }
+      }
+      }
+      else item = NULL;
+    }
+    if (!item) {
+      kDebug()<<"////////////////  DROPPED ON EMPTY ZONE";
+      // item dropped in empty zone, move it to top level
+      QList <QTreeWidgetItem *> list;
+      list = selectedItems();
+      ProjectItem *clone;
+      foreach (QTreeWidgetItem *it, list) {
+         QTreeWidgetItem *parent = it->parent();
+         if (parent)  {
+           kDebug()<<"++ item parent: "<<parent->text(1);
+           clone = (ProjectItem* ) parent->takeChild(parent->indexOfChild(it));
+           if (clone) addTopLevelItem(clone);
+       }
+      }
+    }     
+  }
+  event->acceptProposedAction();
+}
+
+// virtual
+void ProjectListView::mousePressEvent(QMouseEvent *event)
+{
+    if( event->button() == Qt::LeftButton )
+    {
+        this->m_DragStartPosition = event->pos();
+        m_dragStarted = true;
+    }
+    QTreeWidget::mousePressEvent(event);
 }
 
 
+// virtual
+void ProjectListView::mouseMoveEvent(QMouseEvent *event)
+{
+ kDebug()<<"// DRAG STARTED, MOUSE MOVED: ";
+  if (!m_dragStarted) return;
+
+  if ((event->pos() - m_DragStartPosition).manhattanLength()
+            < QApplication::startDragDistance())
+        return;
+  {
+    ProjectItem *clickItem = (ProjectItem *) itemAt(event->pos());
+    if (clickItem) {
+      QDrag *drag = new QDrag(this);
+      QMimeData *mimeData = new QMimeData;
+      QDomDocument doc;
+      QList <QTreeWidgetItem *> list;
+      list = selectedItems ();
+      foreach (QTreeWidgetItem *item, list) {
+       // TODO allow dragging of folders
+       if (!((ProjectItem *) item)->isGroup())
+         doc.appendChild(doc.importNode(((ProjectItem *) item)->toXml(), true));
+      }
+      //QByteArray data;
+      //data.append(doc.toString().toUtf8());
+      //mimeData->setData("kdenlive/westley",data );
+      mimeData->setText(doc.toString());
+      //mimeData->setImageData(image);
+      drag->setMimeData(mimeData);
+      drag->setPixmap(clickItem->icon(0).pixmap(40 *16/9.0, 40));
+      drag->setHotSpot(QPoint(0, 20));
+      drag->start(Qt::MoveAction);
+
+      //Qt::DropAction dropAction;
+      //dropAction = drag->start(Qt::CopyAction | Qt::MoveAction);
+
+      //Qt::DropAction dropAction = drag->exec();
+      
+    }
+    //event->accept(); 
+  }
+}
+
+void ProjectListView::dragMoveEvent(QDragMoveEvent * event) {
+        QTreeWidgetItem * item = itemAt(event->pos());
+        event->setDropAction(Qt::IgnoreAction);
+        //if (item) {
+                event->setDropAction(Qt::MoveAction);
+                if (event->mimeData()->hasText()) {
+                        event->acceptProposedAction();
+                }
+        //}
+}
+
+QStringList ProjectListView::mimeTypes () const
+{
+    QStringList qstrList;
+    // list of accepted mime types for drop
+    qstrList.append("text/uri-list");
+    qstrList.append("text/plain");
+    return qstrList;
+}
+Qt::DropActions ProjectListView::supportedDropActions () const
+{
+    // returns what actions are supported when dropping
+    return Qt::MoveAction | Qt::MoveAction;
+}
+
 #include "projectlistview.moc"
index 304d6ba98a3a061c5807357bd6a9697c826dbe99..da5756a5820006762a9eb1523d94f9cc3440a58d 100644 (file)
@@ -35,18 +35,27 @@ class ProjectListView : public QTreeWidget
   protected:
     virtual void contextMenuEvent ( QContextMenuEvent * event );
     virtual void mouseDoubleClickEvent ( QMouseEvent * event );
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void dragEnterEvent(QDragEnterEvent *event);
+    virtual void dropEvent(QDropEvent *event);
+    virtual QStringList mimeTypes() const;
+    virtual Qt::DropActions supportedDropActions () const;
+    virtual void dragMoveEvent(QDragMoveEvent * event);
 
   public slots:
 
 
   private:
-
+    bool m_dragStarted;
+    QPoint m_DragStartPosition;
 
   private slots:
 
   signals:
     void requestMenu(const QPoint &, QTreeWidgetItem *);
     void addClip();
+    void addClip(QUrl, const QString &);
 };
 
 #endif