• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KDED

  • sources
  • kde-4.14
  • kdelibs
  • kded
vfolder_menu.h
Go to the documentation of this file.
1 /*
2  This file is part of the KDE libraries
3  Copyright (c) 2003 Waldo Bastian <bastian@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #ifndef KDED_VFOLDER_MENU_H
21 #define KDED_VFOLDER_MENU_H
22 
23 #include <QtCore/QObject>
24 #include <QtXml/QDomDocument>
25 #include <QtCore/QStringList>
26 #include <QtCore/QHash>
27 #include <QtCore/QSet>
28 #include <QtCore/QStack>
29 
30 #include <kservice.h>
31 
32 class KBuildSycocaInterface;
33 class KBuildServiceFactory;
34 
35 class VFolderMenu : public QObject
36 {
37  Q_OBJECT
38 public:
39  class AppsInfo;
40  class SubMenu {
41  public:
42  SubMenu() : isDeleted(false),apps_info(0) { items.reserve(43); }
43  ~SubMenu() { qDeleteAll(subMenus); }
44 
45  public:
46  QString name;
47  QString directoryFile;
48  QList<SubMenu*> subMenus;
49  QHash<QString,KService::Ptr> items;
50  QHash<QString,KService::Ptr> excludeItems; // Needed when merging due to Move.
51  QDomElement defaultLayoutNode;
52  QDomElement layoutNode;
53  bool isDeleted;
54  QStringList layoutList;
55  AppsInfo *apps_info;
56  };
57 
58  VFolderMenu(KBuildServiceFactory* serviceFactory, KBuildSycocaInterface* kbuildsycocaInterface);
59  ~VFolderMenu();
60 
70  SubMenu *parseMenu(const QString &file, bool forceLegacyLoad=false);
71 
79  QStringList allDirectories();
80 
85  void setTrackId(const QString &id);
86 
87 public:
88  struct MenuItem
89  {
90  enum Type { MI_Service, MI_SubMenu, MI_Separator };
91  Type type;
92  KService::Ptr service;
93  SubMenu *submenu;
94  };
95 
96 public:
97  QStringList m_allDirectories; // A list of all the directories that we touch
98 
99  QStringList m_defaultDataDirs;
100  QStringList m_defaultAppDirs;
101  QStringList m_defaultDirectoryDirs;
102  QStringList m_defaultMergeDirs;
103  QStringList m_defaultLegacyDirs;
104 
105  QStringList m_directoryDirs; // Current set of applicable <DirectoryDir> dirs
106  QHash<QString, SubMenu*> m_legacyNodes; // Dictionary that stores Menu nodes
107  // associated with legacy tree.
108 
109  class DocInfo {
110  public:
111  QString baseDir; // Relative base dir of current menu file
112  QString baseName; // Filename of current menu file without ".menu"
113  QString path; // Full path of current menu file including ".menu"
114  };
115 
116 
117  DocInfo m_docInfo; // DocInfo for current doc
118  QStack<VFolderMenu::DocInfo> m_docInfoStack;
119 
120  class AppsInfo {
121  public:
122  AppsInfo()
123  {
124  dictCategories.reserve(53);
125  applications.reserve(997);
126  appRelPaths.reserve(997);
127  }
128 
129  ~AppsInfo()
130  {
131  }
132 
133  QHash<QString,KService::List> dictCategories; // category -> apps
134  QHash<QString,KService::Ptr> applications; // rel path -> service
135  QHash<KService::Ptr,QString> appRelPaths; // service -> rel path
136  };
137 
138  AppsInfo *m_appsInfo; // AppsInfo for current menu
139  QList<AppsInfo*> m_appsInfoStack; // All applicable AppsInfo for current menu
140  QList<AppsInfo*> m_appsInfoList; // List of all AppsInfo objects.
141  QSet<QString /*menuId*/> m_usedAppsDict; // all applications that have been allocated
142 
143  QDomDocument m_doc;
144  SubMenu *m_rootMenu;
145  SubMenu *m_currentMenu;
146  bool m_forcedLegacyLoad;
147  bool m_legacyLoaded;
148  bool m_track;
149  QString m_trackId;
150 
151 private:
155  KService::Ptr findApplication(const QString &relPath);
156 
160  QList<KService::List*> findCategory(const QString &category);
161 
165  void addApplication(const QString &id, KService::Ptr service);
166 
170  void buildApplicationIndex(bool unusedOnly);
171 
175  void createAppsInfo();
176 
180  void loadAppsInfo();
181 
185  void unloadAppsInfo();
186 
187  QDomDocument loadDoc();
188  void mergeMenus(QDomElement &docElem, QString &name);
189  void mergeFile(QDomElement &docElem, const QDomNode &mergeHere);
190  void loadMenu(const QString &filename);
191 
195  void includeItems(QHash<QString,KService::Ptr>& items1, const QHash<QString,KService::Ptr>& items2);
196 
200  void matchItems(QHash<QString,KService::Ptr>& items1, const QHash<QString,KService::Ptr>& items2);
201 
205  void excludeItems(QHash<QString,KService::Ptr>& items1, const QHash<QString,KService::Ptr>& items2);
206 
214  SubMenu* takeSubMenu(SubMenu *parentMenu, const QString &menuName);
215 
225  void insertSubMenu(VFolderMenu::SubMenu *parentMenu, const QString &menuName, VFolderMenu::SubMenu *newMenu, bool reversePriority=false);
226 
232  void mergeMenu(SubMenu *menu1, SubMenu *menu2, bool reversePriority=false);
233 
238  void insertService(SubMenu *parentMenu, const QString &name, KService::Ptr newService);
239 
244  void registerFile(const QString &file);
245 
249  void markUsedApplications(const QHash<QString,KService::Ptr>& items);
250 
255  void registerDirectory(const QString &directory);
256 
257  void processKDELegacyDirs();
258  void processLegacyDir(const QString &dir, const QString &relDir, const QString &prefix);
259  void processMenu(QDomElement &docElem, int pass);
260  void layoutMenu(VFolderMenu::SubMenu *menu, QStringList defaultLayout);
261  void processCondition(QDomElement &docElem, QHash<QString,KService::Ptr>& items);
262 
263  void initDirs();
264 
265  void pushDocInfo(const QString &fileName, const QString &baseDir = QString());
266  void pushDocInfoParent(const QString &basePath, const QString &baseDir);
267  void popDocInfo();
268 
269  QString absoluteDir(const QString &_dir, const QString &baseDir, bool keepRelativeToCfg=false);
270  QString locateMenuFile(const QString &fileName);
271  QString locateDirectoryFile(const QString &fileName);
272  void loadApplications(const QString&, const QString&);
273 
274 private:
275  KBuildServiceFactory* m_serviceFactory;
276  KBuildSycocaInterface* m_kbuildsycocaInterface;
277 };
278 
279 #endif
VFolderMenu::SubMenu::apps_info
AppsInfo * apps_info
Definition: vfolder_menu.h:55
VFolderMenu::SubMenu::excludeItems
QHash< QString, KService::Ptr > excludeItems
Definition: vfolder_menu.h:50
VFolderMenu::m_directoryDirs
QStringList m_directoryDirs
Definition: vfolder_menu.h:105
VFolderMenu::SubMenu::layoutList
QStringList layoutList
Definition: vfolder_menu.h:54
VFolderMenu::DocInfo
Definition: vfolder_menu.h:109
KSharedPtr< KService >
VFolderMenu::SubMenu::isDeleted
bool isDeleted
Definition: vfolder_menu.h:53
VFolderMenu::m_track
bool m_track
Definition: vfolder_menu.h:148
VFolderMenu::SubMenu
Definition: vfolder_menu.h:40
VFolderMenu::m_allDirectories
QStringList m_allDirectories
Definition: vfolder_menu.h:97
VFolderMenu::m_legacyLoaded
bool m_legacyLoaded
Definition: vfolder_menu.h:147
VFolderMenu::SubMenu::defaultLayoutNode
QDomElement defaultLayoutNode
Definition: vfolder_menu.h:51
VFolderMenu::DocInfo::baseDir
QString baseDir
Definition: vfolder_menu.h:111
VFolderMenu::m_docInfoStack
QStack< VFolderMenu::DocInfo > m_docInfoStack
Definition: vfolder_menu.h:118
QHash::reserve
void reserve(int size)
VFolderMenu::m_currentMenu
SubMenu * m_currentMenu
Definition: vfolder_menu.h:145
VFolderMenu::m_defaultMergeDirs
QStringList m_defaultMergeDirs
Definition: vfolder_menu.h:102
VFolderMenu::MenuItem
Definition: vfolder_menu.h:88
QDomNode
VFolderMenu::m_docInfo
DocInfo m_docInfo
Definition: vfolder_menu.h:117
VFolderMenu::MenuItem::type
Type type
Definition: vfolder_menu.h:91
VFolderMenu::parseMenu
SubMenu * parseMenu(const QString &file, bool forceLegacyLoad=false)
Parses VFolder menu definition and generates a menu layout.
Definition: vfolder_menu.cpp:1590
VFolderMenu::m_appsInfo
AppsInfo * m_appsInfo
Definition: vfolder_menu.h:138
VFolderMenu::DocInfo::path
QString path
Definition: vfolder_menu.h:113
VFolderMenu::m_rootMenu
SubMenu * m_rootMenu
Definition: vfolder_menu.h:144
VFolderMenu::AppsInfo
Definition: vfolder_menu.h:120
VFolderMenu::MenuItem::MI_SubMenu
Definition: vfolder_menu.h:90
VFolderMenu::m_trackId
QString m_trackId
Definition: vfolder_menu.h:149
QObject::name
const char * name() const
VFolderMenu::m_defaultDirectoryDirs
QStringList m_defaultDirectoryDirs
Definition: vfolder_menu.h:101
VFolderMenu::m_defaultLegacyDirs
QStringList m_defaultLegacyDirs
Definition: vfolder_menu.h:103
VFolderMenu
Definition: vfolder_menu.h:35
QHash< QString, KService::Ptr >
VFolderMenu::MenuItem::MI_Service
Definition: vfolder_menu.h:90
VFolderMenu::SubMenu::subMenus
QList< SubMenu * > subMenus
Definition: vfolder_menu.h:48
QObject
VFolderMenu::m_defaultDataDirs
QStringList m_defaultDataDirs
Definition: vfolder_menu.h:99
VFolderMenu::setTrackId
void setTrackId(const QString &id)
Debug function to enable tracking of what happens with a specific menu item id.
Definition: vfolder_menu.cpp:1651
VFolderMenu::SubMenu::layoutNode
QDomElement layoutNode
Definition: vfolder_menu.h:52
VFolderMenu::AppsInfo::appRelPaths
QHash< KService::Ptr, QString > appRelPaths
Definition: vfolder_menu.h:135
VFolderMenu::SubMenu::directoryFile
QString directoryFile
Definition: vfolder_menu.h:47
QSet
QString
QList
VFolderMenu::allDirectories
QStringList allDirectories()
Returns a list of all directories involved in the last call to parseMenu(), excluding the KDE Legacy ...
Definition: vfolder_menu.cpp:88
VFolderMenu::SubMenu::items
QHash< QString, KService::Ptr > items
Definition: vfolder_menu.h:49
VFolderMenu::m_forcedLegacyLoad
bool m_forcedLegacyLoad
Definition: vfolder_menu.h:146
QStringList
kservice.h
VFolderMenu::m_doc
QDomDocument m_doc
Definition: vfolder_menu.h:143
KBuildSycocaInterface
Definition: kbuildsycocainterface.h:25
VFolderMenu::DocInfo::baseName
QString baseName
Definition: vfolder_menu.h:112
VFolderMenu::MenuItem::MI_Separator
Definition: vfolder_menu.h:90
KBuildServiceFactory
Service factory for building ksycoca.
Definition: kbuildservicefactory.h:37
QDomDocument
VFolderMenu::AppsInfo::dictCategories
QHash< QString, KService::List > dictCategories
Definition: vfolder_menu.h:133
VFolderMenu::MenuItem::submenu
SubMenu * submenu
Definition: vfolder_menu.h:93
VFolderMenu::AppsInfo::~AppsInfo
~AppsInfo()
Definition: vfolder_menu.h:129
VFolderMenu::m_legacyNodes
QHash< QString, SubMenu * > m_legacyNodes
Definition: vfolder_menu.h:106
VFolderMenu::SubMenu::SubMenu
SubMenu()
Definition: vfolder_menu.h:42
VFolderMenu::m_appsInfoStack
QList< AppsInfo * > m_appsInfoStack
Definition: vfolder_menu.h:139
VFolderMenu::m_appsInfoList
QList< AppsInfo * > m_appsInfoList
Definition: vfolder_menu.h:140
VFolderMenu::AppsInfo::applications
QHash< QString, KService::Ptr > applications
Definition: vfolder_menu.h:134
VFolderMenu::m_usedAppsDict
QSet< QString > m_usedAppsDict
Definition: vfolder_menu.h:141
VFolderMenu::MenuItem::Type
Type
Definition: vfolder_menu.h:90
VFolderMenu::AppsInfo::AppsInfo
AppsInfo()
Definition: vfolder_menu.h:122
VFolderMenu::VFolderMenu
VFolderMenu(KBuildServiceFactory *serviceFactory, KBuildSycocaInterface *kbuildsycocaInterface)
Definition: vfolder_menu.cpp:307
VFolderMenu::~VFolderMenu
~VFolderMenu()
Definition: vfolder_menu.cpp:317
QDomElement
VFolderMenu::m_defaultAppDirs
QStringList m_defaultAppDirs
Definition: vfolder_menu.h:100
VFolderMenu::SubMenu::name
QString name
Definition: vfolder_menu.h:46
VFolderMenu::MenuItem::service
KService::Ptr service
Definition: vfolder_menu.h:92
QStack
VFolderMenu::SubMenu::~SubMenu
~SubMenu()
Definition: vfolder_menu.h:43
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:26:11 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDED

Skip menu "KDED"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal