finished drag and drop implementation for groups

git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@23 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
tariq
2006-01-25 09:35:21 +00:00
parent 6e5effe43e
commit aeeba6a916
3 changed files with 54 additions and 12 deletions

View File

@@ -34,7 +34,7 @@
#include <QBrush>
#include "main.h"
#include "GroupView.h"
#define INSERT_AREA_WIDTH 4
KeepassGroupView::KeepassGroupView(QWidget* parent):QTreeWidget(parent){
InsertionMarker=QLine();
@@ -64,7 +64,7 @@ InsertionMarker=QLine();
if(item){
QRect ItemRect=visualItemRect(item);
if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){
if((ItemRect.height()+ItemRect.y())-event->pos().y() > 4){
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
QFont f=item->font(0);
f.setBold(true);
item->setFont(0,f);
@@ -73,8 +73,12 @@ if(item){
}
else{
LastHoverItem=NULL;
InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height(),
ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());
if(event->pos().y() > INSERT_AREA_WIDTH)
InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height(),
ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());
else
InsertionMarker=QLine(ItemRect.x(),0,
ItemRect.x()+ItemRect.width(),0);
}
}
else
@@ -109,10 +113,22 @@ if(LastHoverItem){
}
GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());
if(item)
db->moveGroup(DragItem->pGroup,item->pGroup);
else
db->moveGroup(DragItem->pGroup,NULL);
if(item){
QRect ItemRect=visualItemRect(item);
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
db->moveGroup(DragItem->pGroup,item->pGroup);}
else{
if(event->pos().y() > INSERT_AREA_WIDTH){
if(db->getNumberOfChilds(item->pGroup) > 0)
db->moveGroup(DragItem->pGroup,item->pGroup,0);
else
db->moveGroupDirectly(DragItem->pGroup,item->pGroup);
}
else db->moveGroupDirectly(DragItem->pGroup,NULL);
}
}
else db->moveGroup(DragItem->pGroup,NULL);
updateItems();
}