File indexing completed on 2024-10-06 13:26:47
0001 /* 0002 * This file is part of the KDE project 0003 * SPDX-FileCopyrightText: 2007 Will Stephenson <wstephenson@kde.org> 0004 * SPDX-FileCopyrightText: 2009 Ben Cooksley <bcooksley@kde.org> 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef MENUITEM_H 0010 #define MENUITEM_H 0011 0012 #include <KService> 0013 0014 #include "systemsettingsview_export.h" 0015 0016 class QString; 0017 class KCModuleInfo; 0018 class KDesktopFile; 0019 class KPluginMetaData; 0020 template<typename T> class QList; 0021 0022 /** 0023 * @brief Provides a specific item in the list of modules or categories 0024 * 0025 * This provides convenient access to the list of modules, providing information about them 0026 * such as name, module information and its service object.\n 0027 * This is created automatically by System Settings, and is shared among all plugins and so should not 0028 * be modified under any circumstances.\n 0029 * 0030 * System Settings creates it in a tree like manner, with categories containing subcategories and modules, 0031 * and subcategories repeating this.\n 0032 * 0033 * The service object must be set, unless it is the top level item, otherwise using applications 0034 * will crash when attempting to sort the children by weight 0035 * 0036 * @author Ben Cooksley <bcooksley@kde.org> 0037 * @author Will Stephenson <wstephenson@kde.org> 0038 */ 0039 class SYSTEMSETTINGSVIEW_EXPORT MenuItem 0040 { 0041 public: 0042 /** 0043 * Creates a MenuItem. 0044 * @note Will not provide keywords, name, or a module item until a service has been set. 0045 * 0046 * @param isMenu Specifies if it is a category or not. 0047 * @param parent The item it is parented to. Provide 0 for a top level item. 0048 */ 0049 MenuItem(bool isMenu, MenuItem *parent); 0050 0051 /** 0052 * Destroys a MenuItem, including all children, the service object and the module information. 0053 * 0054 * @warning Destroys the KService and KCModuleInfo objects provided by service() and item(). 0055 */ 0056 ~MenuItem(); 0057 0058 /** 0059 * Sorts the children depending on the value of "X-KDE-Weight" in the desktop files of the 0060 * category or module. 0061 */ 0062 void sortChildrenByWeight(); 0063 0064 /** 0065 * Provides the MenuItem for the child at the specified index. 0066 * 0067 * @param index The index of the child. 0068 * @returns The MenuItem object of the specified child. 0069 */ 0070 MenuItem *child(int index); 0071 0072 /** 0073 * Returns the list of keywords, which is used for searching the list of categories and modules. 0074 * 0075 * @note The parent items share all the keywords of their children. 0076 * 0077 * @param doesRemoveDuplicates Whether to remove duplicate keywords from the list. 0078 * @returns The list of keywords the item has. 0079 */ 0080 QStringList keywords(bool doesRemoveDuplicates = true) const; 0081 0082 /** 0083 * Returns the parent of this item. 0084 * 0085 * @returns The MenuItem object of this items parent. 0086 */ 0087 MenuItem *parent() const; 0088 0089 /** 0090 * Provides a list of all the children of this item. 0091 * 0092 * @returns The list of children this has. 0093 */ 0094 QList<MenuItem *> &children() const; 0095 0096 /** 0097 * @return comment of service or description of KPluginMetaData 0098 */ 0099 QString comment() const; 0100 0101 /** 0102 * @return icon of service or iconName of KPluginMetaData 0103 */ 0104 QString iconName() const; 0105 0106 bool isExternalAppModule() const; 0107 0108 bool isSystemsettingsCategory() const; 0109 QString systemsettingsCategoryModule() const; 0110 bool isSystemsettingsRootCategory() const; 0111 0112 /** 0113 * @return true if module represents a KCM plugin 0114 */ 0115 bool isLibrary(); 0116 0117 /** 0118 * Convenience function which provides the name of the current item. 0119 * 0120 * @returns The name of the item, if the service object has been set. 0121 */ 0122 QString &name() const; 0123 0124 /** 0125 * Convenience function which provides the System Settings category of the current item. 0126 * 0127 * @returns The category of the item, if the service object has been set. 0128 */ 0129 QString &category() const; 0130 0131 /** 0132 * Provides the weight of the current item, as determined by its service. 0133 * If the service does not specify a weight, it is 100 0134 * 0135 * @returns The weight of the service 0136 */ 0137 int weight(); 0138 0139 /** 0140 * Provides information on which type the current item is. 0141 * 0142 * @returns true if it is a category. 0143 * @returns false if it is not a category. 0144 */ 0145 bool menu() const; 0146 0147 /** 0148 * Constructs an item which resembles a category using the given filename. 0149 * The properties are read using KConfig 0150 */ 0151 void setCategoryConfig(const KDesktopFile &file); 0152 0153 /** 0154 * Constructs an item which resembles a category using the meta data. 0155 * This method is preferred to setService(const KService &service) 0156 */ 0157 void setMetaData(const KPluginMetaData &data); 0158 0159 KPluginMetaData metaData(); 0160 0161 MenuItem *descendantForModule(const QString &moduleName); 0162 0163 bool showDefaultIndicator() const; 0164 0165 void updateDefaultIndicator(); 0166 0167 void setDefaultIndicator(bool defaultIndicator); 0168 0169 /** 0170 * If true this is the main module of this category and should appear in a more prominent way compared to the others 0171 */ 0172 bool isCategoryOwner() const; 0173 void setCategoryOwner(bool owner); 0174 0175 private: 0176 class Private; 0177 Private *const d; 0178 }; 0179 0180 Q_DECLARE_METATYPE(MenuItem *) 0181 0182 #endif