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)