diff --git a/src/PwManager.cpp b/src/PwManager.cpp index 0bdba5d..94bb70b 100755 --- a/src/PwManager.cpp +++ b/src/PwManager.cpp @@ -909,6 +909,19 @@ for(int i=0;iID); +int ParentIndex=getGroupIndex(parent->ID); +if(ParentIndex > ChildIndex) return false; + +for(int i=ChildIndex; i>ParentIndex;i--){ + if(Groups[i].Level<=parent->Level)return false; +} + +return true; +} + Q_UINT32 PwDatabase::getNewGroupId(){ Q_UINT32 id; diff --git a/src/PwManager.h b/src/PwManager.h index a10bbf3..d47d5da 100755 --- a/src/PwManager.h +++ b/src/PwManager.h @@ -62,6 +62,7 @@ public: void moveEntry(CEntry* pEntry,CGroup* pDstGroup); CEntry* addEntry(); void merge(PwDatabase* db2); + bool isParentGroup(CGroup* Group,CGroup* PotenialParent); QString getError(); //get first error QString getErrors(); //get all errors in a \n seperated String diff --git a/src/lib/GroupView.cpp b/src/lib/GroupView.cpp index e022f43..0a865c4 100644 --- a/src/lib/GroupView.cpp +++ b/src/lib/GroupView.cpp @@ -53,11 +53,17 @@ if(LastHoverItem){ f.setBold(false); LastHoverItem->setFont(0,f); } + if(item){ - QFont f=item->font(0); - f.setBold(true); - item->setFont(0,f); - LastHoverItem=item;} + if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){ + QFont f=item->font(0); + f.setBold(true); + item->setFont(0,f); + LastHoverItem=item; + event->setAccepted(true);} + else + event->setAccepted(false); + } else{ LastHoverItem=NULL;} @@ -96,22 +102,21 @@ void KeepassGroupView::mouseMoveEvent(QMouseEvent *event){ return; if ((event->pos() - DragStartPos).manhattanLength() < QApplication::startDragDistance()) return; - - GroupViewItem* item=(GroupViewItem*)itemAt(DragStartPos); - if(!item)return; + DragItem=(GroupViewItem*)itemAt(DragStartPos); + if(!DragItem)return; QDrag *drag = new QDrag(this); - QFontMetrics fontmet(item->font(0)); + QFontMetrics fontmet(DragItem->font(0)); int DragPixmHeight=16; if(fontmet.height()>16)DragPixmHeight=fontmet.height(); - DragPixmap = QPixmap(fontmet.width(item->text(0))+19,DragPixmHeight); + DragPixmap = QPixmap(fontmet.width(DragItem->text(0))+19,DragPixmHeight); DragPixmap.fill(QColor(255,255,255)); QPainter painter(&DragPixmap); painter.setPen(QColor(0,0,0)); - painter.setFont(item->font(0)); - painter.drawPixmap(0,0,item->icon(0).pixmap()); - painter.drawText(19,DragPixmHeight-fontmet.strikeOutPos(),item->text(0)); + painter.setFont(DragItem->font(0)); + painter.drawPixmap(0,0,DragItem->icon(0).pixmap()); + painter.drawText(19,DragPixmHeight-fontmet.strikeOutPos(),DragItem->text(0)); QMimeData *mimeData = new QMimeData; - mimeData->setData("keepass/group",QByteArray((char*)&(item->pGroup),sizeof(void*))); + mimeData->setData("keepass/group",QByteArray((char*)&(DragItem->pGroup),sizeof(void*))); drag->setMimeData(mimeData); drag->setPixmap(DragPixmap); drag->start(); diff --git a/src/lib/GroupView.h b/src/lib/GroupView.h index 7b13115..af7799f 100644 --- a/src/lib/GroupView.h +++ b/src/lib/GroupView.h @@ -43,6 +43,7 @@ protected: private: QPoint DragStartPos; QPixmap DragPixmap; + GroupViewItem* DragItem; GroupViewItem* LastHoverItem; GroupViewItem* getLastSameLevelItem(int level); };