summaryrefslogtreecommitdiffstats
path: root/searchview.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-02-02 18:13:27 +0100
committerArno <arno@disconnect.de>2018-02-02 18:13:27 +0100
commit2f1e930668c1a2205a09ee835908d28b2bdedcdd (patch)
tree7f9331fd80e45e27994a0a5ebc2e61e4dc69be23 /searchview.cpp
parent3a4b40917ba45e3dd34e14816d12ca8a6bd510f7 (diff)
downloadShemovCleaner-2f1e930668c1a2205a09ee835908d28b2bdedcdd.tar.gz
ShemovCleaner-2f1e930668c1a2205a09ee835908d28b2bdedcdd.tar.bz2
ShemovCleaner-2f1e930668c1a2205a09ee835908d28b2bdedcdd.zip
Implement context menu for search results
Subclass QTreeView to show a custom context menu. Since the depth of some items is > 1, add an option to expand and collapse a node recursively.
Diffstat (limited to 'searchview.cpp')
-rw-r--r--searchview.cpp53
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);
+ }
+ }
+}