summaryrefslogtreecommitdiff
path: root/plugins/autotest/testnavigationwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/autotest/testnavigationwidget.cpp')
-rw-r--r--plugins/autotest/testnavigationwidget.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/plugins/autotest/testnavigationwidget.cpp b/plugins/autotest/testnavigationwidget.cpp
index f9847a5782..68565c0b3c 100644
--- a/plugins/autotest/testnavigationwidget.cpp
+++ b/plugins/autotest/testnavigationwidget.cpp
@@ -84,11 +84,82 @@ TestNavigationWidget::~TestNavigationWidget()
m_model->disableParsing();
}
+bool TestNavigationWidget::handleSquishContextMenuEvent(QContextMenuEvent *event, bool enabled)
+{
+ bool isSquishMenu = false;
+ QMenu menu;
+
+ // item specific menu entries
+ const QModelIndexList list = m_view->selectionModel()->selectedIndexes();
+ if (list.size() == 1) {
+ QRect rect(m_view->visualRect(list.first()));
+ if (rect.contains(event->pos())) {
+ TestTreeItem::Type type = TestTreeItem::toTestType(list.first().data(TypeRole).toInt());
+
+ if (type == TestTreeItem::SQUISH_TESTCASE) {
+ isSquishMenu = true;
+ QAction *runThisTestCase = new QAction(tr("Run This Test Case"), &menu);
+ menu.addAction(runThisTestCase);
+ runThisTestCase->setEnabled(enabled);
+ QAction *deleteTestCase = new QAction(tr("Delete Test Case"), &menu);
+ menu.addAction(deleteTestCase);
+ deleteTestCase->setEnabled(enabled);
+ menu.addSeparator();
+ } else if (type == TestTreeItem::SQUISH_SUITE) {
+ isSquishMenu = true;
+ QAction *runThisTestSuite = new QAction(tr("Run This Test Suite"), &menu);
+ menu.addAction(runThisTestSuite);
+ runThisTestSuite->setEnabled(enabled);
+ menu.addSeparator();
+ QAction *addNewTestCase = new QAction(tr("Add New Test Case..."), &menu);
+ menu.addAction(addNewTestCase);
+ addNewTestCase->setEnabled(enabled);
+ QAction *closeTestSuite = new QAction(tr("Close Test Suite"), &menu);
+ menu.addAction(closeTestSuite);
+ closeTestSuite->setEnabled(enabled);
+ QAction *deleteTestSuite = new QAction(tr("Delete Test Suite"), &menu);
+ menu.addAction(deleteTestSuite);
+ deleteTestSuite->setEnabled(enabled);
+ menu.addSeparator();
+ }
+ }
+ }
+ // ROOT items aren't selectable - so, check for them different way
+ QModelIndex squishIndex = m_view->model()->index(2, 0);
+ QRect squishRootRect(m_view->visualRect(squishIndex));
+ if (squishRootRect.contains(event->pos()))
+ isSquishMenu = true;
+
+ if (isSquishMenu) {
+ // general squish related menu entries
+ QAction *openSquishSuites = new QAction(tr("Open Squish Suites..."), &menu);
+ menu.addAction(openSquishSuites);
+ openSquishSuites->setEnabled(enabled);
+ QAction *createNewTestSuite = new QAction(tr("Create New Test Suite..."), &menu);
+ menu.addAction(createNewTestSuite);
+ createNewTestSuite->setEnabled(enabled);
+
+ if (m_view->model()->rowCount(squishIndex) > 0) {
+ menu.addSeparator();
+ QAction *closeAllSuites = new QAction(tr("Close All Test Suites"), &menu);
+ menu.addAction(closeAllSuites);
+ closeAllSuites->setEnabled(enabled);
+ }
+
+ menu.exec(mapToGlobal(event->pos()));
+ }
+ return isSquishMenu;
+}
+
void TestNavigationWidget::contextMenuEvent(QContextMenuEvent *event)
{
const bool enabled = !TestRunner::instance()->isTestRunning()
&& m_model->parser()->state() == TestCodeParser::Idle;
const bool hasTests = m_model->hasTests();
+
+ if (handleSquishContextMenuEvent(event, enabled))
+ return;
+
QMenu menu;
QAction *runAll = Core::ActionManager::command(Constants::ACTION_RUN_ALL_ID)->action();
QAction *runSelected = Core::ActionManager::command(Constants::ACTION_RUN_SELECTED_ID)->action();