You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.4 KiB
C++
73 lines
1.4 KiB
C++
/*!
|
|
\file ctreeview.cpp
|
|
|
|
*/
|
|
|
|
#include "ctreeview.h"
|
|
|
|
#include "cpart.h"
|
|
#include "cchapter.h"
|
|
#include "cscene.h"
|
|
|
|
#include <QDropEvent>
|
|
#include <QStandardItemModel>
|
|
|
|
|
|
cTreeView::cTreeView(QWidget* parent) :
|
|
QTreeView(parent)
|
|
{
|
|
}
|
|
|
|
void cTreeView::focusInEvent(QFocusEvent* event)
|
|
{
|
|
gotFocus(this);
|
|
QTreeView::focusInEvent(event);
|
|
}
|
|
|
|
void cTreeView::focusOutEvent(QFocusEvent* event)
|
|
{
|
|
lostFocus(this);
|
|
QTreeView::focusOutEvent(event);
|
|
}
|
|
|
|
qint16 level(QModelIndex index)
|
|
{
|
|
QModelIndex tmp = index;
|
|
qint16 level = 0;
|
|
|
|
while(tmp.parent().isValid())
|
|
{
|
|
level++;
|
|
tmp = tmp.parent();
|
|
}
|
|
return(level);
|
|
}
|
|
|
|
void cTreeView::dropEvent(QDropEvent* event)
|
|
{
|
|
QStandardItemModel* lpModel = (QStandardItemModel*)model();
|
|
QModelIndex fromIndex = selectedIndexes()[0];
|
|
QStandardItem* lpFromItem = lpModel->itemFromIndex(fromIndex);
|
|
QModelIndex droppedIndex = indexAt(event->pos());
|
|
DropIndicatorPosition pos = dropIndicatorPosition();
|
|
|
|
qint16 fromLevel = level(fromIndex);
|
|
qint16 droppedLevel = level(droppedIndex);
|
|
|
|
if(droppedLevel < fromLevel-1)
|
|
return;
|
|
else if(droppedLevel > fromLevel)
|
|
return;
|
|
else if(droppedLevel == fromLevel && pos == DropIndicatorPosition::OnItem)
|
|
return;
|
|
else if(droppedLevel == fromLevel-1 && pos == DropIndicatorPosition::BelowItem)
|
|
return;
|
|
|
|
QTreeView::dropEvent(event);
|
|
|
|
QModelIndex toIndex = selectedIndexes()[0];
|
|
lpFromItem->setData(toIndex.row(), Qt::UserRole+2);
|
|
|
|
dropped(this);
|
|
}
|