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
|
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>
#include "searchview.h"
#include "helper.h"
SearchView::SearchView(QWidget *parent) : QTreeView(parent){
mCtxMenu = new QMenu(this);
QAction *expandCurA = new QAction(Helper::icon(QColor(255,85,255), QChar(0x21B3)), tr("Expand"), this);
connect(expandCurA, &QAction::triggered, this, &SearchView::expandNode);
mCtxMenu->addAction(expandCurA);
QAction *collapseCurA = new QAction(Helper::icon(QColor(255,85,255), QChar(0x21B0)), tr("Collapse"), this);
connect(collapseCurA, &QAction::triggered, this, &SearchView::collapseNode);
mCtxMenu->addAction(collapseCurA);
mCtxMenu->addSeparator();
QAction *expandAllA = new QAction(Helper::icon(QColor(255,85,255), QChar(0x2198)), tr("Expand all"), this);
connect(expandAllA, &QAction::triggered, this, &SearchView::expandAll);
mCtxMenu->addAction(expandAllA);
QAction *collapseAllA = new QAction(Helper::icon(QColor(255,85,255), QChar(0x2196)), tr("Collapse all"), this);
connect(collapseAllA, &QAction::triggered, this, &SearchView::collapseAll);
mCtxMenu->addAction(collapseAllA);
}
void SearchView::expandNode(){
QModelIndex idx = currentIndex();
expand(idx);
doNodeR(idx, Expand);
}
void SearchView::collapseNode(){
QModelIndex idx = currentIndex();
collapse(idx);
doNodeR(idx, Collapse);
}
void SearchView::contextMenuEvent(QContextMenuEvent *e){
mCtxMenu->exec(e->globalPos());
}
void SearchView::doNodeR(const QModelIndex &parent, int nAction){
for(int i = 0; i < model()->rowCount(parent); ++i){
QModelIndex cur = model()->index(i, 0, parent);
if(nAction == Expand){
expand(cur);
}else if(nAction == Collapse){
collapse(cur);
}
if(model()->hasChildren(cur)){
doNodeR(cur, nAction);
}
}
}
|