#include #include #include #include #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); setAlternatingRowColors(true); setPalette(qApp->palette()); } 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); } } }