summaryrefslogtreecommitdiffstats
path: root/searchview.cpp
blob: fe4eace076473691936c48d2c06b3a1356f6fa61 (plain)
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
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>
#include <QApplication>

#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);
        }
    }
}