| 175 | } |
| 176 | |
| 177 | void KDevDocumentView::contextMenuEvent( QContextMenuEvent * event ) |
| 178 | { |
| 179 | QModelIndex proxyIndex = indexAt( event->pos() ); |
| 180 | // for now, ignore clicks on empty space or folder items |
| 181 | if (!proxyIndex.isValid() || !proxyIndex.parent().isValid()) { |
| 182 | return; |
| 183 | } |
| 184 | |
| 185 | updateSelectedDocs(); |
| 186 | |
| 187 | if (!m_selectedDocs.isEmpty()) |
| 188 | { |
| 189 | auto* ctxMenu = new QMenu(this); |
| 190 | |
| 191 | KDevelop::FileContext context(m_selectedDocs); |
| 192 | const QList<KDevelop::ContextMenuExtension> extensions = |
| 193 | m_plugin->core()->pluginController()->queryPluginsForContextMenuExtensions(&context, ctxMenu); |
| 194 | |
| 195 | QList<QAction*> vcsActions; |
| 196 | QList<QAction*> fileActions; |
| 197 | QList<QAction*> editActions; |
| 198 | QList<QAction*> extensionActions; |
| 199 | for (const KDevelop::ContextMenuExtension& ext : extensions) { |
| 200 | fileActions += ext.actions(KDevelop::ContextMenuExtension::FileGroup); |
| 201 | vcsActions += ext.actions(KDevelop::ContextMenuExtension::VcsGroup); |
| 202 | editActions += ext.actions(KDevelop::ContextMenuExtension::EditGroup); |
| 203 | extensionActions += ext.actions(KDevelop::ContextMenuExtension::ExtensionGroup); |
| 204 | } |
| 205 | |
| 206 | appendActions(ctxMenu, fileActions); |
| 207 | |
| 208 | QAction* save = KStandardAction::save(this, SLOT(saveSelected()), ctxMenu); |
| 209 | save->setEnabled(selectedDocHasChanges()); |
| 210 | ctxMenu->addAction(save); |
| 211 | ctxMenu->addAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18nc("@action:inmenu", "Reload"), this, SLOT(reloadSelected())); |
| 212 | |
| 213 | appendActions(ctxMenu, editActions); |
| 214 | appendActions(ctxMenu, vcsActions); |
| 215 | appendActions(ctxMenu, extensionActions); |
| 216 | |
| 217 | ctxMenu->addAction(QIcon::fromTheme(QStringLiteral("document-close")), i18nc("@action:inmenu", "Close"), this, SLOT(closeSelected())); |
| 218 | QAction* closeUnselected = ctxMenu->addAction(QIcon::fromTheme(QStringLiteral("document-close")), i18nc("@action:inmenu", "Close All Other"), this, SLOT(closeUnselected())); |
| 219 | closeUnselected->setEnabled(!m_unselectedDocs.isEmpty()); |
| 220 | |
| 221 | ctxMenu->exec(event->globalPos()); |
| 222 | delete ctxMenu; |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | void KDevDocumentView::appendActions(QMenu* menu, const QList<QAction*>& actions) |
| 227 | { |
nothing calls this directly
no test coverage detected