File indexing completed on 2024-12-01 03:44:31
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2008 Michael Jansen <kde@michael-jansen.biz> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef KACTIONCATEGORY_H 0009 #define KACTIONCATEGORY_H 0010 0011 #include <kxmlgui_export.h> 0012 0013 #include <QList> 0014 #include <QObject> 0015 #include <QString> 0016 #include <memory> 0017 0018 #include <KStandardAction> 0019 0020 #include "kactioncollection.h" 0021 0022 struct KActionCategoryPrivate; 0023 0024 class QAction; 0025 0026 /** 0027 * @class KActionCategory kactioncategory.h KActionCategory 0028 * 0029 * Categorize actions for KShortcutsEditor. 0030 * 0031 * KActionCategory provides a second level to organize the actions in 0032 * KShortcutsEditor. 0033 * 0034 * The first possibility is using more than one action collection. Each 0035 * actions collection becomes a top level node. 0036 * 0037 * + action collection 1 0038 * + first action 0039 * + second action 0040 * + third action 0041 * + action collection 2 0042 * + first action 0043 * + second action 0044 * + third action 0045 * 0046 * Using KActionCategory it's possible to group the actions of one collection. 0047 * + action collection 1 0048 * + first action 0049 * + first category 0050 * + action 1 in category 0051 * + action 2 in category 0052 * + second action 0053 * 0054 * \section Usage 0055 * 0056 * The usage is analog to action collections. Just create a category and use 0057 * it instead of the collection to create the actions. 0058 * 0059 * The synchronization between KActionCollection and KActionCategory is done 0060 * internally. There is for example no need to remove actions from a category. 0061 * It is done implicitly if the action is removed from the associated 0062 * collection. 0063 * 0064 * \code 0065 * 0066 * KActionCategory *file = new KActionCategory(i18n("File"), actionCollection()); 0067 * file->addAction( 0068 * KStandardAction::New, //< see KStandardAction 0069 * this, //< Receiver 0070 * SLOT(fileNew())); //< SLOT 0071 * 0072 * ... more actions added to file ... 0073 * 0074 * KActionCategory *edit = new KActionCategory(i18n("Edit"), actionCollection()); 0075 * edit->addAction( 0076 * KStandardAction::Copy, //< see KStandardAction 0077 * this, //< Receiver 0078 * SLOT(fileNew())); //< SLOT 0079 * 0080 * ... 0081 * 0082 * \endcode 0083 */ 0084 class KXMLGUI_EXPORT KActionCategory : public QObject 0085 { 0086 Q_OBJECT 0087 0088 Q_PROPERTY(QString text READ text WRITE setText) 0089 0090 public: 0091 /** 0092 * Default constructor 0093 */ 0094 explicit KActionCategory(const QString &text, KActionCollection *parent = nullptr); 0095 0096 /** 0097 * Destructor 0098 */ 0099 ~KActionCategory() override; 0100 0101 /** 0102 * \name Adding Actions 0103 * 0104 * Add a action to the category. 0105 * 0106 * This methods are provided for your convenience. They call the 0107 * corresponding method of KActionCollection. 0108 */ 0109 //@{ 0110 QAction *addAction(const QString &name, QAction *action); 0111 0112 QAction *addAction(KStandardAction::StandardAction actionType, const QObject *receiver = nullptr, const char *member = nullptr); 0113 0114 QAction *addAction(KStandardAction::StandardAction actionType, const QString &name, const QObject *receiver = nullptr, const char *member = nullptr); 0115 0116 QAction *addAction(const QString &name, const QObject *receiver = nullptr, const char *member = nullptr); 0117 0118 template<class ActionType> 0119 ActionType *add(const QString &name, const QObject *receiver = nullptr, const char *member = nullptr) 0120 { 0121 ActionType *action = collection()->add<ActionType>(name, receiver, member); 0122 addAction(action); 0123 return action; 0124 } 0125 0126 //@} 0127 0128 /** 0129 * Returns the actions belonging to this category 0130 */ 0131 const QList<QAction *> actions() const; 0132 0133 /** 0134 * The action collection this category is associated with. 0135 */ 0136 KActionCollection *collection() const; 0137 0138 /** 0139 * The action categorys descriptive text 0140 */ 0141 QString text() const; 0142 0143 /** 0144 * Set the action categorys descriptive text. 0145 */ 0146 void setText(const QString &text); 0147 0148 private: 0149 /** 0150 * Remove \action from this category if found. 0151 */ 0152 KXMLGUI_NO_EXPORT void unlistAction(QAction *action); 0153 0154 /** 0155 * Add action to category 0156 */ 0157 void addAction(QAction *action); // exported because called from template method ActionType *add<ActionType>(...) 0158 0159 private: 0160 //! KActionCollection needs access to some of our helper methods 0161 friend class KActionCollectionPrivate; 0162 0163 //! Implementation details 0164 std::unique_ptr<KActionCategoryPrivate> const d; 0165 }; 0166 0167 #endif /* #ifndef KACTIONCATEGORY_H */