Public feed #724784

Vermischtes

public diff v1 · immutable
Raw Edit
·published 2007-10-03 21:44 UTC
rendered paste body
Index: kservice.cpp===================================================================--- kservice.cpp	(revision 720772)+++ kservice.cpp	(working copy)@@ -268,6 +268,10 @@  //// +KService::KService()+{+}+ KService::KService( const QString & _name, const QString &_exec, const QString &_icon)     : KSycocaEntry(*new KServicePrivate(QString())) {Index: kservicegroup.cpp===================================================================--- kservicegroup.cpp	(revision 720772)+++ kservicegroup.cpp	(working copy)@@ -32,6 +32,10 @@ #include <kconfiggroup.h>  +KServiceGroup::KServiceGroup()+{+}+ KServiceGroup::KServiceGroup( const QString & name )  : KSycocaEntry(*new KServiceGroupPrivate(name)) {@@ -319,18 +323,63 @@       sortOrder <<_showEmptyMenu <<inlineHeader<<_inlineAlias<<_allowInline; } +QList<KServiceGroup::Ptr> KServiceGroup::groupEntries(EntriesOptions options)+{+    Q_D(KServiceGroup);+    bool sort = options & SortEntries || options & AllowSeparators;+    QList<KServiceGroup::Ptr> list;+    List tmp = d->entries(this, sort, options & ExcludeNoDisplay, options & AllowSeparators, options & SortByGenericName);+    foreach(const SPtr &ptr, tmp) {+        if (ptr->isType(KST_KServiceGroup))+            list.append(Ptr::staticCast(ptr));+        else if (ptr->isType(KST_KServiceSeparator))+            list.append(new KServiceGroup());+        else if (sort && ptr->isType(KST_KService))+            break;+    }+    return list;+}++KService::List KServiceGroup::serviceEntries(EntriesOptions options)+{+    Q_D(KServiceGroup);+    bool sort = options & SortEntries || options & AllowSeparators;+    QList<KService::Ptr> list;+    List tmp = d->entries(this, sort, options & ExcludeNoDisplay, options & AllowSeparators, options & SortByGenericName);+    bool foundService = false;+    foreach(const SPtr &ptr, tmp) {+        if (ptr->isType(KST_KService)) {+            list.append(KService::Ptr::staticCast(ptr));+            foundService = true;+        }+        else if (ptr->isType(KST_KServiceSeparator) && foundService) {+            list.append(new KService());+        }+    }+    return list;+}+ KServiceGroup::List KServiceGroup::entries(bool sort) {-   return entries(sort, true);+    Q_D(KServiceGroup);+    return d->entries(this, sort, true, false, false); }  KServiceGroup::List KServiceGroup::entries(bool sort, bool excludeNoDisplay) {-   return entries(sort, excludeNoDisplay, false);+    Q_D(KServiceGroup);+    return d->entries(this, sort, excludeNoDisplay, false, false); } +KServiceGroup::List+KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName)+{+    Q_D(KServiceGroup);+    return d->entries(this, sort, excludeNoDisplay, allowSeparators, sortByGenericName);+}+ static void addItem(KServiceGroup::List &sorted, const KSycocaEntry::Ptr &p, bool &addSeparator) {    if (addSeparator && !sorted.isEmpty())@@ -340,23 +389,21 @@ }  KServiceGroup::List-KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName)+KServiceGroupPrivate::entries(KServiceGroup *group, bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName) {-    Q_D(KServiceGroup);     KServiceGroup::Ptr grp;-    KServiceGroup* group = this;      // If the entries haven't been loaded yet, we have to reload ourselves     // together with the entries. We can't only load the entries afterwards     // since the offsets could have been changed if the database has changed. -    if (!d->m_bDeep) {+    if (!m_bDeep) { -        grp = KServiceGroupFactory::self()->findGroupByDesktopPath(relPath(), true);+        grp = KServiceGroupFactory::self()->findGroupByDesktopPath(path, true);          group = grp.data();         if (0 == group) // No guarantee that we still exist!-            return List();+            return KServiceGroup::List();     }      if (!sort)@@ -365,9 +412,9 @@     // Sort the list alphabetically, according to locale.     // Groups come first, then services. -    KSortableList<SPtr,QByteArray> slist;-    KSortableList<SPtr,QByteArray> glist;-    for (List::ConstIterator it(group->d_func()->m_serviceList.begin()); it != group->d_func()->m_serviceList.end(); ++it)+    KSortableList<KServiceGroup::SPtr,QByteArray> slist;+    KSortableList<KServiceGroup::SPtr,QByteArray> glist;+    for (KServiceGroup::List::ConstIterator it(group->d_func()->m_serviceList.begin()); it != group->d_func()->m_serviceList.end(); ++it)     {         KSycocaEntry::Ptr p = (*it);         bool noDisplay = p->isType(KST_KServiceGroup) ?@@ -376,7 +423,7 @@         if (excludeNoDisplay && noDisplay)            continue;         // Choose the right list-        KSortableList<SPtr,QByteArray> & list = p->isType(KST_KServiceGroup) ? glist : slist;+        KSortableList<KServiceGroup::SPtr,QByteArray> & list = p->isType(KST_KServiceGroup) ? glist : slist;         QString name;         if (p->isType(KST_KServiceGroup))           name = static_cast<KServiceGroup *>(p.data())->caption();@@ -405,25 +452,25 @@         {             key = name.toLocal8Bit();         }-        list.insert(key,SPtr(*it));+        list.insert(key,KServiceGroup::SPtr(*it));     }     // Now sort     slist.sort();     glist.sort(); -    if (d->sortOrder.isEmpty())+    if (sortOrder.isEmpty())     {-       d->sortOrder << ":M";-       d->sortOrder << ":F";-       d->sortOrder << ":OIH IL[4]"; //just inline header+       sortOrder << ":M";+       sortOrder << ":F";+       sortOrder << ":OIH IL[4]"; //just inline header     } -    QString rp = relPath();+    QString rp = path;     if(rp == "/") rp.clear();      // Iterate through the sort spec list.     // If an entry gets mentioned explicitly, we remove it from the sorted list-    for (QStringList::ConstIterator it(d->sortOrder.begin()); it != d->sortOrder.end(); ++it)+    for (QStringList::ConstIterator it(sortOrder.begin()); it != sortOrder.end(); ++it)     {         const QString &item = *it;         if (item.isEmpty()) continue;@@ -431,7 +478,7 @@         {           QString groupPath = rp + item.mid(1) + '/';            // Remove entry from sorted list of services.-          for(KSortableList<SPtr,QByteArray>::Iterator it2 = glist.begin(); it2 != glist.end(); ++it2)+          for(KSortableList<KServiceGroup::SPtr,QByteArray>::Iterator it2 = glist.begin(); it2 != glist.end(); ++it2)           {              const KServiceGroup::Ptr group = KServiceGroup::Ptr::staticCast( (*it2).value() );              if (group->relPath() == groupPath)@@ -446,7 +493,7 @@            // Remove entry from sorted list of services.            // TODO: Remove item from sortOrder-list if not found            // TODO: This prevents duplicates-          for(KSortableList<SPtr,QByteArray>::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2)+          for(KSortableList<KServiceGroup::SPtr,QByteArray>::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2)           {              const KService::Ptr service = KService::Ptr::staticCast( (*it2).value() );              if (service->menuId() == item)@@ -458,12 +505,12 @@         }     } -    List sorted;+    KServiceGroup::List sorted;      bool needSeparator = false;     // Iterate through the sort spec list.     // Add the entries to the list according to the sort spec.-    for (QStringList::ConstIterator it(d->sortOrder.begin()); it != d->sortOrder.end(); ++it)+    for (QStringList::ConstIterator it(sortOrder.begin()); it != sortOrder.end(); ++it)     {         const QString &item = *it;         if (item.isEmpty()) continue;@@ -493,7 +540,7 @@               {                   parseAttribute( *it3,  showEmptyMenu, showInline, showInlineHeader, showInlineAlias, inlineValue );               }-              for(KSortableList<SPtr,QByteArray>::Iterator it2 = glist.begin(); it2 != glist.end(); ++it2)+              for(KSortableList<KServiceGroup::SPtr,QByteArray>::Iterator it2 = glist.begin(); it2 != glist.end(); ++it2)               {                   KServiceGroup::Ptr group = KServiceGroup::Ptr::staticCast( (*it2).value() );                   group->setShowEmptyMenu(  showEmptyMenu  );@@ -507,7 +554,7 @@           else if (item == ":M")           {             // Add sorted list of sub-menus-            for(KSortableList<SPtr,QByteArray>::const_iterator it2 = glist.begin(); it2 != glist.end(); ++it2)+            for(KSortableList<KServiceGroup::SPtr,QByteArray>::const_iterator it2 = glist.begin(); it2 != glist.end(); ++it2)             {               addItem(sorted, (*it2).value(), needSeparator);             }@@ -515,7 +562,7 @@           else if (item == ":F")           {             // Add sorted list of services-            for(KSortableList<SPtr,QByteArray>::const_iterator it2 = slist.begin(); it2 != slist.end(); ++it2)+            for(KSortableList<KServiceGroup::SPtr,QByteArray>::const_iterator it2 = slist.begin(); it2 != slist.end(); ++it2)             {               addItem(sorted, (*it2).value(), needSeparator);             }@@ -523,8 +570,8 @@           else if (item == ":A")           {             // Add sorted lists of services and submenus-            KSortableList<SPtr,QByteArray>::Iterator it_s = slist.begin();-            KSortableList<SPtr,QByteArray>::Iterator it_g = glist.begin();+            KSortableList<KServiceGroup::SPtr,QByteArray>::Iterator it_s = slist.begin();+            KSortableList<KServiceGroup::SPtr,QByteArray>::Iterator it_g = glist.begin();              while(true)             {@@ -562,7 +609,7 @@         {             QString groupPath = rp + item.mid(1) + '/'; -            for (List::ConstIterator it2(group->d_func()->m_serviceList.begin()); it2 != group->d_func()->m_serviceList.end(); ++it2)+            for (KServiceGroup::List::ConstIterator it2(group->d_func()->m_serviceList.begin()); it2 != group->d_func()->m_serviceList.end(); ++it2)             {                 if (!(*it2)->isType(KST_KServiceGroup))                     continue;@@ -573,7 +620,7 @@                     {                         ++it;                         const QString &nextItem =-                            (it == d->sortOrder.end()) ? QString() : *it;+                            (it == sortOrder.end()) ? QString() : *it;                          if ( nextItem.startsWith( ":O" ) )                         {@@ -600,7 +647,7 @@                         else                             it--; -                        addItem(sorted, SPtr::staticCast(group), needSeparator);+                        addItem(sorted, KServiceGroup::SPtr::staticCast(group), needSeparator);                     }                     break;                 }@@ -608,7 +655,7 @@         }         else         {-            for (List::ConstIterator it2(group->d_func()->m_serviceList.begin()); it2 != group->d_func()->m_serviceList.end(); ++it2)+            for (KServiceGroup::List::ConstIterator it2(group->d_func()->m_serviceList.begin()); it2 != group->d_func()->m_serviceList.end(); ++it2)             {                 if (!(*it2)->isType(KST_KService))                     continue;@@ -626,7 +673,7 @@     return sorted; } -void KServiceGroup::parseAttribute( const QString &item ,  bool &showEmptyMenu, bool &showInline, bool &showInlineHeader, bool & showInlineAlias , int &inlineValue )+void KServiceGroupPrivate::parseAttribute( const QString &item ,  bool &showEmptyMenu, bool &showInline, bool &showInlineHeader, bool & showInlineAlias , int &inlineValue ) {     if( item == "ME") //menu empty         showEmptyMenu=true;@@ -730,3 +777,4 @@ { } +Index: kservicegroup.h===================================================================--- kservicegroup.h	(revision 720772)+++ kservicegroup.h	(working copy)@@ -20,7 +20,8 @@ #define KSERVICEGROUP_H  #include <kdecore_export.h>-#include "ksycocaentry.h"+#include <ksycocaentry.h>+#include <kservice.h>  class KBuildServiceGroupFactory; @@ -66,6 +67,11 @@   typedef QList<SPtr> List; public:   /**+   * Constructs an invalid service object+   */+  KServiceGroup();++  /**    * Construct a dummy servicegroup indexed with @p name.    * @param name the name of the service group    */@@ -198,6 +204,29 @@   List entries(bool sorted = false);    /**+   * options for groupEntries and serviceEntries+   */+    enum EntriesOption+    {+      NoOptions = 0x0,+      SortEntries = 0x1,    /*< sort items */+      ExcludeNoDisplay = 0x2, /*< exclude items marked "NoDisplay" */+      AllowSeparators = 0x4, /*< allow separator items to be included */+      SortByGenericName = 0x8 /*< sort by GenericName+Name instead of Name+GenericName */+    };+    Q_DECLARE_FLAGS(EntriesOptions, EntriesOption)+ +    /**+     * subgroups for this service group+     */+    QList<Ptr> groupEntries(EntriesOptions options = ExcludeNoDisplay);++    /**+     * entries of this service group+     */+    KService::List serviceEntries(EntriesOptions options = ExcludeNoDisplay);++  /**    * Returns a non-empty string if the group is a special base group.    * By default, "Settings/" is the kcontrol base group ("settings")    * and "System/Screensavers/" is the screensavers base group ("screensavers").@@ -243,11 +272,6 @@    */   static Ptr childGroup(const QString &parent); -  /**-   * This function parse attributes into menu-   */-    void parseAttribute( const QString &item ,  bool &showEmptyMenu, bool &showInline, bool &showInlineHeader, bool & showInlineAlias ,int &inlineValue );- protected:   /**    * @internalIndex: kservicegroup_p.h===================================================================--- kservicegroup_p.h	(revision 720772)+++ kservicegroup_p.h	(working copy)@@ -56,6 +56,14 @@      int childCount() const; +    KServiceGroup::List+    entries(KServiceGroup *group, bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName);+  /**+   * This function parse attributes into menu+   */+    void parseAttribute( const QString &item ,  bool &showEmptyMenu, bool &showInline, bool &showInlineHeader, bool & showInlineAlias ,int &inlineValue );++     bool m_bNoDisplay;     bool m_bShowEmptyMenu;     bool m_bShowInlineHeader;