File indexing completed on 2024-04-28 04:36:29

0001 /*
0002     SPDX-FileCopyrightText: 2008 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_CONTEXTMENUEXTENSION_H
0008 #define KDEVPLATFORM_CONTEXTMENUEXTENSION_H
0009 
0010 #include <QString>
0011 #include <QList>
0012 #include <QScopedPointer>
0013 
0014 #include "interfacesexport.h"
0015 
0016 class QAction;
0017 class QMenu;
0018 
0019 namespace KDevelop
0020 {
0021 class ContextMenuExtensionPrivate;
0022 
0023 /**
0024  * For documentation on how to use this class, @see interfaces/context.h
0025  */
0026 class KDEVPLATFORMINTERFACES_EXPORT ContextMenuExtension
0027 {
0028 public:
0029 
0030     /** The menu group containing file actions */
0031     static const QString FileGroup;
0032     /** menu group containing refactoring actions */
0033     static const QString RefactorGroup;
0034     /** menu group to contain build support actions */
0035     static const QString BuildGroup;
0036     /** menu group to contain run actions */
0037     static const QString RunGroup;
0038     /** menu group to contain debug actions */
0039     static const QString DebugGroup;
0040     /** menu group to contain editing actions */
0041     static const QString EditGroup;
0042     /** menu group to contain version control actions */
0043     static const QString VcsGroup;
0044     /** menu group to contain project actions */
0045     static const QString ProjectGroup;
0046     /** menu group to contain open in embedded editor actions */
0047     static const QString OpenEmbeddedGroup;
0048     /** menu group to contain open with external application actions */
0049     static const QString OpenExternalGroup;
0050     /** menu group to contain file analysis actions */
0051     static const QString AnalyzeFileGroup;
0052     /** menu group to contain project analysis actions */
0053     static const QString AnalyzeProjectGroup;
0054     /** The menu group containing navigation actions */
0055     static const QString NavigationGroup;
0056 
0057     /** menu group that can contain any extension menu.
0058       * Actions for this extension will always be at the end
0059       * of the menu. Plugins using this should think about
0060       * providing a submenu, so the context menu doesn't get cluttered.
0061       */
0062     static const QString ExtensionGroup;
0063 
0064     /**
0065      * create new context menu extension object
0066      */
0067     ContextMenuExtension();
0068     ~ContextMenuExtension();
0069     ContextMenuExtension( const ContextMenuExtension& rhs );
0070 
0071     ContextMenuExtension& operator=( const ContextMenuExtension& rhs );
0072 
0073     /**
0074      * Add an action to the given menu group
0075      * @param group the menu group to which the action should be added
0076      * @param action the action to add to the menu group
0077      */
0078     void addAction( const QString& group, QAction* action );
0079 
0080     /**
0081      * Return all actions that are in the menu group
0082      * @param group the menu group from which to get the actions
0083      * @returns a list of actions for that menu group
0084      */
0085     QList<QAction*> actions( const QString& group ) const;
0086 
0087     /**
0088      * Populate a QMenu with the actions in the given context menu extensions.
0089      */
0090     static void populateMenu(QMenu* menu, const QList<ContextMenuExtension>& extensions);
0091 
0092 private:
0093     const QScopedPointer<class ContextMenuExtensionPrivate> d_ptr;
0094     Q_DECLARE_PRIVATE(ContextMenuExtension)
0095 };
0096 
0097 }
0098 
0099 Q_DECLARE_TYPEINFO(KDevelop::ContextMenuExtension, Q_MOVABLE_TYPE);
0100 
0101 #endif