From 32f69b9b7790a71f182e4676337f98b0c1f181b0 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Mon, 20 Dec 2010 09:15:49 +0100 Subject: [PATCH] Outline: Add context menu for collapsing/expanding tree Task-number: QTCREATORBUG-2976 --- src/plugins/cppeditor/cppoutline.cpp | 18 ++++++++++++- src/plugins/cppeditor/cppoutline.h | 2 ++ .../qmljseditor/qmljsoutlinetreeview.cpp | 27 +++++++++++++++++++ .../qmljseditor/qmljsoutlinetreeview.h | 5 ++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/plugins/cppeditor/cppoutline.cpp b/src/plugins/cppeditor/cppoutline.cpp index 27b47f098bf..e73f75f78dc 100644 --- a/src/plugins/cppeditor/cppoutline.cpp +++ b/src/plugins/cppeditor/cppoutline.cpp @@ -8,8 +8,9 @@ #include #include -#include #include +#include +#include using namespace CppEditor::Internal; @@ -25,6 +26,21 @@ CppOutlineTreeView::CppOutlineTreeView(QWidget *parent) : setExpandsOnDoubleClick(false); } +void CppOutlineTreeView::contextMenuEvent(QContextMenuEvent *event) +{ + if (!event) + return; + + QMenu contextMenu; + + contextMenu.addAction(tr("Expand All"), this, SLOT(expandAll())); + contextMenu.addAction(tr("Collapse All"), this, SLOT(collapseAll())); + + contextMenu.exec(event->globalPos()); + + event->accept(); +} + CppOutlineFilterModel::CppOutlineFilterModel(CPlusPlus::OverviewModel *sourceModel, QObject *parent) : QSortFilterProxyModel(parent), m_sourceModel(sourceModel) diff --git a/src/plugins/cppeditor/cppoutline.h b/src/plugins/cppeditor/cppoutline.h index a9f2e65e0fb..c7fe8680caf 100644 --- a/src/plugins/cppeditor/cppoutline.h +++ b/src/plugins/cppeditor/cppoutline.h @@ -17,6 +17,8 @@ class CppOutlineTreeView : public Utils::NavigationTreeView Q_OBJECT public: CppOutlineTreeView(QWidget *parent); + + void contextMenuEvent(QContextMenuEvent *event); }; class CppOutlineFilterModel : public QSortFilterProxyModel diff --git a/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp b/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp index e0828ab840e..b4da65cce61 100644 --- a/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp +++ b/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp @@ -2,6 +2,7 @@ #include "qmloutlinemodel.h" #include +#include namespace QmlJSEditor { namespace Internal { @@ -26,5 +27,31 @@ QmlJSOutlineTreeView::QmlJSOutlineTreeView(QWidget *parent) : setItemDelegateForColumn(0, itemDelegate); } +void QmlJSOutlineTreeView::contextMenuEvent(QContextMenuEvent *event) +{ + if (!event) + return; + + QMenu contextMenu; + + contextMenu.addAction(tr("Expand All"), this, SLOT(expandAll())); + contextMenu.addAction(tr("Collapse All"), this, SLOT(collapseAllExceptRoot())); + + contextMenu.exec(event->globalPos()); + + event->accept(); +} + +void QmlJSOutlineTreeView::collapseAllExceptRoot() +{ + if (!model()) + return; + const QModelIndex rootElementIndex = model()->index(0, 0, rootIndex()); + int rowCount = model()->rowCount(rootElementIndex); + for (int i = 0; i < rowCount; ++i) { + collapse(model()->index(i, 0, rootElementIndex)); + } +} + } // namespace Internal } // namespace QmlJSEditor diff --git a/src/plugins/qmljseditor/qmljsoutlinetreeview.h b/src/plugins/qmljseditor/qmljsoutlinetreeview.h index a16afad081c..8e337de3219 100644 --- a/src/plugins/qmljseditor/qmljsoutlinetreeview.h +++ b/src/plugins/qmljseditor/qmljsoutlinetreeview.h @@ -11,6 +11,11 @@ class QmlJSOutlineTreeView : public Utils::NavigationTreeView Q_OBJECT public: explicit QmlJSOutlineTreeView(QWidget *parent = 0); + + void contextMenuEvent(QContextMenuEvent *event); + +private slots: + void collapseAllExceptRoot(); }; } // namespace Internal