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