All pastes #15523 Raw Edit

Someone

public text v1 · immutable
#15523 ·published 2005-06-22 09:17 UTC
rendered paste body
--- /usr/portage/distfiles/svn-src/kde/trunk/KDE/kdepim/akregator/src/feedlistview.cpp	2005-06-19 22:33:13.000000000 +0200
+++ feedlistview.cpp	2005-06-22 11:04:32.000000000 +0200
@@ -202,17 +202,18 @@
     m_connectNodeVisitor = new ConnectNodeVisitor(this),
     m_disconnectNodeVisitor = new DisconnectNodeVisitor(this);
     m_createItemVisitor = new CreateItemVisitor(this);
-    
+
     setMinimumSize(150, 150);
     addColumn(i18n("Feeds"));
     setRootIsDecorated(true);
     setItemsRenameable(true);
     setItemMargin(2);
-    
+
     setFullWidth(true);
     setSorting(-1);
     setDragAutoScroll(true);
     setDropVisualizer(true);
+    //setDropHighlighter(false);
 
      // these have to be enabled from outside after loading the feed list!
     setDragEnabled(true);
@@ -223,7 +224,8 @@
     connect( this, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectionChanged(QListViewItem*)) );
     connect( this, SIGNAL(itemRenamed(QListViewItem*, const QString&, int)), this, SLOT(slotItemRenamed(QListViewItem*, const QString&, int)) );
     connect( this, SIGNAL(contextMenu(KListView*, QListViewItem*, const QPoint&)), this, SLOT(slotContextMenu(KListView*, QListViewItem*, const QPoint&)) );
-    
+    connect( &m_autoopentimer, SIGNAL( timeout() ), this, SLOT( openFolder() ) );
+
     clear();
     
     QWhatsThis::add(this, i18n("<h2>Feeds tree</h2>"
@@ -364,84 +366,41 @@
 
 void FeedListView::slotDropped( QDropEvent *e, QListViewItem * /*item*/ )
 {
-    if (!acceptDrag(e))
-        return;
-    
-    QListViewItem *qiparent;
-    QListViewItem *qiafterme;
-    findDrop( e->pos(), qiparent, qiafterme );
-    FolderItem* parent = static_cast<FolderItem*> (qiparent);
-                
-    if (!parent)
-    {
-        e->accept();
-        return;
-    }
-    
+	m_autoopentimer.stop();
     if (e->source() != viewport())
     {
-        if (KURLDrag::canDecode( e ))
-        {
-            findDrop( e->pos(), qiparent, qiafterme );
-            FolderItem* parent = static_cast<FolderItem*> (qiparent);
-            TreeNodeItem* afterme = static_cast<TreeNodeItem*> (qiafterme);
-    
-            KURL::List urls;
-            KURLDrag::decode( e, urls );
-            e->accept();
-            emit signalDropped( urls, afterme, parent);
-        }
-        else
-        {
-            e->ignore();
-            return;
-        }
+        openFolder();
+
+        FolderItem* parent = static_cast<FolderItem*> (m_parent);
+        TreeNodeItem* afterMe = 0;
+
+        if(m_afterme)
+            afterMe = static_cast<TreeNodeItem*> (m_afterme);
+
+        KURL::List urls;
+        KURLDrag::decode( e, urls );
+        e->accept();
+        emit signalDropped( urls, afterMe, parent);
     }
-    
 }
 
 void FeedListView::movableDropEvent(QListViewItem* parent, QListViewItem* afterme)
 {
-    if (selectedItem() == afterme)
-        return;
-    
-    if (parent)
+	m_autoopentimer.stop();
+    if (m_parent)
     {    
-        Folder* parentNode = (static_cast<FolderItem*> (parent))->node();
+        openFolder();
 
+        Folder* parentNode = (static_cast<FolderItem*> (m_parent))->node();
         TreeNode* afterMeNode = 0; 
         TreeNode* current = selectedNode();
 
-        if (afterme)
-            afterMeNode = (static_cast<TreeNodeItem*> (afterme))->node();
+        if (m_afterme)
+            afterMeNode = (static_cast<TreeNodeItem*> (m_afterme))->node();
 
-        // don't dnd nodes between different top-level nodes
-        
-        TreeNode* root1 = current;
-        while (root1 && root1->parent())
-            root1 = root1->parent();
-
-        TreeNode* root2 = parentNode;
-        while (root2 && root2->parent())
-            root2 = root2->parent();
-
-        if (root1 !=  root2)
-            return;
-            
-        // don't drop node into own subtree
-        
-        Folder* p = parentNode;
-        while (p)
-            if (p == current)
-                return;
-            else
-                p = p->parent(); 
-
-        // ok, tests passed, let's move the node
-        
         current->parent()->removeChild(current);
         parentNode->insertChild(current, afterMeNode);
-        KListView::movableDropEvent(parent, afterme);
+        KListView::movableDropEvent(m_parent, m_afterme);
     }    
 }
 
@@ -458,42 +417,98 @@
     QListViewItem *qiparent;
     QListViewItem *qiafterme;
     findDrop( event->pos(), qiparent, qiafterme );
-    
-    //TreeNodeItem* afterme = static_cast<TreeNodeItem*> (qiafterme);
-    
-    // disable any drops where the result would be top level nodes 
-    if (i && !i->parent())
-    {
-        event->ignore();
-        return;
-    }
 
-    // prevent dragging nodes from All Feeds to My Tags or vice versa
-    QListViewItem* root1 = i;
-    while (root1 && root1->parent())
-        root1 = root1->parent();
-
-    QListViewItem* root2 = selectedItem();
-    while (root2 && root2->parent())
-        root2 = root2->parent();
+    if (event->source() == viewport()) {
+        // disable any drops where the result would be top level nodes 
+        if (i && !i->parent())
+        {
+            event->ignore();
+            m_autoopentimer.stop();
+            return;
+        }
+
+        // prevent dragging nodes from All Feeds to My Tags or vice versa
+        QListViewItem* root1 = i;
+        while (root1 && root1->parent())
+            root1 = root1->parent();
 
-    if (root1 != root2)
-    {
-        event->ignore();
-        return;
+        QListViewItem* root2 = selectedItem();
+        while (root2 && root2->parent())
+            root2 = root2->parent();
+
+        if (root1 != root2)
+        {
+            event->ignore();
+            m_autoopentimer.stop();
+            return;
+        }
+
+        // don't drop node into own subtree
+        QListViewItem* p = qiparent;
+        while (p)
+            if (p == selectedItem())
+            {
+                event->ignore();
+                m_autoopentimer.stop();
+                return;
+            }
+            else
+            {
+                p = p->parent();
+            }
+
+        // disable drags onto the item itself
+        if (selectedItem() == i)
+        {
+            event->ignore();
+            m_autoopentimer.stop();
+            return;
+        }
     }
+
     // what the hell was this good for? -fo
     //    if (!i || event->pos().x() > header()->cellPos(header()->mapToIndex(0)) +
     //            treeStepSize() * (i->depth() + 1) + itemMargin() ||
     //            event->pos().x() < header()->cellPos(header()->mapToIndex(0)))
     //   {} else
  
-   if (i && i->childCount() && !i->isOpen())
-            i->setOpen(true); // open folders under drag
+    // do we want to move inside the old parent or do we want to move to a new parent
+    if (i && (itemAt(vp - QPoint(0,5)) == i && itemAt(vp + QPoint(0,5)) == i))
+    {
+        setDropVisualizer(false);
+        setDropHighlighter(true);
+        cleanDropVisualizer();
+
+        TreeNode *iNode = (static_cast<TreeNodeItem*> (i))->node();
+        if (iNode->isGroup())
+        {
+            if (i != m_parent)
+                m_autoopentimer.stop();
+            m_parent = i;
+        }
+        else
+        {
+            event->ignore();
+            m_autoopentimer.stop();
+            return;
+        }
+        m_afterme = 0;
+        m_autoopentimer.start(750);
+    }
+    else
+    {
+        setDropVisualizer(true);
+        setDropHighlighter(false);
+        cleanItemHighlighter();
+        m_parent = qiparent;
+        m_afterme = qiafterme;
+        m_autoopentimer.stop();
+    }
 
     // the rest is handled by KListView.
     KListView::contentsDragMoveEvent(event);
 }
+
 /*
 void FeedListView::keyPressEvent(QKeyEvent* e)
 {
@@ -898,4 +913,11 @@
     return md;
 }
 
+void FeedListView::openFolder() {
+    m_autoopentimer.stop();
+    if (m_parent && !m_parent->isOpen())
+    {
+        m_parent->setOpen(true);
+    }
+}
 #include "feedlistview.moc"
--- /usr/portage/distfiles/svn-src/kde/trunk/KDE/kdepim/akregator/src/feedlistview.h	2005-06-19 22:33:13.000000000 +0200
+++ feedlistview.h	2005-06-22 11:01:40.000000000 +0200
@@ -28,6 +28,7 @@
 
 #include <klistview.h>
 #include <kurl.h>
+#include <qtimer.h>
 
 
 namespace Akregator
@@ -172,6 +173,7 @@
             virtual void slotFeedFetchAborted(Feed* feed);
             virtual void slotFeedFetchError(Feed* feed);
             virtual void slotFeedFetchCompleted(Feed* feed);
+            void openFolder();
 
 
         private:
@@ -186,12 +188,17 @@
             friend class CreateItemVisitor;
             class CreateItemVisitor;
             CreateItemVisitor* m_createItemVisitor;
-            
+
             /** used for finding the item belonging to a node */
             QPtrDict<TreeNodeItem> m_itemDict;
             FeedList* m_feedList;
             TagNodeList* m_tagNodeList;
             bool m_showTagFolders;
+
+            // Drag and Drop variables
+            QListViewItem *m_parent;
+            QListViewItem *m_afterme;
+            QTimer m_autoopentimer;
     };
 
 }
--- /usr/portage/distfiles/svn-src/kde/trunk/KDE/kdepim/akregator/src/folderitem.cpp	2005-06-19 22:33:13.000000000 +0200
+++ folderitem.cpp	2005-06-21 01:28:15.000000000 +0200
@@ -36,7 +36,6 @@
 FolderItem::FolderItem(FolderItem* parent, Folder* node) : TreeNodeItem(parent, node)
 {
     setRenameEnabled(0, true);
-    setExpandable(true);
     setOpen( node->isOpen() );
     setPixmap ( 0, KGlobal::iconLoader()->loadIcon("folder", KIcon::Small) );
     if (node)
@@ -46,7 +45,6 @@
 FolderItem::FolderItem(FolderItem* parent, TreeNodeItem* after, Folder* node) : TreeNodeItem(parent, after, node)
 {
     setRenameEnabled(0, true);
-    setExpandable(true);
     setOpen(node->isOpen());
     setPixmap ( 0, KGlobal::iconLoader()->loadIcon("folder", KIcon::Small) );
     if (node)
@@ -56,7 +54,6 @@
 FolderItem::FolderItem(KListView* parent, Folder* node) : TreeNodeItem(parent, node)
 {
     setRenameEnabled(0, true);
-    setExpandable(true);
     setOpen(true);
     setPixmap ( 0, KGlobal::iconLoader()->loadIcon("folder", KIcon::Small) );
     if (node)
@@ -66,7 +63,6 @@
 FolderItem::FolderItem(KListView* parent, TreeNodeItem* after, Folder* node) : TreeNodeItem(parent, after, node)
 {
     setRenameEnabled(0, true);
-    setExpandable(true);
     setOpen(true);
     setPixmap ( 0, KGlobal::iconLoader()->loadIcon("folder", KIcon::Small) );
     if (node)