[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [labplot] src/commonfrontend: adding custom context menu
From:       Alexander Semke <alexander.semke () web ! de>
Date:       2016-12-06 21:30:34
Message-ID: E1cENJq-000359-VB () code ! kde ! org
[Download RAW message or body]

Git commit 46c269b926042a1b9ec0765c18d43788fea6ac34 by Alexander Semke, on behalf of Garvit Khatri.
Committed on 06/12/2016 at 21:21.
Pushed by asemke into branch 'master'.

adding custom context menu

this is for the case when we select multiple aspects in project explorer

when selecting multiple aspects in project explorer, we now
try to show custom context menu relevant to selection

M  +48   -7    src/commonfrontend/ProjectExplorer.cpp
M  +7    -0    src/commonfrontend/ProjectExplorer.h

https://commits.kde.org/labplot/46c269b926042a1b9ec0765c18d43788fea6ac34

diff --git a/src/commonfrontend/ProjectExplorer.cpp b/src/commonfrontend/ProjectExplorer.cpp
index fc07a5e7..101ac956 100644
--- a/src/commonfrontend/ProjectExplorer.cpp
+++ b/src/commonfrontend/ProjectExplorer.cpp
@@ -122,9 +122,18 @@ void ProjectExplorer::createActions() {
 	expandTreeAction = new QAction(i18n("expand all"), this);
 	connect(expandTreeAction, SIGNAL(triggered()), m_treeView, SLOT(expandAll()));
 
+	expandSelectedTreeAction = new QAction(i18n("expand selected"), this);
+	connect(expandSelectedTreeAction, SIGNAL(triggered()), this, SLOT(expandSelected()));
+
 	collapseTreeAction = new QAction(i18n("collapse all"), this);
 	connect(collapseTreeAction, SIGNAL(triggered()), m_treeView, SLOT(collapseAll()));
 
+	collapseSelectedTreeAction = new QAction(i18n("collapse selected"), this);
+	connect(collapseSelectedTreeAction, SIGNAL(triggered()), this, SLOT(collapseSelected()));
+
+	deleteSelectedTreeAction = new QAction(QIcon::fromTheme("edit-delete"), i18n("delete selected"), this);
+	connect(deleteSelectedTreeAction, SIGNAL(triggered()), this, SLOT(deleteSelected()));
+
 	toggleFilterAction = new QAction(i18n("hide search/filter options"), this);
 	connect(toggleFilterAction, SIGNAL(triggered()), this, SLOT(toggleFilterWidgets()));
 
@@ -144,13 +153,24 @@ void ProjectExplorer::contextMenuEvent(QContextMenuEvent *event) {
 		return;
 
 	QModelIndex index = m_treeView->indexAt(m_treeView->viewport()->mapFrom(this, event->pos()));
-	QVariant menu_value = m_treeView->model()->data(index, AspectTreeModel::ContextMenuRole);
-	QMenu *menu = static_cast<QMenu*>(menu_value.value<QWidget*>());
-
+	if (!index.isValid())
+		m_treeView->clearSelection();
+
+	QModelIndexList items = m_treeView->selectionModel()->selectedIndexes();
+	QMenu *menu = 0;
+	if (items.size()/4 == 1) {
+		QVariant menu_value = m_treeView->model()->data(index, AspectTreeModel::ContextMenuRole);
+		menu = static_cast<QMenu*>(menu_value.value<QWidget*>());
+	}
 	if (!menu) {
 		menu = new QMenu();
-
 		menu->addSeparator()->setText(i18n("Tree options"));
+		if (items.size()/4 > 1) {
+			menu->addAction(expandSelectedTreeAction);
+			menu->addAction(collapseSelectedTreeAction);
+			menu->addAction(deleteSelectedTreeAction);
+			menu->addSeparator();
+		}
 		menu->addAction(expandTreeAction);
 		menu->addAction(collapseTreeAction);
 		menu->addSeparator();
@@ -165,10 +185,8 @@ void ProjectExplorer::contextMenuEvent(QContextMenuEvent *event) {
 
 		//TODO
 		//Menu for showing/hiding the top-level aspects (Worksheet, Spreadhsheet, etc) in the tree view
-// 		QMenu* objectsMenu = menu->addMenu(i18n("show/hide objects"));
-
+		// QMenu* objectsMenu = menu->addMenu(i18n("show/hide objects"));
 	}
-
 	menu->exec(event->globalPos());
 	delete menu;
 }
@@ -491,6 +509,29 @@ void ProjectExplorer::selectionChanged(const QItemSelection &selected, const QIt
 	emit selectedAspectsChanged(selectedAspects);
 }
 
+void ProjectExplorer::expandSelected() {
+	QModelIndexList items = m_treeView->selectionModel()->selectedIndexes();
+	foreach(QModelIndex index, items) {
+		m_treeView->setExpanded(index, true);
+	}
+}
+
+void ProjectExplorer::collapseSelected() {
+	QModelIndexList items = m_treeView->selectionModel()->selectedIndexes();
+	foreach(QModelIndex index, items) {
+		m_treeView->setExpanded(index, false);
+	}
+}
+
+void ProjectExplorer::deleteSelected() {
+	QModelIndexList items = m_treeView->selectionModel()->selectedIndexes();
+	// TODO: Delete selected aspects
+	foreach(QModelIndex index, items) {
+		AbstractAspect *aspect = static_cast<AbstractAspect *>(index.internalPointer());
+		aspect->remove();
+	}
+}
+
 //##############################################################################
 //##################  Serialization/Deserialization  ###########################
 //##############################################################################
diff --git a/src/commonfrontend/ProjectExplorer.h b/src/commonfrontend/ProjectExplorer.h
index f94b9182..b4db0cad 100644
--- a/src/commonfrontend/ProjectExplorer.h
+++ b/src/commonfrontend/ProjectExplorer.h
@@ -43,6 +43,7 @@ class QSignalMapper;
 class QTreeView;
 class QXmlStreamWriter;
 class QItemSelection;
+class QMenu;
 
 class ProjectExplorer : public QWidget {
 	Q_OBJECT
@@ -68,7 +69,10 @@ class ProjectExplorer : public QWidget {
 		QAction* caseSensitiveAction;
 		QAction* matchCompleteWordAction;
 		QAction* expandTreeAction;
+		QAction* expandSelectedTreeAction;
 		QAction* collapseTreeAction;
+		QAction* collapseSelectedTreeAction;
+		QAction* deleteSelectedTreeAction;
 		QAction* toggleFilterAction;
 		QAction* showAllColumnsAction;
 		QList<QAction*> list_showColumnActions;
@@ -90,6 +94,9 @@ class ProjectExplorer : public QWidget {
 		void toggleFilterWidgets();
 		void toggleFilterOptionsMenu(bool);
 		void resizeHeader();
+		void expandSelected();
+		void collapseSelected();
+		void deleteSelected();
 
 		void currentChanged(const QModelIndex& current, const QModelIndex& previous);
 		void selectIndex(const QModelIndex&);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic