| 316 | } |
| 317 | |
| 318 | void ProjectTreeView::popupContextMenu( const QPoint &pos ) |
| 319 | { |
| 320 | QList<ProjectBaseItem*> itemlist; |
| 321 | if ( indexAt( pos ).isValid() ) { |
| 322 | itemlist = selectedProjects(); |
| 323 | } |
| 324 | QMenu menu( this ); |
| 325 | |
| 326 | KDevelop::ProjectItemContextImpl context(itemlist); |
| 327 | const QList<ContextMenuExtension> extensions = ICore::self()->pluginController()->queryPluginsForContextMenuExtensions(&context, &menu); |
| 328 | |
| 329 | QList<QAction*> buildActions; |
| 330 | QList<QAction*> vcsActions; |
| 331 | QList<QAction*> analyzeActions; |
| 332 | QList<QAction*> extActions; |
| 333 | QList<QAction*> projectActions; |
| 334 | QList<QAction*> fileActions; |
| 335 | QList<QAction*> runActions; |
| 336 | for (const ContextMenuExtension& ext : extensions) { |
| 337 | buildActions += ext.actions(ContextMenuExtension::BuildGroup); |
| 338 | fileActions += ext.actions(ContextMenuExtension::FileGroup); |
| 339 | projectActions += ext.actions(ContextMenuExtension::ProjectGroup); |
| 340 | vcsActions += ext.actions(ContextMenuExtension::VcsGroup); |
| 341 | analyzeActions += ext.actions(ContextMenuExtension::AnalyzeProjectGroup); |
| 342 | extActions += ext.actions(ContextMenuExtension::ExtensionGroup); |
| 343 | runActions += ext.actions(ContextMenuExtension::RunGroup); |
| 344 | } |
| 345 | |
| 346 | if ( analyzeActions.count() ) |
| 347 | { |
| 348 | auto* analyzeMenu = new QMenu(i18nc("@title:menu", "Analyze with"), &menu); |
| 349 | analyzeMenu->setIcon(QIcon::fromTheme(QStringLiteral("dialog-ok"))); |
| 350 | for (QAction* act : std::as_const(analyzeActions)) { |
| 351 | analyzeMenu->addAction( act ); |
| 352 | } |
| 353 | analyzeActions = {analyzeMenu->menuAction()}; |
| 354 | } |
| 355 | |
| 356 | popupContextMenu_appendActions(menu, buildActions); |
| 357 | popupContextMenu_appendActions(menu, runActions ); |
| 358 | popupContextMenu_appendActions(menu, fileActions); |
| 359 | popupContextMenu_appendActions(menu, vcsActions); |
| 360 | popupContextMenu_appendActions(menu, analyzeActions); |
| 361 | popupContextMenu_appendActions(menu, extActions); |
| 362 | |
| 363 | if (itemlist.size() == 1 && itemlist.first()->folder() && !itemlist.first()->folder()->parent()) { |
| 364 | auto* projectConfig = new QAction(i18nc("@action:inmenu", "Open Configuration..."), &menu); |
| 365 | projectConfig->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); |
| 366 | connect( projectConfig, &QAction::triggered, this, &ProjectTreeView::openProjectConfig ); |
| 367 | projectActions << projectConfig; |
| 368 | } |
| 369 | popupContextMenu_appendActions(menu, projectActions); |
| 370 | |
| 371 | if ( !menu.isEmpty() ) { |
| 372 | menu.exec(viewport()->mapToGlobal(pos)); |
| 373 | } |
| 374 | } |
| 375 |
nothing calls this directly
no test coverage detected