-
Notifications
You must be signed in to change notification settings - Fork 0
/
layertreeview.cpp
90 lines (73 loc) · 2.48 KB
/
layertreeview.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "layertreeview.h"
LayerTreeView::LayerTreeView(QWidget *parent) :
QTreeView(parent),
SelectionFocusLock(false)
{
}
QList<Layer *> LayerTreeView::selectedLayers() const
{
QList<Layer*> list;
foreach(QModelIndex index, this->selectedIndexes())
{
if(index.isValid())
{
LayerTreeItem* item = static_cast<LayerTreeItem*>(index.internalPointer());
if(item)
list.append(item->data());
}
}
return list;
}
void LayerTreeView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
//if(this->SelectionFocusLock)
//{
foreach(QModelIndex item,deselected.indexes())
{
LayerTreeItem* layerItem = static_cast<LayerTreeItem*>(item.internalPointer());
if(layerItem)
layerItem->data()->setSelected(false);
}
foreach(QModelIndex item,selected.indexes())
{
LayerTreeItem* layerItem = static_cast<LayerTreeItem*>(item.internalPointer());
if(layerItem)
{
layerItem->data()->setSelected(true);
}
}
QModelIndexList list = this->selectionModel()->selectedIndexes();
if(list.isEmpty())
emit this->noSelection();
else
{
LayerTreeItem* parent = 0;
bool oneParent = true,groupSelect = false;
foreach(QModelIndex index,list)
{
LayerTreeItem* layerItem = static_cast<LayerTreeItem*>(index.internalPointer());
if(layerItem)
{
if(!parent)
parent = layerItem->parent();
if(oneParent)
oneParent = (parent == layerItem->parent()); //detects selection of rows of different parents (e.g. to disable grouping)
if(!groupSelect) //detects selection of at least one group (e.g. to enable ungrouping)
groupSelect = (layerItem->data()->type() == Layer::GROUP);
}
}
emit this->hasSelection(oneParent,groupSelect);
}
//}
QTreeView::selectionChanged(selected,deselected);
}
void LayerTreeView::mousePressEvent(QMouseEvent *event)
{
this->SelectionFocusLock = true;
QTreeView::mousePressEvent(event);
}
void LayerTreeView::mouseReleaseEvent(QMouseEvent *event)
{
this->SelectionFocusLock = false;
QTreeView::mouseReleaseEvent(event);
}