diff options
Diffstat (limited to 'searchview.cpp')
-rw-r--r-- | searchview.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/searchview.cpp b/searchview.cpp new file mode 100644 index 0000000..a4ba25b --- /dev/null +++ b/searchview.cpp @@ -0,0 +1,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); + } + } +} |