diff options
Diffstat (limited to 'src')
41 files changed, 7108 insertions, 6586 deletions
| diff --git a/src/core/bufferfragment_p.h b/src/core/bufferfragment_p.h index 5a753ad4..117d8db3 100644 --- a/src/core/bufferfragment_p.h +++ b/src/core/bufferfragment_p.h @@ -23,158 +23,168 @@  #define bf_isspace(str) ((str == ' ') || (str == '\t') || (str == '\r')) -// This class provides wrapper around fragment of existing buffer (array of bytes).  +// This class provides wrapper around fragment of existing buffer (array of bytes).  // If underlying buffer gets deleted, all BufferFragment objects referencing it become invalid.  // Use toByteArray() to make deep copy of the buffer fragment. -//  +//  // API is designed to subset of QByteArray methods with some changes:  // - trim() is like QByteArray.trimmed(), but it modifies current object  // - truncateLeft() provides way to cut off beginning of the buffer  // - split() works more like strtok_r than QByteArray.split()  // - truncateLeft() and mid() require position argument to be valid -     -class KConfigIniBackend::BufferFragment  + +class KConfigIniBackend::BufferFragment  { -     +  public: -    BufferFragment() : d(0), len(0)  +    BufferFragment() : d(0), len(0)      {      } -     -    BufferFragment(char* buf, int size) : d(buf), len(size)  + +    BufferFragment(char *buf, int size) : d(buf), len(size)      {      } -    int length() const  +    int length() const      {          return len;      } -    char at(unsigned int i) const  +    char at(unsigned int i) const      {          Q_ASSERT(i < len);          return d[i];      } -    void clear()  +    void clear()      {          len = 0;      } -    const char* constData() const  +    const char *constData() const      {          return d;      } -    char* data() const  +    char *data() const      {          return d;      } -    void trim()  +    void trim()      {          while (bf_isspace(*d) && len > 0) {              d++;              len--;          } -        while (len > 0 && bf_isspace(d[len - 1]))  +        while (len > 0 && bf_isspace(d[len - 1])) {              len--; +        }      }      // similar to strtok_r . On first call variable pointed by start should be set to 0. -    // Each call will update *start to new starting position.  -    BufferFragment split(char c, unsigned int* start)  +    // Each call will update *start to new starting position. +    BufferFragment split(char c, unsigned int *start)      {          while (*start < len) {              int end = indexOf(c, *start); -            if (end == -1) end = len; +            if (end == -1) { +                end = len; +            }              BufferFragment line(d + (*start), end - (*start));              *start = end + 1;              return line;          }          return BufferFragment();      } -     -    bool isEmpty() const  + +    bool isEmpty() const      {          return (len == 0);      } -    BufferFragment left(unsigned int size) const  +    BufferFragment left(unsigned int size) const      { -        return BufferFragment(d, qMin(size,len)); +        return BufferFragment(d, qMin(size, len));      } -    void truncateLeft(unsigned int size)  +    void truncateLeft(unsigned int size)      {          Q_ASSERT(size <= len);          d += size;          len -= size;      } -    void truncate(unsigned int pos)  +    void truncate(unsigned int pos)      { -        if (pos < len) len = pos; +        if (pos < len) { +            len = pos; +        }      } -    bool isNull() const  +    bool isNull() const      {          return (d == 0);      } -         -    BufferFragment mid(unsigned int pos, int length=-1) const  + +    BufferFragment mid(unsigned int pos, int length = -1) const      {          Q_ASSERT(pos < len);          int size = length; -        if (length == -1 || (pos + length) > len)  +        if (length == -1 || (pos + length) > len) {              size = len - pos; +        }          return BufferFragment(d + pos, size);      } -    bool operator==(const QByteArray& other) const +    bool operator==(const QByteArray &other) const      { -        return (other.size() == (int)len && memcmp(d,other.constData(),len) == 0); +        return (other.size() == (int)len && memcmp(d, other.constData(), len) == 0);      } -    bool operator!=(const QByteArray& other) const  +    bool operator!=(const QByteArray &other) const      { -        return (other.size() != (int)len || memcmp(d,other.constData(),len) != 0); +        return (other.size() != (int)len || memcmp(d, other.constData(), len) != 0);      } -     -    int indexOf(char c, unsigned int from = 0) const  + +    int indexOf(char c, unsigned int from = 0) const      { -        const char* cursor = d + from - 1; -        const char* end = d + len; -        while ( ++cursor < end)  -            if (*cursor ==c )  -                return cursor - d;  +        const char *cursor = d + from - 1; +        const char *end = d + len; +        while (++cursor < end) +            if (*cursor == c) { +                return cursor - d; +            }          return -1;      } -    int lastIndexOf(char c) const  +    int lastIndexOf(char c) const      {          int from = len - 1; -        while (from >= 0)  -            if (d[from] == c)  -                return from;  -            else  +        while (from >= 0) +            if (d[from] == c) { +                return from; +            } else {                  from--; +            }          return -1;      } -    QByteArray toByteArray() const { -        return QByteArray(d,len); +    QByteArray toByteArray() const +    { +        return QByteArray(d, len);      } -     +      // this is faster than toByteArray, but returned QByteArray becomes invalid      // when buffer for this BufferFragment disappears -    QByteArray toVolatileByteArray() const { +    QByteArray toVolatileByteArray() const +    {          return QByteArray::fromRawData(d, len);      }  private: -    char* d; +    char *d;      unsigned int len;  }; diff --git a/src/core/conversion_check.h b/src/core/conversion_check.h index 23bdcf04..55bd8826 100644 --- a/src/core/conversion_check.h +++ b/src/core/conversion_check.h @@ -18,7 +18,6 @@     Boston, MA 02110-1301, USA.  */ -  #ifndef CONVERSION_CHECK_H  #define CONVERSION_CHECK_H @@ -32,7 +31,8 @@  class QColor;  class QFont; -namespace ConversionCheck { +namespace ConversionCheck +{  // used to distinguish between supported/unsupported types  struct supported { }; @@ -40,43 +40,47 @@ struct unsupported { };  // traits type class to define support for constraints  template <typename T> -struct QVconvertible -{ -  typedef unsupported toQString; -  typedef unsupported toQVariant; +struct QVconvertible { +    typedef unsupported toQString; +    typedef unsupported toQVariant;  };  // constraint classes  template <typename T> -struct type_toQString -{ -  void constraint() { supported x = y; Q_UNUSED(x); } -  typename QVconvertible<T>::toQString y; +struct type_toQString { +    void constraint() +    { +        supported x = y; +        Q_UNUSED(x); +    } +    typename QVconvertible<T>::toQString y;  };  template <typename T> -struct type_toQVariant -{ -  void constraint() { supported x = y; Q_UNUSED(x); } -  typename QVconvertible<T>::toQVariant y; +struct type_toQVariant { +    void constraint() +    { +        supported x = y; +        Q_UNUSED(x); +    } +    typename QVconvertible<T>::toQVariant y;  }; -  // check if T is convertible to QString thru QVariant  // if not supported can't be used in QList<T> functions  template <typename T>  inline void to_QString()  { -  void (type_toQString<T>::*x)() = &type_toQString<T>::constraint; -  Q_UNUSED(x); +    void (type_toQString<T>::*x)() = &type_toQString<T>::constraint; +    Q_UNUSED(x);  }  // check if T is convertible to QVariant & supported in readEntry/writeEntry  template <typename T>  inline void to_QVariant()  { -  void (type_toQVariant<T>::*x)() = &type_toQVariant<T>::constraint; -  Q_UNUSED(x); +    void (type_toQVariant<T>::*x)() = &type_toQVariant<T>::constraint; +    Q_UNUSED(x);  }  // define for all types handled in readEntry/writeEntry @@ -84,10 +88,10 @@ inline void to_QVariant()  //                  can be used in QList<T> functions  // variant_support - has a QVariant constructor  #define QVConversions(type, string_support, variant_support) \ -template <> struct QVconvertible<type> {\ - typedef string_support toQString;\ - typedef variant_support toQVariant;\ -} +    template <> struct QVconvertible<type> {\ +        typedef string_support toQString;\ +        typedef variant_support toQVariant;\ +    }  // The only types needed here are the types handled in readEntry/writeEntry  // the default QVconvertible will take care of the rest. diff --git a/src/core/kauthorized.cpp b/src/core/kauthorized.cpp index abf479ca..c9b14f50 100644 --- a/src/core/kauthorized.cpp +++ b/src/core/kauthorized.cpp @@ -40,301 +40,302 @@  extern bool kde_kiosk_exception; -  class URLActionRule  { -  public: +public:  #define checkExactMatch(s, b) \ -        if (s.isEmpty()) b = true; \ -        else if (s[s.length()-1] == QLatin1Char('!')) \ -        { b = false; s.truncate(s.length()-1); } \ -        else b = true; +    if (s.isEmpty()) b = true; \ +    else if (s[s.length()-1] == QLatin1Char('!')) \ +    { b = false; s.truncate(s.length()-1); } \ +    else b = true;  #define checkStartWildCard(s, b) \ -        if (s.isEmpty()) b = true; \ -        else if (s[0] == QLatin1Char('*')) \ -        { b = true; s = s.mid(1); } \ -        else b = false; +    if (s.isEmpty()) b = true; \ +    else if (s[0] == QLatin1Char('*')) \ +    { b = true; s = s.mid(1); } \ +    else b = false;  #define checkEqual(s, b) \ -        b = (s == QString::fromLatin1("=")); - -     URLActionRule(const QByteArray &act, -                   const QString &bProt, const QString &bHost, const QString &bPath, -                   const QString &dProt, const QString &dHost, const QString &dPath, -                   bool perm) -                   : action(act), -                     baseProt(bProt), baseHost(bHost), basePath(bPath), -                     destProt(dProt), destHost(dHost), destPath(dPath), -                     permission(perm) -                   { -                      checkExactMatch(baseProt, baseProtWildCard); -                      checkStartWildCard(baseHost, baseHostWildCard); -                      checkExactMatch(basePath, basePathWildCard); -                      checkExactMatch(destProt, destProtWildCard); -                      checkStartWildCard(destHost, destHostWildCard); -                      checkExactMatch(destPath, destPathWildCard); -                      checkEqual(destProt, destProtEqual); -                      checkEqual(destHost, destHostEqual); -                   } - -     bool baseMatch(const QUrl &url, const QString &protClass) const -     { -        if (baseProtWildCard) -        { -           if ( !baseProt.isEmpty() && !url.scheme().startsWith(baseProt) && -                (protClass.isEmpty() || (protClass != baseProt)) ) -              return false; -        } -        else -        { -           if ( (url.scheme() != baseProt) && -                (protClass.isEmpty() || (protClass != baseProt)) ) -              return false; -        } -        if (baseHostWildCard) -        { -           if (!baseHost.isEmpty() && !url.host().endsWith(baseHost)) -              return false; -        } -        else -        { -           if (url.host() != baseHost) -              return false; +    b = (s == QString::fromLatin1("=")); + +    URLActionRule(const QByteArray &act, +                  const QString &bProt, const QString &bHost, const QString &bPath, +                  const QString &dProt, const QString &dHost, const QString &dPath, +                  bool perm) +        : action(act), +          baseProt(bProt), baseHost(bHost), basePath(bPath), +          destProt(dProt), destHost(dHost), destPath(dPath), +          permission(perm) +    { +        checkExactMatch(baseProt, baseProtWildCard); +        checkStartWildCard(baseHost, baseHostWildCard); +        checkExactMatch(basePath, basePathWildCard); +        checkExactMatch(destProt, destProtWildCard); +        checkStartWildCard(destHost, destHostWildCard); +        checkExactMatch(destPath, destPathWildCard); +        checkEqual(destProt, destProtEqual); +        checkEqual(destHost, destHostEqual); +    } + +    bool baseMatch(const QUrl &url, const QString &protClass) const +    { +        if (baseProtWildCard) { +            if (!baseProt.isEmpty() && !url.scheme().startsWith(baseProt) && +                    (protClass.isEmpty() || (protClass != baseProt))) { +                return false; +            } +        } else { +            if ((url.scheme() != baseProt) && +                    (protClass.isEmpty() || (protClass != baseProt))) { +                return false; +            }          } -        if (basePathWildCard) -        { -           if (!basePath.isEmpty() && !url.path().startsWith(basePath)) -              return false; +        if (baseHostWildCard) { +            if (!baseHost.isEmpty() && !url.host().endsWith(baseHost)) { +                return false; +            } +        } else { +            if (url.host() != baseHost) { +                return false; +            }          } -        else -        { -           if (url.path() != basePath) -              return false; +        if (basePathWildCard) { +            if (!basePath.isEmpty() && !url.path().startsWith(basePath)) { +                return false; +            } +        } else { +            if (url.path() != basePath) { +                return false; +            }          }          return true; -     } - -     bool destMatch(const QUrl &url, const QString &protClass, const QUrl &base, const QString &baseClass) const -     { -        if (destProtEqual) -        { -           if ( (url.scheme() != base.scheme()) && -                (protClass.isEmpty() || baseClass.isEmpty() || protClass != baseClass) ) -              return false; -        } -        else if (destProtWildCard) -        { -           if ( !destProt.isEmpty() && !url.scheme().startsWith(destProt) && -                (protClass.isEmpty() || (protClass != destProt)) ) -              return false; -        } -        else -        { -           if ( (url.scheme() != destProt) && -                (protClass.isEmpty() || (protClass != destProt)) ) -              return false; -        } -        if (destHostWildCard) -        { -           if (!destHost.isEmpty() && !url.host().endsWith(destHost)) -              return false; -        } -        else if (destHostEqual) -        { -           if (url.host() != base.host()) -              return false; -        } -        else -        { -           if (url.host() != destHost) -              return false; +    } + +    bool destMatch(const QUrl &url, const QString &protClass, const QUrl &base, const QString &baseClass) const +    { +        if (destProtEqual) { +            if ((url.scheme() != base.scheme()) && +                    (protClass.isEmpty() || baseClass.isEmpty() || protClass != baseClass)) { +                return false; +            } +        } else if (destProtWildCard) { +            if (!destProt.isEmpty() && !url.scheme().startsWith(destProt) && +                    (protClass.isEmpty() || (protClass != destProt))) { +                return false; +            } +        } else { +            if ((url.scheme() != destProt) && +                    (protClass.isEmpty() || (protClass != destProt))) { +                return false; +            }          } -        if (destPathWildCard) -        { -           if (!destPath.isEmpty() && !url.path().startsWith(destPath)) -              return false; +        if (destHostWildCard) { +            if (!destHost.isEmpty() && !url.host().endsWith(destHost)) { +                return false; +            } +        } else if (destHostEqual) { +            if (url.host() != base.host()) { +                return false; +            } +        } else { +            if (url.host() != destHost) { +                return false; +            }          } -        else -        { -           if (url.path() != destPath) -              return false; +        if (destPathWildCard) { +            if (!destPath.isEmpty() && !url.path().startsWith(destPath)) { +                return false; +            } +        } else { +            if (url.path() != destPath) { +                return false; +            }          }          return true; -     } - -     QByteArray action; -     QString baseProt; -     QString baseHost; -     QString basePath; -     QString destProt; -     QString destHost; -     QString destPath; -     bool baseProtWildCard : 1; -     bool baseHostWildCard : 1; -     bool basePathWildCard : 1; -     bool destProtWildCard : 1; -     bool destHostWildCard : 1; -     bool destPathWildCard : 1; -     bool destProtEqual    : 1; -     bool destHostEqual    : 1; -     bool permission; +    } + +    QByteArray action; +    QString baseProt; +    QString baseHost; +    QString basePath; +    QString destProt; +    QString destHost; +    QString destPath; +    bool baseProtWildCard : 1; +    bool baseHostWildCard : 1; +    bool basePathWildCard : 1; +    bool destProtWildCard : 1; +    bool destHostWildCard : 1; +    bool destPathWildCard : 1; +    bool destProtEqual    : 1; +    bool destHostEqual    : 1; +    bool permission;  }; -class KAuthorizedPrivate { +class KAuthorizedPrivate +{  public: -  KAuthorizedPrivate() -    :   actionRestrictions( false ), blockEverything(false),mutex(QMutex::Recursive) -  { -    Q_ASSERT_X(QCoreApplication::instance(),"KAuthorizedPrivate()","There has to be an existing QCoreApplication::instance() pointer"); +    KAuthorizedPrivate() +        :   actionRestrictions(false), blockEverything(false), mutex(QMutex::Recursive) +    { +        Q_ASSERT_X(QCoreApplication::instance(), "KAuthorizedPrivate()", "There has to be an existing QCoreApplication::instance() pointer"); -    KSharedConfig::Ptr config = KSharedConfig::openConfig(); +        KSharedConfig::Ptr config = KSharedConfig::openConfig(); -    Q_ASSERT_X(config,"KAuthorizedPrivate()","There has to be an existing KSharedConfig::openConfig() pointer"); -    if (!config) { -      blockEverything=true; -      return; +        Q_ASSERT_X(config, "KAuthorizedPrivate()", "There has to be an existing KSharedConfig::openConfig() pointer"); +        if (!config) { +            blockEverything = true; +            return; +        } +        actionRestrictions = config->hasGroup("KDE Action Restrictions") && !kde_kiosk_exception;      } -    actionRestrictions = config->hasGroup("KDE Action Restrictions" ) && !kde_kiosk_exception; -  } -  ~KAuthorizedPrivate() -  { -  } +    ~KAuthorizedPrivate() +    { +    } -  bool actionRestrictions : 1; -  bool blockEverything : 1; -  QList<URLActionRule> urlActionRestrictions; -  QMutex mutex; +    bool actionRestrictions : 1; +    bool blockEverything : 1; +    QList<URLActionRule> urlActionRestrictions; +    QMutex mutex;  }; -Q_GLOBAL_STATIC(KAuthorizedPrivate,authPrivate) +Q_GLOBAL_STATIC(KAuthorizedPrivate, authPrivate)  #define MY_D KAuthorizedPrivate *d=authPrivate(); -  bool KAuthorized::authorize(const QString &genericAction)  { -   MY_D -   if (d->blockEverything) return false; +    MY_D +    if (d->blockEverything) { +        return false; +    } -   if (!d->actionRestrictions) -      return true; +    if (!d->actionRestrictions) { +        return true; +    } -   KConfigGroup cg(KSharedConfig::openConfig(), "KDE Action Restrictions"); -   return cg.readEntry(genericAction, true); +    KConfigGroup cg(KSharedConfig::openConfig(), "KDE Action Restrictions"); +    return cg.readEntry(genericAction, true);  } -bool KAuthorized::authorizeKAction(const QString& action) +bool KAuthorized::authorizeKAction(const QString &action)  { -   MY_D -   if (d->blockEverything) return false; -   if (!d->actionRestrictions || action.isEmpty()) -      return true; +    MY_D +    if (d->blockEverything) { +        return false; +    } +    if (!d->actionRestrictions || action.isEmpty()) { +        return true; +    } -   return authorize(QLatin1String("action/") + action); +    return authorize(QLatin1String("action/") + action);  }  bool KAuthorized::authorizeControlModule(const QString &menuId)  { -   if (menuId.isEmpty() || kde_kiosk_exception) -      return true; -   KConfigGroup cg(KSharedConfig::openConfig(), "KDE Control Module Restrictions"); -   return cg.readEntry(menuId, true); +    if (menuId.isEmpty() || kde_kiosk_exception) { +        return true; +    } +    KConfigGroup cg(KSharedConfig::openConfig(), "KDE Control Module Restrictions"); +    return cg.readEntry(menuId, true);  }  QStringList KAuthorized::authorizeControlModules(const QStringList &menuIds)  { -   KConfigGroup cg(KSharedConfig::openConfig(), "KDE Control Module Restrictions"); -   QStringList result; -   for(QStringList::ConstIterator it = menuIds.begin(); -       it != menuIds.end(); ++it) -   { -      if (cg.readEntry(*it, true)) -         result.append(*it); -   } -   return result; +    KConfigGroup cg(KSharedConfig::openConfig(), "KDE Control Module Restrictions"); +    QStringList result; +    for (QStringList::ConstIterator it = menuIds.begin(); +            it != menuIds.end(); ++it) { +        if (cg.readEntry(*it, true)) { +            result.append(*it); +        } +    } +    return result;  }  static void initUrlActionRestrictions()  { -  MY_D -  const QString Any; - -  d->urlActionRestrictions.clear(); -  d->urlActionRestrictions.append( -	URLActionRule("open", Any, Any, Any, Any, Any, Any, true)); -  d->urlActionRestrictions.append( -	URLActionRule("list", Any, Any, Any, Any, Any, Any, true)); +    MY_D +    const QString Any; + +    d->urlActionRestrictions.clear(); +    d->urlActionRestrictions.append( +        URLActionRule("open", Any, Any, Any, Any, Any, Any, true)); +    d->urlActionRestrictions.append( +        URLActionRule("list", Any, Any, Any, Any, Any, Any, true));  // TEST:  //  d->urlActionRestrictions.append( -//	URLActionRule("list", Any, Any, Any, Any, Any, Any, false)); +//  URLActionRule("list", Any, Any, Any, Any, Any, Any, false));  //  d->urlActionRestrictions.append( -//	URLActionRule("list", Any, Any, Any, "file", Any, QDir::homePath(), true)); -  d->urlActionRestrictions.append( -	URLActionRule("link", Any, Any, Any, QLatin1String(":internet"), Any, Any, true)); -  d->urlActionRestrictions.append( -	URLActionRule("redirect", Any, Any, Any, QLatin1String(":internet"), Any, Any, true)); - -  // We allow redirections to file: but not from internet protocols, redirecting to file: -  // is very popular among io-slaves and we don't want to break them -  d->urlActionRestrictions.append( -	URLActionRule("redirect", Any, Any, Any, QLatin1String("file"), Any, Any, true)); -  d->urlActionRestrictions.append( -	URLActionRule("redirect", QLatin1String(":internet"), Any, Any, QLatin1String("file"), Any, Any, false)); - -  // local protocols may redirect everywhere -  d->urlActionRestrictions.append( -	URLActionRule("redirect", QLatin1String(":local"), Any, Any, Any, Any, Any, true)); - -  // Anyone may redirect to about: -  d->urlActionRestrictions.append( -	URLActionRule("redirect", Any, Any, Any, QLatin1String("about"), Any, Any, true)); - -  // Anyone may redirect to mailto: -  d->urlActionRestrictions.append( -     URLActionRule("redirect", Any, Any, Any, QLatin1String("mailto"), Any, Any, true)); - -  // Anyone may redirect to itself, cq. within it's own group -  d->urlActionRestrictions.append( -	URLActionRule("redirect", Any, Any, Any, QLatin1String("="), Any, Any, true)); - -  d->urlActionRestrictions.append( -	URLActionRule("redirect", QLatin1String("about"), Any, Any, Any, Any, Any, true)); - - -  KConfigGroup cg(KSharedConfig::openConfig(), "KDE URL Restrictions"); -  int count = cg.readEntry("rule_count", 0); -  QString keyFormat = QString::fromLatin1("rule_%1"); -  for(int i = 1; i <= count; i++) -  { -    QString key = keyFormat.arg(i); -    const QStringList rule = cg.readEntry(key, QStringList()); -    if (rule.count() != 8) -      continue; -    const QByteArray action = rule[0].toLatin1(); -    QString refProt = rule[1]; -    QString refHost = rule[2]; -    QString refPath = rule[3]; -    QString urlProt = rule[4]; -    QString urlHost = rule[5]; -    QString urlPath = rule[6]; -    bool bEnabled   = (rule[7].toLower() == QLatin1String("true")); - -    if (refPath.startsWith(QLatin1String("$HOME"))) -       refPath.replace(0, 5, QDir::homePath()); -    else if (refPath.startsWith(QLatin1Char('~'))) -       refPath.replace(0, 1, QDir::homePath()); -    if (urlPath.startsWith(QLatin1String("$HOME"))) -       urlPath.replace(0, 5, QDir::homePath()); -    else if (urlPath.startsWith(QLatin1Char('~'))) -       urlPath.replace(0, 1, QDir::homePath()); - -    if (refPath.startsWith(QLatin1String("$TMP"))) -       refPath.replace(0, 4, QDir::tempPath()); -    if (urlPath.startsWith(QLatin1String("$TMP"))) -       urlPath.replace(0, 4, QDir::tempPath()); +//  URLActionRule("list", Any, Any, Any, "file", Any, QDir::homePath(), true)); +    d->urlActionRestrictions.append( +        URLActionRule("link", Any, Any, Any, QLatin1String(":internet"), Any, Any, true)); +    d->urlActionRestrictions.append( +        URLActionRule("redirect", Any, Any, Any, QLatin1String(":internet"), Any, Any, true)); + +    // We allow redirections to file: but not from internet protocols, redirecting to file: +    // is very popular among io-slaves and we don't want to break them +    d->urlActionRestrictions.append( +        URLActionRule("redirect", Any, Any, Any, QLatin1String("file"), Any, Any, true)); +    d->urlActionRestrictions.append( +        URLActionRule("redirect", QLatin1String(":internet"), Any, Any, QLatin1String("file"), Any, Any, false)); + +    // local protocols may redirect everywhere +    d->urlActionRestrictions.append( +        URLActionRule("redirect", QLatin1String(":local"), Any, Any, Any, Any, Any, true)); + +    // Anyone may redirect to about: +    d->urlActionRestrictions.append( +        URLActionRule("redirect", Any, Any, Any, QLatin1String("about"), Any, Any, true)); + +    // Anyone may redirect to mailto: +    d->urlActionRestrictions.append( +        URLActionRule("redirect", Any, Any, Any, QLatin1String("mailto"), Any, Any, true)); + +    // Anyone may redirect to itself, cq. within it's own group +    d->urlActionRestrictions.append( +        URLActionRule("redirect", Any, Any, Any, QLatin1String("="), Any, Any, true));      d->urlActionRestrictions.append( -	URLActionRule( action, refProt, refHost, refPath, urlProt, urlHost, urlPath, bEnabled)); -  } +        URLActionRule("redirect", QLatin1String("about"), Any, Any, Any, Any, Any, true)); + +    KConfigGroup cg(KSharedConfig::openConfig(), "KDE URL Restrictions"); +    int count = cg.readEntry("rule_count", 0); +    QString keyFormat = QString::fromLatin1("rule_%1"); +    for (int i = 1; i <= count; i++) { +        QString key = keyFormat.arg(i); +        const QStringList rule = cg.readEntry(key, QStringList()); +        if (rule.count() != 8) { +            continue; +        } +        const QByteArray action = rule[0].toLatin1(); +        QString refProt = rule[1]; +        QString refHost = rule[2]; +        QString refPath = rule[3]; +        QString urlProt = rule[4]; +        QString urlHost = rule[5]; +        QString urlPath = rule[6]; +        bool bEnabled   = (rule[7].toLower() == QLatin1String("true")); + +        if (refPath.startsWith(QLatin1String("$HOME"))) { +            refPath.replace(0, 5, QDir::homePath()); +        } else if (refPath.startsWith(QLatin1Char('~'))) { +            refPath.replace(0, 1, QDir::homePath()); +        } +        if (urlPath.startsWith(QLatin1String("$HOME"))) { +            urlPath.replace(0, 5, QDir::homePath()); +        } else if (urlPath.startsWith(QLatin1Char('~'))) { +            urlPath.replace(0, 1, QDir::homePath()); +        } + +        if (refPath.startsWith(QLatin1String("$TMP"))) { +            refPath.replace(0, 4, QDir::tempPath()); +        } +        if (urlPath.startsWith(QLatin1String("$TMP"))) { +            urlPath.replace(0, 4, QDir::tempPath()); +        } + +        d->urlActionRestrictions.append( +            URLActionRule(action, refProt, refHost, refPath, urlProt, urlHost, urlPath, bEnabled)); +    }  }  namespace KAuthorized @@ -342,52 +343,55 @@ namespace KAuthorized  // Called by KAuthorized::allowUrlAction in KIO  KCONFIGCORE_EXPORT void allowUrlActionInternal(const QString &action, const QUrl &_baseURL, const QUrl &_destURL)  { -  MY_D -  QMutexLocker locker((&d->mutex)); +    MY_D +    QMutexLocker locker((&d->mutex));  #if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0) -  const QString basePath = _baseURL.adjusted(QUrl::StripTrailingSlash).path(); -  const QString destPath = _destURL.adjusted(QUrl::StripTrailingSlash).path(); +    const QString basePath = _baseURL.adjusted(QUrl::StripTrailingSlash).path(); +    const QString destPath = _destURL.adjusted(QUrl::StripTrailingSlash).path();  #else -  const QString basePath = QUrl(_baseURL.toString(QUrl::StripTrailingSlash)).path(); -  const QString destPath = QUrl(_destURL.toString(QUrl::StripTrailingSlash)).path(); +    const QString basePath = QUrl(_baseURL.toString(QUrl::StripTrailingSlash)).path(); +    const QString destPath = QUrl(_destURL.toString(QUrl::StripTrailingSlash)).path();  #endif -  d->urlActionRestrictions.append( URLActionRule -      ( action.toLatin1(), _baseURL.scheme(), _baseURL.host(), basePath, -        _destURL.scheme(), _destURL.host(), destPath, true)); +    d->urlActionRestrictions.append(URLActionRule +                                    (action.toLatin1(), _baseURL.scheme(), _baseURL.host(), basePath, +                                     _destURL.scheme(), _destURL.host(), destPath, true));  }  // Called by KAuthorized::authorizeUrlAction in KIO -KCONFIGCORE_EXPORT bool authorizeUrlActionInternal(const QString& action, const QUrl &_baseURL, const QUrl &_destURL, const QString& baseClass, const QString& destClass) +KCONFIGCORE_EXPORT bool authorizeUrlActionInternal(const QString &action, const QUrl &_baseURL, const QUrl &_destURL, const QString &baseClass, const QString &destClass)  { -  MY_D -  QMutexLocker locker(&(d->mutex)); -  if (d->blockEverything) return false; - -  if (_destURL.isEmpty()) -     return true; - -  bool result = false; -  if (d->urlActionRestrictions.isEmpty()) -     initUrlActionRestrictions(); - -  QUrl baseURL(_baseURL); -  baseURL.setPath(QDir::cleanPath(baseURL.path())); - -  QUrl destURL(_destURL); -  destURL.setPath(QDir::cleanPath(destURL.path())); - -  Q_FOREACH(const URLActionRule &rule, d->urlActionRestrictions) { -     if ((result != rule.permission) && // No need to check if it doesn't make a difference -         (action == QLatin1String(rule.action.constData())) && -         rule.baseMatch(baseURL, baseClass) && -         rule.destMatch(destURL, destClass, baseURL, baseClass)) -     { -        result = rule.permission; -     } -  } -  return result; +    MY_D +    QMutexLocker locker(&(d->mutex)); +    if (d->blockEverything) { +        return false; +    } + +    if (_destURL.isEmpty()) { +        return true; +    } + +    bool result = false; +    if (d->urlActionRestrictions.isEmpty()) { +        initUrlActionRestrictions(); +    } + +    QUrl baseURL(_baseURL); +    baseURL.setPath(QDir::cleanPath(baseURL.path())); + +    QUrl destURL(_destURL); +    destURL.setPath(QDir::cleanPath(destURL.path())); + +    Q_FOREACH (const URLActionRule &rule, d->urlActionRestrictions) { +        if ((result != rule.permission) && // No need to check if it doesn't make a difference +                (action == QLatin1String(rule.action.constData())) && +                rule.baseMatch(baseURL, baseClass) && +                rule.destMatch(destURL, destClass, baseURL, baseClass)) { +            result = rule.permission; +        } +    } +    return result;  }  } // namespace diff --git a/src/core/kauthorized.h b/src/core/kauthorized.h index a16368a8..45dd8284 100644 --- a/src/core/kauthorized.h +++ b/src/core/kauthorized.h @@ -34,39 +34,39 @@ class QStringList;  */  namespace KAuthorized  { -  /** -   * Returns whether a certain action is authorized -   * @param genericAction The name of a generic action -   * @return true if the action is authorized -   * @todo what are the generic actions? -   */ -  KCONFIGCORE_EXPORT bool authorize(const QString& genericAction); +/** + * Returns whether a certain action is authorized + * @param genericAction The name of a generic action + * @return true if the action is authorized + * @todo what are the generic actions? + */ +KCONFIGCORE_EXPORT bool authorize(const QString &genericAction); -  /** -   * Returns whether a certain KAction is authorized. -   * -   * @param action The name of a KAction action. The name is prepended -   * with "action/" before being passed to authorize() -   * @return true if the KAction is authorized -   */ -  KCONFIGCORE_EXPORT bool authorizeKAction(const QString& action); +/** + * Returns whether a certain KAction is authorized. + * + * @param action The name of a KAction action. The name is prepended + * with "action/" before being passed to authorize() + * @return true if the KAction is authorized + */ +KCONFIGCORE_EXPORT bool authorizeKAction(const QString &action); -  /** -   * Returns whether access to a certain control module is authorized. -   * -   * @param menuId identifying the control module, e.g. kde-mouse.desktop -   * @return true if access to the module is authorized, false otherwise. -   */ -  KCONFIGCORE_EXPORT bool authorizeControlModule(const QString& menuId); +/** + * Returns whether access to a certain control module is authorized. + * + * @param menuId identifying the control module, e.g. kde-mouse.desktop + * @return true if access to the module is authorized, false otherwise. + */ +KCONFIGCORE_EXPORT bool authorizeControlModule(const QString &menuId); -  /** -   * Returns which control modules from a given list are authorized for access. -   * -   * @param menuIds list of menu-ids of control modules; -   * an example of a menu-id is kde-mouse.desktop. -   * @return Those control modules for which access has been authorized. -   */ -  KCONFIGCORE_EXPORT QStringList authorizeControlModules(const QStringList& menuIds); +/** + * Returns which control modules from a given list are authorized for access. + * + * @param menuIds list of menu-ids of control modules; + * an example of a menu-id is kde-mouse.desktop. + * @return Those control modules for which access has been authorized. + */ +KCONFIGCORE_EXPORT QStringList authorizeControlModules(const QStringList &menuIds);  } diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp index b311a366..4f5553d5 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -30,8 +30,14 @@  #include <fcntl.h>  #ifdef Q_OS_WIN -static inline FILE* popen(const char *cmd, const char *mode) { return _popen(cmd, mode); } -static inline int pclose(FILE* stream) { return _pclose(stream); } +static inline FILE *popen(const char *cmd, const char *mode) +{ +    return _popen(cmd, mode); +} +static inline int pclose(FILE *stream) +{ +    return _pclose(stream); +}  #else  #include <unistd.h>  #endif @@ -49,7 +55,7 @@ static inline int pclose(FILE* stream) { return _pclose(stream); }  #include <QtCore/QProcess>  #include <QtCore/QSet> -bool KConfigPrivate::mappingsRegistered=false; +bool KConfigPrivate::mappingsRegistered = false;  KConfigPrivate::KConfigPrivate(KConfig::OpenFlags flags,                                 QStandardPaths::StandardLocation resourceType) @@ -61,13 +67,14 @@ KConfigPrivate::KConfigPrivate(KConfig::OpenFlags flags,      sGlobalFileName = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1String("/kdeglobals");      static int use_etc_kderc = -1; -    if (use_etc_kderc < 0) -        use_etc_kderc = !qEnvironmentVariableIsSet("KDE_SKIP_KDERC"); // for unit tests +    if (use_etc_kderc < 0) { +        use_etc_kderc = !qEnvironmentVariableIsSet("KDE_SKIP_KDERC");    // for unit tests +    }      if (use_etc_kderc) {          etc_kderc =  #ifdef Q_OS_WIN -            QFile::decodeName( qgetenv("WINDIR") + "/kde4rc" ); +            QFile::decodeName(qgetenv("WINDIR") + "/kde4rc");  #else              QLatin1String("/etc/kde4rc");  #endif @@ -98,7 +105,6 @@ KConfigPrivate::KConfigPrivate(KConfig::OpenFlags flags,  #endif  } -  bool KConfigPrivate::lockLocal()  {      if (mBackend) { @@ -108,10 +114,10 @@ bool KConfigPrivate::lockLocal()      return true;  } -void KConfigPrivate::copyGroup(const QByteArray& source, const QByteArray& destination, -                                KConfigGroup *otherGroup, KConfigBase::WriteConfigFlags flags) const +void KConfigPrivate::copyGroup(const QByteArray &source, const QByteArray &destination, +                               KConfigGroup *otherGroup, KConfigBase::WriteConfigFlags flags) const  { -    KEntryMap& otherMap = otherGroup->config()->d_ptr->entryMap; +    KEntryMap &otherMap = otherGroup->config()->d_ptr->entryMap;      const int len = source.length();      const bool sameName = (destination == source); @@ -120,15 +126,17 @@ void KConfigPrivate::copyGroup(const QByteArray& source, const QByteArray& desti      // as dirty erroneously      bool dirtied = false; -    for (KEntryMap::ConstIterator entryMapIt( entryMap.constBegin() ); entryMapIt != entryMap.constEnd(); ++entryMapIt) { -        const QByteArray& group = entryMapIt.key().mGroup; +    for (KEntryMap::ConstIterator entryMapIt(entryMap.constBegin()); entryMapIt != entryMap.constEnd(); ++entryMapIt) { +        const QByteArray &group = entryMapIt.key().mGroup; -        if (!group.startsWith(source)) // nothing to do +        if (!group.startsWith(source)) { // nothing to do              continue; +        }          // don't copy groups that start with the same prefix, but are not sub-groups -        if (group.length() > len && group[len] != '\x1d') +        if (group.length() > len && group[len] != '\x1d') {              continue; +        }          KEntryKey newKey = entryMapIt.key(); @@ -136,8 +144,9 @@ void KConfigPrivate::copyGroup(const QByteArray& source, const QByteArray& desti              newKey.bLocal = true;          } -        if (!sameName) +        if (!sameName) {              newKey.mGroup.replace(0, len, destination); +        }          KEntry entry = entryMap[ entryMapIt.key() ];          dirtied = entry.bDirty = flags & KConfigBase::Persistent; @@ -154,33 +163,35 @@ void KConfigPrivate::copyGroup(const QByteArray& source, const QByteArray& desti      }  } -QString KConfigPrivate::expandString(const QString& value) +QString KConfigPrivate::expandString(const QString &value)  {      QString aValue = value;      // check for environment variables and make necessary translations -    int nDollarPos = aValue.indexOf( QLatin1Char('$') ); -    while( nDollarPos != -1 && nDollarPos+1 < aValue.length()) { +    int nDollarPos = aValue.indexOf(QLatin1Char('$')); +    while (nDollarPos != -1 && nDollarPos + 1 < aValue.length()) {          // there is at least one $ -        if( aValue[nDollarPos+1] == QLatin1Char('(') ) { -            int nEndPos = nDollarPos+1; +        if (aValue[nDollarPos + 1] == QLatin1Char('(')) { +            int nEndPos = nDollarPos + 1;              // the next character is not $ -            while ( (nEndPos <= aValue.length()) && (aValue[nEndPos]!=QLatin1Char(')')) ) +            while ((nEndPos <= aValue.length()) && (aValue[nEndPos] != QLatin1Char(')'))) {                  nEndPos++; +            }              nEndPos++; -            QString cmd = aValue.mid( nDollarPos+2, nEndPos-nDollarPos-3 ); +            QString cmd = aValue.mid(nDollarPos + 2, nEndPos - nDollarPos - 3);              QString result;  #if 0 // Removed in KDE Frameworks 5. No such concept anymore. Just set your PATH. -            QByteArray oldpath = qgetenv( "PATH" ); +            QByteArray oldpath = qgetenv("PATH");              QByteArray newpath;              if (KComponentData::hasMainComponent()) {                  newpath = QFile::encodeName(KGlobal::dirs()->resourceDirs("exe").join(QChar::fromLatin1(KPATH_SEPARATOR))); -                if (!newpath.isEmpty() && !oldpath.isEmpty()) +                if (!newpath.isEmpty() && !oldpath.isEmpty()) {                      newpath += KPATH_SEPARATOR; +                }              }              newpath += oldpath; -            qputenv( "PATH", newpath); +            qputenv("PATH", newpath);  #endif  // FIXME: wince does not have pipes @@ -193,58 +204,61 @@ QString KConfigPrivate::expandString(const QString& value)              }  #endif  #if 0 // Removed in KDE Frameworks 5, see above. -            qputenv( "PATH", oldpath); +            qputenv("PATH", oldpath);  #endif -            aValue.replace( nDollarPos, nEndPos-nDollarPos, result ); +            aValue.replace(nDollarPos, nEndPos - nDollarPos, result);              nDollarPos += result.length(); -        } else if( aValue[nDollarPos+1] != QLatin1Char('$') ) { -            int nEndPos = nDollarPos+1; +        } else if (aValue[nDollarPos + 1] != QLatin1Char('$')) { +            int nEndPos = nDollarPos + 1;              // the next character is not $              QString aVarName; -            if ( aValue[nEndPos] == QLatin1Char('{') ) { -                while ( (nEndPos <= aValue.length()) && (aValue[nEndPos] != QLatin1Char('}')) ) +            if (aValue[nEndPos] == QLatin1Char('{')) { +                while ((nEndPos <= aValue.length()) && (aValue[nEndPos] != QLatin1Char('}'))) {                      nEndPos++; +                }                  nEndPos++; -                aVarName = aValue.mid( nDollarPos+2, nEndPos-nDollarPos-3 ); +                aVarName = aValue.mid(nDollarPos + 2, nEndPos - nDollarPos - 3);              } else { -                while ( nEndPos <= aValue.length() && +                while (nEndPos <= aValue.length() &&                          (aValue[nEndPos].isNumber() || -                        aValue[nEndPos].isLetter() || -                        aValue[nEndPos] == QLatin1Char('_') ) ) +                         aValue[nEndPos].isLetter() || +                         aValue[nEndPos] == QLatin1Char('_'))) {                      nEndPos++; -                aVarName = aValue.mid( nDollarPos+1, nEndPos-nDollarPos-1 ); +                } +                aVarName = aValue.mid(nDollarPos + 1, nEndPos - nDollarPos - 1);              }              QString env;              if (!aVarName.isEmpty()) {  #ifdef Q_OS_WIN -                if (aVarName == QLatin1String("HOME")) +                if (aVarName == QLatin1String("HOME")) {                      env = QDir::homePath(); -                else +                } else  #endif                  {                      QByteArray pEnv = qgetenv(aVarName.toLatin1().constData()); -                    if( !pEnv.isEmpty() ) +                    if (!pEnv.isEmpty()) {                          env = QString::fromLocal8Bit(pEnv.constData()); +                    }                  } -                aValue.replace(nDollarPos, nEndPos-nDollarPos, env); +                aValue.replace(nDollarPos, nEndPos - nDollarPos, env);                  nDollarPos += env.length(); -            } else -                aValue.remove( nDollarPos, nEndPos-nDollarPos ); +            } else { +                aValue.remove(nDollarPos, nEndPos - nDollarPos); +            }          } else {              // remove one of the dollar signs -            aValue.remove( nDollarPos, 1 ); +            aValue.remove(nDollarPos, 1);              nDollarPos++;          } -        nDollarPos = aValue.indexOf( QLatin1Char('$'), nDollarPos ); +        nDollarPos = aValue.indexOf(QLatin1Char('$'), nDollarPos);      }      return aValue;  } - -KConfig::KConfig(const QString& file, OpenFlags mode, +KConfig::KConfig(const QString &file, OpenFlags mode,                   QStandardPaths::StandardLocation resourceType) -  : d_ptr(new KConfigPrivate(mode, resourceType)) +    : d_ptr(new KConfigPrivate(mode, resourceType))  {      d_ptr->changeFileName(file); // set the local file name @@ -252,7 +266,7 @@ KConfig::KConfig(const QString& file, OpenFlags mode,      reparseConfiguration();  } -KConfig::KConfig(const QString& file, const QString& backend, QStandardPaths::StandardLocation resourceType) +KConfig::KConfig(const QString &file, const QString &backend, QStandardPaths::StandardLocation resourceType)      : d_ptr(new KConfigPrivate(SimpleConfig, resourceType))  {      d_ptr->mBackend = KConfigBackend::create(file, backend); @@ -271,8 +285,9 @@ KConfig::KConfig(KConfigPrivate &d)  KConfig::~KConfig()  {      Q_D(KConfig); -    if (d->bDirty && (d->mBackend && d->mBackend->ref.load() == 1)) +    if (d->bDirty && (d->mBackend && d->mBackend->ref.load() == 1)) {          sync(); +    }      delete d;  } @@ -281,8 +296,8 @@ QStringList KConfig::groupList() const      Q_D(const KConfig);      QSet<QString> groups; -    for (KEntryMap::ConstIterator entryMapIt( d->entryMap.constBegin() ); entryMapIt != d->entryMap.constEnd(); ++entryMapIt) { -        const KEntryKey& key = entryMapIt.key(); +    for (KEntryMap::ConstIterator entryMapIt(d->entryMap.constBegin()); entryMapIt != d->entryMap.constEnd(); ++entryMapIt) { +        const KEntryKey &key = entryMapIt.key();          const QByteArray group = key.mGroup;          if (key.mKey.isNull() && !group.isEmpty() && group != "<default>" && group != "$Version") {              const QString groupname = QString::fromUtf8(group); @@ -293,13 +308,13 @@ QStringList KConfig::groupList() const      return groups.toList();  } -QStringList KConfigPrivate::groupList(const QByteArray& group) const +QStringList KConfigPrivate::groupList(const QByteArray &group) const  {      QByteArray theGroup = group + '\x1d';      QSet<QString> groups; -    for (KEntryMap::ConstIterator entryMapIt( entryMap.constBegin() ); entryMapIt != entryMap.constEnd(); ++entryMapIt) { -        const KEntryKey& key = entryMapIt.key(); +    for (KEntryMap::ConstIterator entryMapIt(entryMap.constBegin()); entryMapIt != entryMap.constEnd(); ++entryMapIt) { +        const KEntryKey &key = entryMapIt.key();          if (key.mKey.isNull() && key.mGroup.startsWith(theGroup)) {              const QString groupname = QString::fromUtf8(key.mGroup.mid(theGroup.length()));              groups << groupname.left(groupname.indexOf(QLatin1Char('\x1d'))); @@ -310,14 +325,14 @@ QStringList KConfigPrivate::groupList(const QByteArray& group) const  }  // List all sub groups, including subsubgroups -QSet<QByteArray> KConfigPrivate::allSubGroups(const QByteArray& parentGroup) const +QSet<QByteArray> KConfigPrivate::allSubGroups(const QByteArray &parentGroup) const  {      QSet<QByteArray> groups;      QByteArray theGroup = parentGroup + '\x1d';      groups << parentGroup;      for (KEntryMap::const_iterator entryMapIt = entryMap.begin(); entryMapIt != entryMap.end(); ++entryMapIt) { -        const KEntryKey& key = entryMapIt.key(); +        const KEntryKey &key = entryMapIt.key();          if (key.mKey.isNull() && key.mGroup.startsWith(theGroup)) {              groups << key.mGroup;          } @@ -325,21 +340,21 @@ QSet<QByteArray> KConfigPrivate::allSubGroups(const QByteArray& parentGroup) con      return groups;  } -bool KConfigPrivate::hasNonDeletedEntries(const QByteArray& group) const +bool KConfigPrivate::hasNonDeletedEntries(const QByteArray &group) const  {      const QSet<QByteArray> allGroups = allSubGroups(group); -    Q_FOREACH(const QByteArray& aGroup, allGroups) { +    Q_FOREACH (const QByteArray &aGroup, allGroups) {          // Could be optimized, let's use the slow way for now          // Check for any non-deleted entry -        if (!keyListImpl(aGroup).isEmpty()) +        if (!keyListImpl(aGroup).isEmpty()) {              return true; +        }      }      return false;  } - -QStringList KConfigPrivate::keyListImpl(const QByteArray& theGroup) const +QStringList KConfigPrivate::keyListImpl(const QByteArray &theGroup) const  {      QStringList keys; @@ -350,9 +365,10 @@ QStringList KConfigPrivate::keyListImpl(const QByteArray& theGroup) const          QSet<QString> tmp;          for (; it != theEnd && it.key().mGroup == theGroup; ++it) { -            const KEntryKey& key = it.key(); -            if (key.mGroup == theGroup && !key.mKey.isNull() && !it->bDeleted) +            const KEntryKey &key = it.key(); +            if (key.mGroup == theGroup && !key.mKey.isNull() && !it->bDeleted) {                  tmp << QString::fromUtf8(key.mKey); +            }          }          keys = tmp.toList();      } @@ -360,14 +376,14 @@ QStringList KConfigPrivate::keyListImpl(const QByteArray& theGroup) const      return keys;  } -QStringList KConfig::keyList(const QString& aGroup) const +QStringList KConfig::keyList(const QString &aGroup) const  {      Q_D(const KConfig);      const QByteArray theGroup(aGroup.isEmpty() ? "<default>" : aGroup.toUtf8());      return d->keyListImpl(theGroup);  } -QMap<QString,QString> KConfig::entryMap(const QString& aGroup) const +QMap<QString, QString> KConfig::entryMap(const QString &aGroup) const  {      Q_D(const KConfig);      QMap<QString, QString> theMap; @@ -386,9 +402,9 @@ QMap<QString,QString> KConfig::entryMap(const QString& aGroup) const                  // with the non-localized entry                  if (!theMap.contains(key)) {                      if (it->bExpand) { -                        theMap.insert(key,KConfigPrivate::expandString(QString::fromUtf8(it->mValue.constData()))); +                        theMap.insert(key, KConfigPrivate::expandString(QString::fromUtf8(it->mValue.constData())));                      } else { -                        theMap.insert(key,QString::fromUtf8(it->mValue.constData())); +                        theMap.insert(key, QString::fromUtf8(it->mValue.constData()));                      }                  }              } @@ -422,7 +438,7 @@ bool KConfig::sync()          // Rewrite global/local config only if there is a dirty entry in it.          bool writeGlobals = false;          bool writeLocals = false; -        Q_FOREACH (const KEntry& e, d->entryMap) { +        Q_FOREACH (const KEntry &e, d->entryMap) {              if (e.bDirty) {                  if (e.bGlobal) {                      writeGlobals = true; @@ -472,8 +488,9 @@ void KConfig::markAsClean()      // clear any dirty flags that entries might have set      const KEntryMapIterator theEnd = d->entryMap.end(); -    for (KEntryMapIterator it = d->entryMap.begin(); it != theEnd; ++it) +    for (KEntryMapIterator it = d->entryMap.begin(); it != theEnd; ++it) {          it->bDirty = false; +    }  }  bool KConfig::isDirty() const @@ -485,7 +502,7 @@ bool KConfig::isDirty() const  void KConfig::checkUpdate(const QString &id, const QString &updateFile)  {      const KConfigGroup cg(this, "$Version"); -    const QString cfg_id = updateFile+QLatin1Char(':')+id; +    const QString cfg_id = updateFile + QLatin1Char(':') + id;      const QStringList ids = cg.readEntry("update_info", QStringList());      if (!ids.contains(cfg_id)) {  #if 0 @@ -497,18 +514,20 @@ void KConfig::checkUpdate(const QString &id, const QString &updateFile)      }  } -KConfig* KConfig::copyTo(const QString &file, KConfig *config) const +KConfig *KConfig::copyTo(const QString &file, KConfig *config) const  {      Q_D(const KConfig); -    if (!config) +    if (!config) {          config = new KConfig(QString(), SimpleConfig, d->resourceType); +    }      config->d_func()->changeFileName(file);      config->d_func()->entryMap = d->entryMap;      config->d_func()->bFileImmutable = false;      const KEntryMapIterator theEnd = config->d_func()->entryMap.end(); -    for (KEntryMapIterator it = config->d_func()->entryMap.begin(); it != theEnd; ++it) +    for (KEntryMapIterator it = config->d_func()->entryMap.begin(); it != theEnd; ++it) {          it->bDirty = true; +    }      config->d_ptr->bDirty = true;      return config; @@ -522,7 +541,7 @@ QString KConfig::name() const  Q_GLOBAL_STATIC(QString, globalMainConfigName) -void KConfig::setMainConfigName(const QString& str) +void KConfig::setMainConfigName(const QString &str)  {      *globalMainConfigName() = str;  } @@ -531,20 +550,21 @@ QString KConfig::mainConfigName()  {      // --config on the command line overrides everything else      const QStringList args = QCoreApplication::arguments(); -    for (int i = 1; i < args.count() ; ++i) { -        if (args.at(i) == QLatin1String("--config") && i < args.count()-1) { -            return args.at(i+1); +    for (int i = 1; i < args.count(); ++i) { +        if (args.at(i) == QLatin1String("--config") && i < args.count() - 1) { +            return args.at(i + 1);          }      }      const QString globalName = *globalMainConfigName(); -    if (!globalName.isEmpty()) +    if (!globalName.isEmpty()) {          return globalName; +    }      QString appName = QCoreApplication::applicationName();      return appName + QLatin1String("rc");  } -void KConfigPrivate::changeFileName(const QString& name) +void KConfigPrivate::changeFileName(const QString &name)  {      fileName = name; @@ -564,8 +584,9 @@ void KConfigPrivate::changeFileName(const QString& name)          }      } else if (QDir::isAbsolutePath(fileName)) {          fileName = QFileInfo(fileName).canonicalFilePath(); -        if (fileName.isEmpty()) // file doesn't exist (yet) +        if (fileName.isEmpty()) { // file doesn't exist (yet)              fileName = name; +        }          file = fileName;      } else {          file = QStandardPaths::writableLocation(resourceType) + QLatin1Char('/') + fileName; @@ -579,10 +600,11 @@ void KConfigPrivate::changeFileName(const QString& name)      bSuppressGlobal = (file.compare(sGlobalFileName, Qt::CaseInsensitive) == 0);  #endif -    if (bDynamicBackend || !mBackend) // allow dynamic changing of backend +    if (bDynamicBackend || !mBackend) { // allow dynamic changing of backend          mBackend = KConfigBackend::create(file); -    else +    } else {          mBackend->setFilePath(file); +    }      configState = mBackend->accessMode();  } @@ -595,30 +617,34 @@ void KConfig::reparseConfiguration()      }      // Don't lose pending changes -    if (!d->isReadOnly() && d->bDirty) +    if (!d->isReadOnly() && d->bDirty) {          sync(); +    }      d->entryMap.clear();      d->bFileImmutable = false;      // Parse all desired files from the least to the most specific. -    if (d->wantGlobals()) +    if (d->wantGlobals()) {          d->parseGlobalFiles(); +    }      d->parseConfigFiles();  } -  QStringList KConfigPrivate::getGlobalFiles() const  {      QStringList globalFiles; -    Q_FOREACH (const QString& dir1, QStandardPaths::locateAll(QStandardPaths::GenericConfigLocation, QLatin1String("kdeglobals"))) +    Q_FOREACH (const QString &dir1, QStandardPaths::locateAll(QStandardPaths::GenericConfigLocation, QLatin1String("kdeglobals"))) {          globalFiles.push_front(dir1); -    Q_FOREACH (const QString& dir2, QStandardPaths::locateAll(QStandardPaths::GenericConfigLocation, QLatin1String("system.kdeglobals"))) +    } +    Q_FOREACH (const QString &dir2, QStandardPaths::locateAll(QStandardPaths::GenericConfigLocation, QLatin1String("system.kdeglobals"))) {          globalFiles.push_front(dir2); -    if (!etc_kderc.isEmpty()) +    } +    if (!etc_kderc.isEmpty()) {          globalFiles.push_front(etc_kderc); +    }      return globalFiles;  } @@ -630,8 +656,8 @@ void KConfigPrivate::parseGlobalFiles()      // TODO: can we cache the values in etc_kderc / other global files      //       on a per-application basis?      const QByteArray utf8Locale = locale.toUtf8(); -    Q_FOREACH(const QString& file, globalFiles) { -        KConfigBackend::ParseOptions parseOpts = KConfigBackend::ParseGlobal|KConfigBackend::ParseExpansions; +    Q_FOREACH (const QString &file, globalFiles) { +        KConfigBackend::ParseOptions parseOpts = KConfigBackend::ParseGlobal | KConfigBackend::ParseExpansions;  #ifndef Q_OS_WIN          if (file != sGlobalFileName)  #else @@ -640,8 +666,9 @@ void KConfigPrivate::parseGlobalFiles()              parseOpts |= KConfigBackend::ParseDefaults;          QExplicitlySharedDataPointer<KConfigBackend> backend = KConfigBackend::create(file); -        if ( backend->parseConfig( utf8Locale, entryMap, parseOpts) == KConfigBackend::ParseImmutable) +        if (backend->parseConfig(utf8Locale, entryMap, parseOpts) == KConfigBackend::ParseImmutable) {              break; +        }      }  } @@ -660,20 +687,22 @@ void KConfigPrivate::parseConfigFiles()                  if (QDir::isAbsolutePath(fileName)) {                      files << fileName;                  } else { -                    Q_FOREACH (const QString& f, QStandardPaths::locateAll(resourceType, fileName)) +                    Q_FOREACH (const QString &f, QStandardPaths::locateAll(resourceType, fileName)) {                          files.prepend(f); +                    }                  }              }          } else {              files << mBackend->filePath();          } -        if (!isSimple()) +        if (!isSimple()) {              files = extraFiles.toList() + files; +        }  //        qDebug() << "parsing local files" << files;          const QByteArray utf8Locale = locale.toUtf8(); -        foreach(const QString& file, files) { +        foreach (const QString &file, files) {  #ifndef Q_OS_WIN              if (file == mBackend->filePath()) {  #else @@ -692,17 +721,19 @@ void KConfigPrivate::parseConfigFiles()              } else {                  QExplicitlySharedDataPointer<KConfigBackend> backend = KConfigBackend::create(file);                  bFileImmutable = (backend->parseConfig(utf8Locale, entryMap, -                                        KConfigBackend::ParseDefaults|KConfigBackend::ParseExpansions) +                                                       KConfigBackend::ParseDefaults | KConfigBackend::ParseExpansions)                                    == KConfigBackend::ParseImmutable);              } -            if (bFileImmutable) +            if (bFileImmutable) {                  break; +            }          }  #pragma message("TODO: enable kiosk feature again (resource restrictions), but without KStandardDirs... Needs a class in the kconfig framework.")  #if 0 -        if (componentData.dirs()->isRestrictedResource(resourceType, fileName)) +        if (componentData.dirs()->isRestrictedResource(resourceType, fileName)) {              bFileImmutable = true; +        }  #endif      }  } @@ -713,10 +744,10 @@ KConfig::AccessMode KConfig::accessMode() const      return d->configState;  } -void KConfig::addConfigSources(const QStringList& files) +void KConfig::addConfigSources(const QStringList &files)  {      Q_D(KConfig); -    Q_FOREACH(const QString& file, files) { +    Q_FOREACH (const QString &file, files) {          d->extraFiles.push(file);      } @@ -731,7 +762,7 @@ QString KConfig::locale() const      return d->locale;  } -bool KConfigPrivate::setLocale(const QString& aLocale) +bool KConfigPrivate::setLocale(const QString &aLocale)  {      if (aLocale != locale) {          locale = aLocale; @@ -740,7 +771,7 @@ bool KConfigPrivate::setLocale(const QString& aLocale)      return false;  } -bool KConfig::setLocale(const QString& locale) +bool KConfig::setLocale(const QString &locale)  {      Q_D(KConfig);      if (d->setLocale(locale)) { @@ -768,7 +799,7 @@ bool KConfig::isImmutable() const      return d->bFileImmutable;  } -bool KConfig::isGroupImmutableImpl(const QByteArray& aGroup) const +bool KConfig::isGroupImmutableImpl(const QByteArray &aGroup) const  {      Q_D(const KConfig);      return isImmutable() || d->entryMap.getEntryOption(aGroup, 0, 0, KEntryMap::EntryImmutable); @@ -802,26 +833,29 @@ const KConfigGroup KConfig::groupImpl(const QByteArray &group) const  KEntryMap::EntryOptions convertToOptions(KConfig::WriteConfigFlags flags)  { -    KEntryMap::EntryOptions options=0; +    KEntryMap::EntryOptions options = 0; -    if (flags&KConfig::Persistent) +    if (flags & KConfig::Persistent) {          options |= KEntryMap::EntryDirty; -    if (flags&KConfig::Global) +    } +    if (flags & KConfig::Global) {          options |= KEntryMap::EntryGlobal; -    if (flags&KConfig::Localized) +    } +    if (flags & KConfig::Localized) {          options |= KEntryMap::EntryLocalized; +    }      return options;  }  void KConfig::deleteGroupImpl(const QByteArray &aGroup, WriteConfigFlags flags)  {      Q_D(KConfig); -    KEntryMap::EntryOptions options = convertToOptions(flags)|KEntryMap::EntryDeleted; +    KEntryMap::EntryOptions options = convertToOptions(flags) | KEntryMap::EntryDeleted;      const QSet<QByteArray> groups = d->allSubGroups(aGroup); -    Q_FOREACH (const QByteArray& group, groups) { +    Q_FOREACH (const QByteArray &group, groups) {          const QStringList keys = d->keyListImpl(group); -        Q_FOREACH (const QString& _key, keys) { +        Q_FOREACH (const QString &_key, keys) {              const QByteArray &key = _key.toUtf8();              if (d->canWriteEntry(group, key.constData())) {                  d->entryMap.setEntry(group, key, QByteArray(), options); @@ -838,14 +872,14 @@ bool KConfig::isConfigWritable(bool warnUser)      if (warnUser && !allWritable) {          QString errorMsg; -        if (d->mBackend) // TODO how can be it be null? Set errorMsg appropriately +        if (d->mBackend) { // TODO how can be it be null? Set errorMsg appropriately              errorMsg = d->mBackend->nonWritableErrorMessage(); +        }          // Note: We don't ask the user if we should not ask this question again because we can't save the answer.          errorMsg += QCoreApplication::translate("KConfig", "Please contact your system administrator.");          QString cmdToExec = QStandardPaths::findExecutable(QString::fromLatin1("kdialog")); -        if (!cmdToExec.isEmpty()) -        { +        if (!cmdToExec.isEmpty()) {              QProcess::execute(cmdToExec, QStringList()                                << QString::fromLatin1("--title") << QCoreApplication::applicationName()                                << QString::fromLatin1("--msgbox") << errorMsg); @@ -857,7 +891,7 @@ bool KConfig::isConfigWritable(bool warnUser)      return allWritable;  } -bool KConfig::hasGroupImpl(const QByteArray& aGroup) const +bool KConfig::hasGroupImpl(const QByteArray &aGroup) const  {      Q_D(const KConfig); @@ -867,55 +901,64 @@ bool KConfig::hasGroupImpl(const QByteArray& aGroup) const      return d->hasNonDeletedEntries(aGroup);  } -bool KConfigPrivate::canWriteEntry(const QByteArray& group, const char* key, bool isDefault) const +bool KConfigPrivate::canWriteEntry(const QByteArray &group, const char *key, bool isDefault) const  {      if (bFileImmutable || -        entryMap.getEntryOption(group, key, KEntryMap::SearchLocalized, KEntryMap::EntryImmutable)) +            entryMap.getEntryOption(group, key, KEntryMap::SearchLocalized, KEntryMap::EntryImmutable)) {          return isDefault; +    }      return true;  } -void KConfigPrivate::putData( const QByteArray& group, const char* key, -                      const QByteArray& value, KConfigBase::WriteConfigFlags flags, bool expand) +void KConfigPrivate::putData(const QByteArray &group, const char *key, +                             const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand)  {      KEntryMap::EntryOptions options = convertToOptions(flags); -    if (bForceGlobal) +    if (bForceGlobal) {          options |= KEntryMap::EntryGlobal; -    if (expand) +    } +    if (expand) {          options |= KEntryMap::EntryExpansion; +    } -    if (value.isNull()) // deleting entry +    if (value.isNull()) { // deleting entry          options |= KEntryMap::EntryDeleted; +    }      bool dirtied = entryMap.setEntry(group, key, value, options); -    if (dirtied && (flags & KConfigBase::Persistent)) +    if (dirtied && (flags & KConfigBase::Persistent)) {          bDirty = true; +    }  } -void KConfigPrivate::revertEntry(const QByteArray& group, const char* key) +void KConfigPrivate::revertEntry(const QByteArray &group, const char *key)  {      bool dirtied = entryMap.revertEntry(group, key); -    if (dirtied) +    if (dirtied) {          bDirty = true; +    }  } -QByteArray KConfigPrivate::lookupData(const QByteArray& group, const char* key, +QByteArray KConfigPrivate::lookupData(const QByteArray &group, const char *key,                                        KEntryMap::SearchFlags flags) const  { -    if (bReadDefaults) +    if (bReadDefaults) {          flags |= KEntryMap::SearchDefaults; +    }      const KEntryMapConstIterator it = entryMap.findEntry(group, key, flags); -    if (it == entryMap.constEnd()) +    if (it == entryMap.constEnd()) {          return QByteArray(); +    }      return it->mValue;  } -QString KConfigPrivate::lookupData(const QByteArray& group, const char* key, +QString KConfigPrivate::lookupData(const QByteArray &group, const char *key,                                     KEntryMap::SearchFlags flags, bool *expand) const  { -    if (bReadDefaults) +    if (bReadDefaults) {          flags |= KEntryMap::SearchDefaults; +    }      return entryMap.getEntry(group, key, QString(), flags, expand);  } @@ -925,7 +968,7 @@ QStandardPaths::StandardLocation KConfig::locationType() const      return d->resourceType;  } -void KConfig::virtual_hook(int /*id*/, void* /*data*/) +void KConfig::virtual_hook(int /*id*/, void * /*data*/)  { -	/* nothing */ +    /* nothing */  } diff --git a/src/core/kconfig.h b/src/core/kconfig.h index 6dbf1d26..d27eebe7 100644 --- a/src/core/kconfig.h +++ b/src/core/kconfig.h @@ -95,7 +95,7 @@ public:          SimpleConfig    = 0x00, ///< Just a single config file.          NoCascade       = IncludeGlobals, ///< Include user's globals, but omit system settings.          NoGlobals       = CascadeConfig, ///< Cascade to system settings, but omit user's globals. -        FullConfig      = IncludeGlobals|CascadeConfig ///< Fully-fledged config, including globals and cascading to system settings +        FullConfig      = IncludeGlobals | CascadeConfig ///< Fully-fledged config, including globals and cascading to system settings      };      Q_DECLARE_FLAGS(OpenFlags, OpenFlag) @@ -127,7 +127,7 @@ public:       *       * @sa KSharedConfig::openConfig(const QString&, OpenFlags, const char*)       */ -    explicit KConfig(const QString& file = QString(), OpenFlags mode = FullConfig, +    explicit KConfig(const QString &file = QString(), OpenFlags mode = FullConfig,                       QStandardPaths::StandardLocation type = QStandardPaths::GenericConfigLocation);      /** @@ -142,7 +142,7 @@ public:       *       * @since 4.1       */ -    KConfig(const QString& file, const QString& backend, QStandardPaths::StandardLocation type = QStandardPaths::GenericConfigLocation); +    KConfig(const QString &file, const QString &backend, QStandardPaths::StandardLocation type = QStandardPaths::GenericConfigLocation);      virtual ~KConfig(); @@ -210,7 +210,7 @@ public:       *       * @return @p config if it was set, otherwise a new KConfig object       */ -    KConfig* copyTo(const QString &file, KConfig *config = 0) const; +    KConfig *copyTo(const QString &file, KConfig *config = 0) const;      /**       * Ensures that the configuration file contains a certain update. @@ -283,7 +283,7 @@ public:       *         effect (eg: @p aLocale was already the current locale for this       *         object)       */ -    bool setLocale(const QString& aLocale); +    bool setLocale(const QString &aLocale);      /// @}      /// @{ defaults @@ -350,20 +350,20 @@ public:       *         The returned map may be empty if the group is empty, or not found.       * @see   QMap       */ -    QMap<QString, QString> entryMap(const QString &aGroup=QString()) const; +    QMap<QString, QString> entryMap(const QString &aGroup = QString()) const;      /**       * Sets the name of the application config file.       * @since 5.0       */ -    static void setMainConfigName(const QString& str); +    static void setMainConfigName(const QString &str);  protected:      virtual bool hasGroupImpl(const QByteArray &group) const; -    virtual KConfigGroup groupImpl( const QByteArray &b); +    virtual KConfigGroup groupImpl(const QByteArray &b);      virtual const KConfigGroup groupImpl(const QByteArray &b) const;      virtual void deleteGroupImpl(const QByteArray &group, WriteConfigFlags flags = Normal); -    virtual bool isGroupImmutableImpl(const QByteArray& aGroup) const; +    virtual bool isGroupImmutableImpl(const QByteArray &aGroup) const;      friend class KConfigGroup;      friend class KConfigGroupPrivate; @@ -372,7 +372,7 @@ protected:      /** Virtual hook, used to add new "virtual" functions while maintaining       * binary compatibility. Unused in this class.       */ -    virtual void virtual_hook( int id, void* data ); +    virtual void virtual_hook(int id, void *data);      KConfigPrivate *const d_ptr; @@ -381,7 +381,7 @@ protected:  private:      friend class KConfigTest; -    QStringList keyList(const QString& aGroup=QString()) const; +    QStringList keyList(const QString &aGroup = QString()) const;      /**       * @internal for KSharedConfig. Could be made public if needed, though. @@ -392,6 +392,6 @@ private:      Q_DECLARE_PRIVATE(KConfig)  }; -Q_DECLARE_OPERATORS_FOR_FLAGS( KConfig::OpenFlags ) +Q_DECLARE_OPERATORS_FOR_FLAGS(KConfig::OpenFlags)  #endif // KCONFIG_H diff --git a/src/core/kconfig_p.h b/src/core/kconfig_p.h index e6fb1ca0..b93c8167 100644 --- a/src/core/kconfig_p.h +++ b/src/core/kconfig_p.h @@ -40,27 +40,27 @@ public:      KConfig::OpenFlags openFlags;      QStandardPaths::StandardLocation resourceType; -    void changeFileName(const QString& fileName); +    void changeFileName(const QString &fileName);      // functions for KConfigGroup -    bool canWriteEntry(const QByteArray& group, const char* key, bool isDefault=false) const; -    QString lookupData(const QByteArray& group, const char* key, KEntryMap::SearchFlags flags, -                       bool* expand) const; -    QByteArray lookupData(const QByteArray& group, const char* key, KEntryMap::SearchFlags flags) const; - -    void putData(const QByteArray& group, const char* key, const QByteArray& value, -                 KConfigBase::WriteConfigFlags flags, bool expand=false); -    void revertEntry(const QByteArray& group, const char* key); -    QStringList groupList(const QByteArray& group) const; +    bool canWriteEntry(const QByteArray &group, const char *key, bool isDefault = false) const; +    QString lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, +                       bool *expand) const; +    QByteArray lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const; + +    void putData(const QByteArray &group, const char *key, const QByteArray &value, +                 KConfigBase::WriteConfigFlags flags, bool expand = false); +    void revertEntry(const QByteArray &group, const char *key); +    QStringList groupList(const QByteArray &group) const;      // copies the entries from @p source to @p otherGroup changing all occurrences      // of @p source with @p destination -    void copyGroup(const QByteArray& source, const QByteArray& destination, +    void copyGroup(const QByteArray &source, const QByteArray &destination,                     KConfigGroup *otherGroup, KConfigBase::WriteConfigFlags flags) const; -    QStringList keyListImpl(const QByteArray& theGroup) const; -    QSet<QByteArray> allSubGroups(const QByteArray& parentGroup) const; -    bool hasNonDeletedEntries(const QByteArray& group) const; +    QStringList keyListImpl(const QByteArray &theGroup) const; +    QSet<QByteArray> allSubGroups(const QByteArray &parentGroup) const; +    bool hasNonDeletedEntries(const QByteArray &group) const; -    static QString expandString(const QString& value); +    static QString expandString(const QString &value);  protected:      QExplicitlySharedDataPointer<KConfigBackend> mBackend; @@ -72,18 +72,17 @@ protected:      {      } -    bool bDynamicBackend:1; // do we own the backend? +    bool bDynamicBackend: 1; // do we own the backend?  private: -    bool bDirty:1; -    bool bLocaleInitialized:1; -    bool bReadDefaults:1; -    bool bFileImmutable:1; -    bool bForceGlobal:1; -    bool bSuppressGlobal:1; - -   QString sGlobalFileName; -   static bool mappingsRegistered; +    bool bDirty: 1; +    bool bLocaleInitialized: 1; +    bool bReadDefaults: 1; +    bool bFileImmutable: 1; +    bool bForceGlobal: 1; +    bool bSuppressGlobal: 1; +    QString sGlobalFileName; +    static bool mappingsRegistered;      KEntryMap entryMap;      QString backendType; @@ -94,16 +93,28 @@ private:      QString etc_kderc;      KConfigBase::AccessMode configState; -    bool wantGlobals() const { return openFlags&KConfig::IncludeGlobals && !bSuppressGlobal; } -    bool wantDefaults() const { return openFlags&KConfig::CascadeConfig; } -    bool isSimple() const { return openFlags == KConfig::SimpleConfig; } -    bool isReadOnly() const { return configState == KConfig::ReadOnly; } +    bool wantGlobals() const +    { +        return openFlags & KConfig::IncludeGlobals && !bSuppressGlobal; +    } +    bool wantDefaults() const +    { +        return openFlags & KConfig::CascadeConfig; +    } +    bool isSimple() const +    { +        return openFlags == KConfig::SimpleConfig; +    } +    bool isReadOnly() const +    { +        return configState == KConfig::ReadOnly; +    } -    bool setLocale(const QString& aLocale); +    bool setLocale(const QString &aLocale);      QStringList getGlobalFiles() const;      void parseGlobalFiles();      void parseConfigFiles(); -    void initCustomized(KConfig*); +    void initCustomized(KConfig *);      bool lockLocal();  }; diff --git a/src/core/kconfigbackend.cpp b/src/core/kconfigbackend.cpp index eb92a964..90655fac 100644 --- a/src/core/kconfigbackend.cpp +++ b/src/core/kconfigbackend.cpp @@ -42,22 +42,21 @@ public:      QDateTime lastModified;      QString localFileName; -    static QString whatSystem(const QString& /*fileName*/) +    static QString whatSystem(const QString & /*fileName*/)      {          return QLatin1String("INI");      }  }; - -void KConfigBackend::registerMappings(const KEntryMap& /*entryMap*/) +void KConfigBackend::registerMappings(const KEntryMap & /*entryMap*/)  {  } -BackendPtr KConfigBackend::create(const QString& file, const QString& sys) +BackendPtr KConfigBackend::create(const QString &file, const QString &sys)  {      //qDebug() << "creating a backend for file" << file << "with system" << sys;      const QString system = (sys.isEmpty() ? Private::whatSystem(file) : sys); -    KConfigBackend* backend = 0; +    KConfigBackend *backend = 0;  #if 0 // TODO port to Qt5 plugin loading      if (system.compare(QLatin1String("INI"), Qt::CaseInsensitive) != 0) { @@ -65,7 +64,7 @@ BackendPtr KConfigBackend::create(const QString& file, const QString& sys)          KService::List offers = KServiceTypeTrader::self()->query(QLatin1String("KConfigBackend"), constraint);          //qDebug() << "found" << offers.count() << "offers for KConfigBackend plugins with name" << system; -        foreach (const KService::Ptr& offer, offers) { +        foreach (const KService::Ptr &offer, offers) {              backend = offer->createInstance<KConfigBackend>(0);              if (backend) {                  //qDebug() << "successfully created a backend for" << system; @@ -83,7 +82,7 @@ BackendPtr KConfigBackend::create(const QString& file, const QString& sys)  }  KConfigBackend::KConfigBackend() - : d(new Private) +    : d(new Private)  {  } @@ -97,7 +96,7 @@ QDateTime KConfigBackend::lastModified() const      return d->lastModified;  } -void KConfigBackend::setLastModified(const QDateTime& dt) +void KConfigBackend::setLastModified(const QDateTime &dt)  {      d->lastModified = dt;  } @@ -117,7 +116,7 @@ QString KConfigBackend::filePath() const      return d->localFileName;  } -void KConfigBackend::setLocalFilePath(const QString& file) +void KConfigBackend::setLocalFilePath(const QString &file)  {      d->localFileName = file;  } diff --git a/src/core/kconfigbackend.h b/src/core/kconfigbackend.h index 49239e66..550bf396 100644 --- a/src/core/kconfigbackend.h +++ b/src/core/kconfigbackend.h @@ -61,8 +61,8 @@ public:       * @param system        the configuration system to use       * @return a KConfigBackend object to be used with KConfig       */ -    static QExplicitlySharedDataPointer<KConfigBackend> create(const QString& fileName = QString(), -                                             const QString& system = QString()); +    static QExplicitlySharedDataPointer<KConfigBackend> create(const QString &fileName = QString(), +            const QString &system = QString());      /**       * Registers mappings from directories/files to configuration systems @@ -74,7 +74,7 @@ public:       *       * @param entryMap the KEntryMap to build the mappings from       */ -    static void registerMappings(const KEntryMap& entryMap); +    static void registerMappings(const KEntryMap &entryMap);      /** Destroys the backend */      virtual ~KConfigBackend(); @@ -110,8 +110,8 @@ public:       * @param options @see ParseOptions       * @return @see ParseInfo       */ -    virtual ParseInfo parseConfig(const QByteArray& locale, -                                  KEntryMap& pWriteBackMap, +    virtual ParseInfo parseConfig(const QByteArray &locale, +                                  KEntryMap &pWriteBackMap,                                    ParseOptions options = ParseOptions()) = 0;      /** @@ -123,7 +123,7 @@ public:       *       * @return @c true if the write was successful, @c false if writing the configuration failed       */ -    virtual bool writeConfig(const QByteArray& locale, KEntryMap& entryMap, +    virtual bool writeConfig(const QByteArray &locale, KEntryMap &entryMap,                               WriteOptions options) = 0;      /** @@ -163,7 +163,7 @@ public:       *       * @param path the absolute file path       */ -    virtual void setFilePath(const QString& path) = 0; +    virtual void setFilePath(const QString &path) = 0;      /**       * Lock the file @@ -189,9 +189,9 @@ public:  protected:      KConfigBackend(); -    void setLastModified(const QDateTime& dt); +    void setLastModified(const QDateTime &dt);      void setSize(qint64 sz); -    void setLocalFilePath(const QString& file); +    void setLocalFilePath(const QString &file);  private:      class Private; @@ -205,7 +205,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(KConfigBackend::WriteOptions)   * Register a KConfig backend when it is contained in a loadable module   */  #define K_EXPORT_KCONFIGBACKEND(libname, classname) \ -K_PLUGIN_FACTORY(factory, registerPlugin<classname>();) - +    K_PLUGIN_FACTORY(factory, registerPlugin<classname>();)  #endif // KCONFIGBACKEND_H diff --git a/src/core/kconfigbase.cpp b/src/core/kconfigbase.cpp index 4be7ac23..8cda588f 100644 --- a/src/core/kconfigbase.cpp +++ b/src/core/kconfigbase.cpp @@ -41,32 +41,32 @@ bool KConfigBase::hasGroup(const QByteArray &group) const      return hasGroupImpl(group);  } -KConfigGroup KConfigBase::group( const QByteArray &b) +KConfigGroup KConfigBase::group(const QByteArray &b)  {      return groupImpl(b);  } -KConfigGroup KConfigBase::group( const QString &str) +KConfigGroup KConfigBase::group(const QString &str)  {      return groupImpl(str.toUtf8());  } -KConfigGroup KConfigBase::group( const char *str) +KConfigGroup KConfigBase::group(const char *str)  {      return groupImpl(QByteArray(str));  } -const KConfigGroup KConfigBase::group( const QByteArray &b ) const +const KConfigGroup KConfigBase::group(const QByteArray &b) const  {      return groupImpl(b);  } -const KConfigGroup KConfigBase::group( const QString &s ) const +const KConfigGroup KConfigBase::group(const QString &s) const  {      return groupImpl(s.toUtf8());  } -const KConfigGroup KConfigBase::group( const char *s ) const +const KConfigGroup KConfigBase::group(const char *s) const  {      return groupImpl(QByteArray(s));  } @@ -86,17 +86,16 @@ void KConfigBase::deleteGroup(const char *group, WriteConfigFlags flags)      deleteGroupImpl(QByteArray(group), flags);  } -bool KConfigBase::isGroupImmutable(const QByteArray& aGroup) const +bool KConfigBase::isGroupImmutable(const QByteArray &aGroup) const  {      return isGroupImmutableImpl(aGroup);  } -bool KConfigBase::isGroupImmutable(const QString& aGroup) const +bool KConfigBase::isGroupImmutable(const QString &aGroup) const  {      return isGroupImmutableImpl(aGroup.toUtf8());  } -  bool KConfigBase::isGroupImmutable(const char *aGroup) const  {      return isGroupImmutableImpl(QByteArray(aGroup)); @@ -108,5 +107,5 @@ KConfigBase::~KConfigBase()  KConfigBase::KConfigBase()  {} -void KConfigBase::virtual_hook(int , void *) +void KConfigBase::virtual_hook(int, void *)  {} diff --git a/src/core/kconfigbase.h b/src/core/kconfigbase.h index 782ff4b6..3d00d98a 100644 --- a/src/core/kconfigbase.h +++ b/src/core/kconfigbase.h @@ -41,8 +41,7 @@ public:      /**       * Flags to control write entry       */ -    enum WriteConfigFlag -    { +    enum WriteConfigFlag {          Persistent = 0x01,          /**<           * Save this entry when saving the config object. @@ -56,11 +55,11 @@ public:          /**<           * Add the locale tag to the key when writing it.           */ -        Normal=Persistent -        /**< -         * Save the entry to the application specific config file without -         * a locale tag. This is the default. -         */ +        Normal = Persistent +                 /**< +                  * Save the entry to the application specific config file without +                  * a locale tag. This is the default. +                  */      };      Q_DECLARE_FLAGS(WriteConfigFlags, WriteConfigFlag) @@ -154,31 +153,29 @@ public:      /**       * Can changes be made to the entries in @p aGroup? -     *  +     *       * @param aGroup The group to check for immutability.       * @return @c false if the entries in @p aGroup can be modified.       */ -    bool isGroupImmutable(const QByteArray& aGroup) const; -    bool isGroupImmutable(const QString& aGroup) const; +    bool isGroupImmutable(const QByteArray &aGroup) const; +    bool isGroupImmutable(const QString &aGroup) const;      bool isGroupImmutable(const char *aGroup) const;  protected:      KConfigBase();      virtual bool hasGroupImpl(const QByteArray &group) const = 0; -    virtual KConfigGroup groupImpl( const QByteArray &b) = 0; +    virtual KConfigGroup groupImpl(const QByteArray &b) = 0;      virtual const KConfigGroup groupImpl(const QByteArray &b) const = 0;      virtual void deleteGroupImpl(const QByteArray &group, WriteConfigFlags flags = Normal) = 0; -    virtual bool isGroupImmutableImpl(const QByteArray& aGroup) const = 0; +    virtual bool isGroupImmutableImpl(const QByteArray &aGroup) const = 0;      /** Virtual hook, used to add new "virtual" functions while maintaining       * binary compatibility. Unused in this class.       */ -    virtual void virtual_hook( int id, void* data ); +    virtual void virtual_hook(int id, void *data);  };  Q_DECLARE_OPERATORS_FOR_FLAGS(KConfigBase::WriteConfigFlags) - -  #endif // KCONFIG_H diff --git a/src/core/kconfigdata.cpp b/src/core/kconfigdata.cpp index 74a068be..109063d6 100644 --- a/src/core/kconfigdata.cpp +++ b/src/core/kconfigdata.cpp @@ -22,81 +22,83 @@  #include <kconfigdata.h> -QDebug operator<<(QDebug dbg, const KEntryKey& key) +QDebug operator<<(QDebug dbg, const KEntryKey &key)  { -   dbg.nospace() << "[" << key.mGroup << ", " << key.mKey << (key.bLocal?" localized":"") << -       (key.bDefault?" default":"") << (key.bRaw?" raw":"") << "]"; -   return dbg.space(); +    dbg.nospace() << "[" << key.mGroup << ", " << key.mKey << (key.bLocal ? " localized" : "") << +                  (key.bDefault ? " default" : "") << (key.bRaw ? " raw" : "") << "]"; +    return dbg.space();  } -QDebug operator<<(QDebug dbg, const KEntry& entry) +QDebug operator<<(QDebug dbg, const KEntry &entry)  { -   dbg.nospace() << "[" << entry.mValue << (entry.bDirty?" dirty":"") << -       (entry.bGlobal?" global":"") << (entry.bImmutable?" immutable":"") << -       (entry.bDeleted?" deleted":"") << (entry.bReverted?" reverted":"") << -       (entry.bExpand?" expand":"") << "]"; +    dbg.nospace() << "[" << entry.mValue << (entry.bDirty ? " dirty" : "") << +                  (entry.bGlobal ? " global" : "") << (entry.bImmutable ? " immutable" : "") << +                  (entry.bDeleted ? " deleted" : "") << (entry.bReverted ? " reverted" : "") << +                  (entry.bExpand ? " expand" : "") << "]"; -   return dbg.space(); +    return dbg.space();  } -QMap< KEntryKey, KEntry >::Iterator KEntryMap::findExactEntry(const QByteArray& group, const QByteArray& key, KEntryMap::SearchFlags flags) +QMap< KEntryKey, KEntry >::Iterator KEntryMap::findExactEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags)  { -    KEntryKey theKey(group, key, bool(flags&SearchLocalized), bool(flags&SearchDefaults)); +    KEntryKey theKey(group, key, bool(flags & SearchLocalized), bool(flags & SearchDefaults));      return find(theKey);  } -QMap< KEntryKey, KEntry >::Iterator KEntryMap::findEntry(const QByteArray& group, const QByteArray& key, KEntryMap::SearchFlags flags) +QMap< KEntryKey, KEntry >::Iterator KEntryMap::findEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags)  { -    KEntryKey theKey(group, key, false, bool(flags&SearchDefaults)); +    KEntryKey theKey(group, key, false, bool(flags & SearchDefaults));      // try the localized key first -    if (flags&SearchLocalized) { +    if (flags & SearchLocalized) {          theKey.bLocal = true;          Iterator it = find(theKey); -        if (it != end()) +        if (it != end()) {              return it; +        }          theKey.bLocal = false;      }      return find(theKey);  } -QMap< KEntryKey, KEntry >::ConstIterator KEntryMap::findEntry(const QByteArray& group, const QByteArray& key, KEntryMap::SearchFlags flags) const +QMap< KEntryKey, KEntry >::ConstIterator KEntryMap::findEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags) const  { -    KEntryKey theKey(group, key, false, bool(flags&SearchDefaults)); +    KEntryKey theKey(group, key, false, bool(flags & SearchDefaults));      // try the localized key first -    if (flags&SearchLocalized) { +    if (flags & SearchLocalized) {          theKey.bLocal = true;          ConstIterator it = find(theKey); -        if (it != constEnd()) +        if (it != constEnd()) {              return it; +        }          theKey.bLocal = false;      }      return find(theKey);  } -bool KEntryMap::setEntry(const QByteArray& group, const QByteArray& key, const QByteArray& value, KEntryMap::EntryOptions options) +bool KEntryMap::setEntry(const QByteArray &group, const QByteArray &key, const QByteArray &value, KEntryMap::EntryOptions options)  {      KEntryKey k;      KEntry e;      bool newKey = false; -    const Iterator it = findExactEntry(group, key, SearchFlags(options>>16)); +    const Iterator it = findExactEntry(group, key, SearchFlags(options >> 16));      if (key.isEmpty()) { // inserting a group marker          k.mGroup = group; -        e.bImmutable = (options&EntryImmutable); -        if (options&EntryDeleted) { +        e.bImmutable = (options & EntryImmutable); +        if (options & EntryDeleted) {              qWarning("Internal KConfig error: cannot mark groups as deleted");          } -        if(it == end()) { +        if (it == end()) {              insert(k, e);              return true; -        } else if(it.value() == e) { +        } else if (it.value() == e) {              return false;          } @@ -104,10 +106,10 @@ bool KEntryMap::setEntry(const QByteArray& group, const QByteArray& key, const Q          return true;      } -      if (it != end()) { -        if (it->bImmutable) -            return false; // we cannot change this entry. Inherits group immutability. +        if (it->bImmutable) { +            return false;    // we cannot change this entry. Inherits group immutability. +        }          k = it.key();          e = *it;          //qDebug() << "found existing entry for key" << k; @@ -115,39 +117,39 @@ bool KEntryMap::setEntry(const QByteArray& group, const QByteArray& key, const Q          // make sure the group marker is in the map          KEntryMap const *that = this;          ConstIterator cit = that->findEntry(group); -        if (cit == constEnd()) +        if (cit == constEnd()) {              insert(KEntryKey(group), KEntry()); -        else if (cit->bImmutable) -            return false; // this group is immutable, so we cannot change this entry. +        } else if (cit->bImmutable) { +            return false;    // this group is immutable, so we cannot change this entry. +        }          k = KEntryKey(group, key);          newKey = true;      }      // set these here, since we may be changing the type of key from the one we found -    k.bLocal = (options&EntryLocalized); -    k.bDefault = (options&EntryDefault); -    k.bRaw = (options&EntryRawKey); +    k.bLocal = (options & EntryLocalized); +    k.bDefault = (options & EntryDefault); +    k.bRaw = (options & EntryRawKey);      e.mValue = value; -    e.bDirty = e.bDirty || (options&EntryDirty); -    e.bGlobal = (options&EntryGlobal);  //we can't use || here, because changes to entries in +    e.bDirty = e.bDirty || (options & EntryDirty); +    e.bGlobal = (options & EntryGlobal); //we can't use || here, because changes to entries in      //kdeglobals would be written to kdeglobals instead      //of the local config file, regardless of the globals flag -    e.bImmutable = e.bImmutable || (options&EntryImmutable); -    if (value.isNull()) -        e.bDeleted = e.bDeleted || (options&EntryDeleted); -    else -        e.bDeleted = false; // setting a value to a previously deleted entry -    e.bExpand = (options&EntryExpansion); +    e.bImmutable = e.bImmutable || (options & EntryImmutable); +    if (value.isNull()) { +        e.bDeleted = e.bDeleted || (options & EntryDeleted); +    } else { +        e.bDeleted = false;    // setting a value to a previously deleted entry +    } +    e.bExpand = (options & EntryExpansion);      e.bReverted = false; -    if(newKey) -    { +    if (newKey) {          //qDebug() << "inserting" << k << "=" << value;          insert(k, e); -        if(k.bDefault) -        { +        if (k.bDefault) {              k.bDefault = false;              //qDebug() << "also inserting" << k << "=" << value;              insert(k, e); @@ -156,12 +158,10 @@ bool KEntryMap::setEntry(const QByteArray& group, const QByteArray& key, const Q          return true;      } else {  //                KEntry e2 = it.value(); -        if(it.value() != e) -        { +        if (it.value() != e) {              //qDebug() << "changing" << k << "from" << e.mValue << "to" << value;              it.value() = e; -            if(k.bDefault) -            { +            if (k.bDefault) {                  KEntryKey nonDefaultKey(k);                  nonDefaultKey.bDefault = false;                  insert(nonDefaultKey, e); @@ -206,30 +206,33 @@ bool KEntryMap::setEntry(const QByteArray& group, const QByteArray& key, const Q      }  } -QString KEntryMap::getEntry(const QByteArray& group, const QByteArray& key, const QString& defaultValue, KEntryMap::SearchFlags flags, bool* expand) const +QString KEntryMap::getEntry(const QByteArray &group, const QByteArray &key, const QString &defaultValue, KEntryMap::SearchFlags flags, bool *expand) const  {      const ConstIterator it = findEntry(group, key, flags);      QString theValue = defaultValue;      if (it != constEnd() && !it->bDeleted) {          if (!it->mValue.isNull()) { -            const QByteArray data=it->mValue; +            const QByteArray data = it->mValue;              theValue = QString::fromUtf8(data.constData(), data.length()); -            if (expand) +            if (expand) {                  *expand = it->bExpand; +            }          }      }      return theValue;  } -bool KEntryMap::hasEntry(const QByteArray& group, const QByteArray& key, KEntryMap::SearchFlags flags) const +bool KEntryMap::hasEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags) const  {      const ConstIterator it = findEntry(group, key, flags); -    if (it == constEnd()) +    if (it == constEnd()) {          return false; -    if (it->bDeleted) +    } +    if (it->bDeleted) {          return false; +    }      if (key.isNull()) { // looking for group marker          return it->mValue.isNull();      } @@ -237,7 +240,7 @@ bool KEntryMap::hasEntry(const QByteArray& group, const QByteArray& key, KEntryM      return true;  } -bool KEntryMap::getEntryOption(const QMap< KEntryKey, KEntry >::ConstIterator& it, KEntryMap::EntryOption option) const +bool KEntryMap::getEntryOption(const QMap< KEntryKey, KEntry >::ConstIterator &it, KEntryMap::EntryOption option) const  {      if (it != constEnd()) {          switch (option) { @@ -286,7 +289,7 @@ void KEntryMap::setEntryOption(QMap< KEntryKey, KEntry >::Iterator it, KEntryMap      }  } -bool KEntryMap::revertEntry(const QByteArray& group, const QByteArray& key, KEntryMap::SearchFlags flags) +bool KEntryMap::revertEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags)  {      Q_ASSERT((flags & KEntryMap::SearchDefaults) == 0);      Iterator entry = findEntry(group, key, flags); diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h index f7ad81b9..e57becb2 100644 --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -32,38 +32,37 @@   * map/dict/list config node entry.   * @internal   */ -struct KEntry -{ -  /** Constructor. @internal */ -  KEntry() -    : mValue(), bDirty(false), -      bGlobal(false), bImmutable(false), bDeleted(false), bExpand(false), bReverted(false) {} -  /** @internal */ -  QByteArray mValue; -  /** -   * Must the entry be written back to disk? -   */ -  bool    bDirty :1; -  /** -   * Entry should be written to the global config file -   */ -  bool    bGlobal:1; -  /** -   * Entry can not be modified. -   */ -  bool    bImmutable:1; -  /** -   * Entry has been deleted. -   */ -  bool    bDeleted:1; -  /** -   * Whether to apply dollar expansion or not. -   */ -  bool    bExpand:1; -  /** -   * Entry has been reverted to its default value (from a more global file). -   */ -  bool    bReverted:1; +struct KEntry { +    /** Constructor. @internal */ +    KEntry() +        : mValue(), bDirty(false), +          bGlobal(false), bImmutable(false), bDeleted(false), bExpand(false), bReverted(false) {} +    /** @internal */ +    QByteArray mValue; +    /** +     * Must the entry be written back to disk? +     */ +    bool    bDirty : 1; +    /** +     * Entry should be written to the global config file +     */ +    bool    bGlobal: 1; +    /** +     * Entry can not be modified. +     */ +    bool    bImmutable: 1; +    /** +     * Entry has been deleted. +     */ +    bool    bDeleted: 1; +    /** +     * Whether to apply dollar expansion or not. +     */ +    bool    bExpand: 1; +    /** +     * Entry has been reverted to its default value (from a more global file). +     */ +    bool    bReverted: 1;  };  // These operators are used to check whether an entry which is about @@ -86,34 +85,35 @@ inline bool operator !=(const KEntry &k1, const KEntry &k2)   * to which it belongs.   * @internal   */ -struct KEntryKey -{ -  /** Constructor. @internal */ -  KEntryKey(const QByteArray& _group = QByteArray(), -	    const QByteArray& _key = QByteArray(), bool isLocalized=false, bool isDefault=false) -      : mGroup(_group), mKey(_key), bLocal(isLocalized), bDefault(isDefault), bRaw(false) -      { ; } -  /** -   * The "group" to which this EntryKey belongs -   */ -  QByteArray mGroup; -  /** -   * The _actual_ key of the entry in question -   */ -  QByteArray mKey; -  /** -   * Entry is localised or not -   */ -  bool    bLocal  :1; -  /** -   * Entry indicates if this is a default value. -   */ -  bool    bDefault:1; -  /** @internal -   * Key is a raw unprocessed key. -   * @warning this should only be set during merging, never for normal use. -   */ -  bool    bRaw:1; +struct KEntryKey { +    /** Constructor. @internal */ +    KEntryKey(const QByteArray &_group = QByteArray(), +              const QByteArray &_key = QByteArray(), bool isLocalized = false, bool isDefault = false) +        : mGroup(_group), mKey(_key), bLocal(isLocalized), bDefault(isDefault), bRaw(false) +    { +        ; +    } +    /** +     * The "group" to which this EntryKey belongs +     */ +    QByteArray mGroup; +    /** +     * The _actual_ key of the entry in question +     */ +    QByteArray mKey; +    /** +     * Entry is localised or not +     */ +    bool    bLocal  : 1; +    /** +     * Entry indicates if this is a default value. +     */ +    bool    bDefault: 1; +    /** @internal +     * Key is a raw unprocessed key. +     * @warning this should only be set during merging, never for normal use. +     */ +    bool    bRaw: 1;  };  /** @@ -133,14 +133,14 @@ inline bool operator <(const KEntryKey &k1, const KEntryKey &k2)          return result < 0;      } -    if (k1.bLocal != k2.bLocal) +    if (k1.bLocal != k2.bLocal) {          return k1.bLocal; +    }      return (!k1.bDefault && k2.bDefault);  } - -QDebug operator<<(QDebug dbg, const KEntryKey& key); -QDebug operator<<(QDebug dbg, const KEntry& entry); +QDebug operator<<(QDebug dbg, const KEntryKey &key); +QDebug operator<<(QDebug dbg, const KEntry &entry);  /**   * \relates KEntry @@ -151,69 +151,69 @@ QDebug operator<<(QDebug dbg, const KEntry& entry);   */  class KEntryMap : public QMap<KEntryKey, KEntry>  { -    public: -        enum SearchFlag { -            SearchDefaults=1, -            SearchLocalized=2 -        }; -        Q_DECLARE_FLAGS(SearchFlags, SearchFlag) - -        enum EntryOption { -            EntryDirty=1, -            EntryGlobal=2, -            EntryImmutable=4, -            EntryDeleted=8, -            EntryExpansion=16, -            EntryRawKey=32, -            EntryDefault=(SearchDefaults<<16), -            EntryLocalized=(SearchLocalized<<16) -        }; -        Q_DECLARE_FLAGS(EntryOptions, EntryOption) - -        Iterator findExactEntry(const QByteArray& group, const QByteArray& key = QByteArray(), -                           SearchFlags flags = SearchFlags()); - -        Iterator findEntry(const QByteArray& group, const QByteArray& key = QByteArray(), -                           SearchFlags flags = SearchFlags()); - -        ConstIterator findEntry(const QByteArray& group, const QByteArray& key = QByteArray(), -                                SearchFlags flags = SearchFlags()) const; - -        /** -         * Returns true if the entry gets dirtied or false in other case -         */ -        bool setEntry(const QByteArray& group, const QByteArray& key, -                      const QByteArray& value, EntryOptions options); - -        void setEntry(const QByteArray& group, const QByteArray& key, -                      const QString & value, EntryOptions options) -        { -            setEntry(group, key, value.toUtf8(), options); -        } - -        QString getEntry(const QByteArray& group, const QByteArray& key, -                         const QString & defaultValue = QString(), -                         SearchFlags flags = SearchFlags(), -                         bool * expand=0) const; - -        bool hasEntry(const QByteArray& group, const QByteArray& key = QByteArray(), -                      SearchFlags flags = SearchFlags()) const; - -        bool getEntryOption(const ConstIterator& it, EntryOption option) const; -        bool getEntryOption(const QByteArray& group, const QByteArray& key, -                            SearchFlags flags, EntryOption option) const -        { -            return getEntryOption(findEntry(group, key, flags), option); -        } - -        void setEntryOption(Iterator it, EntryOption option, bool bf); -        void setEntryOption(const QByteArray& group, const QByteArray& key, SearchFlags flags, -                            EntryOption option, bool bf) -        { -            setEntryOption(findEntry(group, key, flags), option, bf); -        } - -        bool revertEntry(const QByteArray& group, const QByteArray& key, SearchFlags flags=SearchFlags()); +public: +    enum SearchFlag { +        SearchDefaults = 1, +        SearchLocalized = 2 +    }; +    Q_DECLARE_FLAGS(SearchFlags, SearchFlag) + +    enum EntryOption { +        EntryDirty = 1, +        EntryGlobal = 2, +        EntryImmutable = 4, +        EntryDeleted = 8, +        EntryExpansion = 16, +        EntryRawKey = 32, +        EntryDefault = (SearchDefaults << 16), +        EntryLocalized = (SearchLocalized << 16) +    }; +    Q_DECLARE_FLAGS(EntryOptions, EntryOption) + +    Iterator findExactEntry(const QByteArray &group, const QByteArray &key = QByteArray(), +                            SearchFlags flags = SearchFlags()); + +    Iterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), +                       SearchFlags flags = SearchFlags()); + +    ConstIterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), +                            SearchFlags flags = SearchFlags()) const; + +    /** +     * Returns true if the entry gets dirtied or false in other case +     */ +    bool setEntry(const QByteArray &group, const QByteArray &key, +                  const QByteArray &value, EntryOptions options); + +    void setEntry(const QByteArray &group, const QByteArray &key, +                  const QString &value, EntryOptions options) +    { +        setEntry(group, key, value.toUtf8(), options); +    } + +    QString getEntry(const QByteArray &group, const QByteArray &key, +                     const QString &defaultValue = QString(), +                     SearchFlags flags = SearchFlags(), +                     bool *expand = 0) const; + +    bool hasEntry(const QByteArray &group, const QByteArray &key = QByteArray(), +                  SearchFlags flags = SearchFlags()) const; + +    bool getEntryOption(const ConstIterator &it, EntryOption option) const; +    bool getEntryOption(const QByteArray &group, const QByteArray &key, +                        SearchFlags flags, EntryOption option) const +    { +        return getEntryOption(findEntry(group, key, flags), option); +    } + +    void setEntryOption(Iterator it, EntryOption option, bool bf); +    void setEntryOption(const QByteArray &group, const QByteArray &key, SearchFlags flags, +                        EntryOption option, bool bf) +    { +        setEntryOption(findEntry(group, key, flags), option, bf); +    } + +    bool revertEntry(const QByteArray &group, const QByteArray &key, SearchFlags flags = SearchFlags());  };  Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::SearchFlags)  Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::EntryOptions) diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp index ab7d494f..c720cc66 100644 --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -45,32 +45,34 @@  class KConfigGroupPrivate : public QSharedData  { - public: -    KConfigGroupPrivate(KConfig* owner, bool isImmutable, bool isConst, const QByteArray &name) +public: +    KConfigGroupPrivate(KConfig *owner, bool isImmutable, bool isConst, const QByteArray &name)          : mOwner(owner), mName(name), bImmutable(isImmutable), bConst(isConst)      {      } -    KConfigGroupPrivate(const KSharedConfigPtr &owner, const QByteArray& name) +    KConfigGroupPrivate(const KSharedConfigPtr &owner, const QByteArray &name)          : sOwner(owner), mOwner(sOwner.data()), mName(name), -          bImmutable(name.isEmpty()? owner->isImmutable(): owner->isGroupImmutable(name)), bConst(false) +          bImmutable(name.isEmpty() ? owner->isImmutable() : owner->isGroupImmutable(name)), bConst(false)      {      } -    KConfigGroupPrivate(KConfigGroup* parent, bool isImmutable, bool isConst, const QByteArray& name) +    KConfigGroupPrivate(KConfigGroup *parent, bool isImmutable, bool isConst, const QByteArray &name)          : sOwner(parent->d->sOwner), mOwner(parent->d->mOwner), mName(name),            bImmutable(isImmutable), bConst(isConst)      { -        if (!parent->d->mName.isEmpty()) +        if (!parent->d->mName.isEmpty()) {              mParent = parent->d; +        }      } -    KConfigGroupPrivate(const KConfigGroupPrivate* other, bool isImmutable, const QByteArray &name) +    KConfigGroupPrivate(const KConfigGroupPrivate *other, bool isImmutable, const QByteArray &name)          : sOwner(other->sOwner), mOwner(other->mOwner), mName(name),            bImmutable(isImmutable), bConst(other->bConst)      { -        if (!other->mName.isEmpty()) +        if (!other->mName.isEmpty()) {              mParent = const_cast<KConfigGroupPrivate *>(other); +        }      }      KSharedConfig::Ptr sOwner; @@ -79,8 +81,8 @@ class KConfigGroupPrivate : public QSharedData      QByteArray mName;      /* bitfield */ -    const bool bImmutable:1; // is this group immutable? -    const bool bConst:1; // is this group read-only? +    const bool bImmutable: 1; // is this group immutable? +    const bool bConst: 1; // is this group read-only?      QByteArray fullName() const      { @@ -92,28 +94,31 @@ class KConfigGroupPrivate : public QSharedData      QByteArray name() const      { -        if (mName.isEmpty()) +        if (mName.isEmpty()) {              return "<default>"; +        }          return mName;      } -    QByteArray fullName(const QByteArray& aGroup) const +    QByteArray fullName(const QByteArray &aGroup) const      { -        if (mName.isEmpty()) +        if (mName.isEmpty()) {              return aGroup; +        }          return fullName() + '\x1d' + aGroup;      }      static QExplicitlySharedDataPointer<KConfigGroupPrivate> create(KConfigBase *master, -                                                                    const QByteArray &name, -                                                                    bool isImmutable, -                                                                    bool isConst) +            const QByteArray &name, +            bool isImmutable, +            bool isConst)      {          QExplicitlySharedDataPointer<KConfigGroupPrivate> data; -        if (dynamic_cast<KConfigGroup*>(master)) -            data = new KConfigGroupPrivate(dynamic_cast<KConfigGroup*>(master), isImmutable, isConst, name); -        else -            data = new KConfigGroupPrivate(dynamic_cast<KConfig*>(master), isImmutable, isConst, name); +        if (dynamic_cast<KConfigGroup *>(master)) { +            data = new KConfigGroupPrivate(dynamic_cast<KConfigGroup *>(master), isImmutable, isConst, name); +        } else { +            data = new KConfigGroupPrivate(dynamic_cast<KConfig *>(master), isImmutable, isConst, name); +        }          return data;      } @@ -141,8 +146,9 @@ QByteArray KConfigGroupPrivate::serializeList(const QList<QByteArray> &list)          }          // To be able to distinguish an empty list from a list with one empty element. -        if (value.isEmpty()) +        if (value.isEmpty()) {              value = "\\0"; +        }      }      return value; @@ -150,10 +156,12 @@ QByteArray KConfigGroupPrivate::serializeList(const QList<QByteArray> &list)  QStringList KConfigGroupPrivate::deserializeList(const QString &data)  { -    if (data.isEmpty()) +    if (data.isEmpty()) {          return QStringList(); -    if (data == QLatin1String("\\0")) +    } +    if (data == QLatin1String("\\0")) {          return QStringList(QString()); +    }      QStringList value;      QString val;      val.reserve(data.size()); @@ -177,192 +185,199 @@ QStringList KConfigGroupPrivate::deserializeList(const QString &data)      return value;  } -static QList<int> asIntList(const QByteArray& string) +static QList<int> asIntList(const QByteArray &string)  {      QList<int> list; -    Q_FOREACH(const QByteArray& s, string.split(',')) +    Q_FOREACH (const QByteArray &s, string.split(',')) {          list << s.toInt(); +    }      return list;  } -static QList<qreal> asRealList(const QByteArray& string) +static QList<qreal> asRealList(const QByteArray &string)  {      QList<qreal> list; -    Q_FOREACH(const QByteArray& s, string.split(',')) +    Q_FOREACH (const QByteArray &s, string.split(',')) {          list << s.toDouble(); +    }      return list;  } -static QString errString( const char * pKey, const QByteArray & value, const QVariant & aDefault ) { +static QString errString(const char *pKey, const QByteArray &value, const QVariant &aDefault) +{      return QString::fromLatin1("\"%1\" - conversion of \"%3\" to %2 failed") -        .arg(QString::fromLatin1(pKey)) -        .arg(QString::fromLatin1(QVariant::typeToName(aDefault.type()))) -        .arg(QString::fromLatin1(value)); +           .arg(QString::fromLatin1(pKey)) +           .arg(QString::fromLatin1(QVariant::typeToName(aDefault.type()))) +           .arg(QString::fromLatin1(value));  } -static QString formatError( int expected, int got ) { -    return QString::fromLatin1(" (wrong format: expected %1 items, got %2)").arg( expected ).arg( got ); +static QString formatError(int expected, int got) +{ +    return QString::fromLatin1(" (wrong format: expected %1 items, got %2)").arg(expected).arg(got);  } -QVariant KConfigGroup::convertToQVariant(const char *pKey, const QByteArray& value, const QVariant& aDefault) +QVariant KConfigGroup::convertToQVariant(const char *pKey, const QByteArray &value, const QVariant &aDefault)  {      // if a type handler is added here you must add a QVConversions definition      // to conversion_check.h, or ConversionCheck::to_QVariant will not allow      // readEntry<T> to convert to QVariant. -    switch( aDefault.type() ) { -        case QVariant::Invalid: -            return QVariant(); -        case QVariant::String: -            // this should return the raw string not the dollar expanded string. -            // imho if processed string is wanted should call -            // readEntry(key, QString) not readEntry(key, QVariant) -            return QString::fromUtf8(value); -        case QVariant::List: -        case QVariant::StringList: -            return KConfigGroupPrivate::deserializeList(QString::fromUtf8(value)); -        case QVariant::ByteArray: -            return value; -        case QVariant::Bool: { -            const QByteArray lower(value.toLower()); -            if (lower == "false" || lower == "no" || lower == "off" || lower == "0") -                return false; -            return true; +    switch (aDefault.type()) { +    case QVariant::Invalid: +        return QVariant(); +    case QVariant::String: +        // this should return the raw string not the dollar expanded string. +        // imho if processed string is wanted should call +        // readEntry(key, QString) not readEntry(key, QVariant) +        return QString::fromUtf8(value); +    case QVariant::List: +    case QVariant::StringList: +        return KConfigGroupPrivate::deserializeList(QString::fromUtf8(value)); +    case QVariant::ByteArray: +        return value; +    case QVariant::Bool: { +        const QByteArray lower(value.toLower()); +        if (lower == "false" || lower == "no" || lower == "off" || lower == "0") { +            return false;          } -        case QVariant::Double: -        case QMetaType::Float: -        case QVariant::Int: -        case QVariant::UInt: -        case QVariant::LongLong: -        case QVariant::ULongLong: { -            QVariant tmp = value; -            if ( !tmp.convert(aDefault.type()) ) -                tmp = aDefault; -            return tmp; +        return true; +    } +    case QVariant::Double: +    case QMetaType::Float: +    case QVariant::Int: +    case QVariant::UInt: +    case QVariant::LongLong: +    case QVariant::ULongLong: { +        QVariant tmp = value; +        if (!tmp.convert(aDefault.type())) { +            tmp = aDefault;          } -        case QVariant::Point: { -            const QList<int> list = asIntList(value); - -            if ( list.count() != 2 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 2, list.count() ); -                return aDefault; -            } -            return QPoint(list.at( 0 ), list.at( 1 )); +        return tmp; +    } +    case QVariant::Point: { +        const QList<int> list = asIntList(value); + +        if (list.count() != 2) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(2, list.count()); +            return aDefault;          } -        case QVariant::PointF: { -            const QList<qreal> list = asRealList(value); - -            if ( list.count() != 2 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 2, list.count() ); -                return aDefault; -            } -            return QPointF(list.at( 0 ), list.at( 1 )); +        return QPoint(list.at(0), list.at(1)); +    } +    case QVariant::PointF: { +        const QList<qreal> list = asRealList(value); + +        if (list.count() != 2) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(2, list.count()); +            return aDefault;          } -        case QVariant::Rect: { -            const QList<int> list = asIntList(value); - -            if ( list.count() != 4 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 4, list.count() ); -                return aDefault; -            } -            const QRect rect(list.at( 0 ), list.at( 1 ), list.at( 2 ), list.at( 3 )); -            if ( !rect.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return rect; +        return QPointF(list.at(0), list.at(1)); +    } +    case QVariant::Rect: { +        const QList<int> list = asIntList(value); + +        if (list.count() != 4) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(4, list.count()); +            return aDefault;          } -        case QVariant::RectF: { -            const QList<qreal> list = asRealList(value); - -            if ( list.count() != 4 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 4, list.count() ); -                return aDefault; -            } -            const QRectF rect(list.at( 0 ), list.at( 1 ), list.at( 2 ), list.at( 3 )); -            if ( !rect.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return rect; +        const QRect rect(list.at(0), list.at(1), list.at(2), list.at(3)); +        if (!rect.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault;          } -        case QVariant::Size: { -            const QList<int> list = asIntList(value); - -            if ( list.count() != 2 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 2, list.count() ); -                return aDefault; -            } -            const QSize size(list.at( 0 ), list.at( 1 )); -            if ( !size.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return size; +        return rect; +    } +    case QVariant::RectF: { +        const QList<qreal> list = asRealList(value); + +        if (list.count() != 4) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(4, list.count()); +            return aDefault;          } -        case QVariant::SizeF: { -            const QList<qreal> list = asRealList(value); - -            if ( list.count() != 2 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 2, list.count() ); -                return aDefault; -            } -            const QSizeF size(list.at( 0 ), list.at( 1 )); -            if ( !size.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return size; +        const QRectF rect(list.at(0), list.at(1), list.at(2), list.at(3)); +        if (!rect.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault;          } -        case QVariant::DateTime: { -            const QList<int> list = asIntList(value); -            if ( list.count() != 6 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 6, list.count() ); -                return aDefault; -            } -            const QDate date( list.at( 0 ), list.at( 1 ), list.at( 2 ) ); -            const QTime time( list.at( 3 ), list.at( 4 ), list.at( 5 ) ); -            const QDateTime dt( date, time ); -            if ( !dt.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return dt; +        return rect; +    } +    case QVariant::Size: { +        const QList<int> list = asIntList(value); + +        if (list.count() != 2) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(2, list.count()); +            return aDefault;          } -        case QVariant::Date: { -            QList<int> list = asIntList(value); -            if ( list.count() == 6 ) -                list = list.mid(0, 3); // don't break config files that stored QDate as QDateTime -            if ( list.count() != 3 ) { -                qWarning() << errString( pKey, value, aDefault ) -                         << formatError( 3, list.count() ); -                return aDefault; -            } -            const QDate date( list.at( 0 ), list.at( 1 ), list.at( 2 ) ); -            if ( !date.isValid() ) { -                qWarning() << errString( pKey, value, aDefault ); -                return aDefault; -            } -            return date; +        const QSize size(list.at(0), list.at(1)); +        if (!size.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault;          } -        case QVariant::Color: -        case QVariant::Font: -            qWarning() << "KConfigGroup::readEntry was passed GUI type '" -                    << aDefault.typeName() -                    << "' but kdeui isn't linked! If it is linked to your program, " -                    "this is a platform bug. Please inform the KDE developers"; -            break; -        case QVariant::Url: -            return QUrl(QString::fromUtf8(value)); +        return size; +    } +    case QVariant::SizeF: { +        const QList<qreal> list = asRealList(value); -        default: -            break; +        if (list.count() != 2) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(2, list.count()); +            return aDefault; +        } +        const QSizeF size(list.at(0), list.at(1)); +        if (!size.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault; +        } +        return size; +    } +    case QVariant::DateTime: { +        const QList<int> list = asIntList(value); +        if (list.count() != 6) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(6, list.count()); +            return aDefault; +        } +        const QDate date(list.at(0), list.at(1), list.at(2)); +        const QTime time(list.at(3), list.at(4), list.at(5)); +        const QDateTime dt(date, time); +        if (!dt.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault; +        } +        return dt; +    } +    case QVariant::Date: { +        QList<int> list = asIntList(value); +        if (list.count() == 6) { +            list = list.mid(0, 3);    // don't break config files that stored QDate as QDateTime +        } +        if (list.count() != 3) { +            qWarning() << errString(pKey, value, aDefault) +                       << formatError(3, list.count()); +            return aDefault; +        } +        const QDate date(list.at(0), list.at(1), list.at(2)); +        if (!date.isValid()) { +            qWarning() << errString(pKey, value, aDefault); +            return aDefault; +        } +        return date; +    } +    case QVariant::Color: +    case QVariant::Font: +        qWarning() << "KConfigGroup::readEntry was passed GUI type '" +                   << aDefault.typeName() +                   << "' but kdeui isn't linked! If it is linked to your program, " +                   "this is a platform bug. Please inform the KDE developers"; +        break; +    case QVariant::Url: +        return QUrl(QString::fromUtf8(value)); + +    default: +        break;      }      qWarning() << "unhandled type " << aDefault.typeName(); @@ -373,68 +388,75 @@ QVariant KConfigGroup::convertToQVariant(const char *pKey, const QByteArray& val  # include <QtCore/QDir>  #endif -static bool cleanHomeDirPath( QString &path, const QString &homeDir ) +static bool cleanHomeDirPath(QString &path, const QString &homeDir)  {  #ifdef Q_OS_WIN //safer -    if (!QDir::toNativeSeparators(path).startsWith(QDir::toNativeSeparators(homeDir))) +    if (!QDir::toNativeSeparators(path).startsWith(QDir::toNativeSeparators(homeDir))) {          return false; +    }  #else -   if (!path.startsWith(homeDir)) +    if (!path.startsWith(homeDir)) {          return false; +    }  #endif -   int len = homeDir.length(); -   // replace by "$HOME" if possible -   if (len && (path.length() == len || path[len] == QLatin1Char('/'))) { +    int len = homeDir.length(); +    // replace by "$HOME" if possible +    if (len && (path.length() == len || path[len] == QLatin1Char('/'))) {          path.replace(0, len, QString::fromLatin1("$HOME"));          return true; -   } else +    } else {          return false; +    }  } -static QString translatePath( QString path ) // krazy:exclude=passbyvalue +static QString translatePath(QString path)   // krazy:exclude=passbyvalue  { -   if (path.isEmpty()) -       return path; +    if (path.isEmpty()) { +        return path; +    } -   // only "our" $HOME should be interpreted -   path.replace(QLatin1Char('$'), QLatin1String("$$")); +    // only "our" $HOME should be interpreted +    path.replace(QLatin1Char('$'), QLatin1String("$$")); -   bool startsWithFile = path.startsWith(QLatin1String("file:"), Qt::CaseInsensitive); +    bool startsWithFile = path.startsWith(QLatin1String("file:"), Qt::CaseInsensitive); -   // return original path, if it refers to another type of URL (e.g. http:/), or -   // if the path is already relative to another directory -   if ((!startsWithFile && QFileInfo(path).isRelative()) || -       (startsWithFile && QFileInfo(path.mid(5)).isRelative())) -       return path; +    // return original path, if it refers to another type of URL (e.g. http:/), or +    // if the path is already relative to another directory +    if ((!startsWithFile && QFileInfo(path).isRelative()) || +            (startsWithFile && QFileInfo(path.mid(5)).isRelative())) { +        return path; +    } -   if (startsWithFile) -       path.remove(0,5); // strip leading "file:/" off the string +    if (startsWithFile) { +        path.remove(0, 5);    // strip leading "file:/" off the string +    } -   // keep only one single '/' at the beginning - needed for cleanHomeDirPath() -   while (path[0] == QLatin1Char('/') && path[1] == QLatin1Char('/')) -       path.remove(0,1); +    // keep only one single '/' at the beginning - needed for cleanHomeDirPath() +    while (path[0] == QLatin1Char('/') && path[1] == QLatin1Char('/')) { +        path.remove(0, 1); +    } -   // we can not use KGlobal::dirs()->relativeLocation("home", path) here, -   // since it would not recognize paths without a trailing '/'. -   // All of the 3 following functions to return the user's home directory -   // can return different paths. We have to test all them. -   const QString homeDir0 = QFile::decodeName(qgetenv("HOME")); -   const QString homeDir1 = QDir::homePath(); -   const QString homeDir2 = QDir(homeDir1).canonicalPath(); -   if (cleanHomeDirPath(path, homeDir0) || -       cleanHomeDirPath(path, homeDir1) || -       cleanHomeDirPath(path, homeDir2) ) { -     // qDebug() << "Path was replaced\n"; -   } +    // we can not use KGlobal::dirs()->relativeLocation("home", path) here, +    // since it would not recognize paths without a trailing '/'. +    // All of the 3 following functions to return the user's home directory +    // can return different paths. We have to test all them. +    const QString homeDir0 = QFile::decodeName(qgetenv("HOME")); +    const QString homeDir1 = QDir::homePath(); +    const QString homeDir2 = QDir(homeDir1).canonicalPath(); +    if (cleanHomeDirPath(path, homeDir0) || +            cleanHomeDirPath(path, homeDir1) || +            cleanHomeDirPath(path, homeDir2)) { +        // qDebug() << "Path was replaced\n"; +    } -   if (startsWithFile) -      path.prepend(QString::fromLatin1("file://")); +    if (startsWithFile) { +        path.prepend(QString::fromLatin1("file://")); +    } -   return path; +    return path;  } -  KConfigGroup::KConfigGroup() : d(0)  {  } @@ -445,20 +467,22 @@ bool KConfigGroup::isValid() const  }  KConfigGroupGui _kde_internal_KConfigGroupGui; -static inline bool readEntryGui(const QByteArray& data, const char* key, const QVariant &input, +static inline bool readEntryGui(const QByteArray &data, const char *key, const QVariant &input,                                  QVariant &output)  { -  if (_kde_internal_KConfigGroupGui.readEntryGui) -    return _kde_internal_KConfigGroupGui.readEntryGui(data, key, input, output); -  return false; +    if (_kde_internal_KConfigGroupGui.readEntryGui) { +        return _kde_internal_KConfigGroupGui.readEntryGui(data, key, input, output); +    } +    return false;  } -static inline bool writeEntryGui(KConfigGroup *cg, const char* key, const QVariant &input, +static inline bool writeEntryGui(KConfigGroup *cg, const char *key, const QVariant &input,                                   KConfigGroup::WriteConfigFlags flags)  { -  if (_kde_internal_KConfigGroupGui.writeEntryGui) -    return _kde_internal_KConfigGroupGui.writeEntryGui(cg, key, input, flags); -  return false; +    if (_kde_internal_KConfigGroupGui.writeEntryGui) { +        return _kde_internal_KConfigGroupGui.writeEntryGui(cg, key, input, flags); +    } +    return false;  }  KConfigGroup::KConfigGroup(KConfigBase *master, const QString &_group) @@ -467,17 +491,17 @@ KConfigGroup::KConfigGroup(KConfigBase *master, const QString &_group)  }  KConfigGroup::KConfigGroup(KConfigBase *master, const char *_group) - : d(KConfigGroupPrivate::create(master, _group, master->isGroupImmutable(_group), false)) +    : d(KConfigGroupPrivate::create(master, _group, master->isGroupImmutable(_group), false))  {  }  KConfigGroup::KConfigGroup(const KConfigBase *master, const QString &_group) -    : d(KConfigGroupPrivate::create(const_cast<KConfigBase*>(master), _group.toUtf8(), master->isGroupImmutable(_group), true)) +    : d(KConfigGroupPrivate::create(const_cast<KConfigBase *>(master), _group.toUtf8(), master->isGroupImmutable(_group), true))  {  } -KConfigGroup::KConfigGroup(const KConfigBase *master, const char * _group) -    : d(KConfigGroupPrivate::create(const_cast<KConfigBase*>(master), _group, master->isGroupImmutable(_group), true)) +KConfigGroup::KConfigGroup(const KConfigBase *master, const char *_group) +    : d(KConfigGroupPrivate::create(const_cast<KConfigBase *>(master), _group, master->isGroupImmutable(_group), true))  {  } @@ -486,7 +510,7 @@ KConfigGroup::KConfigGroup(const KSharedConfigPtr &master, const QString &_group  {  } -KConfigGroup::KConfigGroup(const KSharedConfigPtr &master, const char * _group) +KConfigGroup::KConfigGroup(const KSharedConfigPtr &master, const char *_group)      : d(new KConfigGroupPrivate(master, _group))  {  } @@ -507,7 +531,7 @@ KConfigGroup::~KConfigGroup()      d = 0;  } -KConfigGroup KConfigGroup::groupImpl(const QByteArray& aGroup) +KConfigGroup KConfigGroup::groupImpl(const QByteArray &aGroup)  {      Q_ASSERT_X(isValid(), "KConfigGroup::groupImpl", "accessing an invalid group");      Q_ASSERT_X(!aGroup.isEmpty(), "KConfigGroup::groupImpl", "can not have an unnamed child group"); @@ -519,14 +543,14 @@ KConfigGroup KConfigGroup::groupImpl(const QByteArray& aGroup)      return newGroup;  } -const KConfigGroup KConfigGroup::groupImpl(const QByteArray& aGroup) const +const KConfigGroup KConfigGroup::groupImpl(const QByteArray &aGroup) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::groupImpl", "accessing an invalid group");      Q_ASSERT_X(!aGroup.isEmpty(), "KConfigGroup::groupImpl", "can not have an unnamed child group");      KConfigGroup newGroup; -    newGroup.d = new KConfigGroupPrivate(const_cast<KConfigGroup*>(this), isGroupImmutableImpl(aGroup), +    newGroup.d = new KConfigGroupPrivate(const_cast<KConfigGroup *>(this), isGroupImmutableImpl(aGroup),                                           true, aGroup);      return newGroup; @@ -558,7 +582,7 @@ void KConfigGroup::deleteGroup(WriteConfigFlags flags)  }  #ifndef KDE_NO_DEPRECATED -void KConfigGroup::changeGroup( const QString &group ) +void KConfigGroup::changeGroup(const QString &group)  {      Q_ASSERT_X(isValid(), "KConfigGroup::changeGroup", "accessing an invalid group");      d.detach(); @@ -567,7 +591,7 @@ void KConfigGroup::changeGroup( const QString &group )  #endif  #ifndef KDE_NO_DEPRECATED -void KConfigGroup::changeGroup( const char *group ) +void KConfigGroup::changeGroup(const char *group)  {      Q_ASSERT_X(isValid(), "KConfigGroup::changeGroup", "accessing an invalid group");      d.detach(); @@ -586,15 +610,16 @@ bool KConfigGroup::exists() const  {      Q_ASSERT_X(isValid(), "KConfigGroup::exists", "accessing an invalid group"); -    return config()->hasGroup( d->fullName() ); +    return config()->hasGroup(d->fullName());  }  bool KConfigGroup::sync()  {      Q_ASSERT_X(isValid(), "KConfigGroup::sync", "accessing an invalid group"); -    if (!d->bConst) +    if (!d->bConst) {          return config()->sync(); +    }      return false;  } @@ -606,59 +631,60 @@ QMap<QString, QString> KConfigGroup::entryMap() const      return config()->entryMap(QString::fromUtf8(d->fullName()));  } -KConfig* KConfigGroup::config() +KConfig *KConfigGroup::config()  {      Q_ASSERT_X(isValid(), "KConfigGroup::config", "accessing an invalid group");      return d->mOwner;  } -const KConfig* KConfigGroup::config() const +const KConfig *KConfigGroup::config() const  {      Q_ASSERT_X(isValid(), "KConfigGroup::config", "accessing an invalid group");      return d->mOwner;  } -bool KConfigGroup::isEntryImmutable(const char* key) const +bool KConfigGroup::isEntryImmutable(const char *key) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::isEntryImmutable", "accessing an invalid group");      return (isImmutable() || -        !config()->d_func()->canWriteEntry(d->fullName(), key, config()->readDefaults())); +            !config()->d_func()->canWriteEntry(d->fullName(), key, config()->readDefaults()));  } -bool KConfigGroup::isEntryImmutable(const QString& key) const +bool KConfigGroup::isEntryImmutable(const QString &key) const  {      return isEntryImmutable(key.toUtf8().constData());  } -QString KConfigGroup::readEntryUntranslated(const QString& pKey, const QString& aDefault) const +QString KConfigGroup::readEntryUntranslated(const QString &pKey, const QString &aDefault) const  {      return readEntryUntranslated(pKey.toUtf8().constData(), aDefault);  } -QString KConfigGroup::readEntryUntranslated(const char *key, const QString& aDefault) const +QString KConfigGroup::readEntryUntranslated(const char *key, const QString &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readEntryUntranslated", "accessing an invalid group");      QString result = config()->d_func()->lookupData(d->fullName(), key, KEntryMap::SearchFlags(), 0); -    if (result.isNull()) +    if (result.isNull()) {          return aDefault; +    }      return result;  } -QString KConfigGroup::readEntry(const char *key, const char* aDefault) const +QString KConfigGroup::readEntry(const char *key, const char *aDefault) const  {      return readEntry(key, QString::fromUtf8(aDefault));  } -QString KConfigGroup::readEntry(const QString &key, const char* aDefault) const +QString KConfigGroup::readEntry(const QString &key, const char *aDefault) const  {      return readEntry(key.toUtf8().constData(), aDefault);  } -QString KConfigGroup::readEntry(const char* key, const QString& aDefault) const +QString KConfigGroup::readEntry(const char *key, const QString &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readEntry", "accessing an invalid group"); @@ -666,89 +692,97 @@ QString KConfigGroup::readEntry(const char* key, const QString& aDefault) const      // read value from the entry map      QString aValue = config()->d_func()->lookupData(d->fullName(), key, KEntryMap::SearchLocalized, -                                           &expand); -    if (aValue.isNull()) +                     &expand); +    if (aValue.isNull()) {          aValue = aDefault; +    } -    if (expand) +    if (expand) {          return KConfigPrivate::expandString(aValue); +    }      return aValue;  } -QString KConfigGroup::readEntry(const QString &key, const QString& aDefault) const +QString KConfigGroup::readEntry(const QString &key, const QString &aDefault) const  {      return readEntry(key.toUtf8().constData(), aDefault);  } -QStringList KConfigGroup::readEntry(const char* key, const QStringList& aDefault) const +QStringList KConfigGroup::readEntry(const char *key, const QStringList &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readEntry", "accessing an invalid group");      const QString data = readEntry(key, QString()); -    if (data.isNull()) +    if (data.isNull()) {          return aDefault; +    }      return KConfigGroupPrivate::deserializeList(data);  } -QStringList KConfigGroup::readEntry( const QString& key, const QStringList& aDefault) const +QStringList KConfigGroup::readEntry(const QString &key, const QStringList &aDefault) const  { -    return readEntry( key.toUtf8().constData(), aDefault ); +    return readEntry(key.toUtf8().constData(), aDefault);  } -QVariant KConfigGroup::readEntry( const char* key, const QVariant &aDefault ) const +QVariant KConfigGroup::readEntry(const char *key, const QVariant &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readEntry", "accessing an invalid group");      const QByteArray data = config()->d_func()->lookupData(d->fullName(), key, KEntryMap::SearchLocalized); -    if (data.isNull()) +    if (data.isNull()) {          return aDefault; +    }      QVariant value; -    if (!readEntryGui( data, key, aDefault, value )) +    if (!readEntryGui(data, key, aDefault, value)) {          return convertToQVariant(key, data, aDefault); +    }      return value;  } -QVariant KConfigGroup::readEntry( const QString& key, const QVariant& aDefault) const +QVariant KConfigGroup::readEntry(const QString &key, const QVariant &aDefault) const  { -    return readEntry( key.toUtf8().constData(), aDefault ); +    return readEntry(key.toUtf8().constData(), aDefault);  } -QVariantList KConfigGroup::readEntry( const char* key, const QVariantList& aDefault) const +QVariantList KConfigGroup::readEntry(const char *key, const QVariantList &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readEntry", "accessing an invalid group");      const QString data = readEntry(key, QString()); -    if (data.isNull()) +    if (data.isNull()) {          return aDefault; +    }      QVariantList value; -    Q_FOREACH(const QString& v, KConfigGroupPrivate::deserializeList(data)) +    Q_FOREACH (const QString &v, KConfigGroupPrivate::deserializeList(data)) {          value << v; +    }      return value;  } -QVariantList KConfigGroup::readEntry( const QString& key, const QVariantList& aDefault) const +QVariantList KConfigGroup::readEntry(const QString &key, const QVariantList &aDefault) const  { -    return readEntry( key.toUtf8().constData(), aDefault ); +    return readEntry(key.toUtf8().constData(), aDefault);  } -QStringList KConfigGroup::readXdgListEntry(const QString& key, const QStringList& aDefault) const +QStringList KConfigGroup::readXdgListEntry(const QString &key, const QStringList &aDefault) const  {      return readXdgListEntry(key.toUtf8().constData(), aDefault);  } -QStringList KConfigGroup::readXdgListEntry(const char *key, const QStringList& aDefault) const +QStringList KConfigGroup::readXdgListEntry(const char *key, const QStringList &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readXdgListEntry", "accessing an invalid group");      const QString data = readEntry(key, QString()); -    if (data.isNull()) +    if (data.isNull()) {          return aDefault; +    }      QStringList value;      QString val; @@ -777,42 +811,44 @@ QStringList KConfigGroup::readXdgListEntry(const char *key, const QStringList& a      return value;  } -QString KConfigGroup::readPathEntry(const QString& pKey, const QString & aDefault) const +QString KConfigGroup::readPathEntry(const QString &pKey, const QString &aDefault) const  {      return readPathEntry(pKey.toUtf8().constData(), aDefault);  } -QString KConfigGroup::readPathEntry(const char *key, const QString & aDefault) const +QString KConfigGroup::readPathEntry(const char *key, const QString &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readPathEntry", "accessing an invalid group");      bool expand = false;      QString aValue = config()->d_func()->lookupData(d->fullName(), key, KEntryMap::SearchLocalized, -                            &expand); -    if (aValue.isNull()) +                     &expand); +    if (aValue.isNull()) {          aValue = aDefault; +    }      return KConfigPrivate::expandString(aValue);  } -QStringList KConfigGroup::readPathEntry(const QString& pKey, const QStringList& aDefault) const +QStringList KConfigGroup::readPathEntry(const QString &pKey, const QStringList &aDefault) const  {      return readPathEntry(pKey.toUtf8().constData(), aDefault);  } -QStringList KConfigGroup::readPathEntry(const char *key, const QStringList& aDefault) const +QStringList KConfigGroup::readPathEntry(const char *key, const QStringList &aDefault) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::readPathEntry", "accessing an invalid group");      const QString data = readPathEntry(key, QString()); -    if (data.isNull()) +    if (data.isNull()) {          return aDefault; +    }      return KConfigGroupPrivate::deserializeList(data);  } -void KConfigGroup::writeEntry( const char* key, const QString& value, WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const char *key, const QString &value, WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writeEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writeEntry", "writing to a read-only group"); @@ -820,7 +856,7 @@ void KConfigGroup::writeEntry( const char* key, const QString& value, WriteConfi      writeEntry(key, value.toUtf8(), flags);  } -void KConfigGroup::writeEntry( const QString& key, const QString& value, WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const QString &key, const QString &value, WriteConfigFlags flags)  {      writeEntry(key.toUtf8().constData(), value, flags);  } @@ -838,209 +874,212 @@ void KConfigGroup::writeEntry(const char *key, const char *value, WriteConfigFla      writeEntry(key, QVariant(QString::fromLatin1(value)), pFlags);  } -void KConfigGroup::writeEntry( const char* key, const QByteArray& value, -                               WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const char *key, const QByteArray &value, +                              WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writeEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writeEntry", "writing to a read-only group"); -    config()->d_func()->putData(d->fullName(), key, value.isNull()? QByteArray(""): value, flags); +    config()->d_func()->putData(d->fullName(), key, value.isNull() ? QByteArray("") : value, flags);  } -void KConfigGroup::writeEntry(const QString& key, const QByteArray& value, +void KConfigGroup::writeEntry(const QString &key, const QByteArray &value,                                WriteConfigFlags pFlags)  {      writeEntry(key.toUtf8().constData(), value, pFlags);  } -void KConfigGroup::writeEntry(const char* key, const QStringList &list, WriteConfigFlags flags) +void KConfigGroup::writeEntry(const char *key, const QStringList &list, WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writeEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writeEntry", "writing to a read-only group");      QList<QByteArray> balist; -    Q_FOREACH(const QString &entry, list) +    Q_FOREACH (const QString &entry, list) {          balist.append(entry.toUtf8()); +    }      writeEntry(key, KConfigGroupPrivate::serializeList(balist), flags);  } -void KConfigGroup::writeEntry(const QString& key, const QStringList &list, WriteConfigFlags flags) +void KConfigGroup::writeEntry(const QString &key, const QStringList &list, WriteConfigFlags flags)  {      writeEntry(key.toUtf8().constData(), list, flags);  } -void KConfigGroup::writeEntry( const char* key, const QVariantList& list, WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const char *key, const QVariantList &list, WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writeEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writeEntry", "writing to a read-only group");      QList<QByteArray> data; -    Q_FOREACH(const QVariant& v, list) { -        if (v.type() == QVariant::ByteArray) +    Q_FOREACH (const QVariant &v, list) { +        if (v.type() == QVariant::ByteArray) {              data << v.toByteArray(); -        else +        } else {              data << v.toString().toUtf8(); +        }      }      writeEntry(key, KConfigGroupPrivate::serializeList(data), flags);  } -void KConfigGroup::writeEntry( const char* key, const QVariant &value, -                               WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const char *key, const QVariant &value, +                              WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writeEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writeEntry", "writing to a read-only group"); -    if ( writeEntryGui( this, key, value, flags ) ) -        return;                     // GUI type that was handled +    if (writeEntryGui(this, key, value, flags)) { +        return;    // GUI type that was handled +    }      QByteArray data;      // if a type handler is added here you must add a QVConversions definition      // to conversion_check.h, or ConversionCheck::to_QVariant will not allow      // writeEntry<T> to convert to QVariant. -    switch( value.type() ) { -        case QVariant::Invalid: -            data = ""; -            break; -        case QVariant::ByteArray: -            data = value.toByteArray(); -            break; -        case QVariant::String: -        case QVariant::Int: -        case QVariant::UInt: -        case QVariant::Double: -        case QMetaType::Float: -        case QVariant::Bool: -        case QVariant::LongLong: -        case QVariant::ULongLong: -            data = value.toString().toUtf8(); -            break; -        case QVariant::List: -            if (!value.canConvert(QVariant::StringList)) -                qWarning() << "not all types in \"" << key << "\" can convert to QString," -                   " information will be lost"; -        case QVariant::StringList: -            writeEntry( key, value.toList(), flags ); -            return; -        case QVariant::Point: { -            QVariantList list; -            const QPoint rPoint = value.toPoint(); -            list.insert( 0, rPoint.x() ); -            list.insert( 1, rPoint.y() ); - -            writeEntry( key, list, flags ); -            return; -        } -        case QVariant::PointF: { -            QVariantList list; -            const QPointF point = value.toPointF(); -            list.insert( 0, point.x() ); -            list.insert( 1, point.y() ); - -            writeEntry( key, list, flags ); -            return; -        } -        case QVariant::Rect:{ -            QVariantList list; -            const QRect rRect = value.toRect(); -            list.insert( 0, rRect.left() ); -            list.insert( 1, rRect.top() ); -            list.insert( 2, rRect.width() ); -            list.insert( 3, rRect.height() ); - -            writeEntry( key, list, flags ); -            return; -        } -        case QVariant::RectF:{ -            QVariantList list; -            const QRectF rRectF = value.toRectF(); -            list.insert(0, rRectF.left()); -            list.insert(1, rRectF.top()); -            list.insert(2, rRectF.width()); -            list.insert(3, rRectF.height()); - -            writeEntry(key, list, flags); -            return; -        } -        case QVariant::Size:{ -            QVariantList list; -            const QSize rSize = value.toSize(); -            list.insert( 0, rSize.width() ); -            list.insert( 1, rSize.height() ); - -            writeEntry( key, list, flags ); -            return; -        } -        case QVariant::SizeF:{ -            QVariantList list; -            const QSizeF rSizeF = value.toSizeF(); -            list.insert(0, rSizeF.width()); -            list.insert(1, rSizeF.height()); - -            writeEntry(key, list, flags); -            return; -        } -        case QVariant::Date: { -            QVariantList list; -            const QDate date = value.toDate(); +    switch (value.type()) { +    case QVariant::Invalid: +        data = ""; +        break; +    case QVariant::ByteArray: +        data = value.toByteArray(); +        break; +    case QVariant::String: +    case QVariant::Int: +    case QVariant::UInt: +    case QVariant::Double: +    case QMetaType::Float: +    case QVariant::Bool: +    case QVariant::LongLong: +    case QVariant::ULongLong: +        data = value.toString().toUtf8(); +        break; +    case QVariant::List: +        if (!value.canConvert(QVariant::StringList)) +            qWarning() << "not all types in \"" << key << "\" can convert to QString," +                       " information will be lost"; +    case QVariant::StringList: +        writeEntry(key, value.toList(), flags); +        return; +    case QVariant::Point: { +        QVariantList list; +        const QPoint rPoint = value.toPoint(); +        list.insert(0, rPoint.x()); +        list.insert(1, rPoint.y()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::PointF: { +        QVariantList list; +        const QPointF point = value.toPointF(); +        list.insert(0, point.x()); +        list.insert(1, point.y()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::Rect: { +        QVariantList list; +        const QRect rRect = value.toRect(); +        list.insert(0, rRect.left()); +        list.insert(1, rRect.top()); +        list.insert(2, rRect.width()); +        list.insert(3, rRect.height()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::RectF: { +        QVariantList list; +        const QRectF rRectF = value.toRectF(); +        list.insert(0, rRectF.left()); +        list.insert(1, rRectF.top()); +        list.insert(2, rRectF.width()); +        list.insert(3, rRectF.height()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::Size: { +        QVariantList list; +        const QSize rSize = value.toSize(); +        list.insert(0, rSize.width()); +        list.insert(1, rSize.height()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::SizeF: { +        QVariantList list; +        const QSizeF rSizeF = value.toSizeF(); +        list.insert(0, rSizeF.width()); +        list.insert(1, rSizeF.height()); + +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::Date: { +        QVariantList list; +        const QDate date = value.toDate(); -            list.insert( 0, date.year() ); -            list.insert( 1, date.month() ); -            list.insert( 2, date.day() ); +        list.insert(0, date.year()); +        list.insert(1, date.month()); +        list.insert(2, date.day()); -            writeEntry( key, list, flags ); -            return; -        } -        case QVariant::DateTime: { -            QVariantList list; -            const QDateTime rDateTime = value.toDateTime(); +        writeEntry(key, list, flags); +        return; +    } +    case QVariant::DateTime: { +        QVariantList list; +        const QDateTime rDateTime = value.toDateTime(); -            const QTime time = rDateTime.time(); -            const QDate date = rDateTime.date(); +        const QTime time = rDateTime.time(); +        const QDate date = rDateTime.date(); -            list.insert( 0, date.year() ); -            list.insert( 1, date.month() ); -            list.insert( 2, date.day() ); +        list.insert(0, date.year()); +        list.insert(1, date.month()); +        list.insert(2, date.day()); -            list.insert( 3, time.hour() ); -            list.insert( 4, time.minute() ); -            list.insert( 5, time.second() ); +        list.insert(3, time.hour()); +        list.insert(4, time.minute()); +        list.insert(5, time.second()); -            writeEntry( key, list, flags ); -            return; -        } +        writeEntry(key, list, flags); +        return; +    } -        case QVariant::Color: -        case QVariant::Font: -            qWarning() << "KConfigGroup::writeEntry was passed GUI type '" -                     << value.typeName() -                     << "' but kdeui isn't linked! If it is linked to your program, this is a platform bug. " -                        "Please inform the KDE developers"; -            break; -        case QVariant::Url: -            data = QUrl(value.toUrl()).toString().toUtf8(); -            break; -        default: -            qWarning() << "KConfigGroup::writeEntry - unhandled type" << value.typeName() << "in group" << name(); -        } +    case QVariant::Color: +    case QVariant::Font: +        qWarning() << "KConfigGroup::writeEntry was passed GUI type '" +                   << value.typeName() +                   << "' but kdeui isn't linked! If it is linked to your program, this is a platform bug. " +                   "Please inform the KDE developers"; +        break; +    case QVariant::Url: +        data = QUrl(value.toUrl()).toString().toUtf8(); +        break; +    default: +        qWarning() << "KConfigGroup::writeEntry - unhandled type" << value.typeName() << "in group" << name(); +    }      writeEntry(key, data, flags);  } -void KConfigGroup::writeEntry( const QString& key, const QVariant& value, WriteConfigFlags flags ) +void KConfigGroup::writeEntry(const QString &key, const QVariant &value, WriteConfigFlags flags)  {      writeEntry(key.toUtf8().constData(), value, flags);  } -void KConfigGroup::writeEntry(const QString& key, const QVariantList &list, WriteConfigFlags flags) +void KConfigGroup::writeEntry(const QString &key, const QVariantList &list, WriteConfigFlags flags)  {      writeEntry(key.toUtf8().constData(), list, flags);  } -void KConfigGroup::writeXdgListEntry(const QString& key, const QStringList &value, WriteConfigFlags pFlags) +void KConfigGroup::writeXdgListEntry(const QString &key, const QStringList &value, WriteConfigFlags pFlags)  {      writeXdgListEntry(key.toUtf8().constData(), value, pFlags);  } @@ -1067,12 +1106,12 @@ void KConfigGroup::writeXdgListEntry(const char *key, const QStringList &list, W      writeEntry(key, value, flags);  } -void KConfigGroup::writePathEntry(const QString& pKey, const QString & path, WriteConfigFlags pFlags) +void KConfigGroup::writePathEntry(const QString &pKey, const QString &path, WriteConfigFlags pFlags)  {      writePathEntry(pKey.toUtf8().constData(), path, pFlags);  } -void KConfigGroup::writePathEntry(const char *pKey, const QString & path, WriteConfigFlags pFlags) +void KConfigGroup::writePathEntry(const char *pKey, const QString &path, WriteConfigFlags pFlags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::writePathEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::writePathEntry", "writing to a read-only group"); @@ -1080,7 +1119,7 @@ void KConfigGroup::writePathEntry(const char *pKey, const QString & path, WriteC      config()->d_func()->putData(d->fullName(), pKey, translatePath(path).toUtf8(), pFlags, true);  } -void KConfigGroup::writePathEntry(const QString& pKey, const QStringList &value, WriteConfigFlags pFlags) +void KConfigGroup::writePathEntry(const QString &pKey, const QStringList &value, WriteConfigFlags pFlags)  {      writePathEntry(pKey.toUtf8().constData(), value, pFlags);  } @@ -1091,13 +1130,14 @@ void KConfigGroup::writePathEntry(const char *pKey, const QStringList &value, Wr      Q_ASSERT_X(!d->bConst, "KConfigGroup::writePathEntry", "writing to a read-only group");      QList<QByteArray> list; -    Q_FOREACH(const QString& path, value) +    Q_FOREACH (const QString &path, value) {          list << translatePath(path).toUtf8(); +    }      config()->d_func()->putData(d->fullName(), pKey, KConfigGroupPrivate::serializeList(list), pFlags, true);  } -void KConfigGroup::deleteEntry( const char *key, WriteConfigFlags flags) +void KConfigGroup::deleteEntry(const char *key, WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::deleteEntry", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::deleteEntry", "deleting from a read-only group"); @@ -1105,7 +1145,7 @@ void KConfigGroup::deleteEntry( const char *key, WriteConfigFlags flags)      config()->d_func()->putData(d->fullName(), key, QByteArray(), flags);  } -void KConfigGroup::deleteEntry( const QString& key, WriteConfigFlags flags) +void KConfigGroup::deleteEntry(const QString &key, WriteConfigFlags flags)  {      deleteEntry(key.toUtf8().constData(), flags);  } @@ -1127,7 +1167,7 @@ bool KConfigGroup::hasDefault(const char *key) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::hasDefault", "accessing an invalid group"); -    KEntryMap::SearchFlags flags = KEntryMap::SearchDefaults|KEntryMap::SearchLocalized; +    KEntryMap::SearchFlags flags = KEntryMap::SearchDefaults | KEntryMap::SearchLocalized;      return !config()->d_func()->lookupData(d->fullName(), key, flags).isNull();  } @@ -1142,15 +1182,16 @@ bool KConfigGroup::hasKey(const char *key) const      Q_ASSERT_X(isValid(), "KConfigGroup::hasKey", "accessing an invalid group");      KEntryMap::SearchFlags flags = KEntryMap::SearchLocalized; -    if ( config()->readDefaults() ) +    if (config()->readDefaults()) {          flags |= KEntryMap::SearchDefaults; +    }      return !config()->d_func()->lookupData(d->fullName(), key, flags).isNull();  }  bool KConfigGroup::hasKey(const QString &key) const  { -   return hasKey(key.toUtf8().constData()); +    return hasKey(key.toUtf8().constData());  }  bool KConfigGroup::isImmutable() const @@ -1188,7 +1229,7 @@ KConfigGroup::AccessMode KConfigGroup::accessMode() const      return config()->accessMode();  } -bool KConfigGroup::hasGroupImpl(const QByteArray & b) const +bool KConfigGroup::hasGroupImpl(const QByteArray &b) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::hasGroupImpl", "accessing an invalid group"); @@ -1198,29 +1239,30 @@ bool KConfigGroup::hasGroupImpl(const QByteArray & b) const  void KConfigGroup::deleteGroupImpl(const QByteArray &b, WriteConfigFlags flags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::deleteGroupImpl", "accessing an invalid group"); -    Q_ASSERT_X(!d->bConst,"KConfigGroup::deleteGroupImpl", "deleting from a read-only group"); +    Q_ASSERT_X(!d->bConst, "KConfigGroup::deleteGroupImpl", "deleting from a read-only group");      config()->deleteGroup(d->fullName(b), flags);  } -bool KConfigGroup::isGroupImmutableImpl(const QByteArray& b) const +bool KConfigGroup::isGroupImmutableImpl(const QByteArray &b) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::isGroupImmutableImpl", "accessing an invalid group"); -    if (!hasGroupImpl(b)) // group doesn't exist yet -        return d->bImmutable; // child groups are immutable if the parent is immutable. +    if (!hasGroupImpl(b)) { // group doesn't exist yet +        return d->bImmutable;    // child groups are immutable if the parent is immutable. +    }      return config()->isGroupImmutable(d->fullName(b));  } -void KConfigGroup::copyTo(KConfigBase* other, WriteConfigFlags pFlags) const +void KConfigGroup::copyTo(KConfigBase *other, WriteConfigFlags pFlags) const  {      Q_ASSERT_X(isValid(), "KConfigGroup::copyTo", "accessing an invalid group");      Q_ASSERT(other != 0); -    if (KConfigGroup *otherGroup = dynamic_cast<KConfigGroup*>(other)) { +    if (KConfigGroup *otherGroup = dynamic_cast<KConfigGroup *>(other)) {          config()->d_func()->copyGroup(d->fullName(), otherGroup->d->fullName(), otherGroup, pFlags); -    } else if (KConfig* otherConfig = dynamic_cast<KConfig*>(other)) { +    } else if (KConfig *otherConfig = dynamic_cast<KConfig *>(other)) {          KConfigGroup newGroup = otherConfig->group(d->fullName());          otherConfig->d_func()->copyGroup(d->fullName(), d->fullName(), &newGroup, pFlags);      } else { @@ -1228,7 +1270,7 @@ void KConfigGroup::copyTo(KConfigBase* other, WriteConfigFlags pFlags) const      }  } -void KConfigGroup::reparent(KConfigBase* parent, WriteConfigFlags pFlags) +void KConfigGroup::reparent(KConfigBase *parent, WriteConfigFlags pFlags)  {      Q_ASSERT_X(isValid(), "KConfigGroup::reparent", "accessing an invalid group");      Q_ASSERT_X(!d->bConst, "KConfigGroup::reparent", "reparenting a read-only group"); diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h index ce0330be..cc8a51b1 100644 --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -135,11 +135,11 @@ public:      /**       * Return the config object that this group belongs to       */ -    KConfig* config(); +    KConfig *config();      /**       * Return the config object that this group belongs to       */ -    const KConfig* config() const; +    const KConfig *config() const;      /**       * Changes the group of the object @@ -243,12 +243,16 @@ public:       * @see writeEntry(), deleteEntry(), hasKey()       */      template <typename T> -        inline T readEntry(const QString &key, const T &aDefault) const -            { return readCheck(key.toUtf8().constData(), aDefault); } +    inline T readEntry(const QString &key, const T &aDefault) const +    { +        return readCheck(key.toUtf8().constData(), aDefault); +    }      /** Overload for readEntry(const QString&, const T&) const */      template <typename T> -        inline T readEntry(const char *key, const T &aDefault) const -            { return readCheck(key, aDefault); } +    inline T readEntry(const char *key, const T &aDefault) const +    { +        return readCheck(key, aDefault); +    }      /**       * Reads the value of an entry specified by @p key in the current group @@ -318,12 +322,16 @@ public:       * @see readXdgListEntry(), writeEntry(), deleteEntry(), hasKey()       */      template<typename T> -        inline QList<T> readEntry(const QString &key, const QList<T> &aDefault) const -            { return readListCheck(key.toUtf8().constData(), aDefault); } +    inline QList<T> readEntry(const QString &key, const QList<T> &aDefault) const +    { +        return readListCheck(key.toUtf8().constData(), aDefault); +    }      /** Overload for readEntry(const QString&, const QList<T>&) */      template<typename T> -        inline QList<T> readEntry(const char *key, const QList<T> &aDefault) const -            { return readListCheck(key, aDefault); } +    inline QList<T> readEntry(const char *key, const QList<T> &aDefault) const +    { +        return readListCheck(key, aDefault); +    }      /**       * Reads a list of strings from the config object, following XDG @@ -420,12 +428,16 @@ public:      /** Overload for writeEntry(const QString&, const QVariant&, WriteConfigFlags) */      template <typename T> -        inline void writeEntry(const char *key, const T &value, WriteConfigFlags pFlags = Normal) -            { writeCheck( key, value, pFlags ); } +    inline void writeEntry(const char *key, const T &value, WriteConfigFlags pFlags = Normal) +    { +        writeCheck(key, value, pFlags); +    }      /** Overload for writeEntry(const QString&, const QVariant&, WriteConfigFlags) */      template <typename T> -        inline void writeEntry(const QString &key, const T &value, WriteConfigFlags pFlags = Normal) -            { writeCheck( key.toUtf8().constData(), value, pFlags ); } +    inline void writeEntry(const QString &key, const T &value, WriteConfigFlags pFlags = Normal) +    { +        writeCheck(key.toUtf8().constData(), value, pFlags); +    }      /** Overload for writeEntry(const QString&, const QVariant&, WriteConfigFlags) */      void writeEntry(const QString &key, const QStringList &value, @@ -443,12 +455,16 @@ public:      /** Overload for writeEntry(const QString&, const QVariant&, WriteConfigFlags) */      template <typename T> -        inline void writeEntry(const QString &key, const QList<T> &value, WriteConfigFlags pFlags = Normal) -            { writeListCheck( key.toUtf8().constData(), value, pFlags ); } +    inline void writeEntry(const QString &key, const QList<T> &value, WriteConfigFlags pFlags = Normal) +    { +        writeListCheck(key.toUtf8().constData(), value, pFlags); +    }      /** Overload for writeEntry(const QString&, const QVariant&, WriteConfigFlags) */      template <typename T> -        inline void writeEntry(const char *key, const QList<T> &value, WriteConfigFlags pFlags = Normal) -            { writeListCheck( key, value, pFlags ); } +    inline void writeEntry(const char *key, const QList<T> &value, WriteConfigFlags pFlags = Normal) +    { +        writeListCheck(key, value, pFlags); +    }      /**       * Writes a list of strings to the config object, following XDG @@ -576,7 +592,7 @@ public:       */      void revertToDefault(const QString &key);      /** Overload for revertToDefault(const QString&) */ -    void revertToDefault(const char* key); +    void revertToDefault(const char *key);      /**       * Whether a default is specified for an entry in either the @@ -657,8 +673,8 @@ private:  };  #define KCONFIGGROUP_ENUMERATOR_ERROR(ENUM) \ -"The Qt MetaObject system does not seem to know about \"" ENUM \ -"\" please use Q_ENUMS or Q_FLAGS to register it." +    "The Qt MetaObject system does not seem to know about \"" ENUM \ +    "\" please use Q_ENUMS or Q_FLAGS to register it."  /**   * To add support for your own enums in KConfig, you can declare them with Q_ENUMS() @@ -672,74 +688,75 @@ private:   *   */  #define KCONFIGGROUP_DECLARE_ENUM_QOBJECT(Class, Enum)                     \ -inline Class::Enum readEntry(const KConfigGroup& group, const char* key, const Class::Enum& def) \ -{                                                                          \ -const QMetaObject* M_obj = &Class::staticMetaObject;                       \ -const int M_index = M_obj->indexOfEnumerator(#Enum);                       \ -if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Enum));            \ -const QMetaEnum M_enum = M_obj->enumerator(M_index);                       \ -const QByteArray M_data = group.readEntry(key, QByteArray(M_enum.valueToKey(def)));\ -return static_cast<Class::Enum>(M_enum.keyToValue(M_data.constData()));    \ -}                                                                          \ -inline void writeEntry(KConfigGroup& group, const char* key, const Class::Enum& value, KConfigBase::WriteConfigFlags flags = KConfigBase::Normal)\ -{                                                                          \ -const QMetaObject* M_obj = &Class::staticMetaObject;                       \ -const int M_index = M_obj->indexOfEnumerator(#Enum);                       \ -if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Enum));            \ -const QMetaEnum M_enum = M_obj->enumerator(M_index);                       \ -group.writeEntry(key, QByteArray(M_enum.valueToKey(value)), flags);        \ -} +    inline Class::Enum readEntry(const KConfigGroup& group, const char* key, const Class::Enum& def) \ +    {                                                                          \ +        const QMetaObject* M_obj = &Class::staticMetaObject;                       \ +        const int M_index = M_obj->indexOfEnumerator(#Enum);                       \ +        if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Enum));            \ +        const QMetaEnum M_enum = M_obj->enumerator(M_index);                       \ +        const QByteArray M_data = group.readEntry(key, QByteArray(M_enum.valueToKey(def)));\ +        return static_cast<Class::Enum>(M_enum.keyToValue(M_data.constData()));    \ +    }                                                                          \ +    inline void writeEntry(KConfigGroup& group, const char* key, const Class::Enum& value, KConfigBase::WriteConfigFlags flags = KConfigBase::Normal)\ +    {                                                                          \ +        const QMetaObject* M_obj = &Class::staticMetaObject;                       \ +        const int M_index = M_obj->indexOfEnumerator(#Enum);                       \ +        if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Enum));            \ +        const QMetaEnum M_enum = M_obj->enumerator(M_index);                       \ +        group.writeEntry(key, QByteArray(M_enum.valueToKey(value)), flags);        \ +    }  /**   * Similar to KCONFIGGROUP_DECLARE_ENUM_QOBJECT but for flags declared with Q_FLAGS()   * (where multiple values can be set at the same time)   */  #define KCONFIGGROUP_DECLARE_FLAGS_QOBJECT(Class, Flags)                    \ -inline Class::Flags readEntry(const KConfigGroup& group, const char* key, const Class::Flags& def) \ -{                                                                           \ -const QMetaObject* M_obj = &Class::staticMetaObject;                        \ -const int M_index = M_obj->indexOfEnumerator(#Flags);                       \ -if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Flags));            \ -const QMetaEnum M_enum = M_obj->enumerator(M_index);                        \ -const QByteArray M_data = group.readEntry(key, QByteArray(M_enum.valueToKeys(def)));\ -return static_cast<Class::Flags>(M_enum.keysToValue(M_data.constData()));   \ -}                                                                           \ -inline void writeEntry(KConfigGroup& group, const char* key, const Class::Flags& value, KConfigBase::WriteConfigFlags flags = KConfigBase::Normal)\ -{                                                                           \ -const QMetaObject* M_obj = &Class::staticMetaObject;                        \ -const int M_index = M_obj->indexOfEnumerator(#Flags);                       \ -if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Flags));            \ -const QMetaEnum M_enum = M_obj->enumerator(M_index);                        \ -group.writeEntry(key, QByteArray(M_enum.valueToKeys(value)), flags);        \ -} +    inline Class::Flags readEntry(const KConfigGroup& group, const char* key, const Class::Flags& def) \ +    {                                                                           \ +        const QMetaObject* M_obj = &Class::staticMetaObject;                        \ +        const int M_index = M_obj->indexOfEnumerator(#Flags);                       \ +        if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Flags));            \ +        const QMetaEnum M_enum = M_obj->enumerator(M_index);                        \ +        const QByteArray M_data = group.readEntry(key, QByteArray(M_enum.valueToKeys(def)));\ +        return static_cast<Class::Flags>(M_enum.keysToValue(M_data.constData()));   \ +    }                                                                           \ +    inline void writeEntry(KConfigGroup& group, const char* key, const Class::Flags& value, KConfigBase::WriteConfigFlags flags = KConfigBase::Normal)\ +    {                                                                           \ +        const QMetaObject* M_obj = &Class::staticMetaObject;                        \ +        const int M_index = M_obj->indexOfEnumerator(#Flags);                       \ +        if(M_index == -1) qFatal(KCONFIGGROUP_ENUMERATOR_ERROR(#Flags));            \ +        const QMetaEnum M_enum = M_obj->enumerator(M_index);                        \ +        group.writeEntry(key, QByteArray(M_enum.valueToKeys(value)), flags);        \ +    }  #include "conversion_check.h"  template <typename T>  T KConfigGroup::readCheck(const char *key, const T &defaultValue) const  { -  ConversionCheck::to_QVariant<T>(); -  return qvariant_cast<T>(readEntry(key, qVariantFromValue(defaultValue))); +    ConversionCheck::to_QVariant<T>(); +    return qvariant_cast<T>(readEntry(key, qVariantFromValue(defaultValue)));  }  template <typename T>  QList<T> KConfigGroup::readListCheck(const char *key, const QList<T> &defaultValue) const  { -  ConversionCheck::to_QVariant<T>(); -  ConversionCheck::to_QString<T>(); +    ConversionCheck::to_QVariant<T>(); +    ConversionCheck::to_QString<T>(); -  QVariantList data; +    QVariantList data; -  Q_FOREACH(const T& value, defaultValue) -    data.append(qVariantFromValue(value)); +    Q_FOREACH (const T &value, defaultValue) { +        data.append(qVariantFromValue(value)); +    } -  QList<T> list; -  Q_FOREACH (const QVariant &value, readEntry<QVariantList>(key, data)) { -    Q_ASSERT(value.canConvert<T>()); -    list.append(qvariant_cast<T>(value)); -  } +    QList<T> list; +    Q_FOREACH (const QVariant &value, readEntry<QVariantList>(key, data)) { +        Q_ASSERT(value.canConvert<T>()); +        list.append(qvariant_cast<T>(value)); +    } -  return list; +    return list;  }  template <typename T> @@ -754,14 +771,14 @@ template <typename T>  void KConfigGroup::writeListCheck(const char *key, const QList<T> &list,                                    WriteConfigFlags pFlags)  { -  ConversionCheck::to_QVariant<T>(); -  ConversionCheck::to_QString<T>(); -  QVariantList data; -  Q_FOREACH(const T &value, list) { -    data.append(qVariantFromValue(value)); -  } - -  writeEntry(key, data, pFlags); +    ConversionCheck::to_QVariant<T>(); +    ConversionCheck::to_QString<T>(); +    QVariantList data; +    Q_FOREACH (const T &value, list) { +        data.append(qVariantFromValue(value)); +    } + +    writeEntry(key, data, pFlags);  }  #endif // KCONFIGGROUP_H diff --git a/src/core/kconfiggroup_p.h b/src/core/kconfiggroup_p.h index c5d4f150..edc59cc8 100644 --- a/src/core/kconfiggroup_p.h +++ b/src/core/kconfiggroup_p.h @@ -26,11 +26,10 @@  class KConfigGroup; -struct KConfigGroupGui -{ -    typedef bool (*kReadEntryGui)(const QByteArray& data, const char* key, const QVariant &input, +struct KConfigGroupGui { +    typedef bool (*kReadEntryGui)(const QByteArray &data, const char *key, const QVariant &input,                                    QVariant &output); -    typedef bool (*kWriteEntryGui)(KConfigGroup *, const char* key, const QVariant &input, +    typedef bool (*kWriteEntryGui)(KConfigGroup *, const char *key, const QVariant &input,                                     KConfigGroup::WriteConfigFlags flags);      kReadEntryGui readEntryGui; diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index f44b2c39..71a8a653 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -47,11 +47,11 @@ KCONFIGCORE_EXPORT bool kde_kiosk_exception = false; // flag to disable kiosk re  QString KConfigIniBackend::warningProlog(const QFile &file, int line)  {      return QString::fromLatin1("KConfigIni: In file %2, line %1: ") -            .arg(line).arg(file.fileName()); +           .arg(line).arg(file.fileName());  }  KConfigIniBackend::KConfigIniBackend() - : KConfigBackend(), lockFile(NULL) +    : KConfigBackend(), lockFile(NULL)  {  } @@ -60,8 +60,8 @@ KConfigIniBackend::~KConfigIniBackend()  }  KConfigBackend::ParseInfo -        KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entryMap, -                                       ParseOptions options) +KConfigIniBackend::parseConfig(const QByteArray ¤tLocale, KEntryMap &entryMap, +                               ParseOptions options)  {      return parseConfig(currentLocale, entryMap, options, false);  } @@ -69,20 +69,22 @@ KConfigBackend::ParseInfo  // merging==true is the merging that happens at the beginning of writeConfig:  // merge changes in the on-disk file with the changes in the KConfig object.  KConfigBackend::ParseInfo -KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entryMap, +KConfigIniBackend::parseConfig(const QByteArray ¤tLocale, KEntryMap &entryMap,                                 ParseOptions options, bool merging)  { -    if (filePath().isEmpty() || !QFile::exists(filePath())) +    if (filePath().isEmpty() || !QFile::exists(filePath())) {          return ParseOk; +    } -    bool bDefault = options&ParseDefaults; -    bool allowExecutableValues = options&ParseExpansions; +    bool bDefault = options & ParseDefaults; +    bool allowExecutableValues = options & ParseExpansions;      QByteArray currentGroup("<default>");      QFile file(filePath()); -    if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) +    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {          return ParseOpenError; +    }      QList<QByteArray> immutableGroups; @@ -104,8 +106,9 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry          lineNo++;          // skip empty lines and lines beginning with '#' -        if (line.isEmpty() || line.at(0) == '#') +        if (line.isEmpty() || line.at(0) == '#') {              continue; +        }          if (line.at(0) == '[') { // found a group              groupOptionImmutable = fileOptionImmutable; @@ -120,22 +123,23 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry                          // XXX maybe reset the current group here?                          goto next_line;                      } -                    if (line.at(end) == ']') +                    if (line.at(end) == ']') {                          break; +                    }                      end++;                  }                  if (end + 1 == line.length() && start + 2 == end && -                    line.at(start) == '$' && line.at(start + 1) == 'i') -                { -                    if (newGroup.isEmpty()) +                        line.at(start) == '$' && line.at(start + 1) == 'i') { +                    if (newGroup.isEmpty()) {                          fileOptionImmutable = !kde_kiosk_exception; -                    else +                    } else {                          groupOptionImmutable = !kde_kiosk_exception; -                } -                else { -                    if (!newGroup.isEmpty()) +                    } +                } else { +                    if (!newGroup.isEmpty()) {                          newGroup += '\x1d'; -                    BufferFragment namePart=line.mid(start, end - start); +                    } +                    BufferFragment namePart = line.mid(start, end - start);                      printableToString(&namePart, file, lineNo);                      newGroup += namePart.toByteArray();                  } @@ -144,16 +148,20 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry              groupSkip = entryMap.getEntryOption(currentGroup, 0, 0, KEntryMap::EntryImmutable); -            if (groupSkip && !bDefault) +            if (groupSkip && !bDefault) {                  continue; +            }              if (groupOptionImmutable)                  // Do not make the groups immutable until the entries from                  // this file have been added. +            {                  immutableGroups.append(currentGroup); +            }          } else { -            if (groupSkip && !bDefault) -                continue; // skip entry +            if (groupSkip && !bDefault) { +                continue;    // skip entry +            }              BufferFragment aKey;              int eqpos = line.indexOf('='); @@ -171,9 +179,10 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry                  continue;              } -            KEntryMap::EntryOptions entryOptions=0; -            if (groupOptionImmutable) +            KEntryMap::EntryOptions entryOptions = 0; +            if (groupOptionImmutable) {                  entryOptions |= KEntryMap::EntryImmutable; +            }              BufferFragment locale;              int start; @@ -181,39 +190,41 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry                  int end = aKey.indexOf(']', start);                  if (end < 0) {                      qWarning() << warningProlog(file, lineNo) -                            << "Invalid entry (missing ']')"; +                               << "Invalid entry (missing ']')";                      goto next_line;                  } else if (end > start + 1 && aKey.at(start + 1) == '$') { // found option(s)                      int i = start + 2;                      while (i < end) {                          switch (aKey.at(i)) { -                            case 'i': -                                if (!kde_kiosk_exception) -                                    entryOptions |= KEntryMap::EntryImmutable; -                                break; -                            case 'e': -                                if (allowExecutableValues) -                                    entryOptions |= KEntryMap::EntryExpansion; -                                break; -                            case 'd': -                                entryOptions |= KEntryMap::EntryDeleted; -                                aKey = aKey.left(start); -                                printableToString(&aKey, file, lineNo); -                                entryMap.setEntry(currentGroup, aKey.toByteArray(), QByteArray(), entryOptions); -                                goto next_line; -                            default: -                                break; +                        case 'i': +                            if (!kde_kiosk_exception) { +                                entryOptions |= KEntryMap::EntryImmutable; +                            } +                            break; +                        case 'e': +                            if (allowExecutableValues) { +                                entryOptions |= KEntryMap::EntryExpansion; +                            } +                            break; +                        case 'd': +                            entryOptions |= KEntryMap::EntryDeleted; +                            aKey = aKey.left(start); +                            printableToString(&aKey, file, lineNo); +                            entryMap.setEntry(currentGroup, aKey.toByteArray(), QByteArray(), entryOptions); +                            goto next_line; +                        default: +                            break;                          }                          i++;                      }                  } else { // found a locale                      if (!locale.isNull()) {                          qWarning() << warningProlog(file, lineNo) -                                << "Invalid entry (second locale!?)"; +                                   << "Invalid entry (second locale!?)";                          goto next_line;                      } -                    locale = aKey.mid(start + 1,end - start - 1); +                    locale = aKey.mid(start + 1, end - start - 1);                  }                  aKey.truncate(start);              } @@ -226,23 +237,28 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry                  if (locale != currentLocale) {                      // backward compatibility. C == en_US                      if (locale.at(0) != 'C' || currentLocale != "en_US") { -                        if (merging) +                        if (merging) {                              entryOptions |= KEntryMap::EntryRawKey; -                        else -                            goto next_line; // skip this entry if we're not merging +                        } else { +                            goto next_line;    // skip this entry if we're not merging +                        }                      }                  }              } -            if (!(entryOptions & KEntryMap::EntryRawKey)) +            if (!(entryOptions & KEntryMap::EntryRawKey)) {                  printableToString(&aKey, file, lineNo); +            } -            if (options&ParseGlobal) +            if (options & ParseGlobal) {                  entryOptions |= KEntryMap::EntryGlobal; -            if (bDefault) +            } +            if (bDefault) {                  entryOptions |= KEntryMap::EntryDefault; -            if (!locale.isNull()) +            } +            if (!locale.isNull()) {                  entryOptions |= KEntryMap::EntryLocalized; +            }              printableToString(&line, file, lineNo);              if (entryOptions & KEntryMap::EntryRawKey) {                  QByteArray rawKey; @@ -254,30 +270,31 @@ KConfigIniBackend::parseConfig(const QByteArray& currentLocale, KEntryMap& entry                  entryMap.setEntry(currentGroup, aKey.toByteArray(), line.toByteArray(), entryOptions);              }          } -next_line: +    next_line:          continue;      }      // now make sure immutable groups are marked immutable -    Q_FOREACH(const QByteArray& group, immutableGroups) { +    Q_FOREACH (const QByteArray &group, immutableGroups) {          entryMap.setEntry(group, QByteArray(), QByteArray(), KEntryMap::EntryImmutable);      }      return fileOptionImmutable ? ParseImmutable : ParseOk;  } -void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file, -                                     const KEntryMap& map, bool defaultGroup, bool &firstEntry) +void KConfigIniBackend::writeEntries(const QByteArray &locale, QIODevice &file, +                                     const KEntryMap &map, bool defaultGroup, bool &firstEntry)  {      QByteArray currentGroup;      bool groupIsImmutable = false;      const KEntryMapConstIterator end = map.constEnd();      for (KEntryMapConstIterator it = map.constBegin(); it != end; ++it) { -        const KEntryKey& key = it.key(); +        const KEntryKey &key = it.key();          // Either process the default group or all others -        if ((key.mGroup != "<default>") == defaultGroup) -            continue; // skip +        if ((key.mGroup != "<default>") == defaultGroup) { +            continue;    // skip +        }          // the only thing we care about groups is, is it immutable?          if (key.mKey.isNull()) { @@ -285,10 +302,11 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,              continue; // skip          } -        const KEntry& currentEntry = *it; +        const KEntry ¤tEntry = *it;          if (!defaultGroup && currentGroup != key.mGroup) { -            if (!firstEntry) +            if (!firstEntry) {                  file.putChar('\n'); +            }              currentGroup = key.mGroup;              for (int start = 0, end;; start = end + 1) {                  file.putChar('['); @@ -298,13 +316,14 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,                      if (currentGroup.at(start) == '$' && cgl - start <= 10) {                          for (int i = start + 1; i < cgl; i++) {                              char c = currentGroup.at(i); -                            if (c < 'a' || c > 'z') +                            if (c < 'a' || c > 'z') {                                  goto nope; +                            }                          }                          file.write("\\x24");                          start++;                      } -                  nope: +                nope:                      file.write(stringToPrintable(currentGroup.mid(start), GroupString));                      file.putChar(']');                      if (groupIsImmutable) { @@ -322,9 +341,9 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,          firstEntry = false;          // it is data for a group -        if (key.bRaw) // unprocessed key with attached locale from merge +        if (key.bRaw) { // unprocessed key with attached locale from merge              file.write(key.mKey); -        else { +        } else {              file.write(stringToPrintable(key.mKey, KeyString)); // Key              if (key.bLocal && locale != "C") { // 'C' locale == untranslated                  file.putChar('['); @@ -333,17 +352,20 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,              }          }          if (currentEntry.bDeleted) { -            if (currentEntry.bImmutable) -                file.write("[$di]", 5); // Deleted + immutable -            else -                file.write("[$d]", 4); // Deleted +            if (currentEntry.bImmutable) { +                file.write("[$di]", 5);    // Deleted + immutable +            } else { +                file.write("[$d]", 4);    // Deleted +            }          } else {              if (currentEntry.bImmutable || currentEntry.bExpand) {                  file.write("[$", 2); -                if (currentEntry.bImmutable) +                if (currentEntry.bImmutable) {                      file.putChar('i'); -                if (currentEntry.bExpand) +                } +                if (currentEntry.bExpand) {                      file.putChar('e'); +                }                  file.putChar(']');              }              file.putChar('='); @@ -353,7 +375,7 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,      }  } -void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file, const KEntryMap& map) +void KConfigIniBackend::writeEntries(const QByteArray &locale, QIODevice &file, const KEntryMap &map)  {      bool firstEntry = true; @@ -364,7 +386,7 @@ void KConfigIniBackend::writeEntries(const QByteArray& locale, QIODevice& file,      writeEntries(locale, file, map, false, firstEntry);  } -bool KConfigIniBackend::writeConfig(const QByteArray& locale, KEntryMap& entryMap, +bool KConfigIniBackend::writeConfig(const QByteArray &locale, KEntryMap &entryMap,                                      WriteOptions options)  {      Q_ASSERT(!filePath().isEmpty()); @@ -376,19 +398,22 @@ bool KConfigIniBackend::writeConfig(const QByteArray& locale, KEntryMap& entryMa      // Store the result into writeMap.      {          ParseOptions opts = ParseExpansions; -        if (bGlobal) +        if (bGlobal) {              opts |= ParseGlobal; +        }          ParseInfo info = parseConfig(locale, writeMap, opts, true); -        if (info != ParseOk) // either there was an error or the file became immutable +        if (info != ParseOk) { // either there was an error or the file became immutable              return false; +        }      }      const KEntryMapIterator end = entryMap.end(); -    for (KEntryMapIterator it=entryMap.begin(); it != end; ++it) { -        if (!it.key().mKey.isEmpty() && !it->bDirty) // not dirty, doesn't overwrite entry in writeMap. skips default entries, too. +    for (KEntryMapIterator it = entryMap.begin(); it != end; ++it) { +        if (!it.key().mKey.isEmpty() && !it->bDirty) { // not dirty, doesn't overwrite entry in writeMap. skips default entries, too.              continue; +        } -        const KEntryKey& key = it.key(); +        const KEntryKey &key = it.key();          // only write entries that have the same "globality" as the file          if (it->bGlobal == bGlobal) { @@ -419,19 +444,15 @@ bool KConfigIniBackend::writeConfig(const QByteArray& locale, KEntryMap& entryMa      bool createNew = true;      QFileInfo fi(filePath()); -    if (fi.exists()) -    { +    if (fi.exists()) {  #ifdef Q_OS_WIN          //TODO: getuid does not exist on windows, use GetSecurityInfo and GetTokenInformation instead          createNew = false;  #else -        if (fi.ownerId() == ::getuid()) -        { +        if (fi.ownerId() == ::getuid()) {              // Preserve file mode if file exists and is owned by user.              fileMode = fi.permissions(); -        } -        else -        { +        } else {              // File is not owned by user:              // Don't create new file but write to existing file instead.              createNew = false; @@ -490,9 +511,9 @@ bool KConfigIniBackend::writeConfig(const QByteArray& locale, KEntryMap& entryMa          f.close();          fclose(fp);  #else -        QFile f( filePath() ); +        QFile f(filePath());          // XXX This is broken - it DOES create the file if it is suddenly gone. -        if (!f.open( QIODevice::WriteOnly | QIODevice::Truncate )) { +        if (!f.open(QIODevice::WriteOnly | QIODevice::Truncate)) {              return false;          }          f.setTextModeEnabled(true); @@ -502,7 +523,6 @@ bool KConfigIniBackend::writeConfig(const QByteArray& locale, KEntryMap& entryMa      return true;  } -  bool KConfigIniBackend::isWritable() const  {      const QString filePath = this->filePath(); @@ -537,18 +557,20 @@ QString KConfigIniBackend::nonWritableErrorMessage() const  void KConfigIniBackend::createEnclosing()  {      const QString file = filePath(); -    if (file.isEmpty()) -        return; // nothing to do +    if (file.isEmpty()) { +        return;    // nothing to do +    }      // Create the containing dir, maybe it wasn't there      QDir dir;      dir.mkpath(QFileInfo(file).absolutePath());  } -void KConfigIniBackend::setFilePath(const QString& file) +void KConfigIniBackend::setFilePath(const QString &file)  { -    if (file.isEmpty()) +    if (file.isEmpty()) {          return; +    }      Q_ASSERT(QDir::isAbsolutePath(file)); @@ -568,11 +590,13 @@ void KConfigIniBackend::setFilePath(const QString& file)  KConfigBase::AccessMode KConfigIniBackend::accessMode() const  { -    if (filePath().isEmpty()) +    if (filePath().isEmpty()) {          return KConfigBase::NoAccess; +    } -    if (isWritable()) +    if (isWritable()) {          return KConfigBase::ReadWrite; +    }      return KConfigBase::ReadOnly;  } @@ -608,15 +632,16 @@ bool KConfigIniBackend::isLocked() const      return lockFile && lockFile->isLocked();  } -QByteArray KConfigIniBackend::stringToPrintable(const QByteArray& aString, StringType type) +QByteArray KConfigIniBackend::stringToPrintable(const QByteArray &aString, StringType type)  {      static const char nibbleLookup[] = {          '0', '1', '2', '3', '4', '5', '6', '7',          '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'      }; -    if (aString.isEmpty()) +    if (aString.isEmpty()) {          return aString; +    }      const int l = aString.length();      QByteArray result; // Guesstimated that it's good to avoid data() initialization for a length of l*4 @@ -635,47 +660,48 @@ QByteArray KConfigIniBackend::stringToPrintable(const QByteArray& aString, Strin      for (; i < l; ++i/*, r++*/) {          switch (s[i]) { -            default: +        default:              // The \n, \t, \r cases (all < 32) are handled below; we can ignore them here -                if (((unsigned char)s[i]) < 32) -                    goto doEscape; +            if (((unsigned char)s[i]) < 32) { +                goto doEscape; +            } +            *data++ = s[i]; +            break; +        case '\n': +            *data++ = '\\'; +            *data++ = 'n'; +            break; +        case '\t': +            *data++ = '\\'; +            *data++ = 't'; +            break; +        case '\r': +            *data++ = '\\'; +            *data++ = 'r'; +            break; +        case '\\': +            *data++ = '\\'; +            *data++ = '\\'; +            break; +        case '=': +            if (type != KeyString) {                  *data++ = s[i];                  break; -            case '\n': -                *data++ = '\\'; -                *data++ = 'n'; -                break; -            case '\t': -                *data++ = '\\'; -                *data++ = 't'; -                break; -            case '\r': -                *data++ = '\\'; -                *data++ = 'r'; -                break; -            case '\\': -                *data++ = '\\'; -                *data++ = '\\'; -                break; -            case '=': -                if (type != KeyString) { -                    *data++ = s[i]; -                    break; -                } -                goto doEscape; -            case '[': -            case ']': +            } +            goto doEscape; +        case '[': +        case ']':              // Above chars are OK to put in *value* strings as plaintext -                if (type == ValueString) { -                    *data++ = s[i]; -                    break; -                } -        doEscape: -                *data++ = '\\'; -                *data++ = 'x'; -                *data++ = nibbleLookup[((unsigned char)s[i]) >> 4]; -                *data++ = nibbleLookup[((unsigned char)s[i]) & 0x0f]; +            if (type == ValueString) { +                *data++ = s[i];                  break; +            } +        doEscape: +            *data++ = '\\'; +            *data++ = 'x'; +            *data++ = nibbleLookup[((unsigned char)s[i]) >> 4]; +            *data++ = nibbleLookup[((unsigned char)s[i]) & 0x0f]; +            break;          }      }      *data = 0; @@ -690,7 +716,7 @@ QByteArray KConfigIniBackend::stringToPrintable(const QByteArray& aString, Strin      return result;  } -char KConfigIniBackend::charFromHex(const char *str, const QFile& file, int line) +char KConfigIniBackend::charFromHex(const char *str, const QFile &file, int line)  {      unsigned char ret = 0;      for (int i = 0; i < 2; i++) { @@ -707,25 +733,26 @@ char KConfigIniBackend::charFromHex(const char *str, const QFile& file, int line              QByteArray e(str, 2);              e.prepend("\\x");              qWarning() << warningProlog(file, line) << "Invalid hex character " << c -                    << " in \\x<nn>-type escape sequence \"" << e.constData() << "\"."; +                       << " in \\x<nn>-type escape sequence \"" << e.constData() << "\".";              return 'x';          }      }      return char(ret);  } -void KConfigIniBackend::printableToString(BufferFragment* aString, const QFile& file, int line) +void KConfigIniBackend::printableToString(BufferFragment *aString, const QFile &file, int line)  { -    if (aString->isEmpty() || aString->indexOf('\\')==-1) +    if (aString->isEmpty() || aString->indexOf('\\') == -1) {          return; +    }      aString->trim();      int l = aString->length();      char *r = aString->data(); -    char *str=r; +    char *str = r; -    for(int i = 0; i < l; i++, r++) { -        if (str[i]!= '\\') { -            *r=str[i]; +    for (int i = 0; i < l; i++, r++) { +        if (str[i] != '\\') { +            *r = str[i];          } else {              // Probable escape sequence              i++; @@ -734,35 +761,35 @@ void KConfigIniBackend::printableToString(BufferFragment* aString, const QFile&                  break;              } -            switch(str[i]) { -                case 's': -                    *r = ' '; -                    break; -                case 't': -                    *r = '\t'; -                    break; -                case 'n': -                    *r = '\n'; -                    break; -                case 'r': -                    *r = '\r'; -                    break; -                case '\\': -                    *r = '\\'; -                    break; -                case 'x': -                    if (i + 2 < l) { -                        *r = charFromHex(str + i + 1, file, line); -                        i += 2; -                    } else { -                        *r = 'x'; -                        i = l - 1; -                    } -                    break; -                default: -                    *r = '\\'; -                    qWarning() << warningProlog(file, line) -                               << QString::fromLatin1("Invalid escape sequence \"\\%1\".").arg(str[i]); +            switch (str[i]) { +            case 's': +                *r = ' '; +                break; +            case 't': +                *r = '\t'; +                break; +            case 'n': +                *r = '\n'; +                break; +            case 'r': +                *r = '\r'; +                break; +            case '\\': +                *r = '\\'; +                break; +            case 'x': +                if (i + 2 < l) { +                    *r = charFromHex(str + i + 1, file, line); +                    i += 2; +                } else { +                    *r = 'x'; +                    i = l - 1; +                } +                break; +            default: +                *r = '\\'; +                qWarning() << warningProlog(file, line) +                           << QString::fromLatin1("Invalid escape sequence \"\\%1\".").arg(str[i]);              }          }      } diff --git a/src/core/kconfigini_p.h b/src/core/kconfigini_p.h index 368a78fb..fb1aca16 100644 --- a/src/core/kconfigini_p.h +++ b/src/core/kconfigini_p.h @@ -40,21 +40,21 @@ public:      KConfigIniBackend();      ~KConfigIniBackend(); -    ParseInfo parseConfig(const QByteArray& locale, -                          KEntryMap& entryMap, +    ParseInfo parseConfig(const QByteArray &locale, +                          KEntryMap &entryMap,                            ParseOptions options); -    ParseInfo parseConfig(const QByteArray& locale, -                          KEntryMap& entryMap, +    ParseInfo parseConfig(const QByteArray &locale, +                          KEntryMap &entryMap,                            ParseOptions options,                            bool merging); -    bool writeConfig(const QByteArray& locale, KEntryMap& entryMap, +    bool writeConfig(const QByteArray &locale, KEntryMap &entryMap,                       WriteOptions options);      bool isWritable() const;      QString nonWritableErrorMessage() const;      KConfigBase::AccessMode accessMode() const;      void createEnclosing(); -    void setFilePath(const QString& path); +    void setFilePath(const QString &path);      bool lock();      void unlock();      bool isLocked() const; @@ -68,13 +68,13 @@ protected:      };      // Warning: this modifies data in-place. Other BufferFragment objects referencing the same buffer      // fragment will get their data modified too. -    static void printableToString(BufferFragment* aString, const QFile& file, int line); -    static QByteArray stringToPrintable(const QByteArray& aString, StringType type); -    static char charFromHex(const char *str, const QFile& file, int line); -    static QString warningProlog(const QFile& file, int line); +    static void printableToString(BufferFragment *aString, const QFile &file, int line); +    static QByteArray stringToPrintable(const QByteArray &aString, StringType type); +    static char charFromHex(const char *str, const QFile &file, int line); +    static QString warningProlog(const QFile &file, int line); -    void writeEntries(const QByteArray& locale, QIODevice& file, const KEntryMap& map); -    void writeEntries(const QByteArray& locale, QIODevice& file, const KEntryMap& map, +    void writeEntries(const QByteArray &locale, QIODevice &file, const KEntryMap &map); +    void writeEntries(const QByteArray &locale, QIODevice &file, const KEntryMap &map,                        bool defaultGroup, bool &firstEntry);  }; diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index 691e0b54..d9b95b4b 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -24,25 +24,24 @@  #include <QUrl> -  static QString obscuredString(const QString &str)  {      QString result;      const QChar *unicode = str.unicode(); -    for ( int i = 0; i < str.length(); ++i ) +    for (int i = 0; i < str.length(); ++i)          // yes, no typo. can't encode ' ' or '!' because          // they're the unicode BOM. stupid scrambling. stupid. -        result += ( unicode[ i ].unicode() <= 0x21 ) ? unicode[ i ] -                                                     : QChar( 0x1001F - unicode[ i ].unicode() ); +        result += (unicode[ i ].unicode() <= 0x21) ? unicode[ i ] +                  : QChar(0x1001F - unicode[ i ].unicode()); -  return result; +    return result;  } -KConfigSkeletonItem::KConfigSkeletonItem(const QString & _group, -                                         const QString & _key) +KConfigSkeletonItem::KConfigSkeletonItem(const QString &_group, +        const QString &_key)      : mGroup(_group)      , mKey(_key) -    , d( new KConfigSkeletonItemPrivate ) +    , d(new KConfigSkeletonItemPrivate)  {  } @@ -51,7 +50,7 @@ KConfigSkeletonItem::~KConfigSkeletonItem()      delete d;  } -void KConfigSkeletonItem::setGroup( const QString &_group ) +void KConfigSkeletonItem::setGroup(const QString &_group)  {      mGroup = _group;  } @@ -61,7 +60,7 @@ QString KConfigSkeletonItem::group() const      return mGroup;  } -void KConfigSkeletonItem::setKey( const QString &_key ) +void KConfigSkeletonItem::setKey(const QString &_key)  {      mKey = _key;  } @@ -81,7 +80,7 @@ QString KConfigSkeletonItem::name() const      return mName;  } -void KConfigSkeletonItem::setLabel( const QString &l ) +void KConfigSkeletonItem::setLabel(const QString &l)  {      d->mLabel = l;  } @@ -91,7 +90,7 @@ QString KConfigSkeletonItem::label() const      return d->mLabel;  } -void KConfigSkeletonItem::setToolTip( const QString &t ) +void KConfigSkeletonItem::setToolTip(const QString &t)  {      d->mToolTip = t;  } @@ -101,7 +100,7 @@ QString KConfigSkeletonItem::toolTip() const      return d->mToolTip;  } -void KConfigSkeletonItem::setWhatsThis( const QString &w ) +void KConfigSkeletonItem::setWhatsThis(const QString &w)  {      d->mWhatsThis = w;  } @@ -126,64 +125,57 @@ bool KConfigSkeletonItem::isImmutable() const      return d->mIsImmutable;  } -void KConfigSkeletonItem::readImmutability( const KConfigGroup &group ) +void KConfigSkeletonItem::readImmutability(const KConfigGroup &group)  { -  d->mIsImmutable = group.isEntryImmutable( mKey ); +    d->mIsImmutable = group.isEntryImmutable(mKey);  } - -KCoreConfigSkeleton::ItemString::ItemString( const QString &_group, const QString &_key, -                                    QString &reference, -                                    const QString &defaultValue, -                                    Type type ) -  : KConfigSkeletonGenericItem<QString>( _group, _key, reference, defaultValue ), -    mType( type ) +KCoreConfigSkeleton::ItemString::ItemString(const QString &_group, const QString &_key, +        QString &reference, +        const QString &defaultValue, +        Type type) +    : KConfigSkeletonGenericItem<QString>(_group, _key, reference, defaultValue), +      mType(type)  {  } -void KCoreConfigSkeleton::ItemString::writeConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemString::writeConfig(KConfig *config)  { -  if ( mReference != mLoadedValue ) // WABA: Is this test needed? -  { -    KConfigGroup cg(config, mGroup ); -    if ((mDefault == mReference) && !cg.hasDefault( mKey)) -      cg.revertToDefault( mKey ); -    else if ( mType == Path ) -      cg.writePathEntry( mKey, mReference ); -    else if ( mType == Password ) -      cg.writeEntry( mKey, obscuredString( mReference ) ); -    else -      cg.writeEntry( mKey, mReference ); -  } +    if (mReference != mLoadedValue) { // WABA: Is this test needed? +        KConfigGroup cg(config, mGroup); +        if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +            cg.revertToDefault(mKey); +        } else if (mType == Path) { +            cg.writePathEntry(mKey, mReference); +        } else if (mType == Password) { +            cg.writeEntry(mKey, obscuredString(mReference)); +        } else { +            cg.writeEntry(mKey, mReference); +        } +    }  } - -void KCoreConfigSkeleton::ItemString::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemString::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); +    KConfigGroup cg(config, mGroup); -  if ( mType == Path ) -  { -    mReference = cg.readPathEntry( mKey, mDefault ); -  } -  else if ( mType == Password ) -  { -    QString val = cg.readEntry( mKey, obscuredString( mDefault ) ); -    mReference = obscuredString( val ); -  } -  else -  { -    mReference = cg.readEntry( mKey, mDefault ); -  } +    if (mType == Path) { +        mReference = cg.readPathEntry(mKey, mDefault); +    } else if (mType == Password) { +        QString val = cg.readEntry(mKey, obscuredString(mDefault)); +        mReference = obscuredString(val); +    } else { +        mReference = cg.readEntry(mKey, mDefault); +    } -  mLoadedValue = mReference; +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemString::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemString::setProperty(const QVariant &p)  { -  mReference = p.toString(); +    mReference = p.toString();  }  bool KCoreConfigSkeleton::ItemString::isEqual(const QVariant &v) const @@ -193,53 +185,53 @@ bool KCoreConfigSkeleton::ItemString::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemString::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } -KCoreConfigSkeleton::ItemPassword::ItemPassword( const QString &_group, const QString &_key, -                                    QString &reference, -                                    const QString &defaultValue) -  : ItemString( _group, _key, reference, defaultValue, Password ) +KCoreConfigSkeleton::ItemPassword::ItemPassword(const QString &_group, const QString &_key, +        QString &reference, +        const QString &defaultValue) +    : ItemString(_group, _key, reference, defaultValue, Password)  {  } -KCoreConfigSkeleton::ItemPath::ItemPath( const QString &_group, const QString &_key, -                                    QString &reference, -                                    const QString &defaultValue) -  : ItemString( _group, _key, reference, defaultValue, Path ) +KCoreConfigSkeleton::ItemPath::ItemPath(const QString &_group, const QString &_key, +                                        QString &reference, +                                        const QString &defaultValue) +    : ItemString(_group, _key, reference, defaultValue, Path)  {  } -KCoreConfigSkeleton::ItemUrl::ItemUrl( const QString &_group, const QString &_key, -                                    QUrl &reference, -                                    const QUrl &defaultValue ) -  : KConfigSkeletonGenericItem<QUrl>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemUrl::ItemUrl(const QString &_group, const QString &_key, +                                      QUrl &reference, +                                      const QUrl &defaultValue) +    : KConfigSkeletonGenericItem<QUrl>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemUrl::writeConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemUrl::writeConfig(KConfig *config)  { -    if ( mReference != mLoadedValue ) // WABA: Is this test needed? -    { -        KConfigGroup cg(config, mGroup ); -        if ((mDefault == mReference) && !cg.hasDefault( mKey)) -            cg.revertToDefault( mKey ); -        else -            cg.writeEntry<QString>( mKey, mReference.toString() ); +    if (mReference != mLoadedValue) { // WABA: Is this test needed? +        KConfigGroup cg(config, mGroup); +        if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +            cg.revertToDefault(mKey); +        } else { +            cg.writeEntry<QString>(mKey, mReference.toString()); +        }      }  } -void KCoreConfigSkeleton::ItemUrl::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemUrl::readConfig(KConfig *config)  { -    KConfigGroup cg(config, mGroup ); +    KConfigGroup cg(config, mGroup); -    mReference = QUrl( cg.readEntry<QString>( mKey, mDefault.toString() ) ); +    mReference = QUrl(cg.readEntry<QString>(mKey, mDefault.toString()));      mLoadedValue = mReference; -    readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemUrl::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemUrl::setProperty(const QVariant &p)  {      mReference = qvariant_cast<QUrl>(p);  } @@ -254,26 +246,26 @@ QVariant KCoreConfigSkeleton::ItemUrl::property() const      return qVariantFromValue<QUrl>(mReference);  } -KCoreConfigSkeleton::ItemProperty::ItemProperty( const QString &_group, -                                        const QString &_key, -                                        QVariant &reference, -                                        const QVariant &defaultValue ) -  : KConfigSkeletonGenericItem<QVariant>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemProperty::ItemProperty(const QString &_group, +        const QString &_key, +        QVariant &reference, +        const QVariant &defaultValue) +    : KConfigSkeletonGenericItem<QVariant>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemProperty::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemProperty::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemProperty::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemProperty::setProperty(const QVariant &p)  { -  mReference = p; +    mReference = p;  }  bool KCoreConfigSkeleton::ItemProperty::isEqual(const QVariant &v) const @@ -284,27 +276,27 @@ bool KCoreConfigSkeleton::ItemProperty::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemProperty::property() const  { -  return mReference; +    return mReference;  } -KCoreConfigSkeleton::ItemBool::ItemBool( const QString &_group, const QString &_key, -                                bool &reference, bool defaultValue ) -  : KConfigSkeletonGenericItem<bool>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemBool::ItemBool(const QString &_group, const QString &_key, +                                        bool &reference, bool defaultValue) +    : KConfigSkeletonGenericItem<bool>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemBool::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemBool::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemBool::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemBool::setProperty(const QVariant &p)  { -  mReference = p.toBool(); +    mReference = p.toBool();  }  bool KCoreConfigSkeleton::ItemBool::isEqual(const QVariant &v) const @@ -314,33 +306,34 @@ bool KCoreConfigSkeleton::ItemBool::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemBool::property() const  { -  return QVariant( mReference ); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemInt::ItemInt( const QString &_group, const QString &_key, -                              qint32 &reference, qint32 defaultValue ) -  : KConfigSkeletonGenericItem<qint32>( _group, _key, reference, defaultValue ) -  ,mHasMin(false), mHasMax(false) +KCoreConfigSkeleton::ItemInt::ItemInt(const QString &_group, const QString &_key, +                                      qint32 &reference, qint32 defaultValue) +    : KConfigSkeletonGenericItem<qint32>(_group, _key, reference, defaultValue) +    , mHasMin(false), mHasMax(false)  {  } -void KCoreConfigSkeleton::ItemInt::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemInt::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  if (mHasMin) -    mReference = qMax(mReference, mMin); -  if (mHasMax) -    mReference = qMin(mReference, mMax); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    if (mHasMin) { +        mReference = qMax(mReference, mMin); +    } +    if (mHasMax) { +        mReference = qMin(mReference, mMax); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemInt::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemInt::setProperty(const QVariant &p)  { -  mReference = p.toInt(); +    mReference = p.toInt();  }  bool KCoreConfigSkeleton::ItemInt::isEqual(const QVariant &v) const @@ -350,59 +343,62 @@ bool KCoreConfigSkeleton::ItemInt::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemInt::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  }  QVariant KCoreConfigSkeleton::ItemInt::minValue() const  { -  if (mHasMin) -    return QVariant(mMin); -  return QVariant(); +    if (mHasMin) { +        return QVariant(mMin); +    } +    return QVariant();  }  QVariant KCoreConfigSkeleton::ItemInt::maxValue() const  { -  if (mHasMax) -    return QVariant(mMax); -  return QVariant(); +    if (mHasMax) { +        return QVariant(mMax); +    } +    return QVariant();  }  void KCoreConfigSkeleton::ItemInt::setMinValue(qint32 v)  { -  mHasMin = true; -  mMin = v; +    mHasMin = true; +    mMin = v;  }  void KCoreConfigSkeleton::ItemInt::setMaxValue(qint32 v)  { -  mHasMax = true; -  mMax = v; +    mHasMax = true; +    mMax = v;  } - -KCoreConfigSkeleton::ItemLongLong::ItemLongLong( const QString &_group, const QString &_key, -                              qint64 &reference, qint64 defaultValue ) -  : KConfigSkeletonGenericItem<qint64>( _group, _key, reference, defaultValue ) -  ,mHasMin(false), mHasMax(false) +KCoreConfigSkeleton::ItemLongLong::ItemLongLong(const QString &_group, const QString &_key, +        qint64 &reference, qint64 defaultValue) +    : KConfigSkeletonGenericItem<qint64>(_group, _key, reference, defaultValue) +    , mHasMin(false), mHasMax(false)  {  } -void KCoreConfigSkeleton::ItemLongLong::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemLongLong::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  if (mHasMin) -    mReference = qMax(mReference, mMin); -  if (mHasMax) -    mReference = qMin(mReference, mMax); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    if (mHasMin) { +        mReference = qMax(mReference, mMin); +    } +    if (mHasMax) { +        mReference = qMin(mReference, mMax); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemLongLong::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemLongLong::setProperty(const QVariant &p)  { -  mReference = p.toLongLong(); +    mReference = p.toLongLong();  }  bool KCoreConfigSkeleton::ItemLongLong::isEqual(const QVariant &v) const @@ -412,84 +408,82 @@ bool KCoreConfigSkeleton::ItemLongLong::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemLongLong::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  }  QVariant KCoreConfigSkeleton::ItemLongLong::minValue() const  { -  if (mHasMin) -    return QVariant(mMin); -  return QVariant(); +    if (mHasMin) { +        return QVariant(mMin); +    } +    return QVariant();  }  QVariant KCoreConfigSkeleton::ItemLongLong::maxValue() const  { -  if (mHasMax) -    return QVariant(mMax); -  return QVariant(); +    if (mHasMax) { +        return QVariant(mMax); +    } +    return QVariant();  }  void KCoreConfigSkeleton::ItemLongLong::setMinValue(qint64 v)  { -  mHasMin = true; -  mMin = v; +    mHasMin = true; +    mMin = v;  }  void KCoreConfigSkeleton::ItemLongLong::setMaxValue(qint64 v)  { -  mHasMax = true; -  mMax = v; -} - -KCoreConfigSkeleton::ItemEnum::ItemEnum( const QString &_group, const QString &_key, -                                     qint32 &reference, -                                     const QList<Choice> &choices, -                                     qint32 defaultValue ) -  : ItemInt( _group, _key, reference, defaultValue ), mChoices(choices) -{ -} - -void KCoreConfigSkeleton::ItemEnum::readConfig( KConfig *config ) -{ -  KConfigGroup cg(config, mGroup ); -  if (!cg.hasKey(mKey)) -  { -    mReference = mDefault; -  } -  else -  { -    int i = 0; -    mReference = -1; -    QString tmp = cg.readEntry( mKey, QString() ).toLower(); -    for(QList<Choice>::ConstIterator it = mChoices.constBegin(); -        it != mChoices.constEnd(); ++it, ++i) -    { -      if ((*it).name.toLower() == tmp) -      { -        mReference = i; -        break; -      } +    mHasMax = true; +    mMax = v; +} + +KCoreConfigSkeleton::ItemEnum::ItemEnum(const QString &_group, const QString &_key, +                                        qint32 &reference, +                                        const QList<Choice> &choices, +                                        qint32 defaultValue) +    : ItemInt(_group, _key, reference, defaultValue), mChoices(choices) +{ +} + +void KCoreConfigSkeleton::ItemEnum::readConfig(KConfig *config) +{ +    KConfigGroup cg(config, mGroup); +    if (!cg.hasKey(mKey)) { +        mReference = mDefault; +    } else { +        int i = 0; +        mReference = -1; +        QString tmp = cg.readEntry(mKey, QString()).toLower(); +        for (QList<Choice>::ConstIterator it = mChoices.constBegin(); +                it != mChoices.constEnd(); ++it, ++i) { +            if ((*it).name.toLower() == tmp) { +                mReference = i; +                break; +            } +        } +        if (mReference == -1) { +            mReference = cg.readEntry(mKey, mDefault); +        }      } -    if (mReference == -1) -       mReference = cg.readEntry( mKey, mDefault ); -  } -  mLoadedValue = mReference; +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemEnum::writeConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemEnum::writeConfig(KConfig *config)  { -  if ( mReference != mLoadedValue ) // WABA: Is this test needed? -  { -    KConfigGroup cg(config, mGroup ); -    if ((mDefault == mReference) && !cg.hasDefault( mKey)) -      cg.revertToDefault( mKey ); -    else if ((mReference >= 0) && (mReference < (int) mChoices.count())) -      cg.writeEntry( mKey, mChoices[mReference].name ); -    else -      cg.writeEntry( mKey, mReference ); -  } +    if (mReference != mLoadedValue) { // WABA: Is this test needed? +        KConfigGroup cg(config, mGroup); +        if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +            cg.revertToDefault(mKey); +        } else if ((mReference >= 0) && (mReference < (int) mChoices.count())) { +            cg.writeEntry(mKey, mChoices[mReference].name); +        } else { +            cg.writeEntry(mKey, mReference); +        } +    }  }  QList<KCoreConfigSkeleton::ItemEnum::Choice> KCoreConfigSkeleton::ItemEnum::choices() const @@ -502,30 +496,32 @@ QList<KCoreConfigSkeleton::ItemEnum::Choice> KCoreConfigSkeleton::ItemEnum::choi      return mChoices;  } -KCoreConfigSkeleton::ItemUInt::ItemUInt( const QString &_group, const QString &_key, -                                quint32 &reference, -                                quint32 defaultValue ) -  : KConfigSkeletonGenericItem<quint32>( _group, _key, reference, defaultValue ) -  ,mHasMin(false), mHasMax(false) +KCoreConfigSkeleton::ItemUInt::ItemUInt(const QString &_group, const QString &_key, +                                        quint32 &reference, +                                        quint32 defaultValue) +    : KConfigSkeletonGenericItem<quint32>(_group, _key, reference, defaultValue) +    , mHasMin(false), mHasMax(false)  {  } -void KCoreConfigSkeleton::ItemUInt::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemUInt::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  if (mHasMin) -    mReference = qMax(mReference, mMin); -  if (mHasMax) -    mReference = qMin(mReference, mMax); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    if (mHasMin) { +        mReference = qMax(mReference, mMin); +    } +    if (mHasMax) { +        mReference = qMin(mReference, mMax); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemUInt::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemUInt::setProperty(const QVariant &p)  { -  mReference = p.toUInt(); +    mReference = p.toUInt();  }  bool KCoreConfigSkeleton::ItemUInt::isEqual(const QVariant &v) const @@ -535,59 +531,62 @@ bool KCoreConfigSkeleton::ItemUInt::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemUInt::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  }  QVariant KCoreConfigSkeleton::ItemUInt::minValue() const  { -  if (mHasMin) -    return QVariant(mMin); -  return QVariant(); +    if (mHasMin) { +        return QVariant(mMin); +    } +    return QVariant();  }  QVariant KCoreConfigSkeleton::ItemUInt::maxValue() const  { -  if (mHasMax) -    return QVariant(mMax); -  return QVariant(); +    if (mHasMax) { +        return QVariant(mMax); +    } +    return QVariant();  }  void KCoreConfigSkeleton::ItemUInt::setMinValue(quint32 v)  { -  mHasMin = true; -  mMin = v; +    mHasMin = true; +    mMin = v;  }  void KCoreConfigSkeleton::ItemUInt::setMaxValue(quint32 v)  { -  mHasMax = true; -  mMax = v; +    mHasMax = true; +    mMax = v;  } - -KCoreConfigSkeleton::ItemULongLong::ItemULongLong( const QString &_group, const QString &_key, -                              quint64 &reference, quint64 defaultValue ) -  : KConfigSkeletonGenericItem<quint64>( _group, _key, reference, defaultValue ) -  ,mHasMin(false), mHasMax(false) +KCoreConfigSkeleton::ItemULongLong::ItemULongLong(const QString &_group, const QString &_key, +        quint64 &reference, quint64 defaultValue) +    : KConfigSkeletonGenericItem<quint64>(_group, _key, reference, defaultValue) +    , mHasMin(false), mHasMax(false)  {  } -void KCoreConfigSkeleton::ItemULongLong::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemULongLong::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  if (mHasMin) -    mReference = qMax(mReference, mMin); -  if (mHasMax) -    mReference = qMin(mReference, mMax); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    if (mHasMin) { +        mReference = qMax(mReference, mMin); +    } +    if (mHasMax) { +        mReference = qMin(mReference, mMax); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemULongLong::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemULongLong::setProperty(const QVariant &p)  { -  mReference = p.toULongLong(); +    mReference = p.toULongLong();  }  bool KCoreConfigSkeleton::ItemULongLong::isEqual(const QVariant &v) const @@ -597,58 +596,62 @@ bool KCoreConfigSkeleton::ItemULongLong::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemULongLong::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  }  QVariant KCoreConfigSkeleton::ItemULongLong::minValue() const  { -  if (mHasMin) -    return QVariant(mMin); -  return QVariant(); +    if (mHasMin) { +        return QVariant(mMin); +    } +    return QVariant();  }  QVariant KCoreConfigSkeleton::ItemULongLong::maxValue() const  { -  if (mHasMax) -    return QVariant(mMax); -  return QVariant(); +    if (mHasMax) { +        return QVariant(mMax); +    } +    return QVariant();  }  void KCoreConfigSkeleton::ItemULongLong::setMinValue(quint64 v)  { -  mHasMin = true; -  mMin = v; +    mHasMin = true; +    mMin = v;  }  void KCoreConfigSkeleton::ItemULongLong::setMaxValue(quint64 v)  { -  mHasMax = true; -  mMax = v; +    mHasMax = true; +    mMax = v;  } -KCoreConfigSkeleton::ItemDouble::ItemDouble( const QString &_group, const QString &_key, -                                    double &reference, double defaultValue ) -  : KConfigSkeletonGenericItem<double>( _group, _key, reference, defaultValue ) -  ,mHasMin(false), mHasMax(false) +KCoreConfigSkeleton::ItemDouble::ItemDouble(const QString &_group, const QString &_key, +        double &reference, double defaultValue) +    : KConfigSkeletonGenericItem<double>(_group, _key, reference, defaultValue) +    , mHasMin(false), mHasMax(false)  {  } -void KCoreConfigSkeleton::ItemDouble::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemDouble::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  if (mHasMin) -    mReference = qMax(mReference, mMin); -  if (mHasMax) -    mReference = qMin(mReference, mMax); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    if (mHasMin) { +        mReference = qMax(mReference, mMin); +    } +    if (mHasMax) { +        mReference = qMin(mReference, mMax); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemDouble::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemDouble::setProperty(const QVariant &p)  { -  mReference = p.toDouble(); +    mReference = p.toDouble();  }  bool KCoreConfigSkeleton::ItemDouble::isEqual(const QVariant &v) const @@ -658,55 +661,56 @@ bool KCoreConfigSkeleton::ItemDouble::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemDouble::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  }  QVariant KCoreConfigSkeleton::ItemDouble::minValue() const  { -  if (mHasMin) -    return QVariant(mMin); -  return QVariant(); +    if (mHasMin) { +        return QVariant(mMin); +    } +    return QVariant();  }  QVariant KCoreConfigSkeleton::ItemDouble::maxValue() const  { -  if (mHasMax) -    return QVariant(mMax); -  return QVariant(); +    if (mHasMax) { +        return QVariant(mMax); +    } +    return QVariant();  }  void KCoreConfigSkeleton::ItemDouble::setMinValue(double v)  { -  mHasMin = true; -  mMin = v; +    mHasMin = true; +    mMin = v;  }  void KCoreConfigSkeleton::ItemDouble::setMaxValue(double v)  { -  mHasMax = true; -  mMax = v; +    mHasMax = true; +    mMax = v;  } - -KCoreConfigSkeleton::ItemRect::ItemRect( const QString &_group, const QString &_key, -                                QRect &reference, -                                const QRect &defaultValue ) -  : KConfigSkeletonGenericItem<QRect>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemRect::ItemRect(const QString &_group, const QString &_key, +                                        QRect &reference, +                                        const QRect &defaultValue) +    : KConfigSkeletonGenericItem<QRect>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemRect::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemRect::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemRect::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemRect::setProperty(const QVariant &p)  { -  mReference = p.toRect(); +    mReference = p.toRect();  }  bool KCoreConfigSkeleton::ItemRect::isEqual(const QVariant &v) const @@ -716,29 +720,28 @@ bool KCoreConfigSkeleton::ItemRect::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemRect::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemPoint::ItemPoint( const QString &_group, const QString &_key, -                                  QPoint &reference, -                                  const QPoint &defaultValue ) -  : KConfigSkeletonGenericItem<QPoint>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemPoint::ItemPoint(const QString &_group, const QString &_key, +        QPoint &reference, +        const QPoint &defaultValue) +    : KConfigSkeletonGenericItem<QPoint>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemPoint::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemPoint::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemPoint::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemPoint::setProperty(const QVariant &p)  { -  mReference = p.toPoint(); +    mReference = p.toPoint();  }  bool KCoreConfigSkeleton::ItemPoint::isEqual(const QVariant &v) const @@ -748,29 +751,28 @@ bool KCoreConfigSkeleton::ItemPoint::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemPoint::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemSize::ItemSize( const QString &_group, const QString &_key, -                                QSize &reference, -                                const QSize &defaultValue ) -  : KConfigSkeletonGenericItem<QSize>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemSize::ItemSize(const QString &_group, const QString &_key, +                                        QSize &reference, +                                        const QSize &defaultValue) +    : KConfigSkeletonGenericItem<QSize>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemSize::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemSize::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemSize::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemSize::setProperty(const QVariant &p)  { -  mReference = p.toSize(); +    mReference = p.toSize();  }  bool KCoreConfigSkeleton::ItemSize::isEqual(const QVariant &v) const @@ -780,29 +782,28 @@ bool KCoreConfigSkeleton::ItemSize::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemSize::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemDateTime::ItemDateTime( const QString &_group, const QString &_key, -                                        QDateTime &reference, -                                        const QDateTime &defaultValue ) -  : KConfigSkeletonGenericItem<QDateTime>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemDateTime::ItemDateTime(const QString &_group, const QString &_key, +        QDateTime &reference, +        const QDateTime &defaultValue) +    : KConfigSkeletonGenericItem<QDateTime>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemDateTime::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemDateTime::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemDateTime::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemDateTime::setProperty(const QVariant &p)  { -  mReference = p.toDateTime(); +    mReference = p.toDateTime();  }  bool KCoreConfigSkeleton::ItemDateTime::isEqual(const QVariant &v) const @@ -812,32 +813,32 @@ bool KCoreConfigSkeleton::ItemDateTime::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemDateTime::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemStringList::ItemStringList( const QString &_group, const QString &_key, -                                            QStringList &reference, -                                            const QStringList &defaultValue ) -  : KConfigSkeletonGenericItem<QStringList>( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemStringList::ItemStringList(const QString &_group, const QString &_key, +        QStringList &reference, +        const QStringList &defaultValue) +    : KConfigSkeletonGenericItem<QStringList>(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemStringList::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemStringList::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  if ( !cg.hasKey( mKey ) ) -    mReference = mDefault; -  else -    mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    if (!cg.hasKey(mKey)) { +        mReference = mDefault; +    } else { +        mReference = cg.readEntry(mKey, mDefault); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemStringList::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemStringList::setProperty(const QVariant &p)  { -  mReference = p.toStringList(); +    mReference = p.toStringList();  }  bool KCoreConfigSkeleton::ItemStringList::isEqual(const QVariant &v) const @@ -847,81 +848,79 @@ bool KCoreConfigSkeleton::ItemStringList::isEqual(const QVariant &v) const  QVariant KCoreConfigSkeleton::ItemStringList::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KCoreConfigSkeleton::ItemPathList::ItemPathList( const QString &_group, const QString &_key, -                                            QStringList &reference, -                                            const QStringList &defaultValue ) -  : ItemStringList( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemPathList::ItemPathList(const QString &_group, const QString &_key, +        QStringList &reference, +        const QStringList &defaultValue) +    : ItemStringList(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemPathList::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemPathList::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  if ( !cg.hasKey( mKey ) ) -    mReference = mDefault; -  else -    mReference = cg.readPathEntry( mKey, QStringList() ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    if (!cg.hasKey(mKey)) { +        mReference = mDefault; +    } else { +        mReference = cg.readPathEntry(mKey, QStringList()); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemPathList::writeConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemPathList::writeConfig(KConfig *config)  { -  if ( mReference != mLoadedValue ) // WABA: Is this test needed? -  { -    KConfigGroup cg(config, mGroup ); -    if ((mDefault == mReference) && !cg.hasDefault( mKey)) -      cg.revertToDefault( mKey ); -    else { -      QStringList sl = mReference; -      cg.writePathEntry( mKey, sl ); +    if (mReference != mLoadedValue) { // WABA: Is this test needed? +        KConfigGroup cg(config, mGroup); +        if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +            cg.revertToDefault(mKey); +        } else { +            QStringList sl = mReference; +            cg.writePathEntry(mKey, sl); +        }      } -  }  } -KCoreConfigSkeleton::ItemUrlList::ItemUrlList( const QString &_group, const QString &_key, -                                            QList<QUrl> &reference, -                                            const QList<QUrl> &defaultValue ) -  : KConfigSkeletonGenericItem<QList<QUrl> >( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemUrlList::ItemUrlList(const QString &_group, const QString &_key, +        QList<QUrl> &reference, +        const QList<QUrl> &defaultValue) +    : KConfigSkeletonGenericItem<QList<QUrl> >(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemUrlList::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemUrlList::readConfig(KConfig *config)  { -    KConfigGroup cg(config, mGroup ); -    if ( !cg.hasKey( mKey ) ) +    KConfigGroup cg(config, mGroup); +    if (!cg.hasKey(mKey)) {          mReference = mDefault; -    else { +    } else {          QStringList strList; -        Q_FOREACH (const QUrl& url, mDefault) { +        Q_FOREACH (const QUrl &url, mDefault) {              strList.append(url.toString());          }          mReference.clear();          const QStringList readList = cg.readEntry<QStringList>(mKey, strList); -        Q_FOREACH (const QString& str, readList) { +        Q_FOREACH (const QString &str, readList) {              mReference.append(QUrl(str));          }      }      mLoadedValue = mReference; -    readImmutability( cg ); +    readImmutability(cg);  } -void KCoreConfigSkeleton::ItemUrlList::writeConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemUrlList::writeConfig(KConfig *config)  { -    if ( mReference != mLoadedValue ) // WABA: Is this test needed? -    { -        KConfigGroup cg(config, mGroup ); -        if ((mDefault == mReference) && !cg.hasDefault( mKey)) -            cg.revertToDefault( mKey ); -        else { +    if (mReference != mLoadedValue) { // WABA: Is this test needed? +        KConfigGroup cg(config, mGroup); +        if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +            cg.revertToDefault(mKey); +        } else {              QStringList strList; -            Q_FOREACH (const QUrl& url, mReference) { +            Q_FOREACH (const QUrl &url, mReference) {                  strList.append(url.toString());              }              cg.writeEntry<QStringList>(mKey, strList); @@ -929,7 +928,7 @@ void KCoreConfigSkeleton::ItemUrlList::writeConfig( KConfig *config )      }  } -void KCoreConfigSkeleton::ItemUrlList::setProperty(const QVariant & p) +void KCoreConfigSkeleton::ItemUrlList::setProperty(const QVariant &p)  {      mReference = qvariant_cast<QList<QUrl> >(p);  } @@ -944,24 +943,24 @@ QVariant KCoreConfigSkeleton::ItemUrlList::property() const      return qVariantFromValue<QList<QUrl> >(mReference);  } - -KCoreConfigSkeleton::ItemIntList::ItemIntList( const QString &_group, const QString &_key, -                                      QList<int> &reference, -                                      const QList<int> &defaultValue ) -  : KConfigSkeletonGenericItem<QList<int> >( _group, _key, reference, defaultValue ) +KCoreConfigSkeleton::ItemIntList::ItemIntList(const QString &_group, const QString &_key, +        QList<int> &reference, +        const QList<int> &defaultValue) +    : KConfigSkeletonGenericItem<QList<int> >(_group, _key, reference, defaultValue)  {  } -void KCoreConfigSkeleton::ItemIntList::readConfig( KConfig *config ) +void KCoreConfigSkeleton::ItemIntList::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  if ( !cg.hasKey( mKey ) ) -    mReference = mDefault; -  else -    mReference = cg.readEntry( mKey , mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    if (!cg.hasKey(mKey)) { +        mReference = mDefault; +    } else { +        mReference = cg.readEntry(mKey, mDefault); +    } +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  }  void KCoreConfigSkeleton::ItemIntList::setProperty(const QVariant &p) @@ -981,32 +980,31 @@ QVariant KCoreConfigSkeleton::ItemIntList::property() const  //static int kCoreConfigSkeletionDebugArea() { static int s_area = KDebug::registerArea("kdecore (KConfigSkeleton)"); return s_area; } -KCoreConfigSkeleton::KCoreConfigSkeleton(const QString &configname, QObject* parent) -  : QObject(parent), -    d( new Private ) +KCoreConfigSkeleton::KCoreConfigSkeleton(const QString &configname, QObject *parent) +    : QObject(parent), +      d(new Private)  {      //qDebug() << "Creating KCoreConfigSkeleton (" << (void *)this << ")"; -    d->mConfig = KSharedConfig::openConfig( configname ); +    d->mConfig = KSharedConfig::openConfig(configname);  } -KCoreConfigSkeleton::KCoreConfigSkeleton(KSharedConfig::Ptr pConfig, QObject* parent) -  : QObject(parent), -    d( new Private ) +KCoreConfigSkeleton::KCoreConfigSkeleton(KSharedConfig::Ptr pConfig, QObject *parent) +    : QObject(parent), +      d(new Private)  {      //qDebug() << "Creating KCoreConfigSkeleton (" << (void *)this << ")";      d->mConfig = pConfig;  } -  KCoreConfigSkeleton::~KCoreConfigSkeleton()  { -  delete d; +    delete d;  } -void KCoreConfigSkeleton::setCurrentGroup( const QString &group ) +void KCoreConfigSkeleton::setCurrentGroup(const QString &group)  { -  d->mCurrentGroup = group; +    d->mCurrentGroup = group;  }  QString KCoreConfigSkeleton::currentGroup() const @@ -1016,12 +1014,12 @@ QString KCoreConfigSkeleton::currentGroup() const  KConfig *KCoreConfigSkeleton::config()  { -  return d->mConfig.data(); +    return d->mConfig.data();  }  const KConfig *KCoreConfigSkeleton::config() const  { -  return d->mConfig.data(); +    return d->mConfig.data();  }  void KCoreConfigSkeleton::setSharedConfig(KSharedConfig::Ptr pConfig) @@ -1036,63 +1034,63 @@ KConfigSkeletonItem::List KCoreConfigSkeleton::items() const  bool KCoreConfigSkeleton::useDefaults(bool b)  { -  if (b == d->mUseDefaults) -    return d->mUseDefaults; +    if (b == d->mUseDefaults) { +        return d->mUseDefaults; +    } -  d->mUseDefaults = b; -  KConfigSkeletonItem::List::ConstIterator it; -  for( it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it ) -  { -    (*it)->swapDefault(); -  } -  usrUseDefaults(b); -  return !d->mUseDefaults; +    d->mUseDefaults = b; +    KConfigSkeletonItem::List::ConstIterator it; +    for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { +        (*it)->swapDefault(); +    } +    usrUseDefaults(b); +    return !d->mUseDefaults;  }  void KCoreConfigSkeleton::setDefaults()  { -  KConfigSkeletonItem::List::ConstIterator it; -  for( it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it ) { -    (*it)->setDefault(); -  } -  usrSetDefaults(); +    KConfigSkeletonItem::List::ConstIterator it; +    for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { +        (*it)->setDefault(); +    } +    usrSetDefaults();  }  void KCoreConfigSkeleton::readConfig()  {      // qDebug(); -  d->mConfig->reparseConfiguration(); -  KConfigSkeletonItem::List::ConstIterator it; -  for( it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it ) -  { -    (*it)->readConfig( d->mConfig.data() ); -  } -  usrReadConfig(); +    d->mConfig->reparseConfiguration(); +    KConfigSkeletonItem::List::ConstIterator it; +    for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { +        (*it)->readConfig(d->mConfig.data()); +    } +    usrReadConfig();  }  bool KCoreConfigSkeleton::writeConfig()  {      //qDebug(); -  KConfigSkeletonItem::List::ConstIterator it; -  for( it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it ) -  { -    (*it)->writeConfig( d->mConfig.data() ); -  } -  if (!usrWriteConfig()) -    return false; +    KConfigSkeletonItem::List::ConstIterator it; +    for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { +        (*it)->writeConfig(d->mConfig.data()); +    } +    if (!usrWriteConfig()) { +        return false; +    } -  if (d->mConfig->isDirty()) { -    if (!d->mConfig->sync()) -      return false; -    readConfig(); -    emit configChanged(); -  } -  return true; +    if (d->mConfig->isDirty()) { +        if (!d->mConfig->sync()) { +            return false; +        } +        readConfig(); +        emit configChanged(); +    } +    return true;  }  bool KCoreConfigSkeleton::usrUseDefaults(bool)  { -  return false; +    return false;  }  void KCoreConfigSkeleton::usrSetDefaults() @@ -1105,14 +1103,14 @@ void KCoreConfigSkeleton::usrReadConfig()  bool KCoreConfigSkeleton::usrWriteConfig()  { -  return true; +    return true;  } -void KCoreConfigSkeleton::addItem( KConfigSkeletonItem *item, const QString &name ) +void KCoreConfigSkeleton::addItem(KConfigSkeletonItem *item, const QString &name)  {      if (d->mItems.contains(item)) {          if (item->name() == name || -            (name.isEmpty() && item->name() == item->key())) { +                (name.isEmpty() && item->name() == item->key())) {              // nothing to do -> it is already in our collection              // and the name isn't changing              return; @@ -1120,7 +1118,7 @@ void KCoreConfigSkeleton::addItem( KConfigSkeletonItem *item, const QString &nam          d->mItemDict.remove(item->name());      } else { -        d->mItems.append( item ); +        d->mItems.append(item);      }      item->setName(name.isEmpty() ? item->key() : name); @@ -1147,197 +1145,197 @@ void KCoreConfigSkeleton::clearItems()      qDeleteAll(items);  } -KCoreConfigSkeleton::ItemString *KCoreConfigSkeleton::addItemString( const QString &name, QString &reference, -                                     const QString &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemString *KCoreConfigSkeleton::addItemString(const QString &name, QString &reference, +        const QString &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemString *item; -  item = new KCoreConfigSkeleton::ItemString( d->mCurrentGroup, key.isEmpty() ? name : key, -                                          reference, defaultValue, -                                          KCoreConfigSkeleton::ItemString::Normal ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemString *item; +    item = new KCoreConfigSkeleton::ItemString(d->mCurrentGroup, key.isEmpty() ? name : key, +            reference, defaultValue, +            KCoreConfigSkeleton::ItemString::Normal); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemPassword *KCoreConfigSkeleton::addItemPassword( const QString &name, QString &reference, -                                       const QString &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemPassword *KCoreConfigSkeleton::addItemPassword(const QString &name, QString &reference, +        const QString &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemPassword *item; -  item = new KCoreConfigSkeleton::ItemPassword( d->mCurrentGroup, key.isNull() ? name : key, -                                          reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemPassword *item; +    item = new KCoreConfigSkeleton::ItemPassword(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemPath *KCoreConfigSkeleton::addItemPath( const QString &name, QString &reference, -                                   const QString &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemPath *KCoreConfigSkeleton::addItemPath(const QString &name, QString &reference, +        const QString &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemPath *item; -  item = new KCoreConfigSkeleton::ItemPath( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemPath *item; +    item = new KCoreConfigSkeleton::ItemPath(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemProperty *KCoreConfigSkeleton::addItemProperty( const QString &name, QVariant &reference, -                                       const QVariant &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemProperty *KCoreConfigSkeleton::addItemProperty(const QString &name, QVariant &reference, +        const QVariant &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemProperty *item; -  item = new KCoreConfigSkeleton::ItemProperty( d->mCurrentGroup, key.isNull() ? name : key, -                                            reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemProperty *item; +    item = new KCoreConfigSkeleton::ItemProperty(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemBool *KCoreConfigSkeleton::addItemBool( const QString &name, bool &reference, -                                   bool defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemBool *KCoreConfigSkeleton::addItemBool(const QString &name, bool &reference, +        bool defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemBool *item; -  item = new KCoreConfigSkeleton::ItemBool( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemBool *item; +    item = new KCoreConfigSkeleton::ItemBool(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemInt *KCoreConfigSkeleton::addItemInt( const QString &name, qint32 &reference, -                                  qint32 defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemInt *KCoreConfigSkeleton::addItemInt(const QString &name, qint32 &reference, +        qint32 defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemInt *item; -  item = new KCoreConfigSkeleton::ItemInt( d->mCurrentGroup, key.isNull() ? name : key, -                                       reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemInt *item; +    item = new KCoreConfigSkeleton::ItemInt(d->mCurrentGroup, key.isNull() ? name : key, +                                            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemUInt *KCoreConfigSkeleton::addItemUInt( const QString &name, quint32 &reference, -                                   quint32 defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemUInt *KCoreConfigSkeleton::addItemUInt(const QString &name, quint32 &reference, +        quint32 defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemUInt *item; -  item = new KCoreConfigSkeleton::ItemUInt( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemUInt *item; +    item = new KCoreConfigSkeleton::ItemUInt(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemLongLong *KCoreConfigSkeleton::addItemLongLong( const QString &name, qint64 &reference, -                                    qint64 defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemLongLong *KCoreConfigSkeleton::addItemLongLong(const QString &name, qint64 &reference, +        qint64 defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemLongLong *item; -  item = new KCoreConfigSkeleton::ItemLongLong( d->mCurrentGroup, key.isNull() ? name : key, -                                         reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemLongLong *item; +    item = new KCoreConfigSkeleton::ItemLongLong(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  }  #ifndef KDE_NO_DEPRECATED  KCoreConfigSkeleton::ItemLongLong *KCoreConfigSkeleton::addItemInt64( -        const QString& name, -        qint64 &reference, -        qint64 defaultValue, -        const QString & key) +    const QString &name, +    qint64 &reference, +    qint64 defaultValue, +    const QString &key)  {      return addItemLongLong(name, reference, defaultValue, key);  }  #endif -KCoreConfigSkeleton::ItemULongLong *KCoreConfigSkeleton::addItemULongLong( const QString &name, quint64 &reference, -                                     quint64 defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemULongLong *KCoreConfigSkeleton::addItemULongLong(const QString &name, quint64 &reference, +        quint64 defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemULongLong *item; -  item = new KCoreConfigSkeleton::ItemULongLong( d->mCurrentGroup, key.isNull() ? name : key, -                                          reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemULongLong *item; +    item = new KCoreConfigSkeleton::ItemULongLong(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  }  #ifndef KDE_NO_DEPRECATED  KCoreConfigSkeleton::ItemULongLong *KCoreConfigSkeleton::addItemUInt64( -        const QString & name, -        quint64 &reference, -        quint64 defaultValue, -        const QString & key) +    const QString &name, +    quint64 &reference, +    quint64 defaultValue, +    const QString &key)  {      return addItemULongLong(name, reference, defaultValue, key);  }  #endif -KCoreConfigSkeleton::ItemDouble *KCoreConfigSkeleton::addItemDouble( const QString &name, double &reference, -                                     double defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemDouble *KCoreConfigSkeleton::addItemDouble(const QString &name, double &reference, +        double defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemDouble *item; -  item = new KCoreConfigSkeleton::ItemDouble( d->mCurrentGroup, key.isNull() ? name : key, -                                          reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemDouble *item; +    item = new KCoreConfigSkeleton::ItemDouble(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemRect *KCoreConfigSkeleton::addItemRect( const QString &name, QRect &reference, -                                   const QRect &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemRect *KCoreConfigSkeleton::addItemRect(const QString &name, QRect &reference, +        const QRect &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemRect *item; -  item = new KCoreConfigSkeleton::ItemRect( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemRect *item; +    item = new KCoreConfigSkeleton::ItemRect(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemPoint *KCoreConfigSkeleton::addItemPoint( const QString &name, QPoint &reference, -                                    const QPoint &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemPoint *KCoreConfigSkeleton::addItemPoint(const QString &name, QPoint &reference, +        const QPoint &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemPoint *item; -  item = new KCoreConfigSkeleton::ItemPoint( d->mCurrentGroup, key.isNull() ? name : key, -                                         reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemPoint *item; +    item = new KCoreConfigSkeleton::ItemPoint(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemSize *KCoreConfigSkeleton::addItemSize( const QString &name, QSize &reference, -                                   const QSize &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemSize *KCoreConfigSkeleton::addItemSize(const QString &name, QSize &reference, +        const QSize &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemSize *item; -  item = new KCoreConfigSkeleton::ItemSize( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemSize *item; +    item = new KCoreConfigSkeleton::ItemSize(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemDateTime *KCoreConfigSkeleton::addItemDateTime( const QString &name, QDateTime &reference, -                                       const QDateTime &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemDateTime *KCoreConfigSkeleton::addItemDateTime(const QString &name, QDateTime &reference, +        const QDateTime &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemDateTime *item; -  item = new KCoreConfigSkeleton::ItemDateTime( d->mCurrentGroup, key.isNull() ? name : key, -                                            reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemDateTime *item; +    item = new KCoreConfigSkeleton::ItemDateTime(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemStringList *KCoreConfigSkeleton::addItemStringList( const QString &name, QStringList &reference, -                                         const QStringList &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemStringList *KCoreConfigSkeleton::addItemStringList(const QString &name, QStringList &reference, +        const QStringList &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemStringList *item; -  item = new KCoreConfigSkeleton::ItemStringList( d->mCurrentGroup, key.isNull() ? name : key, -                                              reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemStringList *item; +    item = new KCoreConfigSkeleton::ItemStringList(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  } -KCoreConfigSkeleton::ItemIntList *KCoreConfigSkeleton::addItemIntList( const QString &name, QList<int> &reference, -                                      const QList<int> &defaultValue, const QString &key ) +KCoreConfigSkeleton::ItemIntList *KCoreConfigSkeleton::addItemIntList(const QString &name, QList<int> &reference, +        const QList<int> &defaultValue, const QString &key)  { -  KCoreConfigSkeleton::ItemIntList *item; -  item = new KCoreConfigSkeleton::ItemIntList( d->mCurrentGroup, key.isNull() ? name : key, -                                           reference, defaultValue ); -  addItem( item, name ); -  return item; +    KCoreConfigSkeleton::ItemIntList *item; +    item = new KCoreConfigSkeleton::ItemIntList(d->mCurrentGroup, key.isNull() ? name : key, +            reference, defaultValue); +    addItem(item, name); +    return item;  }  bool KCoreConfigSkeleton::isImmutable(const QString &name) const  { -  KConfigSkeletonItem *item = findItem(name); -  return !item || item->isImmutable(); +    KConfigSkeletonItem *item = findItem(name); +    return !item || item->isImmutable();  }  KConfigSkeletonItem *KCoreConfigSkeleton::findItem(const QString &name) const  { -  return d->mItemDict.value(name); +    return d->mItemDict.value(name);  } diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h index 75f6fa28..c1a15877 100644 --- a/src/core/kcoreconfigskeleton.h +++ b/src/core/kcoreconfigskeleton.h @@ -35,26 +35,26 @@  #include <QtCore/QVariant>  #include <QtCore/QUrl> -  class KConfigSkeletonItemPrivate; -  /** -   * \class KConfigSkeletonItem kcoreconfigskeleton.h <KConfigSkeletonItem> -   * -   * @short Class for storing a preferences setting -   * @author Cornelius Schumacher -   * @see KCoreConfigSkeleton -   * -   * This class represents one preferences setting as used by @ref KCoreConfigSkeleton. -   * Subclasses of KConfigSkeletonItem implement storage functions for a certain type of -   * setting. Normally you don't have to use this class directly. Use the special -   * addItem() functions of KCoreConfigSkeleton instead. If you subclass this class you will -   * have to register instances with the function KCoreConfigSkeleton::addItem(). -   */ -  class KCONFIGCORE_EXPORT KConfigSkeletonItem -  { -  public: +class KConfigSkeletonItemPrivate; +/** + * \class KConfigSkeletonItem kcoreconfigskeleton.h <KConfigSkeletonItem> + * + * @short Class for storing a preferences setting + * @author Cornelius Schumacher + * @see KCoreConfigSkeleton + * + * This class represents one preferences setting as used by @ref KCoreConfigSkeleton. + * Subclasses of KConfigSkeletonItem implement storage functions for a certain type of + * setting. Normally you don't have to use this class directly. Use the special + * addItem() functions of KCoreConfigSkeleton instead. If you subclass this class you will + * have to register instances with the function KCoreConfigSkeleton::addItem(). + */ +class KCONFIGCORE_EXPORT KConfigSkeletonItem +{ +public:      typedef QList < KConfigSkeletonItem * >List; -    typedef QHash < QString, KConfigSkeletonItem* > Dict; -    typedef QHash < QString, KConfigSkeletonItem* >::Iterator DictIterator; +    typedef QHash < QString, KConfigSkeletonItem * > Dict; +    typedef QHash < QString, KConfigSkeletonItem * >::Iterator DictIterator;      /**       * Constructor. @@ -62,7 +62,7 @@       * @param _group Config file group.       * @param _key Config file key.       */ -    KConfigSkeletonItem(const QString & _group, const QString & _key); +    KConfigSkeletonItem(const QString &_group, const QString &_key);      /**       * Destructor. @@ -72,7 +72,7 @@      /**       * Set config file group.       */ -    void setGroup( const QString &_group ); +    void setGroup(const QString &_group);      /**       * Return config file group. @@ -82,7 +82,7 @@      /**       * Set config file key.       */ -    void setKey( const QString &_key ); +    void setKey(const QString &_key);      /**       * Return config file key. @@ -102,7 +102,7 @@      /**        Set label providing a translated one-line description of the item.      */ -    void setLabel( const QString &l ); +    void setLabel(const QString &l);      /**        Return label of item. See setLabel(). @@ -113,7 +113,7 @@        Set ToolTip description of item.        @since 4.2      */ -    void setToolTip( const QString &t ); +    void setToolTip(const QString &t);      /**        Return ToolTip description of item. See setToolTip(). @@ -124,7 +124,7 @@      /**        Set WhatsThis description of item.      */ -    void setWhatsThis( const QString &w ); +    void setWhatsThis(const QString &w);      /**        Return WhatsThis description of item. See setWhatsThis(). @@ -195,7 +195,7 @@       */      bool isImmutable() const; -  protected: +protected:      /**       * sets mIsImmutable to true if mKey in config is immutable       * @param group KConfigGroup to check if mKey is immutable in @@ -206,58 +206,57 @@      QString mKey; ///< The config key for this item      QString mName; ///< The name of this item -  private: -    KConfigSkeletonItemPrivate * const d; -  }; - +private: +    KConfigSkeletonItemPrivate *const d; +};  /**   * \class KConfigSkeletonGenericItem kcoreconfigskeleton.h <KConfigSkeletonGenericItem>   */ -template < typename T > class KConfigSkeletonGenericItem:public KConfigSkeletonItem -  { -  public: +template < typename T > class KConfigSkeletonGenericItem: public KConfigSkeletonItem +{ +public:      /** @copydoc KConfigSkeletonItem(const QString&, const QString&)           @param reference The initial value to hold in the item           @param defaultValue The default value for the item       */ -    KConfigSkeletonGenericItem(const QString & _group, const QString & _key, T & reference, -                T defaultValue) -      : KConfigSkeletonItem(_group, _key), mReference(reference), -        mDefault(defaultValue), mLoadedValue(defaultValue) +    KConfigSkeletonGenericItem(const QString &_group, const QString &_key, T &reference, +                               T defaultValue) +        : KConfigSkeletonItem(_group, _key), mReference(reference), +          mDefault(defaultValue), mLoadedValue(defaultValue)      {      }      /**       * Set value of this KConfigSkeletonItem.       */ -    void setValue(const T & v) +    void setValue(const T &v)      { -      mReference = v; +        mReference = v;      }      /**       * Return value of this KConfigSkeletonItem.       */ -    T & value() +    T &value()      { -      return mReference; +        return mReference;      }      /**       * Return const value of this KConfigSkeletonItem.       */ -    const T & value() const +    const T &value() const      { -      return mReference; +        return mReference;      }      /**        Set default value for this item.      */ -    virtual void setDefaultValue( const T &v ) +    virtual void setDefaultValue(const T &v)      { -      mDefault = v; +        mDefault = v;      }      /** @@ -265,1142 +264,1130 @@ template < typename T > class KConfigSkeletonGenericItem:public KConfigSkeletonI       */      virtual void setDefault()      { -      mReference = mDefault; +        mReference = mDefault;      }      /** @copydoc KConfigSkeletonItem::writeConfig(KConfig *) */ -    virtual void writeConfig(KConfig * config) +    virtual void writeConfig(KConfig *config)      { -      if ( mReference != mLoadedValue ) // Is this needed? -      { -        KConfigGroup cg(config, mGroup); -        if ((mDefault == mReference) && !cg.hasDefault( mKey)) -          cg.revertToDefault( mKey ); -        else -          cg.writeEntry(mKey, mReference); -      } +        if (mReference != mLoadedValue) { // Is this needed? +            KConfigGroup cg(config, mGroup); +            if ((mDefault == mReference) && !cg.hasDefault(mKey)) { +                cg.revertToDefault(mKey); +            } else { +                cg.writeEntry(mKey, mReference); +            } +        }      }      /** @copydoc KConfigSkeletonItem::readDefault(KConfig*) */ -        void readDefault(KConfig * config) +    void readDefault(KConfig *config)      { -      config->setReadDefaults(true); -      readConfig(config); -      config->setReadDefaults(false); -      mDefault = mReference; +        config->setReadDefaults(true); +        readConfig(config); +        config->setReadDefaults(false); +        mDefault = mReference;      }      /** @copydoc KConfigSkeletonItem::swapDefault() */      void swapDefault()      { -      T tmp = mReference; -      mReference = mDefault; -      mDefault = tmp; +        T tmp = mReference; +        mReference = mDefault; +        mDefault = tmp;      } -  protected: -    T & mReference; ///< Stores the value for this item +protected: +    T &mReference;  ///< Stores the value for this item      T mDefault; ///< The default value for this item      T mLoadedValue; -  }; - -  /** -   * \class KCoreConfigSkeleton kcoreconfigskeleton.h <KCoreConfigSkeleton> -   * -   * @short Class for handling preferences settings for an application. -   * @author Cornelius Schumacher -   * @see KConfigSkeletonItem -   * -   * This class provides an interface to preferences settings. Preferences items -   * can be registered by the addItem() function corresponding to the data type of -   * the setting. KCoreConfigSkeleton then handles reading and writing of config files and -   * setting of default values. -   * -   * Normally you will subclass KCoreConfigSkeleton, add data members for the preferences -   * settings and register the members in the constructor of the subclass. -   * -   * Example: -   * \code -   * class MyPrefs : public KCoreConfigSkeleton -   * { -   *   public: -   *     MyPrefs() -   *     { -   *       setCurrentGroup("MyGroup"); -   *       addItemBool("MySetting1", mMyBool, false); -   *       addItemPoint("MySetting2", mMyPoint, QPoint(100, 200)); -   * -   *       setCurrentGroup("MyOtherGroup"); -   *       addItemDouble("MySetting3", mMyDouble, 3.14); -   *     } -   * -   *     bool mMyBool; -   *     QPoint mMyPoint; -   *     double mMyDouble; -   * } -   * \endcode -   * -   * It might be convenient in many cases to make this subclass of KCoreConfigSkeleton a -   * singleton for global access from all over the application without passing -   * references to the KCoreConfigSkeleton object around. -   * -   * You can write the data to the configuration file by calling @ref writeConfig() -   * and read the data from the configuration file by calling @ref readConfig(). -   * If you want to watch for config changes, use @ref configChanged() signal. -   * -   * If you have items, which are not covered by the existing addItem() functions -   * you can add customized code for reading, writing and default setting by -   * implementing the functions @ref usrUseDefaults(), @ref usrReadConfig() and -   * @ref usrWriteConfig(). -   * -   * Internally preferences settings are stored in instances of subclasses of -   * @ref KConfigSkeletonItem. You can also add KConfigSkeletonItem subclasses -   * for your own types and call the generic @ref addItem() to register them. -   * -   * In many cases you don't have to write the specific KCoreConfigSkeleton -   * subclasses yourself, but you can use \ref kconfig_compiler to automatically -   * generate the C++ code from an XML description of the configuration options. -   * -   * Use KConfigSkeleton if you need GUI types as well. -   */ +}; + +/** + * \class KCoreConfigSkeleton kcoreconfigskeleton.h <KCoreConfigSkeleton> + * + * @short Class for handling preferences settings for an application. + * @author Cornelius Schumacher + * @see KConfigSkeletonItem + * + * This class provides an interface to preferences settings. Preferences items + * can be registered by the addItem() function corresponding to the data type of + * the setting. KCoreConfigSkeleton then handles reading and writing of config files and + * setting of default values. + * + * Normally you will subclass KCoreConfigSkeleton, add data members for the preferences + * settings and register the members in the constructor of the subclass. + * + * Example: + * \code + * class MyPrefs : public KCoreConfigSkeleton + * { + *   public: + *     MyPrefs() + *     { + *       setCurrentGroup("MyGroup"); + *       addItemBool("MySetting1", mMyBool, false); + *       addItemPoint("MySetting2", mMyPoint, QPoint(100, 200)); + * + *       setCurrentGroup("MyOtherGroup"); + *       addItemDouble("MySetting3", mMyDouble, 3.14); + *     } + * + *     bool mMyBool; + *     QPoint mMyPoint; + *     double mMyDouble; + * } + * \endcode + * + * It might be convenient in many cases to make this subclass of KCoreConfigSkeleton a + * singleton for global access from all over the application without passing + * references to the KCoreConfigSkeleton object around. + * + * You can write the data to the configuration file by calling @ref writeConfig() + * and read the data from the configuration file by calling @ref readConfig(). + * If you want to watch for config changes, use @ref configChanged() signal. + * + * If you have items, which are not covered by the existing addItem() functions + * you can add customized code for reading, writing and default setting by + * implementing the functions @ref usrUseDefaults(), @ref usrReadConfig() and + * @ref usrWriteConfig(). + * + * Internally preferences settings are stored in instances of subclasses of + * @ref KConfigSkeletonItem. You can also add KConfigSkeletonItem subclasses + * for your own types and call the generic @ref addItem() to register them. + * + * In many cases you don't have to write the specific KCoreConfigSkeleton + * subclasses yourself, but you can use \ref kconfig_compiler to automatically + * generate the C++ code from an XML description of the configuration options. + * + * Use KConfigSkeleton if you need GUI types as well. + */  class KCONFIGCORE_EXPORT KCoreConfigSkeleton : public QObject  { -  Q_OBJECT +    Q_OBJECT  public: -  /** -   * Class for handling a string preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemString:public KConfigSkeletonGenericItem < QString > -  { -  public: -    enum Type { Normal, Password, Path }; - -    /** @enum Type -        The type of string that is held in this item +    /** +     * Class for handling a string preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemString: public KConfigSkeletonGenericItem < QString > +    { +    public: +        enum Type { Normal, Password, Path }; -        @var ItemString::Type ItemString::Normal -        A normal string +        /** @enum Type +            The type of string that is held in this item -        @var ItemString::Type ItemString::Password -        A password string +            @var ItemString::Type ItemString::Normal +            A normal string -        @var ItemString::Type ItemString::Path -        A path to a file or directory -     */ +            @var ItemString::Type ItemString::Password +            A password string +            @var ItemString::Type ItemString::Path +            A path to a file or directory +         */ -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem -        @param type The type of string held by the item -     */ -    ItemString(const QString & _group, const QString & _key, -               QString & reference, -               const QString & defaultValue = QLatin1String(""), // NOT QString() !! -               Type type = Normal); +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem +            @param type The type of string held by the item +         */ +        ItemString(const QString &_group, const QString &_key, +                   QString &reference, +                   const QString &defaultValue = QLatin1String(""),  // NOT QString() !! +                   Type type = Normal); -    /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ -    void writeConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ +        void writeConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() const */ -    QVariant property() const; +        /** @copydoc KConfigSkeletonItem::property() const */ +        QVariant property() const; -  private: -    Type mType; -  }; +    private: +        Type mType; +    }; -  /** -   * Class for handling a password preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemPassword:public ItemString -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemPassword(const QString & _group, const QString & _key, -               QString & reference, -               const QString & defaultValue = QLatin1String("")); // NOT QString() !! -  }; +    /** +     * Class for handling a password preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemPassword: public ItemString +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemPassword(const QString &_group, const QString &_key, +                     QString &reference, +                     const QString &defaultValue = QLatin1String(""));  // NOT QString() !! +    }; -  /** -   * Class for handling a path preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemPath:public ItemString -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemPath(const QString & _group, const QString & _key, -             QString & reference, -             const QString & defaultValue = QString()); -  }; +    /** +     * Class for handling a path preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemPath: public ItemString +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemPath(const QString &_group, const QString &_key, +                 QString &reference, +                 const QString &defaultValue = QString()); +    };      /**       * Class for handling a url preferences item.       */ -    class KCONFIGCORE_EXPORT ItemUrl:public KConfigSkeletonGenericItem < QUrl > +    class KCONFIGCORE_EXPORT ItemUrl: public KConfigSkeletonGenericItem < QUrl >      {      public:          /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem           */ -        ItemUrl(const QString & _group, const QString & _key, -                   QUrl & reference, -                   const QUrl & defaultValue = QUrl()); +        ItemUrl(const QString &_group, const QString &_key, +                QUrl &reference, +                const QUrl &defaultValue = QUrl());          /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ -        void writeConfig(KConfig * config); +        void writeConfig(KConfig *config);          /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -        void readConfig(KConfig * config); +        void readConfig(KConfig *config);          /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -        void setProperty(const QVariant & p); +        void setProperty(const QVariant &p);          /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -	bool isEqual(const QVariant &p) const; +        bool isEqual(const QVariant &p) const;          /** @copydoc KConfigSkeletonItem::property() const */          QVariant property() const;      }; -  /** -   * Class for handling a QVariant preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemProperty:public KConfigSkeletonGenericItem < QVariant > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemProperty(const QString & _group, const QString & _key, -                 QVariant & reference, const QVariant & defaultValue = 0); +    /** +     * Class for handling a QVariant preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemProperty: public KConfigSkeletonGenericItem < QVariant > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemProperty(const QString &_group, const QString &_key, +                     QVariant &reference, const QVariant &defaultValue = 0); -    void readConfig(KConfig * config); -    void setProperty(const QVariant & p); +        void readConfig(KConfig *config); +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() const */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::property() const */ +        QVariant property() const; +    }; +    /** +     * Class for handling a bool preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemBool: public KConfigSkeletonGenericItem < bool > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemBool(const QString &_group, const QString &_key, bool &reference, +                 bool defaultValue = true); -  /** -   * Class for handling a bool preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemBool:public KConfigSkeletonGenericItem < bool > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemBool(const QString & _group, const QString & _key, bool & reference, -             bool defaultValue = true); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::property() const */ +        QVariant property() const; +    }; -    /** @copydoc KConfigSkeletonItem::property() const */ -    QVariant property() const; -  }; +    /** +     * Class for handling a 32-bit integer preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemInt: public KConfigSkeletonGenericItem < qint32 > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemInt(const QString &_group, const QString &_key, qint32 &reference, +                qint32 defaultValue = 0); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -  /** -   * Class for handling a 32-bit integer preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemInt:public KConfigSkeletonGenericItem < qint32 > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemInt(const QString & _group, const QString & _key, qint32 &reference, -            qint32 defaultValue = 0); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** Get the minimum value that is allowed to be stored in this item */ +        QVariant minValue() const; -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; +        /** Get the maximum value this is allowed to be stored in this item */ +        QVariant maxValue() const; -    /** Get the minimum value that is allowed to be stored in this item */ -    QVariant minValue() const; +        /** Set the minimum value for the item +            @sa minValue() +         */ +        void setMinValue(qint32); -    /** Get the maximum value this is allowed to be stored in this item */ -    QVariant maxValue() const; +        /** Set the maximum value for the item +            @sa maxValue +         */ +        void setMaxValue(qint32); -    /** Set the minimum value for the item -        @sa minValue() -     */ -    void setMinValue(qint32); +    private: +        bool mHasMin : 1; +        bool mHasMax : 1; +        qint32 mMin; +        qint32 mMax; +    }; -    /** Set the maximum value for the item -        @sa maxValue +    /** +     * Class for handling a 64-bit integer preferences item.       */ -    void setMaxValue(qint32); - -  private: -    bool mHasMin : 1; -    bool mHasMax : 1; -    qint32 mMin; -    qint32 mMax; -  }; - -  /** -   * Class for handling a 64-bit integer preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemLongLong:public KConfigSkeletonGenericItem < qint64 > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemLongLong(const QString & _group, const QString & _key, qint64 &reference, -            qint64 defaultValue = 0); +    class KCONFIGCORE_EXPORT ItemLongLong: public KConfigSkeletonGenericItem < qint64 > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemLongLong(const QString &_group, const QString &_key, qint64 &reference, +                     qint64 defaultValue = 0); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; -    /** @copydoc ItemInt::minValue() */ -    QVariant minValue() const; +        /** @copydoc ItemInt::minValue() */ +        QVariant minValue() const; -    /** @copydoc ItemInt::maxValue() */ -    QVariant maxValue() const; +        /** @copydoc ItemInt::maxValue() */ +        QVariant maxValue() const; -    /** @copydoc ItemInt::setMinValue(qint32) */ -    void setMinValue(qint64); +        /** @copydoc ItemInt::setMinValue(qint32) */ +        void setMinValue(qint64); -    /** @copydoc ItemInt::setMaxValue(qint32) */ -    void setMaxValue(qint64); +        /** @copydoc ItemInt::setMaxValue(qint32) */ +        void setMaxValue(qint64); -  private: -    bool mHasMin : 1; -    bool mHasMax : 1; -    qint64 mMin; -    qint64 mMax; -  }; +    private: +        bool mHasMin : 1; +        bool mHasMax : 1; +        qint64 mMin; +        qint64 mMax; +    };  #ifndef KDE_NO_DEPRECATED -  typedef KCONFIGCORE_DEPRECATED ItemLongLong ItemInt64; +    typedef KCONFIGCORE_DEPRECATED ItemLongLong ItemInt64;  #endif -  /** -   * Class for handling enums. -   */ -  class KCONFIGCORE_EXPORT ItemEnum:public ItemInt -  { -  public: -    struct Choice +    /** +     * Class for handling enums. +     */ +    class KCONFIGCORE_EXPORT ItemEnum: public ItemInt      { -      QString name; -      QString label; -      QString toolTip; -      QString whatsThis; -    }; - -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem -        @param choices The list of enums that can be stored in this item -      */ -    ItemEnum(const QString & _group, const QString & _key, qint32 &reference, -             const QList<Choice> &choices, qint32 defaultValue = 0); +    public: +        struct Choice { +            QString name; +            QString label; +            QString toolTip; +            QString whatsThis; +        }; -    QList<Choice> choices() const; +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem +            @param choices The list of enums that can be stored in this item +          */ +        ItemEnum(const QString &_group, const QString &_key, qint32 &reference, +                 const QList<Choice> &choices, qint32 defaultValue = 0); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        QList<Choice> choices() const; -    /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ -    void writeConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    // Source compatibility with 4.x -    typedef Choice Choice2; -    QList<Choice> choices2() const; +        /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ +        void writeConfig(KConfig *config); -  private: -    QList<Choice> mChoices; -  }; +        // Source compatibility with 4.x +        typedef Choice Choice2; +        QList<Choice> choices2() const; +    private: +        QList<Choice> mChoices; +    }; -  /** -   * Class for handling an unsigned 32-bit integer preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemUInt:public KConfigSkeletonGenericItem < quint32 > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemUInt(const QString & _group, const QString & _key, -             quint32 &reference, quint32 defaultValue = 0); +    /** +     * Class for handling an unsigned 32-bit integer preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemUInt: public KConfigSkeletonGenericItem < quint32 > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemUInt(const QString &_group, const QString &_key, +                 quint32 &reference, quint32 defaultValue = 0); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; -    /** @copydoc ItemInt::minValue() */ -    QVariant minValue() const; +        /** @copydoc ItemInt::minValue() */ +        QVariant minValue() const; -    /** @copydoc ItemInt::maxValue() */ -    QVariant maxValue() const; +        /** @copydoc ItemInt::maxValue() */ +        QVariant maxValue() const; -    /** @copydoc ItemInt::setMinValue(qint32) */ -    void setMinValue(quint32); +        /** @copydoc ItemInt::setMinValue(qint32) */ +        void setMinValue(quint32); -    /** @copydoc ItemInt::setMaxValue(qint32) */ -    void setMaxValue(quint32); +        /** @copydoc ItemInt::setMaxValue(qint32) */ +        void setMaxValue(quint32); -  private: -    bool mHasMin : 1; -    bool mHasMax : 1; -    quint32 mMin; -    quint32 mMax; -  }; +    private: +        bool mHasMin : 1; +        bool mHasMax : 1; +        quint32 mMin; +        quint32 mMax; +    }; -  /** -   * Class for handling unsigned 64-bit integer preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemULongLong:public KConfigSkeletonGenericItem < quint64 > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemULongLong(const QString & _group, const QString & _key, quint64 &reference, -            quint64 defaultValue = 0); +    /** +     * Class for handling unsigned 64-bit integer preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemULongLong: public KConfigSkeletonGenericItem < quint64 > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemULongLong(const QString &_group, const QString &_key, quint64 &reference, +                      quint64 defaultValue = 0); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; -    /** @copydoc ItemInt::minValue() */ -    QVariant minValue() const; +        /** @copydoc ItemInt::minValue() */ +        QVariant minValue() const; -    /** @copydoc ItemInt::maxValue() */ -    QVariant maxValue() const; +        /** @copydoc ItemInt::maxValue() */ +        QVariant maxValue() const; -    /** @copydoc ItemInt::setMinValue(qint32) */ -    void setMinValue(quint64); +        /** @copydoc ItemInt::setMinValue(qint32) */ +        void setMinValue(quint64); -    /** @copydoc ItemInt::setMaxValue(qint32) */ -    void setMaxValue(quint64); +        /** @copydoc ItemInt::setMaxValue(qint32) */ +        void setMaxValue(quint64); -  private: -    bool mHasMin : 1; -    bool mHasMax : 1; -    quint64 mMin; -    quint64 mMax; -  }; +    private: +        bool mHasMin : 1; +        bool mHasMax : 1; +        quint64 mMin; +        quint64 mMax; +    };  #ifndef KDE_NO_DEPRECATED -  typedef KCONFIGCORE_DEPRECATED ItemULongLong ItemUInt64; +    typedef KCONFIGCORE_DEPRECATED ItemULongLong ItemUInt64;  #endif -  /** -   * Class for handling a floating point preference item. -   */ -  class KCONFIGCORE_EXPORT ItemDouble:public KConfigSkeletonGenericItem < double > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemDouble(const QString & _group, const QString & _key, -               double &reference, double defaultValue = 0); +    /** +     * Class for handling a floating point preference item. +     */ +    class KCONFIGCORE_EXPORT ItemDouble: public KConfigSkeletonGenericItem < double > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemDouble(const QString &_group, const QString &_key, +                   double &reference, double defaultValue = 0); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; -    /** @copydoc ItemInt::minValue() */ -    QVariant minValue() const; +        /** @copydoc ItemInt::minValue() */ +        QVariant minValue() const; -    /** @copydoc ItemInt::maxValue() */ -    QVariant maxValue() const; +        /** @copydoc ItemInt::maxValue() */ +        QVariant maxValue() const; -    /** @copydoc ItemInt::setMinValue() */ -    void setMinValue(double); +        /** @copydoc ItemInt::setMinValue() */ +        void setMinValue(double); -    /** @copydoc ItemInt::setMaxValue() */ -    void setMaxValue(double); +        /** @copydoc ItemInt::setMaxValue() */ +        void setMaxValue(double); -  private: -    bool mHasMin : 1; -    bool mHasMax : 1; -    double mMin; -    double mMax; -  }; +    private: +        bool mHasMin : 1; +        bool mHasMax : 1; +        double mMin; +        double mMax; +    }; +    /** +     * Class for handling a QRect preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemRect: public KConfigSkeletonGenericItem < QRect > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemRect(const QString &_group, const QString &_key, QRect &reference, +                 const QRect &defaultValue = QRect()); -  /** -   * Class for handling a QRect preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemRect:public KConfigSkeletonGenericItem < QRect > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemRect(const QString & _group, const QString & _key, QRect & reference, -             const QRect & defaultValue = QRect()); - -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); - -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; -  /** -   * Class for handling a QPoint preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemPoint:public KConfigSkeletonGenericItem < QPoint > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemPoint(const QString & _group, const QString & _key, QPoint & reference, -              const QPoint & defaultValue = QPoint()); - -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); - -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +    /** +     * Class for handling a QPoint preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemPoint: public KConfigSkeletonGenericItem < QPoint > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemPoint(const QString &_group, const QString &_key, QPoint &reference, +                  const QPoint &defaultValue = QPoint()); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -  /** -   * Class for handling a QSize preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemSize:public KConfigSkeletonGenericItem < QSize > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemSize(const QString & _group, const QString & _key, QSize & reference, -             const QSize & defaultValue = QSize()); +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); - -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +    /** +     * Class for handling a QSize preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemSize: public KConfigSkeletonGenericItem < QSize > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemSize(const QString &_group, const QString &_key, QSize &reference, +                 const QSize &defaultValue = QSize()); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; -  /** -   * Class for handling a QDateTime preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemDateTime:public KConfigSkeletonGenericItem < QDateTime > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemDateTime(const QString & _group, const QString & _key, -                 QDateTime & reference, -                 const QDateTime & defaultValue = QDateTime()); +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +    /** +     * Class for handling a QDateTime preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemDateTime: public KConfigSkeletonGenericItem < QDateTime > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemDateTime(const QString &_group, const QString &_key, +                     QDateTime &reference, +                     const QDateTime &defaultValue = QDateTime()); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); - -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; - -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; - - -  /** -   * Class for handling a string list preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemStringList:public KConfigSkeletonGenericItem < QStringList > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemStringList(const QString & _group, const QString & _key, -                   QStringList & reference, -                   const QStringList & defaultValue = QStringList()); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); - -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; - -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; -  /** -   * Class for handling a path list preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemPathList:public ItemStringList -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemPathList(const QString & _group, const QString & _key, -                   QStringList & reference, -                   const QStringList & defaultValue = QStringList()); +    /** +     * Class for handling a string list preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemStringList: public KConfigSkeletonGenericItem < QStringList > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemStringList(const QString &_group, const QString &_key, +                       QStringList &reference, +                       const QStringList &defaultValue = QStringList()); + +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); + +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::readConfig */ -    void readConfig(KConfig * config); -    /** @copydoc KConfigSkeletonItem::writeConfig */ -    void writeConfig(KConfig * config); -  }; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; + +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; + +    /** +     * Class for handling a path list preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemPathList: public ItemStringList +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemPathList(const QString &_group, const QString &_key, +                     QStringList &reference, +                     const QStringList &defaultValue = QStringList()); + +        /** @copydoc KConfigSkeletonItem::readConfig */ +        void readConfig(KConfig *config); +        /** @copydoc KConfigSkeletonItem::writeConfig */ +        void writeConfig(KConfig *config); +    };      /**       * Class for handling a url list preferences item.       */ -    class KCONFIGCORE_EXPORT ItemUrlList:public KConfigSkeletonGenericItem < QList<QUrl> > +    class KCONFIGCORE_EXPORT ItemUrlList: public KConfigSkeletonGenericItem < QList<QUrl> >      {      public:          /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -        ItemUrlList(const QString & _group, const QString & _key, -                     QList<QUrl> & reference, -                     const QList<QUrl> & defaultValue = QList<QUrl>()); +        ItemUrlList(const QString &_group, const QString &_key, +                    QList<QUrl> &reference, +                    const QList<QUrl> &defaultValue = QList<QUrl>());          /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -        void readConfig(KConfig * config); +        void readConfig(KConfig *config);          /** @copydoc KConfigSkeletonItem::writeConfig(KConfig*) */ -        void writeConfig(KConfig * config); +        void writeConfig(KConfig *config);          /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -        void setProperty(const QVariant & p); +        void setProperty(const QVariant &p);          /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -	bool isEqual(const QVariant &p) const; +        bool isEqual(const QVariant &p) const;          /** @copydoc KConfigSkeletonItem::property() */          QVariant property() const;      }; -  /** -   * Class for handling an integer list preferences item. -   */ -  class KCONFIGCORE_EXPORT ItemIntList:public KConfigSkeletonGenericItem < QList < int > > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemIntList(const QString & _group, const QString & _key, -                QList < int >&reference, -                const QList < int >&defaultValue = QList < int >()); - -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); +    /** +     * Class for handling an integer list preferences item. +     */ +    class KCONFIGCORE_EXPORT ItemIntList: public KConfigSkeletonGenericItem < QList < int > > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemIntList(const QString &_group, const QString &_key, +                    QList < int > &reference, +                    const QList < int > &defaultValue = QList < int >()); -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ -    bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) const */ +        bool isEqual(const QVariant &p) const; +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    };  public: -  /** -   * Constructor. -   * -   * @param configname name of config file. If no name is given, the default -   *                   config file as returned by KSharedConfig::openConfig() is used -   * @param parent the parent object (see QObject documentation) -   */ -  explicit KCoreConfigSkeleton(const QString & configname = QString(), QObject* parent = 0); - -  /** -   * Constructor. -   * -   * @param config configuration object to use -   * @param parent the parent object (see QObject documentation) -   */ -  explicit KCoreConfigSkeleton(KSharedConfig::Ptr config, QObject* parent = 0); - -  /** -   * Destructor -   */ -  virtual ~KCoreConfigSkeleton(); - -  /** -   * Set all registered items to their default values. -   * This method calls usrSetDefaults() after setting the defaults for the -   * registered items. You can overridde usrSetDefaults() in derived classes -   * if you have special requirements. -   * If you need more fine-grained control of setting the default values of -   * the registered items you can override setDefaults() in a derived class. -   */ -  virtual void setDefaults(); - -  /** -   * Read preferences from config file. All registered items are set to the -   * values read from disk. -   * This method calls usrReadConfig() after reading the settings of the -   * registered items from the KConfig. You can overridde usrReadConfig() -   * in derived classes if you have special requirements. -   * If you need more fine-grained control of storing the settings from -   * the registered items you can override readConfig() in a derived class. -   */ -  virtual void readConfig(); - -  /** -   * Set the config file group for subsequent addItem() calls. It is valid -   * until setCurrentGroup() is called with a new argument. Call this before -   * you add any items. The default value is "No Group". -   */ -  void setCurrentGroup(const QString & group); - -  /** -   * Returns the current group used for addItem() calls. -   */ -  QString currentGroup() const; - -  /** -   * Register a custom @ref KConfigSkeletonItem with a given name. -   * -   * If the name parameter is null, take the name from KConfigSkeletonItem::key(). -   * Note that all names must be unique but that multiple entries can have -   * the same key if they reside in different groups. -   * -   * KCoreConfigSkeleton takes ownership of the KConfigSkeletonItem. -   */ -  void addItem(KConfigSkeletonItem *, const QString & name = QString() ); - -  /** -   * Register an item of type QString. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemString *addItemString(const QString & name, QString & reference, -                            const QString & defaultValue = QLatin1String(""), // NOT QString() !! -                            const QString & key = QString()); - -  /** -   * Register a password item of type QString. The string value is written -   * encrypted to the config file. Note that the current encryption scheme -   * is very weak. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemPassword *addItemPassword(const QString & name, QString & reference, -                              const QString & defaultValue = QLatin1String(""), -                              const QString & key = QString()); - -  /** -   * Register a path item of type QString. The string value is interpreted -   * as a path. This means, dollar expension is activated for this value, so -   * that e.g. $HOME gets expanded. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemPath *addItemPath(const QString & name, QString & reference, -                          const QString & defaultValue = QLatin1String(""), -                          const QString & key = QString()); - -  /** -   * Register a property item of type QVariant. Note that only the following -   * QVariant types are allowed: String, StringList, Font, Point, Rect, Size, -   * Color, Int, UInt, Bool, Double, DateTime and Date. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemProperty *addItemProperty(const QString & name, QVariant & reference, -                                const QVariant & defaultValue = QVariant(), -                                const QString & key = QString()); -  /** -   * Register an item of type bool. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemBool *addItemBool(const QString & name, bool & reference, -                        bool defaultValue = false, -                        const QString & key = QString()); - -  /** -   * Register an item of type qint32. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemInt *addItemInt(const QString & name, qint32 &reference, qint32 defaultValue = 0, -                      const QString & key = QString()); - -  /** -   * Register an item of type quint32. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemUInt *addItemUInt(const QString & name, quint32 &reference, -                        quint32 defaultValue = 0, -                        const QString & key = QString()); - -  /** -   * Register an item of type qint64. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemLongLong *addItemLongLong(const QString & name, qint64 &reference, -                          qint64 defaultValue = 0, -                          const QString & key = QString()); - -  /** -   * @deprecated -   * Use addItemLongLong(). -   */ +    /** +     * Constructor. +     * +     * @param configname name of config file. If no name is given, the default +     *                   config file as returned by KSharedConfig::openConfig() is used +     * @param parent the parent object (see QObject documentation) +     */ +    explicit KCoreConfigSkeleton(const QString &configname = QString(), QObject *parent = 0); + +    /** +     * Constructor. +     * +     * @param config configuration object to use +     * @param parent the parent object (see QObject documentation) +     */ +    explicit KCoreConfigSkeleton(KSharedConfig::Ptr config, QObject *parent = 0); + +    /** +     * Destructor +     */ +    virtual ~KCoreConfigSkeleton(); + +    /** +     * Set all registered items to their default values. +     * This method calls usrSetDefaults() after setting the defaults for the +     * registered items. You can overridde usrSetDefaults() in derived classes +     * if you have special requirements. +     * If you need more fine-grained control of setting the default values of +     * the registered items you can override setDefaults() in a derived class. +     */ +    virtual void setDefaults(); + +    /** +     * Read preferences from config file. All registered items are set to the +     * values read from disk. +     * This method calls usrReadConfig() after reading the settings of the +     * registered items from the KConfig. You can overridde usrReadConfig() +     * in derived classes if you have special requirements. +     * If you need more fine-grained control of storing the settings from +     * the registered items you can override readConfig() in a derived class. +     */ +    virtual void readConfig(); + +    /** +     * Set the config file group for subsequent addItem() calls. It is valid +     * until setCurrentGroup() is called with a new argument. Call this before +     * you add any items. The default value is "No Group". +     */ +    void setCurrentGroup(const QString &group); + +    /** +     * Returns the current group used for addItem() calls. +     */ +    QString currentGroup() const; + +    /** +     * Register a custom @ref KConfigSkeletonItem with a given name. +     * +     * If the name parameter is null, take the name from KConfigSkeletonItem::key(). +     * Note that all names must be unique but that multiple entries can have +     * the same key if they reside in different groups. +     * +     * KCoreConfigSkeleton takes ownership of the KConfigSkeletonItem. +     */ +    void addItem(KConfigSkeletonItem *, const QString &name = QString()); + +    /** +     * Register an item of type QString. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemString *addItemString(const QString &name, QString &reference, +                              const QString &defaultValue = QLatin1String(""),  // NOT QString() !! +                              const QString &key = QString()); + +    /** +     * Register a password item of type QString. The string value is written +     * encrypted to the config file. Note that the current encryption scheme +     * is very weak. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemPassword *addItemPassword(const QString &name, QString &reference, +                                  const QString &defaultValue = QLatin1String(""), +                                  const QString &key = QString()); + +    /** +     * Register a path item of type QString. The string value is interpreted +     * as a path. This means, dollar expension is activated for this value, so +     * that e.g. $HOME gets expanded. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemPath *addItemPath(const QString &name, QString &reference, +                          const QString &defaultValue = QLatin1String(""), +                          const QString &key = QString()); + +    /** +     * Register a property item of type QVariant. Note that only the following +     * QVariant types are allowed: String, StringList, Font, Point, Rect, Size, +     * Color, Int, UInt, Bool, Double, DateTime and Date. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemProperty *addItemProperty(const QString &name, QVariant &reference, +                                  const QVariant &defaultValue = QVariant(), +                                  const QString &key = QString()); +    /** +     * Register an item of type bool. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemBool *addItemBool(const QString &name, bool &reference, +                          bool defaultValue = false, +                          const QString &key = QString()); + +    /** +     * Register an item of type qint32. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemInt *addItemInt(const QString &name, qint32 &reference, qint32 defaultValue = 0, +                        const QString &key = QString()); + +    /** +     * Register an item of type quint32. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemUInt *addItemUInt(const QString &name, quint32 &reference, +                          quint32 defaultValue = 0, +                          const QString &key = QString()); + +    /** +     * Register an item of type qint64. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemLongLong *addItemLongLong(const QString &name, qint64 &reference, +                                  qint64 defaultValue = 0, +                                  const QString &key = QString()); + +    /** +     * @deprecated +     * Use addItemLongLong(). +     */  #ifndef KDE_NO_DEPRECATED -  KCONFIGCORE_DEPRECATED ItemLongLong *addItemInt64( const QString& name, qint64 &reference, -                          qint64 defaultValue = 0, -                          const QString & key = QString()); +    KCONFIGCORE_DEPRECATED ItemLongLong *addItemInt64(const QString &name, qint64 &reference, +            qint64 defaultValue = 0, +            const QString &key = QString());  #endif -  /** -   * Register an item of type quint64 -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemULongLong *addItemULongLong(const QString & name, quint64 &reference, -                            quint64 defaultValue = 0, -                            const QString & key = QString()); - -  /** -   * @deprecated -   * Use addItemULongLong(). -   */ +    /** +     * Register an item of type quint64 +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemULongLong *addItemULongLong(const QString &name, quint64 &reference, +                                    quint64 defaultValue = 0, +                                    const QString &key = QString()); + +    /** +     * @deprecated +     * Use addItemULongLong(). +     */  #ifndef KDE_NO_DEPRECATED -  KCONFIGCORE_DEPRECATED ItemULongLong *addItemUInt64(const QString & name, quint64 &reference, -                            quint64 defaultValue = 0, -                            const QString & key = QString()); +    KCONFIGCORE_DEPRECATED ItemULongLong *addItemUInt64(const QString &name, quint64 &reference, +            quint64 defaultValue = 0, +            const QString &key = QString());  #endif -  /** -   * Register an item of type double. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemDouble *addItemDouble(const QString & name, double &reference, -                            double defaultValue = 0.0, -                            const QString & key = QString()); - -  /** -   * Register an item of type QRect. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemRect *addItemRect(const QString & name, QRect & reference, -                        const QRect & defaultValue = QRect(), -                        const QString & key = QString()); - -  /** -   * Register an item of type QPoint. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemPoint *addItemPoint(const QString & name, QPoint & reference, -                          const QPoint & defaultValue = QPoint(), -                          const QString & key = QString()); - -  /** -   * Register an item of type QSize. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemSize *addItemSize(const QString & name, QSize & reference, -                        const QSize & defaultValue = QSize(), -                        const QString & key = QString()); - -  /** -   * Register an item of type QDateTime. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemDateTime *addItemDateTime(const QString & name, QDateTime & reference, -                                const QDateTime & defaultValue = QDateTime(), -                                const QString & key = QString()); - -  /** -   * Register an item of type QStringList. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemStringList *addItemStringList(const QString & name, QStringList & reference, -                                    const QStringList & defaultValue = QStringList(), -                                    const QString & key = QString()); - -  /** -   * Register an item of type QList<int>. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemIntList *addItemIntList(const QString & name, QList < int >&reference, -                              const QList < int >&defaultValue = -                              QList < int >(), -                              const QString & key = QString()); - -  /** -   * Return the @ref KConfig object used for reading and writing the settings. -   */ -  KConfig *config(); - -  /** -   * Return the @ref KConfig object used for reading and writing the settings. -   */ -  const KConfig *config() const; - -  /** -   * Set the @ref KSharedConfig object used for reading and writing the settings. -   */ -  void setSharedConfig(KSharedConfig::Ptr pConfig); - -  /** -   * Return list of items managed by this KCoreConfigSkeleton object. -   */ -  KConfigSkeletonItem::List items() const; - -  /** -   * Removes and deletes an item by name -   * @arg name the name of the item to remove -   */ -  void removeItem(const QString &name); - -  /** -   * Removes and deletes all items -   */ -  void clearItems(); - -  /** -   * Return whether a certain item is immutable -   * @since 4.4 -   */ -  bool isImmutable(const QString & name) const; - -  /** -   * Lookup item by name -   * @since 4.4 -   */ -  KConfigSkeletonItem * findItem(const QString & name) const; - -  /** -   * Specify whether this object should reflect the actual values or the -   * default values. -   * This method is implemented by usrUseDefaults(), which can be overridden -   * in derived classes if you have special requirements and can call -   * usrUseDefaults() directly. -   * If you don't have control whether useDefaults() or usrUseDefaults() is -   * called override useDefaults() directly. -   * @param b true to make this object reflect the default values, -   *          false to make it reflect the actual values. -   * @return The state prior to this call -   */ -  virtual bool useDefaults(bool b); +    /** +     * Register an item of type double. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemDouble *addItemDouble(const QString &name, double &reference, +                              double defaultValue = 0.0, +                              const QString &key = QString()); + +    /** +     * Register an item of type QRect. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemRect *addItemRect(const QString &name, QRect &reference, +                          const QRect &defaultValue = QRect(), +                          const QString &key = QString()); + +    /** +     * Register an item of type QPoint. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemPoint *addItemPoint(const QString &name, QPoint &reference, +                            const QPoint &defaultValue = QPoint(), +                            const QString &key = QString()); + +    /** +     * Register an item of type QSize. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemSize *addItemSize(const QString &name, QSize &reference, +                          const QSize &defaultValue = QSize(), +                          const QString &key = QString()); + +    /** +     * Register an item of type QDateTime. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemDateTime *addItemDateTime(const QString &name, QDateTime &reference, +                                  const QDateTime &defaultValue = QDateTime(), +                                  const QString &key = QString()); + +    /** +     * Register an item of type QStringList. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemStringList *addItemStringList(const QString &name, QStringList &reference, +                                      const QStringList &defaultValue = QStringList(), +                                      const QString &key = QString()); + +    /** +     * Register an item of type QList<int>. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemIntList *addItemIntList(const QString &name, QList < int > &reference, +                                const QList < int > &defaultValue = +                                    QList < int >(), +                                const QString &key = QString()); + +    /** +     * Return the @ref KConfig object used for reading and writing the settings. +     */ +    KConfig *config(); + +    /** +     * Return the @ref KConfig object used for reading and writing the settings. +     */ +    const KConfig *config() const; + +    /** +     * Set the @ref KSharedConfig object used for reading and writing the settings. +     */ +    void setSharedConfig(KSharedConfig::Ptr pConfig); + +    /** +     * Return list of items managed by this KCoreConfigSkeleton object. +     */ +    KConfigSkeletonItem::List items() const; + +    /** +     * Removes and deletes an item by name +     * @arg name the name of the item to remove +     */ +    void removeItem(const QString &name); + +    /** +     * Removes and deletes all items +     */ +    void clearItems(); + +    /** +     * Return whether a certain item is immutable +     * @since 4.4 +     */ +    bool isImmutable(const QString &name) const; + +    /** +     * Lookup item by name +     * @since 4.4 +     */ +    KConfigSkeletonItem *findItem(const QString &name) const; + +    /** +     * Specify whether this object should reflect the actual values or the +     * default values. +     * This method is implemented by usrUseDefaults(), which can be overridden +     * in derived classes if you have special requirements and can call +     * usrUseDefaults() directly. +     * If you don't have control whether useDefaults() or usrUseDefaults() is +     * called override useDefaults() directly. +     * @param b true to make this object reflect the default values, +     *          false to make it reflect the actual values. +     * @return The state prior to this call +     */ +    virtual bool useDefaults(bool b);  public Q_SLOTS: -  /** -   * Write preferences to config file. The values of all registered items are -   * written to disk. -   * This method calls usrWriteConfig() after writing the settings from the -   * registered items to the KConfig. You can overridde usrWriteConfig() -   * in derived classes if you have special requirements. -   * If you need more fine-grained control of storing the settings from -   * the registered items you can override writeConfig() in a derived class. -   */ -  virtual bool writeConfig(); +    /** +     * Write preferences to config file. The values of all registered items are +     * written to disk. +     * This method calls usrWriteConfig() after writing the settings from the +     * registered items to the KConfig. You can overridde usrWriteConfig() +     * in derived classes if you have special requirements. +     * If you need more fine-grained control of storing the settings from +     * the registered items you can override writeConfig() in a derived class. +     */ +    virtual bool writeConfig();  Q_SIGNALS: -  /** -   * This signal is emitted when the configuration change. -   */ -  void configChanged(); +    /** +     * This signal is emitted when the configuration change. +     */ +    void configChanged();  protected: -  /** -   * Implemented by subclasses that use special defaults. -   * It replaces the default values with the actual values and -   * vice versa.  Called from @ref useDefaults() -   * @param b true to make this object reflect the default values, -   *          false to make it reflect the actual values. -   * @return The state prior to this call -   */ -  virtual bool usrUseDefaults(bool b); - -  /** -   * Perform the actual setting of default values. -   * Override in derived classes to set special default values. -   * Called from @ref setDefaults() -   */ -  virtual void usrSetDefaults(); - -  /** -   * Perform the actual reading of the configuration file. -   * Override in derived classes to read special config values. -   * Called from @ref readConfig() -   */ -  virtual void usrReadConfig(); - -  /** -   * Perform the actual writing of the configuration file. -   * Override in derived classes to write special config values. -   * Called from @ref writeConfig() -   */ -  virtual bool usrWriteConfig(); +    /** +     * Implemented by subclasses that use special defaults. +     * It replaces the default values with the actual values and +     * vice versa.  Called from @ref useDefaults() +     * @param b true to make this object reflect the default values, +     *          false to make it reflect the actual values. +     * @return The state prior to this call +     */ +    virtual bool usrUseDefaults(bool b); + +    /** +     * Perform the actual setting of default values. +     * Override in derived classes to set special default values. +     * Called from @ref setDefaults() +     */ +    virtual void usrSetDefaults(); + +    /** +     * Perform the actual reading of the configuration file. +     * Override in derived classes to read special config values. +     * Called from @ref readConfig() +     */ +    virtual void usrReadConfig(); + +    /** +     * Perform the actual writing of the configuration file. +     * Override in derived classes to write special config values. +     * Called from @ref writeConfig() +     */ +    virtual bool usrWriteConfig();  private: -  class Private; -  Private * const d; -  friend class KConfigSkeleton; +    class Private; +    Private *const d; +    friend class KConfigSkeleton;  }; diff --git a/src/core/kcoreconfigskeleton_p.h b/src/core/kcoreconfigskeleton_p.h index 0912019c..0b020ed3 100644 --- a/src/core/kcoreconfigskeleton_p.h +++ b/src/core/kcoreconfigskeleton_p.h @@ -27,25 +27,24 @@  class KCoreConfigSkeleton::Private  {  public: -  Private() -    : mCurrentGroup( QLatin1String("No Group") ), mUseDefaults( false ) -  {} -  ~Private() -  { -    KConfigSkeletonItem::List::ConstIterator it; -    for( it = mItems.constBegin(); it != mItems.constEnd(); ++it ) +    Private() +        : mCurrentGroup(QLatin1String("No Group")), mUseDefaults(false) +    {} +    ~Private()      { -      delete *it; +        KConfigSkeletonItem::List::ConstIterator it; +        for (it = mItems.constBegin(); it != mItems.constEnd(); ++it) { +            delete *it; +        }      } -  } -  QString mCurrentGroup; +    QString mCurrentGroup; -  KSharedConfig::Ptr mConfig; // pointer to KConfig object +    KSharedConfig::Ptr mConfig; // pointer to KConfig object -  KConfigSkeletonItem::List mItems; -  KConfigSkeletonItem::Dict mItemDict; +    KConfigSkeletonItem::List mItems; +    KConfigSkeletonItem::Dict mItemDict; -  bool mUseDefaults; +    bool mUseDefaults;  };  class KConfigSkeletonItemPrivate diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp index 0ebbb4b0..9fa3654d 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp @@ -40,7 +40,7 @@  class KDesktopFilePrivate : public KConfigPrivate  { - public: +public:      KDesktopFilePrivate(QStandardPaths::StandardLocation resourceType, const QString &fileName);      KConfigGroup desktopGroup;  }; @@ -83,129 +83,137 @@ QString KDesktopFile::locateLocal(const QString &path)  {      QString relativePath;      // Relative to config? (e.g. for autostart) -    Q_FOREACH(const QString& dir, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { +    Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {          if (path.startsWith(dir) + '/') {              relativePath = dir.mid(path.length() + 1);              return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + relativePath;          }      }      // Relative to xdg data dir? (much more common) -    Q_FOREACH(const QString& dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -        if (path.startsWith(dir) + '/') +    Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { +        if (path.startsWith(dir) + '/') {              relativePath = dir.mid(path.length() + 1); +        }      }      if (relativePath.isEmpty()) {          // What now? The desktop file doesn't come from XDG_DATA_DIRS. Use filename only and hope for the best. -        relativePath = path.mid(path.lastIndexOf(QLatin1Char('/'))+1); +        relativePath = path.mid(path.lastIndexOf(QLatin1Char('/')) + 1);      }      return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + relativePath;  } -bool KDesktopFile::isDesktopFile(const QString& path) +bool KDesktopFile::isDesktopFile(const QString &path)  { -  return (path.length() > 8 -          && path.endsWith(QLatin1String(".desktop"))); +    return (path.length() > 8 +            && path.endsWith(QLatin1String(".desktop")));  } -bool KDesktopFile::isAuthorizedDesktopFile(const QString& path) +bool KDesktopFile::isAuthorizedDesktopFile(const QString &path)  { -  if (path.isEmpty()) -     return false; // Empty paths are not ok. +    if (path.isEmpty()) { +        return false;    // Empty paths are not ok. +    } -  if (QDir::isRelativePath(path)) -     return true; // Relative paths are ok. +    if (QDir::isRelativePath(path)) { +        return true;    // Relative paths are ok. +    } -  const QString realPath = QFileInfo(path).canonicalFilePath(); -  if (realPath.isEmpty()) -      return false; // File doesn't exist. +    const QString realPath = QFileInfo(path).canonicalFilePath(); +    if (realPath.isEmpty()) { +        return false;    // File doesn't exist. +    }  #ifndef Q_OS_WIN -  const Qt::CaseSensitivity sensitivity = Qt::CaseSensitive; +    const Qt::CaseSensitivity sensitivity = Qt::CaseSensitive;  #else -  const Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive; +    const Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive;  #endif -  // Check if the .desktop file is installed as part of KDE or XDG. -  const QStringList appsDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); -  Q_FOREACH (const QString &prefix, appsDirs) { -      if (QDir(prefix).exists() && realPath.startsWith(QFileInfo(prefix).canonicalFilePath(), sensitivity)) -          return true; -  } -  const QString servicesDir = QLatin1String("kde5/services/"); // KGlobal::dirs()->xdgDataRelativePath("services") -  Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -      if (QDir(xdgDataPrefix).exists()) { -          const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); -          if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) -              return true; -      } -  } -  const QString autostartDir = QLatin1String("autostart/"); -  Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { -      if (QDir(xdgDataPrefix).exists()) { -          const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); -          if (realPath.startsWith(prefix + QLatin1Char('/') + autostartDir, sensitivity)) -              return true; -      } -  } - -  // Forbid desktop files outside of standard locations if kiosk is set so -  if (!KAuthorized::authorize(QLatin1String("run_desktop_files"))) { -     qWarning() << "Access to '" << path << "' denied because of 'run_desktop_files' restriction." << endl; -     return false; -  } - -  // Not otherwise permitted, so only allow if the file is executable, or if -  // owned by root (uid == 0) -  QFileInfo entryInfo( path ); -  if (entryInfo.isExecutable() || entryInfo.ownerId() == 0) -      return true; - -  qWarning() << "Access to '" << path << "' denied, not owned by root, executable flag not set." << endl; -  return false; +    // Check if the .desktop file is installed as part of KDE or XDG. +    const QStringList appsDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); +    Q_FOREACH (const QString &prefix, appsDirs) { +        if (QDir(prefix).exists() && realPath.startsWith(QFileInfo(prefix).canonicalFilePath(), sensitivity)) { +            return true; +        } +    } +    const QString servicesDir = QLatin1String("kde5/services/"); // KGlobal::dirs()->xdgDataRelativePath("services") +    Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { +        if (QDir(xdgDataPrefix).exists()) { +            const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); +            if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) { +                return true; +            } +        } +    } +    const QString autostartDir = QLatin1String("autostart/"); +    Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { +        if (QDir(xdgDataPrefix).exists()) { +            const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); +            if (realPath.startsWith(prefix + QLatin1Char('/') + autostartDir, sensitivity)) { +                return true; +            } +        } +    } + +    // Forbid desktop files outside of standard locations if kiosk is set so +    if (!KAuthorized::authorize(QLatin1String("run_desktop_files"))) { +        qWarning() << "Access to '" << path << "' denied because of 'run_desktop_files' restriction." << endl; +        return false; +    } + +    // Not otherwise permitted, so only allow if the file is executable, or if +    // owned by root (uid == 0) +    QFileInfo entryInfo(path); +    if (entryInfo.isExecutable() || entryInfo.ownerId() == 0) { +        return true; +    } + +    qWarning() << "Access to '" << path << "' denied, not owned by root, executable flag not set." << endl; +    return false;  }  QString KDesktopFile::readType() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Type", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Type", QString());  }  QString KDesktopFile::readIcon() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Icon", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Icon", QString());  }  QString KDesktopFile::readName() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Name", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Name", QString());  }  QString KDesktopFile::readComment() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Comment", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Comment", QString());  }  QString KDesktopFile::readGenericName() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("GenericName", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("GenericName", QString());  }  QString KDesktopFile::readPath() const  { -  Q_D(const KDesktopFile); -  // NOT readPathEntry, it is not XDG-compliant. Path entries written by -  // KDE4 will be still treated as such, though. -  return d->desktopGroup.readEntry("Path", QString()); +    Q_D(const KDesktopFile); +    // NOT readPathEntry, it is not XDG-compliant. Path entries written by +    // KDE4 will be still treated as such, though. +    return d->desktopGroup.readEntry("Path", QString());  }  QString KDesktopFile::readDevice() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Dev", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Dev", QString());  }  QString KDesktopFile::readUrl() const @@ -216,8 +224,7 @@ QString KDesktopFile::readUrl() const      } else {          // NOT readPathEntry (see readPath())          QString url = d->desktopGroup.readEntry("URL", QString()); -        if ( !url.isEmpty() && !QDir::isRelativePath(url) ) -        { +        if (!url.isEmpty() && !QDir::isRelativePath(url)) {              // Handle absolute paths as such (i.e. we need to escape them)              return QUrl::fromLocalFile(url).toString();          } @@ -236,67 +243,68 @@ KConfigGroup KDesktopFile::actionGroup(const QString &group)      return KConfigGroup(this, QLatin1String("Desktop Action ") + group);  } -const KConfigGroup KDesktopFile::actionGroup(const QString& group) const +const KConfigGroup KDesktopFile::actionGroup(const QString &group) const  { -    return const_cast<KDesktopFile*>(this)->actionGroup(group); +    return const_cast<KDesktopFile *>(this)->actionGroup(group);  }  bool KDesktopFile::hasActionGroup(const QString &group) const  { -  return hasGroup(QString(QLatin1String("Desktop Action ") + group).toUtf8().constData()); +    return hasGroup(QString(QLatin1String("Desktop Action ") + group).toUtf8().constData());  }  bool KDesktopFile::hasLinkType() const  { -  return readType() == QLatin1String("Link"); +    return readType() == QLatin1String("Link");  }  bool KDesktopFile::hasApplicationType() const  { -  return readType() == QLatin1String("Application"); +    return readType() == QLatin1String("Application");  }  bool KDesktopFile::hasDeviceType() const  { -  return readType() == QLatin1String("FSDevice"); +    return readType() == QLatin1String("FSDevice");  }  bool KDesktopFile::tryExec() const  { -  Q_D(const KDesktopFile); -  // Test for TryExec and "X-KDE-AuthorizeAction" -  // NOT readPathEntry (see readPath()) -  QString te = d->desktopGroup.readEntry("TryExec", QString()); - -  if (!te.isEmpty()) { -    return !QStandardPaths::findExecutable(te).isEmpty(); -  } -  const QStringList list = d->desktopGroup.readEntry("X-KDE-AuthorizeAction", QStringList()); -  if (!list.isEmpty()) -  { -     for(QStringList::ConstIterator it = list.begin(); -         it != list.end(); -         ++it) -     { -        if (!KAuthorized::authorize((*it).trimmed())) -           return false; -     } -  } - -  // See also KService::username() -  bool su = d->desktopGroup.readEntry("X-KDE-SubstituteUID", false); -  if (su) -  { -      QString user = d->desktopGroup.readEntry("X-KDE-Username", QString()); -      if (user.isEmpty()) -        user = QString::fromLocal8Bit(qgetenv("ADMIN_ACCOUNT")); -      if (user.isEmpty()) -        user = QString::fromLatin1("root"); -      if (!KAuthorized::authorize(QString::fromLatin1("user/")+user)) -        return false; -  } +    Q_D(const KDesktopFile); +    // Test for TryExec and "X-KDE-AuthorizeAction" +    // NOT readPathEntry (see readPath()) +    QString te = d->desktopGroup.readEntry("TryExec", QString()); + +    if (!te.isEmpty()) { +        return !QStandardPaths::findExecutable(te).isEmpty(); +    } +    const QStringList list = d->desktopGroup.readEntry("X-KDE-AuthorizeAction", QStringList()); +    if (!list.isEmpty()) { +        for (QStringList::ConstIterator it = list.begin(); +                it != list.end(); +                ++it) { +            if (!KAuthorized::authorize((*it).trimmed())) { +                return false; +            } +        } +    } -  return true; +    // See also KService::username() +    bool su = d->desktopGroup.readEntry("X-KDE-SubstituteUID", false); +    if (su) { +        QString user = d->desktopGroup.readEntry("X-KDE-Username", QString()); +        if (user.isEmpty()) { +            user = QString::fromLocal8Bit(qgetenv("ADMIN_ACCOUNT")); +        } +        if (user.isEmpty()) { +            user = QString::fromLatin1("root"); +        } +        if (!KAuthorized::authorize(QString::fromLatin1("user/") + user)) { +            return false; +        } +    } + +    return true;  }  /** @@ -313,8 +321,8 @@ bool KDesktopFile::tryExec() const  QStringList  KDesktopFile::sortOrder() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("SortOrder", QStringList()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("SortOrder", QStringList());  }  //void KDesktopFile::virtual_hook( int id, void* data ) @@ -322,19 +330,20 @@ KDesktopFile::sortOrder() const  QString KDesktopFile::readDocPath() const  { -  Q_D(const KDesktopFile); -  //legacy entry in kde3 apps -  if(d->desktopGroup.hasKey( "DocPath" )) -    return d->desktopGroup.readPathEntry( "DocPath", QString() ); -  return d->desktopGroup.readPathEntry( "X-DocPath", QString() ); +    Q_D(const KDesktopFile); +    //legacy entry in kde3 apps +    if (d->desktopGroup.hasKey("DocPath")) { +        return d->desktopGroup.readPathEntry("DocPath", QString()); +    } +    return d->desktopGroup.readPathEntry("X-DocPath", QString());  } -KDesktopFile* KDesktopFile::copyTo(const QString &file) const +KDesktopFile *KDesktopFile::copyTo(const QString &file) const  { -  KDesktopFile *config = new KDesktopFile(QString()); -  this->KConfig::copyTo(file, config); +    KDesktopFile *config = new KDesktopFile(QString()); +    this->KConfig::copyTo(file, config);  //  config->setDesktopGroup(); -  return config; +    return config;  }  QStandardPaths::StandardLocation KDesktopFile::resource() const @@ -355,12 +364,14 @@ bool KDesktopFile::noDisplay() const          return true;      }      if (d->desktopGroup.hasKey("OnlyShowIn")) { -        if (!d->desktopGroup.readXdgListEntry("OnlyShowIn").contains(QLatin1String("KDE"))) +        if (!d->desktopGroup.readXdgListEntry("OnlyShowIn").contains(QLatin1String("KDE"))) {              return true; +        }      }      if (d->desktopGroup.hasKey("NotShowIn")) { -        if (d->desktopGroup.readXdgListEntry("NotShowIn").contains(QLatin1String("KDE"))) +        if (d->desktopGroup.readXdgListEntry("NotShowIn").contains(QLatin1String("KDE"))) {              return true; +        }      }      return false;  } diff --git a/src/core/kdesktopfile.h b/src/core/kdesktopfile.h index f3c5fe8f..df8eff1a 100644 --- a/src/core/kdesktopfile.h +++ b/src/core/kdesktopfile.h @@ -38,215 +38,215 @@ class KDesktopFilePrivate;  class KCONFIGCORE_EXPORT KDesktopFile : public KConfig  {  public: -  /** -   * Constructs a KDesktopFile object. -   * -   * See QStandardPaths for more information on resources. -   * -   * @param resourceType   Allows you to change what sort of resource -   *                       to search for if @p fileName is not absolute. -   *                       For instance, you might want to specify GenericConfigLocation. -   * @param fileName       The name or path of the desktop file. If it -   *                       is not absolute, it will be located -   *                       using the resource type @p resType. -   */ -  explicit KDesktopFile(QStandardPaths::StandardLocation resourceType, const QString &fileName); - -  /** -   * Constructs a KDesktopFile object. -   * -   * See QStandardPaths for more information on resources. -   * -   * @param fileName       The name or path of the desktop file. If it -   *                       is not absolute, it will be located -   *                       using the resource type ApplicationsLocation -   */ -  explicit KDesktopFile(const QString &fileName); - -  /** -   * Destructs the KDesktopFile object. -   * -   * Writes back any dirty configuration entries. -   */ -  virtual ~KDesktopFile(); - -  /** -   * Checks whether this is really a desktop file. -   * -   * The check is performed looking at the file extension (the file is not -   * opened). -   * Currently, the only valid extension is ".desktop". -   * @param path the path of the file to check -   * @return true if the file appears to be a desktop file. -   */ -  static bool isDesktopFile(const QString& path); - -  /** -   * Checks whether the user is authorized to run this desktop file. -   * By default users are authorized to run all desktop files but -   * the KIOSK framework can be used to activate certain restrictions. -   * See README.kiosk for more information. -   * -   * Note: Since KDE 4.3, there are more restrictions on authorized -   * desktop files to prevent users from inadvertently running trojan -   * desktop files.  Your application launchers should have the executable -   * bit set to prevent issues.  To see if a restriction is due to -   * KIOSK, see KAuthorized. -   * -   * @param path the file to check -   * @return true if the user is authorized to run the file -   */ -  static bool isAuthorizedDesktopFile(const QString& path); - -  /** -   * Returns the location where changes for the .desktop file @p path -   * should be written to. -   */ -  static QString locateLocal(const QString &path); - -  KConfigGroup desktopGroup() const; - -  /** -   * Returns the value of the "Type=" entry. -   * @return the type or QString() if not specified -   */ -  QString readType() const; - -  /** -   * Returns the value of the "Icon=" entry. -   * @return the icon or QString() if not specified -   */ -  QString readIcon() const; - -  /** -   * Returns the value of the "Name=" entry. -   * @return the name or QString() if not specified -   */ -  QString readName() const; - -  /** -   * Returns the value of the "Comment=" entry. -   * @return the comment or QString() if not specified -   */ -  QString readComment() const; - -  /** -   * Returns the value of the "GenericName=" entry. -   * @return the generic name or QString() if not specified -   */ -  QString readGenericName() const; - -  /** -   * Returns the value of the "Path=" entry. -   * @return the path or QString() if not specified -   */ -  QString readPath() const; - -  /** -   * Returns the value of the "Dev=" entry. -   * @return the device or QString() if not specified -   */ -  QString readDevice() const; - -  /** -   * Returns the value of the "URL=" entry. -   * @return the URL or QString() if not specified -   */ -  QString readUrl() const; - -  /** -   * Returns a list of the "Actions=" entries. -   * @return the list of actions -   */ -  QStringList readActions() const; - -  /** -   * Sets the desktop action group. -   * @param group the new action group -   */ -  KConfigGroup actionGroup(const QString &group); - -  const KConfigGroup actionGroup(const QString &group) const; - -  /** -   * Returns true if the action group exists, false otherwise -   * @param group the action group to test -   * @return true if the action group exists -   */ -  bool hasActionGroup(const QString &group) const; - -  /** -   * Checks whether there is a "Type=Link" entry. -   * -   * The link points to the "URL=" entry. -   * @return true if there is a "Type=Link" entry -   */ -  bool hasLinkType() const; - -  /** -   * Checks whether there is an entry "Type=Application". -   * @return true if there is a "Type=Application" entry -   */ -  bool hasApplicationType() const; - -  /** -   * Checks whether there is an entry "Type=FSDevice". -   * @return true if there is a "Type=FSDevice" entry -   */ -  bool hasDeviceType() const; - -  /** -   * Checks whether the TryExec field contains a binary -   * which is found on the local system. -   * @return true if TryExec contains an existing binary -   */ -  bool tryExec() const; - -  /** -   * Returns the value of the "X-DocPath=" Or "DocPath=" entry. -   * @return The value of the "X-DocPath=" Or "DocPath=" entry. -   */ -  QString readDocPath() const; - -  /** -   * Returns the entry of the "SortOrder=" entry. -   * @return the value of the "SortOrder=" entry. -   */ -  QStringList sortOrder() const; - -  /** -   * Whether the entry should be suppressed in menus. -   * This handles the NoDisplay key, but also OnlyShowIn / NotShowIn. -   * @return true to suppress this service -   * @since 4.1 -   */ -  bool noDisplay() const; - -  /** -   * Copies all entries from this config object to a new -   * KDesktopFile object that will save itself to @p file. -   * -   * Actual saving to @p file happens when the returned object is -   * destructed or when sync() is called upon it. -   * -   * @param file the new KDesktopFile object it will save itself to. -   */ -  KDesktopFile* copyTo(const QString &file) const; - -  QString fileName() const; - -  QStandardPaths::StandardLocation resource() const; +    /** +     * Constructs a KDesktopFile object. +     * +     * See QStandardPaths for more information on resources. +     * +     * @param resourceType   Allows you to change what sort of resource +     *                       to search for if @p fileName is not absolute. +     *                       For instance, you might want to specify GenericConfigLocation. +     * @param fileName       The name or path of the desktop file. If it +     *                       is not absolute, it will be located +     *                       using the resource type @p resType. +     */ +    explicit KDesktopFile(QStandardPaths::StandardLocation resourceType, const QString &fileName); + +    /** +     * Constructs a KDesktopFile object. +     * +     * See QStandardPaths for more information on resources. +     * +     * @param fileName       The name or path of the desktop file. If it +     *                       is not absolute, it will be located +     *                       using the resource type ApplicationsLocation +     */ +    explicit KDesktopFile(const QString &fileName); + +    /** +     * Destructs the KDesktopFile object. +     * +     * Writes back any dirty configuration entries. +     */ +    virtual ~KDesktopFile(); + +    /** +     * Checks whether this is really a desktop file. +     * +     * The check is performed looking at the file extension (the file is not +     * opened). +     * Currently, the only valid extension is ".desktop". +     * @param path the path of the file to check +     * @return true if the file appears to be a desktop file. +     */ +    static bool isDesktopFile(const QString &path); + +    /** +     * Checks whether the user is authorized to run this desktop file. +     * By default users are authorized to run all desktop files but +     * the KIOSK framework can be used to activate certain restrictions. +     * See README.kiosk for more information. +     * +     * Note: Since KDE 4.3, there are more restrictions on authorized +     * desktop files to prevent users from inadvertently running trojan +     * desktop files.  Your application launchers should have the executable +     * bit set to prevent issues.  To see if a restriction is due to +     * KIOSK, see KAuthorized. +     * +     * @param path the file to check +     * @return true if the user is authorized to run the file +     */ +    static bool isAuthorizedDesktopFile(const QString &path); + +    /** +     * Returns the location where changes for the .desktop file @p path +     * should be written to. +     */ +    static QString locateLocal(const QString &path); + +    KConfigGroup desktopGroup() const; + +    /** +     * Returns the value of the "Type=" entry. +     * @return the type or QString() if not specified +     */ +    QString readType() const; + +    /** +     * Returns the value of the "Icon=" entry. +     * @return the icon or QString() if not specified +     */ +    QString readIcon() const; + +    /** +     * Returns the value of the "Name=" entry. +     * @return the name or QString() if not specified +     */ +    QString readName() const; + +    /** +     * Returns the value of the "Comment=" entry. +     * @return the comment or QString() if not specified +     */ +    QString readComment() const; + +    /** +     * Returns the value of the "GenericName=" entry. +     * @return the generic name or QString() if not specified +     */ +    QString readGenericName() const; + +    /** +     * Returns the value of the "Path=" entry. +     * @return the path or QString() if not specified +     */ +    QString readPath() const; + +    /** +     * Returns the value of the "Dev=" entry. +     * @return the device or QString() if not specified +     */ +    QString readDevice() const; + +    /** +     * Returns the value of the "URL=" entry. +     * @return the URL or QString() if not specified +     */ +    QString readUrl() const; + +    /** +     * Returns a list of the "Actions=" entries. +     * @return the list of actions +     */ +    QStringList readActions() const; + +    /** +     * Sets the desktop action group. +     * @param group the new action group +     */ +    KConfigGroup actionGroup(const QString &group); + +    const KConfigGroup actionGroup(const QString &group) const; + +    /** +     * Returns true if the action group exists, false otherwise +     * @param group the action group to test +     * @return true if the action group exists +     */ +    bool hasActionGroup(const QString &group) const; + +    /** +     * Checks whether there is a "Type=Link" entry. +     * +     * The link points to the "URL=" entry. +     * @return true if there is a "Type=Link" entry +     */ +    bool hasLinkType() const; + +    /** +     * Checks whether there is an entry "Type=Application". +     * @return true if there is a "Type=Application" entry +     */ +    bool hasApplicationType() const; + +    /** +     * Checks whether there is an entry "Type=FSDevice". +     * @return true if there is a "Type=FSDevice" entry +     */ +    bool hasDeviceType() const; + +    /** +     * Checks whether the TryExec field contains a binary +     * which is found on the local system. +     * @return true if TryExec contains an existing binary +     */ +    bool tryExec() const; + +    /** +     * Returns the value of the "X-DocPath=" Or "DocPath=" entry. +     * @return The value of the "X-DocPath=" Or "DocPath=" entry. +     */ +    QString readDocPath() const; + +    /** +     * Returns the entry of the "SortOrder=" entry. +     * @return the value of the "SortOrder=" entry. +     */ +    QStringList sortOrder() const; + +    /** +     * Whether the entry should be suppressed in menus. +     * This handles the NoDisplay key, but also OnlyShowIn / NotShowIn. +     * @return true to suppress this service +     * @since 4.1 +     */ +    bool noDisplay() const; + +    /** +     * Copies all entries from this config object to a new +     * KDesktopFile object that will save itself to @p file. +     * +     * Actual saving to @p file happens when the returned object is +     * destructed or when sync() is called upon it. +     * +     * @param file the new KDesktopFile object it will save itself to. +     */ +    KDesktopFile *copyTo(const QString &file) const; + +    QString fileName() const; + +    QStandardPaths::StandardLocation resource() const;  protected: -  /** Virtual hook, used to add new "virtual" functions while maintaining -      binary compatibility. Unused in this class. -  */ +    /** Virtual hook, used to add new "virtual" functions while maintaining +        binary compatibility. Unused in this class. +    */  //  virtual void virtual_hook( int id, void* data );  private: -  Q_DISABLE_COPY(KDesktopFile) +    Q_DISABLE_COPY(KDesktopFile) -  Q_DECLARE_PRIVATE(KDesktopFile) +    Q_DECLARE_PRIVATE(KDesktopFile)  };  #endif diff --git a/src/core/kemailsettings.cpp b/src/core/kemailsettings.cpp index 6a1f9448..230c2aa4 100644 --- a/src/core/kemailsettings.cpp +++ b/src/core/kemailsettings.cpp @@ -29,238 +29,245 @@  #include <kconfig.h>  #include <kconfiggroup.h> -class KEMailSettingsPrivate { +class KEMailSettingsPrivate +{  public: -    KEMailSettingsPrivate() : m_pConfig( 0 ) {} -    ~KEMailSettingsPrivate() { delete m_pConfig; } -	KConfig *m_pConfig; -	QStringList profiles; -	QString m_sDefaultProfile, m_sCurrentProfile; +    KEMailSettingsPrivate() : m_pConfig(0) {} +    ~KEMailSettingsPrivate() +    { +        delete m_pConfig; +    } +    KConfig *m_pConfig; +    QStringList profiles; +    QString m_sDefaultProfile, m_sCurrentProfile;  };  QString KEMailSettings::defaultProfileName() const  { -	return p->m_sDefaultProfile; +    return p->m_sDefaultProfile;  }  QString KEMailSettings::getSetting(KEMailSettings::Setting s) const  { -        KConfigGroup cg(p->m_pConfig, QStringLiteral("PROFILE_") + p->m_sCurrentProfile); -	switch (s) { -		case ClientProgram: { -			return cg.readEntry("EmailClient"); -			break; -		} -		case ClientTerminal: { -			return cg.readEntry("TerminalClient", QVariant(false)).toString(); -			break; -		} -		case RealName: { -			return cg.readEntry("FullName"); -			break; -		} -		case EmailAddress: { -			return cg.readEntry("EmailAddress"); -			break; -		} -		case ReplyToAddress: { -			return cg.readEntry("ReplyAddr"); -			break; -		} -		case Organization: { -			return cg.readEntry("Organization"); -			break; -		} -		case OutServer: { -			return cg.readEntry("OutgoingServer"); -			break; -		} -		case OutServerLogin: { -			return cg.readEntry("OutgoingUserName"); -			break; -		} -		case OutServerPass: { -			return cg.readEntry("OutgoingPassword"); -			break; -		} -		case OutServerType: { -			return cg.readEntry("OutgoingServerType"); -			break; -		} -		case OutServerCommand: { -			return cg.readEntry("OutgoingCommand"); -			break; -		} -		case OutServerTLS: { -			return cg.readEntry("OutgoingServerTLS", QVariant(false)).toString(); -			break; -		} -		case InServer: { -			return cg.readEntry("IncomingServer"); -			break; -		} -		case InServerLogin: { -			return cg.readEntry("IncomingUserName"); -			break; -		} -		case InServerPass: { -			return cg.readEntry("IncomingPassword"); -			break; -		} -		case InServerType: { -			return cg.readEntry("IncomingServerType"); -			break; -		} -		case InServerMBXType: { -			return cg.readEntry("IncomingServerMBXType"); -			break; -		} -		case InServerTLS: { -			return cg.readEntry("IncomingServerTLS", QVariant(false)).toString(); -			break; -		} -	}; -	return QString(); +    KConfigGroup cg(p->m_pConfig, QStringLiteral("PROFILE_") + p->m_sCurrentProfile); +    switch (s) { +    case ClientProgram: { +        return cg.readEntry("EmailClient"); +        break; +    } +    case ClientTerminal: { +        return cg.readEntry("TerminalClient", QVariant(false)).toString(); +        break; +    } +    case RealName: { +        return cg.readEntry("FullName"); +        break; +    } +    case EmailAddress: { +        return cg.readEntry("EmailAddress"); +        break; +    } +    case ReplyToAddress: { +        return cg.readEntry("ReplyAddr"); +        break; +    } +    case Organization: { +        return cg.readEntry("Organization"); +        break; +    } +    case OutServer: { +        return cg.readEntry("OutgoingServer"); +        break; +    } +    case OutServerLogin: { +        return cg.readEntry("OutgoingUserName"); +        break; +    } +    case OutServerPass: { +        return cg.readEntry("OutgoingPassword"); +        break; +    } +    case OutServerType: { +        return cg.readEntry("OutgoingServerType"); +        break; +    } +    case OutServerCommand: { +        return cg.readEntry("OutgoingCommand"); +        break; +    } +    case OutServerTLS: { +        return cg.readEntry("OutgoingServerTLS", QVariant(false)).toString(); +        break; +    } +    case InServer: { +        return cg.readEntry("IncomingServer"); +        break; +    } +    case InServerLogin: { +        return cg.readEntry("IncomingUserName"); +        break; +    } +    case InServerPass: { +        return cg.readEntry("IncomingPassword"); +        break; +    } +    case InServerType: { +        return cg.readEntry("IncomingServerType"); +        break; +    } +    case InServerMBXType: { +        return cg.readEntry("IncomingServerMBXType"); +        break; +    } +    case InServerTLS: { +        return cg.readEntry("IncomingServerTLS", QVariant(false)).toString(); +        break; +    } +    }; +    return QString();  }  void KEMailSettings::setSetting(KEMailSettings::Setting s, const QString  &v)  { -        KConfigGroup cg(p->m_pConfig, QStringLiteral("PROFILE_") + p->m_sCurrentProfile); -	switch (s) { -		case ClientProgram: { -			cg.writePathEntry("EmailClient", v); -			break; -		} -		case ClientTerminal: { -			cg.writeEntry("TerminalClient", (v == QLatin1String("true"))); -			break; -		} -		case RealName: { -			cg.writeEntry("FullName", v); -			break; -		} -		case EmailAddress: { -			cg.writeEntry("EmailAddress", v); -			break; -		} -		case ReplyToAddress: { -			cg.writeEntry("ReplyAddr", v); -			break; -		} -		case Organization: { -			cg.writeEntry("Organization", v); -			break; -		} -		case OutServer: { -			cg.writeEntry("OutgoingServer", v); -			break; -		} -		case OutServerLogin: { -			cg.writeEntry("OutgoingUserName", v); -			break; -		} -		case OutServerPass: { -			cg.writeEntry("OutgoingPassword", v); -			break; -		} -		case OutServerType: { -			cg.writeEntry("OutgoingServerType", v); -			break; -		} -		case OutServerCommand: { -			cg.writeEntry("OutgoingCommand", v); -			break; -		} -		case OutServerTLS: { -			cg.writeEntry("OutgoingServerTLS", (v == QLatin1String("true"))); -			break; -		} -		case InServer: { -			cg.writeEntry("IncomingServer", v); -			break; -		} -		case InServerLogin: { -			cg.writeEntry("IncomingUserName", v); -			break; -		} -		case InServerPass: { -			cg.writeEntry("IncomingPassword", v); -			break; -		} -		case InServerType: { -			cg.writeEntry("IncomingServerType", v); -			break; -		} -		case InServerMBXType: { -			cg.writeEntry("IncomingServerMBXType", v); -			break; -		} -		case InServerTLS: { -			cg.writeEntry("IncomingServerTLS", (v == QLatin1String("true"))); -			break; -		} -	}; -	cg.sync(); +    KConfigGroup cg(p->m_pConfig, QStringLiteral("PROFILE_") + p->m_sCurrentProfile); +    switch (s) { +    case ClientProgram: { +        cg.writePathEntry("EmailClient", v); +        break; +    } +    case ClientTerminal: { +        cg.writeEntry("TerminalClient", (v == QLatin1String("true"))); +        break; +    } +    case RealName: { +        cg.writeEntry("FullName", v); +        break; +    } +    case EmailAddress: { +        cg.writeEntry("EmailAddress", v); +        break; +    } +    case ReplyToAddress: { +        cg.writeEntry("ReplyAddr", v); +        break; +    } +    case Organization: { +        cg.writeEntry("Organization", v); +        break; +    } +    case OutServer: { +        cg.writeEntry("OutgoingServer", v); +        break; +    } +    case OutServerLogin: { +        cg.writeEntry("OutgoingUserName", v); +        break; +    } +    case OutServerPass: { +        cg.writeEntry("OutgoingPassword", v); +        break; +    } +    case OutServerType: { +        cg.writeEntry("OutgoingServerType", v); +        break; +    } +    case OutServerCommand: { +        cg.writeEntry("OutgoingCommand", v); +        break; +    } +    case OutServerTLS: { +        cg.writeEntry("OutgoingServerTLS", (v == QLatin1String("true"))); +        break; +    } +    case InServer: { +        cg.writeEntry("IncomingServer", v); +        break; +    } +    case InServerLogin: { +        cg.writeEntry("IncomingUserName", v); +        break; +    } +    case InServerPass: { +        cg.writeEntry("IncomingPassword", v); +        break; +    } +    case InServerType: { +        cg.writeEntry("IncomingServerType", v); +        break; +    } +    case InServerMBXType: { +        cg.writeEntry("IncomingServerMBXType", v); +        break; +    } +    case InServerTLS: { +        cg.writeEntry("IncomingServerTLS", (v == QLatin1String("true"))); +        break; +    } +    }; +    cg.sync();  }  void KEMailSettings::setDefault(const QString &s)  { -	p->m_pConfig->group("Defaults").writeEntry("Profile", s); -	p->m_pConfig->sync(); -	p->m_sDefaultProfile=s; +    p->m_pConfig->group("Defaults").writeEntry("Profile", s); +    p->m_pConfig->sync(); +    p->m_sDefaultProfile = s;  } -void KEMailSettings::setProfile (const QString &s) +void KEMailSettings::setProfile(const QString &s)  { -	QString groupname = QStringLiteral("PROFILE_"); -	groupname.append(s); -	p->m_sCurrentProfile=s; -	if (!p->m_pConfig->hasGroup(groupname)) { // Create a group if it doesn't exist -            KConfigGroup cg(p->m_pConfig, groupname); -            cg.writeEntry("ServerType", QString()); -            p->profiles+=s; -	} +    QString groupname = QStringLiteral("PROFILE_"); +    groupname.append(s); +    p->m_sCurrentProfile = s; +    if (!p->m_pConfig->hasGroup(groupname)) { // Create a group if it doesn't exist +        KConfigGroup cg(p->m_pConfig, groupname); +        cg.writeEntry("ServerType", QString()); +        p->profiles += s; +    }  }  #ifndef KDE_NO_DEPRECATED  QString KEMailSettings::currentProfileName() const  { -	return p->m_sCurrentProfile; +    return p->m_sCurrentProfile;  }  #endif  QStringList KEMailSettings::profiles() const  { -	return p->profiles; +    return p->profiles;  }  KEMailSettings::KEMailSettings() -	:p(new KEMailSettingsPrivate()) +    : p(new KEMailSettingsPrivate())  { -	p->m_sCurrentProfile.clear(); +    p->m_sCurrentProfile.clear(); -	p->m_pConfig = new KConfig(QStringLiteral("emaildefaults")); +    p->m_pConfig = new KConfig(QStringLiteral("emaildefaults")); -	const QStringList groups = p->m_pConfig->groupList(); -	for (QStringList::ConstIterator it = groups.begin(); it != groups.end(); ++it) { -		if ( (*it).startsWith( QLatin1String( "PROFILE_" ) ) ) -			p->profiles+= (*it).mid(8, (*it).length()); -	} +    const QStringList groups = p->m_pConfig->groupList(); +    for (QStringList::ConstIterator it = groups.begin(); it != groups.end(); ++it) { +        if ((*it).startsWith(QLatin1String("PROFILE_"))) { +            p->profiles += (*it).mid(8, (*it).length()); +        } +    } -        KConfigGroup cg( p->m_pConfig, "Defaults"); -	p->m_sDefaultProfile = cg.readEntry("Profile", tr("Default")); -	if (!p->m_sDefaultProfile.isNull()) { -		if (!p->m_pConfig->hasGroup(QStringLiteral("PROFILE_") + p->m_sDefaultProfile)) -			setDefault(tr("Default")); -		else -			setDefault(p->m_sDefaultProfile); -	} else { -			if (p->profiles.count()) { -				setDefault(p->profiles[0]); -			} else -				setDefault(tr("Default")); -	} -	setProfile(defaultProfileName()); +    KConfigGroup cg(p->m_pConfig, "Defaults"); +    p->m_sDefaultProfile = cg.readEntry("Profile", tr("Default")); +    if (!p->m_sDefaultProfile.isNull()) { +        if (!p->m_pConfig->hasGroup(QStringLiteral("PROFILE_") + p->m_sDefaultProfile)) { +            setDefault(tr("Default")); +        } else { +            setDefault(p->m_sDefaultProfile); +        } +    } else { +        if (p->profiles.count()) { +            setDefault(p->profiles[0]); +        } else { +            setDefault(tr("Default")); +        } +    } +    setProfile(defaultProfileName());  }  KEMailSettings::~KEMailSettings() diff --git a/src/core/kemailsettings.h b/src/core/kemailsettings.h index 32610d61..03249e50 100644 --- a/src/core/kemailsettings.h +++ b/src/core/kemailsettings.h @@ -35,142 +35,142 @@  class KEMailSettingsPrivate; -  /** -  * This is just a small class to facilitate accessing e-mail settings in  -  * a sane way, and allowing any program to manage multiple e-mail  +  * This is just a small class to facilitate accessing e-mail settings in +  * a sane way, and allowing any program to manage multiple e-mail    * profiles effortlessly    *    * The default profile is automatically selected in the constructor.    *    * @author Alex Zepeda zipzippy@sonic.net    **/ -class KCONFIGCORE_EXPORT KEMailSettings { +class KCONFIGCORE_EXPORT KEMailSettings +{      Q_DECLARE_TR_FUNCTIONS(KEMailSettings)  public: -	/** -	  * The list of settings that I thought of when I wrote this  -	  * class.  Any extra settings thought of later can be accessed  -	  * easily with getExtendedSetting and setExtendedSetting. -	  * @see getSetting() -	  * @see setSetting() -	  * @see getExtendedSetting() -	  * @see setExtendedSetting() -	  **/ -	enum Setting { -		ClientProgram, -		ClientTerminal, -		RealName, -		EmailAddress, -		ReplyToAddress, -		Organization, -		OutServer, -		OutServerLogin, -		OutServerPass, +    /** +      * The list of settings that I thought of when I wrote this +      * class.  Any extra settings thought of later can be accessed +      * easily with getExtendedSetting and setExtendedSetting. +      * @see getSetting() +      * @see setSetting() +      * @see getExtendedSetting() +      * @see setExtendedSetting() +      **/ +    enum Setting { +        ClientProgram, +        ClientTerminal, +        RealName, +        EmailAddress, +        ReplyToAddress, +        Organization, +        OutServer, +        OutServerLogin, +        OutServerPass,  #ifndef KDE_NO_DEPRECATED -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                OutServerType, -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                OutServerCommand, -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                OutServerTLS, +        /** +         * @deprecated since Frameworks 5.0 +         */ +        OutServerType, +        /** +         * @deprecated since Frameworks 5.0 +         */ +        OutServerCommand, +        /** +         * @deprecated since Frameworks 5.0 +         */ +        OutServerTLS,  #endif -		InServer, -		InServerLogin, -		InServerPass, +        InServer, +        InServerLogin, +        InServerPass,  #ifndef KDE_NO_DEPRECATED -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                InServerType, -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                InServerMBXType, -                /** -                 * @deprecated since Frameworks 5.0 -                 */ -                InServerTLS +        /** +         * @deprecated since Frameworks 5.0 +         */ +        InServerType, +        /** +         * @deprecated since Frameworks 5.0 +         */ +        InServerMBXType, +        /** +         * @deprecated since Frameworks 5.0 +         */ +        InServerTLS  #endif -	}; - -	/** -	  * The various extensions allowed. -	  **/ -	enum Extension { -		POP3, -		SMTP, -		OTHER -	}; - -	/** -	  * Default constructor, just sets things up and sets the default profile -	  * as the current profile -	  **/ -	KEMailSettings(); - -	/** -	  * Default destructor, nothing to see here. -	  **/ -	~KEMailSettings(); - -	/** -	  * List of profiles available. -	  * @return the list of profiles -	  **/ -	QStringList profiles() const; +    }; + +    /** +      * The various extensions allowed. +      **/ +    enum Extension { +        POP3, +        SMTP, +        OTHER +    }; + +    /** +      * Default constructor, just sets things up and sets the default profile +      * as the current profile +      **/ +    KEMailSettings(); + +    /** +      * Default destructor, nothing to see here. +      **/ +    ~KEMailSettings(); + +    /** +      * List of profiles available. +      * @return the list of profiles +      **/ +    QStringList profiles() const;  #ifndef KDE_NO_DEPRECATED -	/** -	  * @deprecated since Frameworks 5.0 -	  * Returns the name of the current profile. -	  * @returns what profile we're currently using -	  **/ -	KCONFIGCORE_DEPRECATED QString currentProfileName() const; +    /** +      * @deprecated since Frameworks 5.0 +      * Returns the name of the current profile. +      * @returns what profile we're currently using +      **/ +    KCONFIGCORE_DEPRECATED QString currentProfileName() const;  #endif -	/** -	  * Change the current profile. -	  * @param s the name of the new profile -	  **/ -	void setProfile (const QString &s); - -	/** -	 * Returns the name of the default profile. -	 * @returns the name of the one that's currently default QString() if none -	 **/ -	QString defaultProfileName() const; - -	/** -	  * Sets a new default. -	  * @param def the new default -	  **/ -	void setDefault(const QString &def); - -	/** -	  * Get one of the predefined "basic" settings. -	  * @param s the setting to get -	  * @return the value of the setting, or QString() if not  -	  *         set -	  **/ -	QString getSetting(KEMailSettings::Setting s) const; - -	/** -	  * Set one of the predefined "basic" settings. -	  * @param s the setting to set -	  * @param v the new value of the setting, or QString() to  -	  *         unset -	  **/ -	void setSetting(KEMailSettings::Setting s, const QString &v); +    /** +      * Change the current profile. +      * @param s the name of the new profile +      **/ +    void setProfile(const QString &s); + +    /** +     * Returns the name of the default profile. +     * @returns the name of the one that's currently default QString() if none +     **/ +    QString defaultProfileName() const; + +    /** +      * Sets a new default. +      * @param def the new default +      **/ +    void setDefault(const QString &def); + +    /** +      * Get one of the predefined "basic" settings. +      * @param s the setting to get +      * @return the value of the setting, or QString() if not +      *         set +      **/ +    QString getSetting(KEMailSettings::Setting s) const; + +    /** +      * Set one of the predefined "basic" settings. +      * @param s the setting to set +      * @param v the new value of the setting, or QString() to +      *         unset +      **/ +    void setSetting(KEMailSettings::Setting s, const QString &v);  private: -	KEMailSettingsPrivate* const p; +    KEMailSettingsPrivate *const p;  };  #endif diff --git a/src/core/ksharedconfig.cpp b/src/core/ksharedconfig.cpp index 0e5d1959..4f0e8d69 100644 --- a/src/core/ksharedconfig.cpp +++ b/src/core/ksharedconfig.cpp @@ -27,7 +27,7 @@  void _k_globalMainConfigSync(); -class GlobalSharedConfigList : public QList<KSharedConfig*> +class GlobalSharedConfigList : public QList<KSharedConfig *>  {  public:      GlobalSharedConfigList() @@ -44,19 +44,18 @@ public:      KSharedConfigPtr mainConfig;  }; -  Q_GLOBAL_STATIC(GlobalSharedConfigList, globalSharedConfigList)  void _k_globalMainConfigSync()  { -    if (globalSharedConfigList->mainConfig) +    if (globalSharedConfigList->mainConfig) {          globalSharedConfigList->mainConfig->sync(); +    }  } - -KSharedConfigPtr KSharedConfig::openConfig(const QString& _fileName, -                                           OpenFlags flags, -                                           QStandardPaths::StandardLocation resType) +KSharedConfigPtr KSharedConfig::openConfig(const QString &_fileName, +        OpenFlags flags, +        QStandardPaths::StandardLocation resType)  {      QString fileName(_fileName);      GlobalSharedConfigList *list = globalSharedConfigList(); @@ -66,10 +65,10 @@ KSharedConfigPtr KSharedConfig::openConfig(const QString& _fileName,      }      if (list) { -        for(QList<KSharedConfig*>::ConstIterator it = list->constBegin(); it != list->constEnd(); ++it) { -            if ( (*it)->name() == fileName && -                 (*it)->d_ptr->openFlags == flags && -                 (*it)->locationType() == resType +        for (QList<KSharedConfig *>::ConstIterator it = list->constBegin(); it != list->constEnd(); ++it) { +            if ((*it)->name() == fileName && +                    (*it)->d_ptr->openFlags == flags && +                    (*it)->locationType() == resType  //                 (*it)->backEnd()->type() == backEnd                 ) {                  return KSharedConfigPtr(*it); @@ -85,8 +84,9 @@ KSharedConfigPtr KSharedConfig::openConfig(const QString& _fileName,              userWarned = true;              QByteArray readOnly = qgetenv("KDE_HOME_READONLY");              if (readOnly.isEmpty() && QCoreApplication::applicationName() != QLatin1String("kdialog")) { -                if (ptr->group("General").readEntry(QLatin1String("warn_unwritable_config"), true)) +                if (ptr->group("General").readEntry(QLatin1String("warn_unwritable_config"), true)) {                      ptr->isConfigWritable(true); +                }              }          }      } @@ -94,7 +94,6 @@ KSharedConfigPtr KSharedConfig::openConfig(const QString& _fileName,      return ptr;  } -  KSharedConfig::KSharedConfig(const QString &fileName,                               OpenFlags flags,                               QStandardPaths::StandardLocation resType) @@ -105,18 +104,19 @@ KSharedConfig::KSharedConfig(const QString &fileName,  KSharedConfig::~KSharedConfig()  { -    if (!globalSharedConfigList.isDestroyed()) +    if (!globalSharedConfigList.isDestroyed()) {          globalSharedConfigList()->removeAll(this); +    }  }  KConfigGroup KSharedConfig::groupImpl(const QByteArray &groupName)  {      KSharedConfigPtr ptr(this); -    return KConfigGroup( ptr, groupName.constData()); +    return KConfigGroup(ptr, groupName.constData());  }  const KConfigGroup KSharedConfig::groupImpl(const QByteArray &groupName) const  { -    const KSharedConfigPtr ptr(const_cast<KSharedConfig*>(this)); -    return KConfigGroup( ptr, groupName.constData()); +    const KSharedConfigPtr ptr(const_cast<KSharedConfig *>(this)); +    return KConfigGroup(ptr, groupName.constData());  } diff --git a/src/core/ksharedconfig.h b/src/core/ksharedconfig.h index 42f7440e..bb5e8665 100644 --- a/src/core/ksharedconfig.h +++ b/src/core/ksharedconfig.h @@ -40,7 +40,7 @@  class KCONFIGCORE_EXPORT KSharedConfig : public KConfig, public QSharedData //krazy:exclude=dpointer (only for refcounting)  {  public: -  typedef QExplicitlySharedDataPointer<KSharedConfig> Ptr; +    typedef QExplicitlySharedDataPointer<KSharedConfig> Ptr;  public:      /** @@ -67,7 +67,7 @@ public:       *       * @sa KConfig       */ -    static KSharedConfig::Ptr openConfig(const QString& fileName = QString(), +    static KSharedConfig::Ptr openConfig(const QString &fileName = QString(),                                           OpenFlags mode = FullConfig,                                           QStandardPaths::StandardLocation type = QStandardPaths::GenericConfigLocation); @@ -75,10 +75,10 @@ public:  private:      Q_DISABLE_COPY(KSharedConfig) -    virtual KConfigGroup groupImpl(const QByteArray& aGroup); -    virtual const KConfigGroup groupImpl(const QByteArray& aGroup) const; +    virtual KConfigGroup groupImpl(const QByteArray &aGroup); +    virtual const KConfigGroup groupImpl(const QByteArray &aGroup) const; -    KSharedConfig(const QString& file, OpenFlags mode, +    KSharedConfig(const QString &file, OpenFlags mode,                    QStandardPaths::StandardLocation resourceType);  }; diff --git a/src/gui/kconfiggroupgui.cpp b/src/gui/kconfiggroupgui.cpp index 22706e77..fc0a55b1 100644 --- a/src/gui/kconfiggroupgui.cpp +++ b/src/gui/kconfiggroupgui.cpp @@ -35,7 +35,7 @@   * @returns true if something was handled (even if output was set to clear or default)   *          or false if nothing was handled (e.g., Core type)   */ -static bool readEntryGui(const QByteArray& data, const char* key, const QVariant &input, +static bool readEntryGui(const QByteArray &data, const char *key, const QVariant &input,                           QVariant &output)  {      const QString errString = QString::fromLatin1("\"%1\" - conversion from \"%3\" to %2 failed") @@ -60,8 +60,9 @@ static bool readEntryGui(const QByteArray& data, const char* key, const QVariant          } else if (!data.contains(',')) {              QColor col;              col.setNamedColor(QString::fromUtf8(data.constData(), data.length())); -            if (!col.isValid()) +            if (!col.isValid()) {                  qCritical() << qPrintable(errString); +            }              output = col;              return true;          } else { @@ -75,7 +76,7 @@ static bool readEntryGui(const QByteArray& data, const char* key, const QVariant              int temp[4];              // bounds check components -            for(int i = 0; i < count; i++) { +            for (int i = 0; i < count; i++) {                  bool ok;                  const int j = temp[i] = list.at(i).toInt(&ok);                  if (!ok) { // failed to convert to int @@ -88,28 +89,31 @@ static bool readEntryGui(const QByteArray& data, const char* key, const QVariant                      };                      const QString boundsError = QLatin1String(" (bounds error: %1 component %2)");                      qCritical() << qPrintable(errString) -                             << qPrintable(boundsError.arg(QLatin1String(components[i])).arg(j < 0? QLatin1String("< 0"): QLatin1String("> 255"))); +                                << qPrintable(boundsError.arg(QLatin1String(components[i])).arg(j < 0 ? QLatin1String("< 0") : QLatin1String("> 255")));                      return true; // return default                  }              }              QColor aColor(temp[0], temp[1], temp[2]); -            if (count == 4) +            if (count == 4) {                  aColor.setAlpha(temp[3]); +            } -            if (aColor.isValid()) +            if (aColor.isValid()) {                  output = aColor; -            else +            } else {                  qCritical() << qPrintable(errString); +            }              return true;          }      }      case QVariant::Font: {          QVariant tmp = QString::fromUtf8(data.constData(), data.length()); -        if (tmp.convert(QVariant::Font)) +        if (tmp.convert(QVariant::Font)) {              output = tmp; -        else +        } else {              qCritical() << qPrintable(errString); +        }          return true;      }      case QVariant::Pixmap: @@ -122,7 +126,7 @@ static bool readEntryGui(const QByteArray& data, const char* key, const QVariant      case QVariant::Cursor:      case QVariant::SizePolicy:      case QVariant::Pen: -        // we may want to handle these in the future +    // we may want to handle these in the future      default:          break; @@ -137,7 +141,7 @@ static bool readEntryGui(const QByteArray& data, const char* key, const QVariant   * @returns true if something was handled (even if an empty value was written)   *          or false if nothing was handled (e.g., Core type)   */ -static bool writeEntryGui(KConfigGroup *cg, const char* key, const QVariant &prop, +static bool writeEntryGui(KConfigGroup *cg, const char *key, const QVariant &prop,                            KConfigGroup::WriteConfigFlags pFlags)  {      switch (prop.type()) { @@ -153,14 +157,15 @@ static bool writeEntryGui(KConfigGroup *cg, const char* key, const QVariant &pro          list.insert(0, rColor.red());          list.insert(1, rColor.green());          list.insert(2, rColor.blue()); -        if (rColor.alpha() != 255) +        if (rColor.alpha() != 255) {              list.insert(3, rColor.alpha()); +        } -        cg->writeEntry( key, list, pFlags ); +        cg->writeEntry(key, list, pFlags);          return true;      }      case QVariant::Font: -        cg->writeEntry( key, prop.toString().toUtf8(), pFlags ); +        cg->writeEntry(key, prop.toString().toUtf8(), pFlags);          return true;      case QVariant::Pixmap: diff --git a/src/gui/kconfiggui.cpp b/src/gui/kconfiggui.cpp index 88da6b56..1eee8ce5 100644 --- a/src/gui/kconfiggui.cpp +++ b/src/gui/kconfiggui.cpp @@ -25,12 +25,13 @@  #include <kconfig.h> -static KConfig* s_sessionConfig = 0; +static KConfig *s_sessionConfig = 0; -KConfig* KConfigGui::sessionConfig() +KConfig *KConfigGui::sessionConfig()  { -    if (!s_sessionConfig) // create an instance specific config object -        s_sessionConfig = new KConfig( sessionConfigName(), KConfig::SimpleConfig ); +    if (!s_sessionConfig) { // create an instance specific config object +        s_sessionConfig = new KConfig(sessionConfigName(), KConfig::SimpleConfig); +    }      return s_sessionConfig;  } diff --git a/src/gui/kconfiggui.h b/src/gui/kconfiggui.h index 4e2313f3..173400fd 100644 --- a/src/gui/kconfiggui.h +++ b/src/gui/kconfiggui.h @@ -30,29 +30,29 @@ class KConfig;  namespace KConfigGui  { -    /** -     * Returns the application session config object. -     * -     * @return A pointer to the application's instance specific -     * KConfig object. -     * @see KConfig -     */ -    KCONFIGGUI_EXPORT KConfig* sessionConfig(); - -    /** -     * Indicates if a session config has been created for that application -     * (ie. if sessionConfig() got called at least once) -     * -     * @return true if a sessionConfig object was created, false otherwise -     */ -    KCONFIGGUI_EXPORT bool hasSessionConfig(); - -    /** -     * Returns the name of the application session -     * -     * @return the application session name -     */ -    KCONFIGGUI_EXPORT QString sessionConfigName(); +/** + * Returns the application session config object. + * + * @return A pointer to the application's instance specific + * KConfig object. + * @see KConfig + */ +KCONFIGGUI_EXPORT KConfig *sessionConfig(); + +/** + * Indicates if a session config has been created for that application + * (ie. if sessionConfig() got called at least once) + * + * @return true if a sessionConfig object was created, false otherwise + */ +KCONFIGGUI_EXPORT bool hasSessionConfig(); + +/** + * Returns the name of the application session + * + * @return the application session name + */ +KCONFIGGUI_EXPORT QString sessionConfigName();  }  #endif // KCONFIGGUI_H diff --git a/src/gui/kconfigloader.cpp b/src/gui/kconfigloader.cpp index 150c6b69..4713e324 100644 --- a/src/gui/kconfigloader.cpp +++ b/src/gui/kconfigloader.cpp @@ -152,7 +152,7 @@ QString ConfigLoaderHandler::defaultValue() const  }  bool ConfigLoaderHandler::endElement(const QString &namespaceURI, -                                  const QString &localName, const QString &qName) +                                     const QString &localName, const QString &qName)  {      Q_UNUSED(namespaceURI)      Q_UNUSED(qName) @@ -224,7 +224,7 @@ void ConfigLoaderHandler::addItem()          item = m_config->addItemFont(m_name, *d->newFont(), QFont(m_default), m_key);      } else if (m_type == QStringLiteral("int")) {          KConfigSkeleton::ItemInt *intItem = m_config->addItemInt(m_name, *d->newInt(), -                                                                 m_default.toInt(), m_key); +                                            m_default.toInt(), m_key);          if (m_haveMin) {              intItem->setMinValue(m_min); @@ -290,11 +290,11 @@ void ConfigLoaderHandler::addItem()              longlongItem->setMaxValue(m_max);          }          item = longlongItem; -    /* No addItemPathList in KConfigSkeleton ? -    } else if (m_type == "PathList") { -        //FIXME: the split() is naive and will break on lists with ,'s in them -        item = m_config->addItemPathList(m_name, *d->newStringList(), m_default.split(","), m_key); -    */ +        /* No addItemPathList in KConfigSkeleton ? +        } else if (m_type == "PathList") { +            //FIXME: the split() is naive and will break on lists with ,'s in them +            item = m_config->addItemPathList(m_name, *d->newStringList(), m_default.split(","), m_key); +        */      } else if (m_type == QStringLiteral("point")) {          QPoint defaultPoint;          QStringList tmpList = m_default.split(QStringLiteral(",")); @@ -329,15 +329,15 @@ void ConfigLoaderHandler::addItem()              ulonglongItem->setMaxValue(m_max);          }          item = ulonglongItem; -    /* No addItemUrlList in KConfigSkeleton ? -    } else if (m_type == "urllist") { -        //FIXME: the split() is naive and will break on lists with ,'s in them -        QStringList tmpList = m_default.split(","); -        QList<QUrl> defaultList; -        foreach (const QString& tmp, tmpList) { -            defaultList.append(QUrl(tmp)); -        } -        item = m_config->addItemUrlList(m_name, *d->newUrlList(), defaultList, m_key);*/ +        /* No addItemUrlList in KConfigSkeleton ? +        } else if (m_type == "urllist") { +            //FIXME: the split() is naive and will break on lists with ,'s in them +            QStringList tmpList = m_default.split(","); +            QList<QUrl> defaultList; +            foreach (const QString& tmp, tmpList) { +                defaultList.append(QUrl(tmp)); +            } +            item = m_config->addItemUrlList(m_name, *d->newUrlList(), defaultList, m_key);*/      }      if (item) { @@ -433,7 +433,7 @@ bool KConfigLoader::usrWriteConfig()  {      if (d->saveDefaults) {          KConfigSkeletonItem::List itemList = items(); -        for(int i = 0; i < itemList.size(); i++) { +        for (int i = 0; i < itemList.size(); i++) {              KConfigGroup cg(config(), itemList.at(i)->group());              cg.writeEntry(itemList.at(i)->key(), "");          } diff --git a/src/gui/kconfigloader.h b/src/gui/kconfigloader.h index df38ce79..36eb182f 100644 --- a/src/gui/kconfigloader.h +++ b/src/gui/kconfigloader.h @@ -170,7 +170,7 @@ protected:      bool usrWriteConfig();  private: -    ConfigLoaderPrivate * const d; +    ConfigLoaderPrivate *const d;  };  #endif //multiple inclusion guard diff --git a/src/gui/kconfigloader_p.h b/src/gui/kconfigloader_p.h index f9aa9191..b030fc30 100644 --- a/src/gui/kconfigloader_p.h +++ b/src/gui/kconfigloader_p.h @@ -24,199 +24,198 @@  class ConfigLoaderPrivate  { -    public: -        ConfigLoaderPrivate() -            : saveDefaults(false) -        { -        } - -        ~ConfigLoaderPrivate() -        { -            clearData(); -        } - -        void clearData() -        { -            qDeleteAll(bools); -            qDeleteAll(strings); -            qDeleteAll(stringlists); -            qDeleteAll(colors); -            qDeleteAll(fonts); -            qDeleteAll(ints); -            qDeleteAll(uints); -            qDeleteAll(urls); -            qDeleteAll(dateTimes); -            qDeleteAll(doubles); -            qDeleteAll(intlists); -            qDeleteAll(longlongs); -            qDeleteAll(points); -            qDeleteAll(rects); -            qDeleteAll(sizes); -            qDeleteAll(ulonglongs); -            qDeleteAll(urllists); -        } - -        bool *newBool() -        { -            bool *v = new bool; -            bools.append(v); -            return v; -        } - -        QString *newString() -        { -            QString *v = new QString; -            strings.append(v); -            return v; -        } - -        QStringList *newStringList() -        { -            QStringList *v = new QStringList; -            stringlists.append(v); -            return v; -        } - -        QColor *newColor() -        { -            QColor *v = new QColor; -            colors.append(v); -            return v; -        } - -        QFont *newFont() -        { -            QFont *v = new QFont; -            fonts.append(v); -            return v; -        } - -        qint32 *newInt() -        { -            qint32 *v = new qint32; -            ints.append(v); -            return v; -        } - -        quint32 *newUint() -        { -            quint32 *v = new quint32; -            uints.append(v); -            return v; -        } - -        QUrl *newUrl() -        { -            QUrl *v = new QUrl; -            urls.append(v); -            return v; -        } - -        QDateTime *newDateTime() -        { -            QDateTime *v = new QDateTime; -            dateTimes.append(v); -            return v; -        } - -        double *newDouble() -        { -            double *v = new double; -            doubles.append(v); -            return v; -        } - -        QList<qint32>* newIntList() -        { -            QList<qint32> *v = new QList<qint32>; -            intlists.append(v); -            return v; -        } - -        qint64 *newLongLong() -        { -            qint64 *v = new qint64; -            longlongs.append(v); -            return v; -        } - -        QPoint *newPoint() -        { -            QPoint *v = new QPoint; -            points.append(v); -            return v; -        } - -        QRect *newRect() -        { -            QRect *v = new QRect; -            rects.append(v); -            return v; -        } - -        QSize *newSize() -        { -            QSize *v = new QSize; -            sizes.append(v); -            return v; -        } - -        quint64 *newULongLong() -        { -            quint64 *v = new quint64; -            ulonglongs.append(v); -            return v; -        } - -        QList<QUrl> *newUrlList() -        { -            QList<QUrl> *v = new QList<QUrl>(); -            urllists.append(v); -            return v; -        } - -        void parse(KConfigLoader *loader, QIODevice *xml); - -        /** -         * Whether or not to write out default values. -         * -         * @param writeDefaults true if defaults should be written out -         */ -        void setWriteDefaults(bool writeDefaults) -        { -            saveDefaults = writeDefaults; -        } - -        /** -         * @return true if default values will also be written out -         */ -        bool writeDefaults() const -        { -            return saveDefaults; -        } - - -        QList<bool *> bools; -        QList<QString *> strings; -        QList<QStringList *> stringlists; -        QList<QColor *> colors; -        QList<QFont *> fonts; -        QList<qint32 *> ints; -        QList<quint32 *> uints; -        QList<QUrl *> urls; -        QList<QDateTime *> dateTimes; -        QList<double *> doubles; -        QList<QList<qint32> *> intlists; -        QList<qint64 *> longlongs; -        QList<QPoint *> points; -        QList<QRect *> rects; -        QList<QSize *> sizes; -        QList<quint64 *> ulonglongs; -        QList<QList<QUrl> *> urllists; -        QString baseGroup; -        QStringList groups; -        QHash<QString, QString> keysToNames; -        bool saveDefaults; +public: +    ConfigLoaderPrivate() +        : saveDefaults(false) +    { +    } + +    ~ConfigLoaderPrivate() +    { +        clearData(); +    } + +    void clearData() +    { +        qDeleteAll(bools); +        qDeleteAll(strings); +        qDeleteAll(stringlists); +        qDeleteAll(colors); +        qDeleteAll(fonts); +        qDeleteAll(ints); +        qDeleteAll(uints); +        qDeleteAll(urls); +        qDeleteAll(dateTimes); +        qDeleteAll(doubles); +        qDeleteAll(intlists); +        qDeleteAll(longlongs); +        qDeleteAll(points); +        qDeleteAll(rects); +        qDeleteAll(sizes); +        qDeleteAll(ulonglongs); +        qDeleteAll(urllists); +    } + +    bool *newBool() +    { +        bool *v = new bool; +        bools.append(v); +        return v; +    } + +    QString *newString() +    { +        QString *v = new QString; +        strings.append(v); +        return v; +    } + +    QStringList *newStringList() +    { +        QStringList *v = new QStringList; +        stringlists.append(v); +        return v; +    } + +    QColor *newColor() +    { +        QColor *v = new QColor; +        colors.append(v); +        return v; +    } + +    QFont *newFont() +    { +        QFont *v = new QFont; +        fonts.append(v); +        return v; +    } + +    qint32 *newInt() +    { +        qint32 *v = new qint32; +        ints.append(v); +        return v; +    } + +    quint32 *newUint() +    { +        quint32 *v = new quint32; +        uints.append(v); +        return v; +    } + +    QUrl *newUrl() +    { +        QUrl *v = new QUrl; +        urls.append(v); +        return v; +    } + +    QDateTime *newDateTime() +    { +        QDateTime *v = new QDateTime; +        dateTimes.append(v); +        return v; +    } + +    double *newDouble() +    { +        double *v = new double; +        doubles.append(v); +        return v; +    } + +    QList<qint32> *newIntList() +    { +        QList<qint32> *v = new QList<qint32>; +        intlists.append(v); +        return v; +    } + +    qint64 *newLongLong() +    { +        qint64 *v = new qint64; +        longlongs.append(v); +        return v; +    } + +    QPoint *newPoint() +    { +        QPoint *v = new QPoint; +        points.append(v); +        return v; +    } + +    QRect *newRect() +    { +        QRect *v = new QRect; +        rects.append(v); +        return v; +    } + +    QSize *newSize() +    { +        QSize *v = new QSize; +        sizes.append(v); +        return v; +    } + +    quint64 *newULongLong() +    { +        quint64 *v = new quint64; +        ulonglongs.append(v); +        return v; +    } + +    QList<QUrl> *newUrlList() +    { +        QList<QUrl> *v = new QList<QUrl>(); +        urllists.append(v); +        return v; +    } + +    void parse(KConfigLoader *loader, QIODevice *xml); + +    /** +     * Whether or not to write out default values. +     * +     * @param writeDefaults true if defaults should be written out +     */ +    void setWriteDefaults(bool writeDefaults) +    { +        saveDefaults = writeDefaults; +    } + +    /** +     * @return true if default values will also be written out +     */ +    bool writeDefaults() const +    { +        return saveDefaults; +    } + +    QList<bool *> bools; +    QList<QString *> strings; +    QList<QStringList *> stringlists; +    QList<QColor *> colors; +    QList<QFont *> fonts; +    QList<qint32 *> ints; +    QList<quint32 *> uints; +    QList<QUrl *> urls; +    QList<QDateTime *> dateTimes; +    QList<double *> doubles; +    QList<QList<qint32> *> intlists; +    QList<qint64 *> longlongs; +    QList<QPoint *> points; +    QList<QRect *> rects; +    QList<QSize *> sizes; +    QList<quint64 *> ulonglongs; +    QList<QList<QUrl> *> urllists; +    QString baseGroup; +    QStringList groups; +    QHash<QString, QString> keysToNames; +    bool saveDefaults;  };  #endif diff --git a/src/gui/kconfigskeleton.cpp b/src/gui/kconfigskeleton.cpp index 7704d36e..22f3c25c 100644 --- a/src/gui/kconfigskeleton.cpp +++ b/src/gui/kconfigskeleton.cpp @@ -23,36 +23,35 @@  #include <kcoreconfigskeleton_p.h> -KConfigSkeleton::KConfigSkeleton(const QString &configname, QObject* parent) -  : KCoreConfigSkeleton(configname, parent) +KConfigSkeleton::KConfigSkeleton(const QString &configname, QObject *parent) +    : KCoreConfigSkeleton(configname, parent)  {  } -KConfigSkeleton::KConfigSkeleton(KSharedConfig::Ptr pConfig, QObject* parent) -  : KCoreConfigSkeleton(pConfig, parent) +KConfigSkeleton::KConfigSkeleton(KSharedConfig::Ptr pConfig, QObject *parent) +    : KCoreConfigSkeleton(pConfig, parent)  {  } - -KConfigSkeleton::ItemColor::ItemColor( const QString &_group, const QString &_key, -                                  QColor &reference, -                                  const QColor &defaultValue ) -  : KConfigSkeletonGenericItem<QColor>( _group, _key, reference, defaultValue ) +KConfigSkeleton::ItemColor::ItemColor(const QString &_group, const QString &_key, +                                      QColor &reference, +                                      const QColor &defaultValue) +    : KConfigSkeletonGenericItem<QColor>(_group, _key, reference, defaultValue)  {  } -void KConfigSkeleton::ItemColor::readConfig( KConfig *config ) +void KConfigSkeleton::ItemColor::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KConfigSkeleton::ItemColor::setProperty(const QVariant & p) +void KConfigSkeleton::ItemColor::setProperty(const QVariant &p)  { -  mReference = qvariant_cast<QColor>(p); +    mReference = qvariant_cast<QColor>(p);  }  bool KConfigSkeleton::ItemColor::isEqual(const QVariant &v) const @@ -62,29 +61,28 @@ bool KConfigSkeleton::ItemColor::isEqual(const QVariant &v) const  QVariant KConfigSkeleton::ItemColor::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KConfigSkeleton::ItemFont::ItemFont( const QString &_group, const QString &_key, -                                QFont &reference, -                                const QFont &defaultValue ) -  : KConfigSkeletonGenericItem<QFont>( _group, _key, reference, defaultValue ) +KConfigSkeleton::ItemFont::ItemFont(const QString &_group, const QString &_key, +                                    QFont &reference, +                                    const QFont &defaultValue) +    : KConfigSkeletonGenericItem<QFont>(_group, _key, reference, defaultValue)  {  } -void KConfigSkeleton::ItemFont::readConfig( KConfig *config ) +void KConfigSkeleton::ItemFont::readConfig(KConfig *config)  { -  KConfigGroup cg(config, mGroup ); -  mReference = cg.readEntry( mKey, mDefault ); -  mLoadedValue = mReference; +    KConfigGroup cg(config, mGroup); +    mReference = cg.readEntry(mKey, mDefault); +    mLoadedValue = mReference; -  readImmutability( cg ); +    readImmutability(cg);  } -void KConfigSkeleton::ItemFont::setProperty(const QVariant & p) +void KConfigSkeleton::ItemFont::setProperty(const QVariant &p)  { -  mReference = qvariant_cast<QFont>(p); +    mReference = qvariant_cast<QFont>(p);  }  bool KConfigSkeleton::ItemFont::isEqual(const QVariant &v) const @@ -94,28 +92,26 @@ bool KConfigSkeleton::ItemFont::isEqual(const QVariant &v) const  QVariant KConfigSkeleton::ItemFont::property() const  { -  return QVariant(mReference); +    return QVariant(mReference);  } - -KConfigSkeleton::ItemColor *KConfigSkeleton::addItemColor( const QString &name, QColor &reference, -                                    const QColor &defaultValue, const QString &key ) +KConfigSkeleton::ItemColor *KConfigSkeleton::addItemColor(const QString &name, QColor &reference, +        const QColor &defaultValue, const QString &key)  { -  KConfigSkeleton::ItemColor *item; -  item = new KConfigSkeleton::ItemColor( d->mCurrentGroup, key.isNull() ? name : key, -                                         reference, defaultValue ); -  addItem( item, name ); -  return item; +    KConfigSkeleton::ItemColor *item; +    item = new KConfigSkeleton::ItemColor(d->mCurrentGroup, key.isNull() ? name : key, +                                          reference, defaultValue); +    addItem(item, name); +    return item;  } -KConfigSkeleton::ItemFont *KConfigSkeleton::addItemFont( const QString &name, QFont &reference, -                                   const QFont &defaultValue, const QString &key ) +KConfigSkeleton::ItemFont *KConfigSkeleton::addItemFont(const QString &name, QFont &reference, +        const QFont &defaultValue, const QString &key)  { -  KConfigSkeleton::ItemFont *item; -  item = new KConfigSkeleton::ItemFont( d->mCurrentGroup, key.isNull() ? name : key, -                                        reference, defaultValue ); -  addItem( item, name ); -  return item; +    KConfigSkeleton::ItemFont *item; +    item = new KConfigSkeleton::ItemFont(d->mCurrentGroup, key.isNull() ? name : key, +                                         reference, defaultValue); +    addItem(item, name); +    return item;  } - diff --git a/src/gui/kconfigskeleton.h b/src/gui/kconfigskeleton.h index e62e60b4..8262f5ce 100644 --- a/src/gui/kconfigskeleton.h +++ b/src/gui/kconfigskeleton.h @@ -39,101 +39,100 @@   */  class KCONFIGGUI_EXPORT KConfigSkeleton : public KCoreConfigSkeleton  { -  Q_OBJECT +    Q_OBJECT  public: -  /** -   * Class for handling a color preferences item. -   */ -  class KCONFIGGUI_EXPORT ItemColor:public KConfigSkeletonGenericItem < QColor > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemColor(const QString & _group, const QString & _key, -              QColor & reference, -              const QColor & defaultValue = QColor(128, 128, 128)); - -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); - -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); - -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) */ -    bool isEqual(const QVariant &p) const; - -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; - - -  /** -   * Class for handling a font preferences item. -   */ -  class KCONFIGGUI_EXPORT ItemFont:public KConfigSkeletonGenericItem < QFont > -  { -  public: -    /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ -    ItemFont(const QString & _group, const QString & _key, QFont & reference, -             const QFont & defaultValue = QFont()); - -    /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ -    void readConfig(KConfig * config); - -    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ -    void setProperty(const QVariant & p); - -    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) */ -    bool isEqual(const QVariant &p) const; - -    /** @copydoc KConfigSkeletonItem::property() */ -    QVariant property() const; -  }; +    /** +     * Class for handling a color preferences item. +     */ +    class KCONFIGGUI_EXPORT ItemColor: public KConfigSkeletonGenericItem < QColor > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemColor(const QString &_group, const QString &_key, +                  QColor &reference, +                  const QColor &defaultValue = QColor(128, 128, 128)); + +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); + +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); + +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) */ +        bool isEqual(const QVariant &p) const; + +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    }; + +    /** +     * Class for handling a font preferences item. +     */ +    class KCONFIGGUI_EXPORT ItemFont: public KConfigSkeletonGenericItem < QFont > +    { +    public: +        /** @copydoc KConfigSkeletonGenericItem::KConfigSkeletonGenericItem */ +        ItemFont(const QString &_group, const QString &_key, QFont &reference, +                 const QFont &defaultValue = QFont()); + +        /** @copydoc KConfigSkeletonItem::readConfig(KConfig*) */ +        void readConfig(KConfig *config); + +        /** @copydoc KConfigSkeletonItem::setProperty(const QVariant&) */ +        void setProperty(const QVariant &p); + +        /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) */ +        bool isEqual(const QVariant &p) const; + +        /** @copydoc KConfigSkeletonItem::property() */ +        QVariant property() const; +    };  public: -  /** -   * Constructor. -   * -   * @param configname name of config file. If no name is given, the default -   * config file as returned by KSharedConfig::openConfig() is used. -   */ -  explicit KConfigSkeleton(const QString & configname = QString(), QObject* parent = 0); - -  /** -   * Constructor. -   * -   * @param config configuration object to use. -   */ -  explicit KConfigSkeleton(KSharedConfig::Ptr config, QObject* parent = 0); - -  /** -   * Register an item of type QColor. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemColor *addItemColor(const QString & name, QColor & reference, -                          const QColor & defaultValue = QColor(128, 128, 128), -                          const QString & key = QString()); - -  /** -   * Register an item of type QFont. -   * -   * @param name Name used to identify this setting. Names must be unique. -   * @param reference Pointer to the variable, which is set by readConfig() -   * calls and read by writeConfig() calls. -   * @param defaultValue Default value, which is used when the config file -   * does not yet contain the key of this item. -   * @param key Key used in config file. If key is null, name is used as key. -   * @return The created item -   */ -  ItemFont *addItemFont(const QString & name, QFont & reference, -                        const QFont & defaultValue = QFont(), -                        const QString & key = QString()); +    /** +     * Constructor. +     * +     * @param configname name of config file. If no name is given, the default +     * config file as returned by KSharedConfig::openConfig() is used. +     */ +    explicit KConfigSkeleton(const QString &configname = QString(), QObject *parent = 0); + +    /** +     * Constructor. +     * +     * @param config configuration object to use. +     */ +    explicit KConfigSkeleton(KSharedConfig::Ptr config, QObject *parent = 0); + +    /** +     * Register an item of type QColor. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemColor *addItemColor(const QString &name, QColor &reference, +                            const QColor &defaultValue = QColor(128, 128, 128), +                            const QString &key = QString()); + +    /** +     * Register an item of type QFont. +     * +     * @param name Name used to identify this setting. Names must be unique. +     * @param reference Pointer to the variable, which is set by readConfig() +     * calls and read by writeConfig() calls. +     * @param defaultValue Default value, which is used when the config file +     * does not yet contain the key of this item. +     * @param key Key used in config file. If key is null, name is used as key. +     * @return The created item +     */ +    ItemFont *addItemFont(const QString &name, QFont &reference, +                          const QFont &defaultValue = QFont(), +                          const QString &key = QString());  }; diff --git a/src/gui/kstandardshortcut.cpp b/src/gui/kstandardshortcut.cpp index a377ff0f..83d91360 100644 --- a/src/gui/kstandardshortcut.cpp +++ b/src/gui/kstandardshortcut.cpp @@ -31,23 +31,22 @@  namespace KStandardShortcut  { -struct KStandardShortcutInfo -{ +struct KStandardShortcutInfo {      //! The standard shortcut id. @see StandardShortcut      StandardShortcut id; -    /**  +    /**       * Unique name for the given accel. The name is used to save the user       * settings. It's not representable. Use description for that.       * @warning NEVER EVER CHANGE IT OR TRANSLATE IT!       */ -    const char* name; +    const char *name;      //! Context for the translation -    const char* translation_context; +    const char *translation_context;      //! Localized label for user-visible display -    const char* description; +    const char *description;      //! The keys for this shortcut      int cutDefault, cutDefault2; @@ -75,121 +74,120 @@ struct KStandardShortcutInfo  */  // STUFF WILL BREAK IF YOU DON'T READ THIS!!!  // Read the comments of the big enum in kstandardshortcut.h before you change anything! -static KStandardShortcutInfo g_infoStandardShortcut[] = -{ +static KStandardShortcutInfo g_infoStandardShortcut[] = {  //Group File, -    {AccelNone, 0      , 0                   , 0       , 0      , 0           , QList<QKeySequence>(), false }, -    { Open    , "Open" , I18N_NOOP2("@action", "Open") , CTRL(O), 0           , QList<QKeySequence>(), false }    , -    { New     , "New"  , I18N_NOOP2("@action", "New")  , CTRL(N), 0           , QList<QKeySequence>(), false }    , -    { Close   , "Close", I18N_NOOP2("@action", "Close"), CTRL(W), CTRL(Escape), QList<QKeySequence>(), false }    , -    { Save    , "Save" , I18N_NOOP2("@action", "Save") , CTRL(S), 0           , QList<QKeySequence>(), false }    , -    { Print   , "Print", I18N_NOOP2("@action", "Print"), CTRL(P), 0           , QList<QKeySequence>(), false }    , -    { Quit    , "Quit" , I18N_NOOP2("@action", "Quit") , CTRL(Q), 0           , QList<QKeySequence>(), false }    , +    {AccelNone, 0, 0, 0, 0, 0, QList<QKeySequence>(), false }, +    { Open, "Open", I18N_NOOP2("@action", "Open"), CTRL(O), 0, QList<QKeySequence>(), false }, +    { New, "New", I18N_NOOP2("@action", "New"), CTRL(N), 0, QList<QKeySequence>(), false }, +    { Close, "Close", I18N_NOOP2("@action", "Close"), CTRL(W), CTRL(Escape), QList<QKeySequence>(), false }, +    { Save, "Save", I18N_NOOP2("@action", "Save"), CTRL(S), 0, QList<QKeySequence>(), false }, +    { Print, "Print", I18N_NOOP2("@action", "Print"), CTRL(P), 0, QList<QKeySequence>(), false }, +    { Quit, "Quit", I18N_NOOP2("@action", "Quit"), CTRL(Q), 0, QList<QKeySequence>(), false },  //Group Edit -    { Undo             , "Undo"             , I18N_NOOP2("@action", "Undo")                 , CTRL(Z)          , 0            , QList<QKeySequence>(), false }, -    { Redo             , "Redo"             , I18N_NOOP2("@action", "Redo")                 , CTRLSHIFT(Z)     , 0            , QList<QKeySequence>(), false }, -    { Cut              , "Cut"              , I18N_NOOP2("@action", "Cut")                  , CTRL(X)          , SHIFT(Delete), QList<QKeySequence>(), false }, -    { Copy             , "Copy"             , I18N_NOOP2("@action", "Copy")                 , CTRL(C)          , CTRL(Insert) , QList<QKeySequence>(), false }, -    { Paste            , "Paste"            , I18N_NOOP2("@action", "Paste")                , CTRL(V)          , SHIFT(Insert), QList<QKeySequence>(), false }, -    { PasteSelection   , "Paste Selection"  , I18N_NOOP2("@action", "Paste Selection")      , CTRLSHIFT(Insert), 0            , QList<QKeySequence>(), false }, - -    { SelectAll        , "SelectAll"        , I18N_NOOP2("@action", "Select All")           , CTRL(A)          , 0            , QList<QKeySequence>(), false }, -    { Deselect         , "Deselect"         , I18N_NOOP2("@action", "Deselect")             , CTRLSHIFT(A)     , 0            , QList<QKeySequence>(), false }, -    { DeleteWordBack   , "DeleteWordBack"   , I18N_NOOP2("@action", "Delete Word Backwards"), CTRL(Backspace)  , 0            , QList<QKeySequence>(), false }, -    { DeleteWordForward, "DeleteWordForward", I18N_NOOP2("@action", "Delete Word Forward")  , CTRL(Delete)     , 0            , QList<QKeySequence>(), false }, - -    { Find             , "Find"             , I18N_NOOP2("@action", "Find")                 , CTRL(F)          , 0            , QList<QKeySequence>(), false }, -    { FindNext         , "FindNext"         , I18N_NOOP2("@action", "Find Next")            , Qt::Key_F3       , 0            , QList<QKeySequence>(), false }, -    { FindPrev         , "FindPrev"         , I18N_NOOP2("@action", "Find Prev")            , SHIFT(F3)        , 0            , QList<QKeySequence>(), false }, -    { Replace          , "Replace"          , I18N_NOOP2("@action", "Replace")              , CTRL(R)          , 0            , QList<QKeySequence>(), false }, +    { Undo, "Undo", I18N_NOOP2("@action", "Undo"), CTRL(Z), 0, QList<QKeySequence>(), false }, +    { Redo, "Redo", I18N_NOOP2("@action", "Redo"), CTRLSHIFT(Z), 0, QList<QKeySequence>(), false }, +    { Cut, "Cut", I18N_NOOP2("@action", "Cut"), CTRL(X), SHIFT(Delete), QList<QKeySequence>(), false }, +    { Copy, "Copy", I18N_NOOP2("@action", "Copy"), CTRL(C), CTRL(Insert), QList<QKeySequence>(), false }, +    { Paste, "Paste", I18N_NOOP2("@action", "Paste"), CTRL(V), SHIFT(Insert), QList<QKeySequence>(), false }, +    { PasteSelection, "Paste Selection", I18N_NOOP2("@action", "Paste Selection"), CTRLSHIFT(Insert), 0, QList<QKeySequence>(), false }, + +    { SelectAll, "SelectAll", I18N_NOOP2("@action", "Select All"), CTRL(A), 0, QList<QKeySequence>(), false }, +    { Deselect, "Deselect", I18N_NOOP2("@action", "Deselect"), CTRLSHIFT(A), 0, QList<QKeySequence>(), false }, +    { DeleteWordBack, "DeleteWordBack", I18N_NOOP2("@action", "Delete Word Backwards"), CTRL(Backspace), 0, QList<QKeySequence>(), false }, +    { DeleteWordForward, "DeleteWordForward", I18N_NOOP2("@action", "Delete Word Forward"), CTRL(Delete), 0, QList<QKeySequence>(), false }, + +    { Find, "Find", I18N_NOOP2("@action", "Find"), CTRL(F), 0, QList<QKeySequence>(), false }, +    { FindNext, "FindNext", I18N_NOOP2("@action", "Find Next"), Qt::Key_F3, 0, QList<QKeySequence>(), false }, +    { FindPrev, "FindPrev", I18N_NOOP2("@action", "Find Prev"), SHIFT(F3), 0, QList<QKeySequence>(), false }, +    { Replace, "Replace", I18N_NOOP2("@action", "Replace"), CTRL(R), 0, QList<QKeySequence>(), false },  //Group Navigation -    { Home           , "Home"                 , I18N_NOOP2("@action Go to main page"      , "Home")                 , ALT(Home)       , Qt::Key_HomePage  , QList<QKeySequence>(), false }, -    { Begin          , "Begin"                , I18N_NOOP2("@action Beginning of document", "Begin")                , CTRL(Home)      , 0                 , QList<QKeySequence>(), false }, -    { End            , "End"                  , I18N_NOOP2("@action End of document"      , "End")                  , CTRL(End)       , 0                 , QList<QKeySequence>(), false }, -    { Prior          , "Prior"                , I18N_NOOP2("@action"                      , "Prior")                , Qt::Key_PageUp  , 0                 , QList<QKeySequence>(), false }, -    { Next           , "Next"                 , I18N_NOOP2("@action Opposite to Prior"    , "Next")                 , Qt::Key_PageDown, 0                 , QList<QKeySequence>(), false }, - -    { Up             , "Up"                   , I18N_NOOP2("@action"                      , "Up")                   , ALT(Up)         , 0                 , QList<QKeySequence>(), false }, -    { Back           , "Back"                 , I18N_NOOP2("@action"                      , "Back")                 , ALT(Left)       , Qt::Key_Back      , QList<QKeySequence>(), false }, -    { Forward        , "Forward"              , I18N_NOOP2("@action"                      , "Forward")              , ALT(Right)      , Qt::Key_Forward   , QList<QKeySequence>(), false }, -    { Reload         , "Reload"               , I18N_NOOP2("@action"                      , "Reload")               , Qt::Key_F5      , Qt::Key_Refresh   , QList<QKeySequence>(), false }, - -    { BeginningOfLine, "BeginningOfLine"      , I18N_NOOP2("@action"                      , "Beginning of Line")    , Qt::Key_Home    , 0                 , QList<QKeySequence>(), false }, -    { EndOfLine      , "EndOfLine"            , I18N_NOOP2("@action"                      , "End of Line")          , Qt::Key_End     , 0                 , QList<QKeySequence>(), false }, -    { GotoLine       , "GotoLine"             , I18N_NOOP2("@action"                      , "Go to Line")           , CTRL(G)         , 0                 , QList<QKeySequence>(), false }, -    { BackwardWord   , "BackwardWord"         , I18N_NOOP2("@action"                      , "Backward Word")        , CTRL(Left)      , 0                 , QList<QKeySequence>(), false }, -    { ForwardWord    , "ForwardWord"          , I18N_NOOP2("@action"                      , "Forward Word")         , CTRL(Right)     , 0                 , QList<QKeySequence>(), false }, - -    { AddBookmark    , "AddBookmark"          , I18N_NOOP2("@action"                      , "Add Bookmark")         , CTRL(B)         , 0                 , QList<QKeySequence>(), false }, -    { ZoomIn         , "ZoomIn"               , I18N_NOOP2("@action"                      , "Zoom In")              , CTRL(Plus)      , CTRL(Equal)       , QList<QKeySequence>(), false }, -    { ZoomOut        , "ZoomOut"              , I18N_NOOP2("@action"                      , "Zoom Out")             , CTRL(Minus)     , 0                 , QList<QKeySequence>(), false }, -    { FullScreen     , "FullScreen"           , I18N_NOOP2("@action"                      , "Full Screen Mode")     , CTRLSHIFT(F)    , 0                 , QList<QKeySequence>(), false }, - -    { ShowMenubar    , "ShowMenubar"          , I18N_NOOP2("@action"                      , "Show Menu Bar")        , CTRL(M)         , 0                 , QList<QKeySequence>(), false }, -    { TabNext        , "Activate Next Tab"    , I18N_NOOP2("@action"                      , "Activate Next Tab")    , CTRL(Period)    , CTRL(BracketRight), QList<QKeySequence>(), false }, -    { TabPrev        , "Activate Previous Tab", I18N_NOOP2("@action"                      , "Activate Previous Tab"), CTRL(Comma)     , CTRL(BracketLeft) , QList<QKeySequence>(), false }, +    { Home, "Home", I18N_NOOP2("@action Go to main page", "Home"), ALT(Home), Qt::Key_HomePage, QList<QKeySequence>(), false }, +    { Begin, "Begin", I18N_NOOP2("@action Beginning of document", "Begin"), CTRL(Home), 0, QList<QKeySequence>(), false }, +    { End, "End", I18N_NOOP2("@action End of document", "End"), CTRL(End), 0, QList<QKeySequence>(), false }, +    { Prior, "Prior", I18N_NOOP2("@action", "Prior"), Qt::Key_PageUp, 0, QList<QKeySequence>(), false }, +    { Next, "Next", I18N_NOOP2("@action Opposite to Prior", "Next"), Qt::Key_PageDown, 0, QList<QKeySequence>(), false }, + +    { Up, "Up", I18N_NOOP2("@action", "Up"), ALT(Up), 0, QList<QKeySequence>(), false }, +    { Back, "Back", I18N_NOOP2("@action", "Back"), ALT(Left), Qt::Key_Back, QList<QKeySequence>(), false }, +    { Forward, "Forward", I18N_NOOP2("@action", "Forward"), ALT(Right), Qt::Key_Forward, QList<QKeySequence>(), false }, +    { Reload, "Reload", I18N_NOOP2("@action", "Reload"), Qt::Key_F5, Qt::Key_Refresh, QList<QKeySequence>(), false }, + +    { BeginningOfLine, "BeginningOfLine", I18N_NOOP2("@action", "Beginning of Line"), Qt::Key_Home, 0, QList<QKeySequence>(), false }, +    { EndOfLine, "EndOfLine", I18N_NOOP2("@action", "End of Line"), Qt::Key_End, 0, QList<QKeySequence>(), false }, +    { GotoLine, "GotoLine", I18N_NOOP2("@action", "Go to Line"), CTRL(G), 0, QList<QKeySequence>(), false }, +    { BackwardWord, "BackwardWord", I18N_NOOP2("@action", "Backward Word"), CTRL(Left), 0, QList<QKeySequence>(), false }, +    { ForwardWord, "ForwardWord", I18N_NOOP2("@action", "Forward Word"), CTRL(Right), 0, QList<QKeySequence>(), false }, + +    { AddBookmark, "AddBookmark", I18N_NOOP2("@action", "Add Bookmark"), CTRL(B), 0, QList<QKeySequence>(), false }, +    { ZoomIn, "ZoomIn", I18N_NOOP2("@action", "Zoom In"), CTRL(Plus), CTRL(Equal), QList<QKeySequence>(), false }, +    { ZoomOut, "ZoomOut", I18N_NOOP2("@action", "Zoom Out"), CTRL(Minus), 0, QList<QKeySequence>(), false }, +    { FullScreen, "FullScreen", I18N_NOOP2("@action", "Full Screen Mode"), CTRLSHIFT(F), 0, QList<QKeySequence>(), false }, + +    { ShowMenubar, "ShowMenubar", I18N_NOOP2("@action", "Show Menu Bar"), CTRL(M), 0, QList<QKeySequence>(), false }, +    { TabNext, "Activate Next Tab", I18N_NOOP2("@action", "Activate Next Tab"), CTRL(Period), CTRL(BracketRight), QList<QKeySequence>(), false }, +    { TabPrev, "Activate Previous Tab", I18N_NOOP2("@action", "Activate Previous Tab"), CTRL(Comma), CTRL(BracketLeft), QList<QKeySequence>(), false },      //Group Help -    { Help           , "Help"                 , I18N_NOOP2("@action"                      , "Help")                 , Qt::Key_F1      , 0                 , QList<QKeySequence>(), false }, -    { WhatsThis      , "WhatsThis"            , I18N_NOOP2("@action"                      , "What's This")          , SHIFT(F1)       , 0                 , QList<QKeySequence>(), false }, +    { Help, "Help", I18N_NOOP2("@action", "Help"), Qt::Key_F1, 0, QList<QKeySequence>(), false }, +    { WhatsThis, "WhatsThis", I18N_NOOP2("@action", "What's This"), SHIFT(F1), 0, QList<QKeySequence>(), false },  //Group TextCompletion -    { TextCompletion           , "TextCompletion"           , I18N_NOOP2("@action", "Text Completion")          , CTRL(E)     , 0, QList<QKeySequence>(), false }, -    { PrevCompletion           , "PrevCompletion"           , I18N_NOOP2("@action", "Previous Completion Match"), CTRL(Up)    , 0, QList<QKeySequence>(), false }, -    { NextCompletion           , "NextCompletion"           , I18N_NOOP2("@action", "Next Completion Match")    , CTRL(Down)  , 0, QList<QKeySequence>(), false }, -    { SubstringCompletion      , "SubstringCompletion"      , I18N_NOOP2("@action", "Substring Completion")     , CTRL(T)     , 0, QList<QKeySequence>(), false }, - -    { RotateUp                 , "RotateUp"                 , I18N_NOOP2("@action", "Previous Item in List")    , Qt::Key_Up  , 0, QList<QKeySequence>(), false }, -    { RotateDown               , "RotateDown"               , I18N_NOOP2("@action", "Next Item in List")        , Qt::Key_Down, 0, QList<QKeySequence>(), false }, - -    { OpenRecent               , "OpenRecent"               , I18N_NOOP2("@action", "Open Recent")               , 0           , 0, QList<QKeySequence>(), false }, -    { SaveAs                   , "SaveAs"                   , I18N_NOOP2("@action", "Save As")                  , CTRLSHIFT(S), 0, QList<QKeySequence>(), false }, -    { Revert                   , "Revert"                   , I18N_NOOP2("@action", "Revert")                   , 0           , 0, QList<QKeySequence>(), false }, -    { PrintPreview             , "PrintPreview"             , I18N_NOOP2("@action", "Print Preview")             , 0           , 0, QList<QKeySequence>(), false }, -    { Mail                     , "Mail"                     , I18N_NOOP2("@action", "Mail")                     , 0           , 0, QList<QKeySequence>(), false }, -    { Clear                    , "Clear"                    , I18N_NOOP2("@action", "Clear")                    , 0           , 0, QList<QKeySequence>(), false }, -    { ActualSize               , "ActualSize"               , I18N_NOOP2("@action", "Actual Size")               , 0           , 0, QList<QKeySequence>(), false }, -    { FitToPage                , "FitToPage"                , I18N_NOOP2("@action", "Fit To Page")                , 0           , 0, QList<QKeySequence>(), false }, -    { FitToWidth               , "FitToWidth"               , I18N_NOOP2("@action", "Fit To Width")               , 0           , 0, QList<QKeySequence>(), false }, -    { FitToHeight              , "FitToHeight"              , I18N_NOOP2("@action", "Fit To Height")              , 0           , 0, QList<QKeySequence>(), false }, -    { Zoom                     , "Zoom"                     , I18N_NOOP2("@action", "Zoom")                     , 0           , 0, QList<QKeySequence>(), false }, -    { Goto                     , "Goto"                     , I18N_NOOP2("@action", "Goto")                     , 0           , 0, QList<QKeySequence>(), false }, -    { GotoPage                 , "GotoPage"                 , I18N_NOOP2("@action", "Goto Page")                 , 0           , 0, QList<QKeySequence>(), false }, -    { DocumentBack             , "DocumentBack"             , I18N_NOOP2("@action", "Document Back")             , ALTSHIFT(Left), 0, QList<QKeySequence>(), false }, -    { DocumentForward          , "DocumentForward"          , I18N_NOOP2("@action", "Document Forward")          , ALTSHIFT(Right), 0, QList<QKeySequence>(), false }, -    { EditBookmarks            , "EditBookmarks"            , I18N_NOOP2("@action", "Edit Bookmarks")            , 0           , 0, QList<QKeySequence>(), false }, -    { Spelling                 , "Spelling"                 , I18N_NOOP2("@action", "Spelling")                 , 0           , 0, QList<QKeySequence>(), false }, -    { ShowToolbar              , "ShowToolbar"              , I18N_NOOP2("@action", "Show Toolbar")              , 0           , 0, QList<QKeySequence>(), false }, -    { ShowStatusbar            , "ShowStatusbar"            , I18N_NOOP2("@action", "Show Statusbar")            , 0           , 0, QList<QKeySequence>(), false }, -    { SaveOptions              , "SaveOptions"              , I18N_NOOP2("@action", "Save Options")              , 0           , 0, QList<QKeySequence>(), false }, -    { KeyBindings              , "KeyBindings"              , I18N_NOOP2("@action", "Key Bindings")              , 0           , 0, QList<QKeySequence>(), false }, -    { Preferences              , "Preferences"              , I18N_NOOP2("@action", "Preferences")              , 0           , 0, QList<QKeySequence>(), false }, -    { ConfigureToolbars        , "ConfigureToolbars"        , I18N_NOOP2("@action", "Configure Toolbars")        , 0           , 0, QList<QKeySequence>(), false }, -    { ConfigureNotifications   , "ConfigureNotifications"   , I18N_NOOP2("@action", "Configure Notifications")   , 0           , 0, QList<QKeySequence>(), false }, -    { TipofDay                 , "TipofDay"                 , I18N_NOOP2("@action", "Tip Of Day")                 , 0           , 0, QList<QKeySequence>(), false }, -    { ReportBug                , "ReportBug"                , I18N_NOOP2("@action", "Report Bug")                , 0           , 0, QList<QKeySequence>(), false }, -    { SwitchApplicationLanguage, "SwitchApplicationLanguage", I18N_NOOP2("@action", "Switch Application Language"), 0           , 0, QList<QKeySequence>(), false }, -    { AboutApp                 , "AboutApp"                 , I18N_NOOP2("@action", "About Application")                 , 0           , 0, QList<QKeySequence>(), false }, -    { AboutKDE                 , "AboutKDE"                 , I18N_NOOP2("@action", "About KDE")                 , 0           , 0, QList<QKeySequence>(), false }, +    { TextCompletion, "TextCompletion", I18N_NOOP2("@action", "Text Completion"), CTRL(E), 0, QList<QKeySequence>(), false }, +    { PrevCompletion, "PrevCompletion", I18N_NOOP2("@action", "Previous Completion Match"), CTRL(Up), 0, QList<QKeySequence>(), false }, +    { NextCompletion, "NextCompletion", I18N_NOOP2("@action", "Next Completion Match"), CTRL(Down), 0, QList<QKeySequence>(), false }, +    { SubstringCompletion, "SubstringCompletion", I18N_NOOP2("@action", "Substring Completion"), CTRL(T), 0, QList<QKeySequence>(), false }, + +    { RotateUp, "RotateUp", I18N_NOOP2("@action", "Previous Item in List"), Qt::Key_Up, 0, QList<QKeySequence>(), false }, +    { RotateDown, "RotateDown", I18N_NOOP2("@action", "Next Item in List"), Qt::Key_Down, 0, QList<QKeySequence>(), false }, + +    { OpenRecent, "OpenRecent", I18N_NOOP2("@action", "Open Recent"), 0, 0, QList<QKeySequence>(), false }, +    { SaveAs, "SaveAs", I18N_NOOP2("@action", "Save As"), CTRLSHIFT(S), 0, QList<QKeySequence>(), false }, +    { Revert, "Revert", I18N_NOOP2("@action", "Revert"), 0, 0, QList<QKeySequence>(), false }, +    { PrintPreview, "PrintPreview", I18N_NOOP2("@action", "Print Preview"), 0, 0, QList<QKeySequence>(), false }, +    { Mail, "Mail", I18N_NOOP2("@action", "Mail"), 0, 0, QList<QKeySequence>(), false }, +    { Clear, "Clear", I18N_NOOP2("@action", "Clear"), 0, 0, QList<QKeySequence>(), false }, +    { ActualSize, "ActualSize", I18N_NOOP2("@action", "Actual Size"), 0, 0, QList<QKeySequence>(), false }, +    { FitToPage, "FitToPage", I18N_NOOP2("@action", "Fit To Page"), 0, 0, QList<QKeySequence>(), false }, +    { FitToWidth, "FitToWidth", I18N_NOOP2("@action", "Fit To Width"), 0, 0, QList<QKeySequence>(), false }, +    { FitToHeight, "FitToHeight", I18N_NOOP2("@action", "Fit To Height"), 0, 0, QList<QKeySequence>(), false }, +    { Zoom, "Zoom", I18N_NOOP2("@action", "Zoom"), 0, 0, QList<QKeySequence>(), false }, +    { Goto, "Goto", I18N_NOOP2("@action", "Goto"), 0, 0, QList<QKeySequence>(), false }, +    { GotoPage, "GotoPage", I18N_NOOP2("@action", "Goto Page"), 0, 0, QList<QKeySequence>(), false }, +    { DocumentBack, "DocumentBack", I18N_NOOP2("@action", "Document Back"), ALTSHIFT(Left), 0, QList<QKeySequence>(), false }, +    { DocumentForward, "DocumentForward", I18N_NOOP2("@action", "Document Forward"), ALTSHIFT(Right), 0, QList<QKeySequence>(), false }, +    { EditBookmarks, "EditBookmarks", I18N_NOOP2("@action", "Edit Bookmarks"), 0, 0, QList<QKeySequence>(), false }, +    { Spelling, "Spelling", I18N_NOOP2("@action", "Spelling"), 0, 0, QList<QKeySequence>(), false }, +    { ShowToolbar, "ShowToolbar", I18N_NOOP2("@action", "Show Toolbar"), 0, 0, QList<QKeySequence>(), false }, +    { ShowStatusbar, "ShowStatusbar", I18N_NOOP2("@action", "Show Statusbar"), 0, 0, QList<QKeySequence>(), false }, +    { SaveOptions, "SaveOptions", I18N_NOOP2("@action", "Save Options"), 0, 0, QList<QKeySequence>(), false }, +    { KeyBindings, "KeyBindings", I18N_NOOP2("@action", "Key Bindings"), 0, 0, QList<QKeySequence>(), false }, +    { Preferences, "Preferences", I18N_NOOP2("@action", "Preferences"), 0, 0, QList<QKeySequence>(), false }, +    { ConfigureToolbars, "ConfigureToolbars", I18N_NOOP2("@action", "Configure Toolbars"), 0, 0, QList<QKeySequence>(), false }, +    { ConfigureNotifications, "ConfigureNotifications", I18N_NOOP2("@action", "Configure Notifications"), 0, 0, QList<QKeySequence>(), false }, +    { TipofDay, "TipofDay", I18N_NOOP2("@action", "Tip Of Day"), 0, 0, QList<QKeySequence>(), false }, +    { ReportBug, "ReportBug", I18N_NOOP2("@action", "Report Bug"), 0, 0, QList<QKeySequence>(), false }, +    { SwitchApplicationLanguage, "SwitchApplicationLanguage", I18N_NOOP2("@action", "Switch Application Language"), 0, 0, QList<QKeySequence>(), false }, +    { AboutApp, "AboutApp", I18N_NOOP2("@action", "About Application"), 0, 0, QList<QKeySequence>(), false }, +    { AboutKDE, "AboutKDE", I18N_NOOP2("@action", "About KDE"), 0, 0, QList<QKeySequence>(), false },      //dummy entry to catch simple off-by-one errors. Insert new entries before this line. -    { AccelNone                , 0                          , 0                   , 0                           , 0, 0, QList<QKeySequence>(), false } +    { AccelNone, 0, 0, 0, 0, 0, QList<QKeySequence>(), false }  }; -  /** Search for the KStandardShortcutInfo object associated with the given @p id.      Return a dummy entry with no name and an empty shortcut if @p id is invalid.  */  static KStandardShortcutInfo *guardedStandardShortcutInfo(StandardShortcut id)  {      if (id >= static_cast<int>(sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo)) || -             id < 0) { +            id < 0) {          qWarning() << "KStandardShortcut: id not found!";          return &g_infoStandardShortcut[AccelNone]; -    } else +    } else {          return &g_infoStandardShortcut[id]; +    }  }  /** Initialize the accelerator @p id by checking if it is overridden @@ -202,7 +200,7 @@ static void initialize(StandardShortcut id)      KStandardShortcutInfo *info = guardedStandardShortcutInfo(id);      // All three are needed. -    if (info->id!=AccelNone) { +    if (info->id != AccelNone) {          Q_ASSERT(info->description);          Q_ASSERT(info->translation_context);          Q_ASSERT(info->name); @@ -212,10 +210,11 @@ static void initialize(StandardShortcut id)      if (cg.hasKey(info->name)) {          QString s = cg.readEntry(info->name); -        if (s != QLatin1String("none")) +        if (s != QLatin1String("none")) {              info->cut = QKeySequence::listFromString(s); -        else +        } else {              info->cut = QList<QKeySequence>(); +        }      } else {          info->cut = hardcodedDefaultShortcut(id);      } @@ -228,8 +227,9 @@ void saveShortcut(StandardShortcut id, const QList<QKeySequence> &newShortcut)      KStandardShortcutInfo *info = guardedStandardShortcutInfo(id);      // If the action has no standard shortcut associated there is nothing to      // save -    if(info->id == AccelNone) +    if (info->id == AccelNone) {          return; +    }      KConfigGroup cg(KSharedConfig::openConfig(), "Shortcuts"); @@ -239,14 +239,15 @@ void saveShortcut(StandardShortcut id, const QList<QKeySequence> &newShortcut)      if (sameAsDefault) {          // If the shortcut is the equal to the hardcoded one we remove it from          // kdeglobal if necessary and return. -        if(cg.hasKey(info->name)) -            cg.deleteEntry(info->name, KConfig::Global|KConfig::Persistent); +        if (cg.hasKey(info->name)) { +            cg.deleteEntry(info->name, KConfig::Global | KConfig::Persistent); +        }          return;      }      // Write the changed shortcut to kdeglobals -    cg.writeEntry(info->name, QKeySequence::listToString(info->cut), KConfig::Global|KConfig::Persistent); +    cg.writeEntry(info->name, QKeySequence::listToString(info->cut), KConfig::Global | KConfig::Persistent);  }  QString name(StandardShortcut id) @@ -256,42 +257,45 @@ QString name(StandardShortcut id)  QString label(StandardShortcut id)  { -    KStandardShortcutInfo *info = guardedStandardShortcutInfo( id ); +    KStandardShortcutInfo *info = guardedStandardShortcutInfo(id);      return QCoreApplication::translate("KStandardShortcut",                                         info->description,                                         info->translation_context);  }  // TODO: Add psWhatsThis entry to KStandardShortcutInfo -QString whatsThis( StandardShortcut /*id*/ ) +QString whatsThis(StandardShortcut /*id*/)  {  //  KStandardShortcutInfo* info = guardedStandardShortcutInfo( id );  //  if( info && info->whatsThis )  //      return i18n(info->whatsThis);  //  else -        return QString(); +    return QString();  }  const QList<QKeySequence> &shortcut(StandardShortcut id)  {      KStandardShortcutInfo *info = guardedStandardShortcutInfo(id); -    if(!info->isInitialized) +    if (!info->isInitialized) {          initialize(id); +    }      return info->cut;  }  StandardShortcut find(const QKeySequence &seq)  { -    if( !seq.isEmpty() ) { -        for(uint i = 0; i < sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo); i++) { +    if (!seq.isEmpty()) { +        for (uint i = 0; i < sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo); i++) {              StandardShortcut id = g_infoStandardShortcut[i].id; -            if( id != AccelNone ) { -                if(!g_infoStandardShortcut[i].isInitialized) +            if (id != AccelNone) { +                if (!g_infoStandardShortcut[i].isInitialized) {                      initialize(id); -                if(g_infoStandardShortcut[i].cut.contains(seq)) +                } +                if (g_infoStandardShortcut[i].cut.contains(seq)) {                      return id; +                }              }          }      } @@ -300,9 +304,10 @@ StandardShortcut find(const QKeySequence &seq)  StandardShortcut find(const char *keyName)  { -    for(uint i = 0; i < sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo); i++) -        if (qstrcmp(g_infoStandardShortcut[i].name, keyName)) +    for (uint i = 0; i < sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo); i++) +        if (qstrcmp(g_infoStandardShortcut[i].name, keyName)) {              return g_infoStandardShortcut[i].id; +        }      return AccelNone;  } @@ -312,12 +317,14 @@ QList<QKeySequence> hardcodedDefaultShortcut(StandardShortcut id)      QList<QKeySequence> cut;      KStandardShortcutInfo *info = guardedStandardShortcutInfo(id); -    if (info->cutDefault != 0) +    if (info->cutDefault != 0) {          cut << info->cutDefault; +    }      if (info->cutDefault2 != 0) { -        if (cut.isEmpty()) +        if (cut.isEmpty()) {              cut << QKeySequence(); +        }          cut << info->cutDefault2;      } @@ -325,53 +332,197 @@ QList<QKeySequence> hardcodedDefaultShortcut(StandardShortcut id)      return cut;  } -const QList<QKeySequence> &open()                  { return shortcut( Open ); } -const QList<QKeySequence> &openNew()               { return shortcut( New ); } -const QList<QKeySequence> &close()                 { return shortcut( Close ); } -const QList<QKeySequence> &save()                  { return shortcut( Save ); } -const QList<QKeySequence> &print()                 { return shortcut( Print ); } -const QList<QKeySequence> &quit()                  { return shortcut( Quit ); } -const QList<QKeySequence> &cut()                   { return shortcut( Cut ); } -const QList<QKeySequence> ©()                  { return shortcut( Copy ); } -const QList<QKeySequence> &paste()                 { return shortcut( Paste ); } -const QList<QKeySequence> &pasteSelection()        { return shortcut( PasteSelection ); } -const QList<QKeySequence> &deleteWordBack()        { return shortcut( DeleteWordBack ); } -const QList<QKeySequence> &deleteWordForward()     { return shortcut( DeleteWordForward ); } -const QList<QKeySequence> &undo()                  { return shortcut( Undo ); } -const QList<QKeySequence> &redo()                  { return shortcut( Redo ); } -const QList<QKeySequence> &find()                  { return shortcut( Find ); } -const QList<QKeySequence> &findNext()              { return shortcut( FindNext ); } -const QList<QKeySequence> &findPrev()              { return shortcut( FindPrev ); } -const QList<QKeySequence> &replace()               { return shortcut( Replace ); } -const QList<QKeySequence> &home()                  { return shortcut( Home ); } -const QList<QKeySequence> &begin()                 { return shortcut( Begin ); } -const QList<QKeySequence> &end()                   { return shortcut( End ); } -const QList<QKeySequence> &beginningOfLine()       { return shortcut( BeginningOfLine ); } -const QList<QKeySequence> &endOfLine()             { return shortcut( EndOfLine ); } -const QList<QKeySequence> &prior()                 { return shortcut( Prior ); } -const QList<QKeySequence> &next()                  { return shortcut( Next ); } -const QList<QKeySequence> &backwardWord()          { return shortcut( BackwardWord ); } -const QList<QKeySequence> &forwardWord()           { return shortcut( ForwardWord ); } -const QList<QKeySequence> &gotoLine()              { return shortcut( GotoLine ); } -const QList<QKeySequence> &addBookmark()           { return shortcut( AddBookmark ); } -const QList<QKeySequence> &tabNext()               { return shortcut( TabNext ); } -const QList<QKeySequence> &tabPrev()               { return shortcut( TabPrev ); } -const QList<QKeySequence> &fullScreen()            { return shortcut( FullScreen ); } -const QList<QKeySequence> &zoomIn()                { return shortcut( ZoomIn ); } -const QList<QKeySequence> &zoomOut()               { return shortcut( ZoomOut ); } -const QList<QKeySequence> &help()                  { return shortcut( Help ); } -const QList<QKeySequence> &completion()            { return shortcut( TextCompletion ); } -const QList<QKeySequence> &prevCompletion()        { return shortcut( PrevCompletion ); } -const QList<QKeySequence> &nextCompletion()        { return shortcut( NextCompletion ); } -const QList<QKeySequence> &rotateUp()              { return shortcut( RotateUp ); } -const QList<QKeySequence> &rotateDown()            { return shortcut( RotateDown ); } -const QList<QKeySequence> &substringCompletion()   { return shortcut( SubstringCompletion ); } -const QList<QKeySequence> &whatsThis()             { return shortcut( WhatsThis ); } -const QList<QKeySequence> &reload()                { return shortcut( Reload ); } -const QList<QKeySequence> &selectAll()             { return shortcut( SelectAll ); } -const QList<QKeySequence> &up()                    { return shortcut( Up ); } -const QList<QKeySequence> &back()                  { return shortcut( Back ); } -const QList<QKeySequence> &forward()               { return shortcut( Forward ); } -const QList<QKeySequence> &showMenubar()           { return shortcut( ShowMenubar ); } +const QList<QKeySequence> &open() +{ +    return shortcut(Open); +} +const QList<QKeySequence> &openNew() +{ +    return shortcut(New); +} +const QList<QKeySequence> &close() +{ +    return shortcut(Close); +} +const QList<QKeySequence> &save() +{ +    return shortcut(Save); +} +const QList<QKeySequence> &print() +{ +    return shortcut(Print); +} +const QList<QKeySequence> &quit() +{ +    return shortcut(Quit); +} +const QList<QKeySequence> &cut() +{ +    return shortcut(Cut); +} +const QList<QKeySequence> ©() +{ +    return shortcut(Copy); +} +const QList<QKeySequence> &paste() +{ +    return shortcut(Paste); +} +const QList<QKeySequence> &pasteSelection() +{ +    return shortcut(PasteSelection); +} +const QList<QKeySequence> &deleteWordBack() +{ +    return shortcut(DeleteWordBack); +} +const QList<QKeySequence> &deleteWordForward() +{ +    return shortcut(DeleteWordForward); +} +const QList<QKeySequence> &undo() +{ +    return shortcut(Undo); +} +const QList<QKeySequence> &redo() +{ +    return shortcut(Redo); +} +const QList<QKeySequence> &find() +{ +    return shortcut(Find); +} +const QList<QKeySequence> &findNext() +{ +    return shortcut(FindNext); +} +const QList<QKeySequence> &findPrev() +{ +    return shortcut(FindPrev); +} +const QList<QKeySequence> &replace() +{ +    return shortcut(Replace); +} +const QList<QKeySequence> &home() +{ +    return shortcut(Home); +} +const QList<QKeySequence> &begin() +{ +    return shortcut(Begin); +} +const QList<QKeySequence> &end() +{ +    return shortcut(End); +} +const QList<QKeySequence> &beginningOfLine() +{ +    return shortcut(BeginningOfLine); +} +const QList<QKeySequence> &endOfLine() +{ +    return shortcut(EndOfLine); +} +const QList<QKeySequence> &prior() +{ +    return shortcut(Prior); +} +const QList<QKeySequence> &next() +{ +    return shortcut(Next); +} +const QList<QKeySequence> &backwardWord() +{ +    return shortcut(BackwardWord); +} +const QList<QKeySequence> &forwardWord() +{ +    return shortcut(ForwardWord); +} +const QList<QKeySequence> &gotoLine() +{ +    return shortcut(GotoLine); +} +const QList<QKeySequence> &addBookmark() +{ +    return shortcut(AddBookmark); +} +const QList<QKeySequence> &tabNext() +{ +    return shortcut(TabNext); +} +const QList<QKeySequence> &tabPrev() +{ +    return shortcut(TabPrev); +} +const QList<QKeySequence> &fullScreen() +{ +    return shortcut(FullScreen); +} +const QList<QKeySequence> &zoomIn() +{ +    return shortcut(ZoomIn); +} +const QList<QKeySequence> &zoomOut() +{ +    return shortcut(ZoomOut); +} +const QList<QKeySequence> &help() +{ +    return shortcut(Help); +} +const QList<QKeySequence> &completion() +{ +    return shortcut(TextCompletion); +} +const QList<QKeySequence> &prevCompletion() +{ +    return shortcut(PrevCompletion); +} +const QList<QKeySequence> &nextCompletion() +{ +    return shortcut(NextCompletion); +} +const QList<QKeySequence> &rotateUp() +{ +    return shortcut(RotateUp); +} +const QList<QKeySequence> &rotateDown() +{ +    return shortcut(RotateDown); +} +const QList<QKeySequence> &substringCompletion() +{ +    return shortcut(SubstringCompletion); +} +const QList<QKeySequence> &whatsThis() +{ +    return shortcut(WhatsThis); +} +const QList<QKeySequence> &reload() +{ +    return shortcut(Reload); +} +const QList<QKeySequence> &selectAll() +{ +    return shortcut(SelectAll); +} +const QList<QKeySequence> &up() +{ +    return shortcut(Up); +} +const QList<QKeySequence> &back() +{ +    return shortcut(Back); +} +const QList<QKeySequence> &forward() +{ +    return shortcut(Forward); +} +const QList<QKeySequence> &showMenubar() +{ +    return shortcut(ShowMenubar); +}  } diff --git a/src/gui/kstandardshortcut.h b/src/gui/kstandardshortcut.h index b02a6ebf..5bb07fb9 100644 --- a/src/gui/kstandardshortcut.h +++ b/src/gui/kstandardshortcut.h @@ -33,29 +33,30 @@   * so do not hardcode the default behavior.   */  namespace KStandardShortcut -{ // STUFF WILL BREAK IF YOU DON'T READ THIS!!! -  /* -   *Always add new std-accels to the end of this enum, never in the middle! -   *Don't forget to add the corresponding entries in g_infoStandardShortcut[] in kstandardshortcut.cpp, too. -   *Values of elements here and positions of the corresponding entries in -   *the big array g_infoStandardShortcut[] ABSOLUTELY MUST BE THE SAME. -   * !!!    !!!!   !!!!!    !!!! -   *    !!!!    !!!     !!!!    !!!! -   * Remember to also update kdoctools/genshortcutents.cpp. -   * -   * Other Rules: -   * -   * - Never change the name of an existing shortcut -   * - Never translate the name of a shortcut -   */ - -  /** -   * Defines the identifier of all standard accelerators. -   */ -  enum StandardShortcut { +{ +// STUFF WILL BREAK IF YOU DON'T READ THIS!!! +/* + *Always add new std-accels to the end of this enum, never in the middle! + *Don't forget to add the corresponding entries in g_infoStandardShortcut[] in kstandardshortcut.cpp, too. + *Values of elements here and positions of the corresponding entries in + *the big array g_infoStandardShortcut[] ABSOLUTELY MUST BE THE SAME. + * !!!    !!!!   !!!!!    !!!! + *    !!!!    !!!     !!!!    !!!! + * Remember to also update kdoctools/genshortcutents.cpp. + * + * Other Rules: + * + * - Never change the name of an existing shortcut + * - Never translate the name of a shortcut + */ + +/** + * Defines the identifier of all standard accelerators. + */ +enum StandardShortcut {      //C++ requires that the value of an enum symbol be one more than the previous one. -	//This means that everything will be well-ordered from here on. -    AccelNone=0, +    //This means that everything will be well-ordered from here on. +    AccelNone = 0,      // File menu      Open, New, Close, Save,      // The Print item @@ -116,366 +117,366 @@ namespace KStandardShortcut      // Insert new items here!      StandardShortcutCount // number of standard shortcuts -  }; - -  /** -   * Returns the keybinding for @p accel. -   * On X11, if QApplication was initialized with GUI disabled, the -   * default keybinding will always be returned. -   * @param id the id of the accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &shortcut(StandardShortcut id); - -  /** -   * Returns a unique name for the given accel. -   * @param id the id of the accelerator -   * @return the unique name of the accelerator -   */ -  KCONFIGGUI_EXPORT QString name(StandardShortcut id); - -  /** -   * Returns a localized label for user-visible display. -   * @param id the id of the accelerator -   * @return a localized label for the accelerator -   */ -  KCONFIGGUI_EXPORT QString label(StandardShortcut id); - -  /** -   * Returns an extended WhatsThis description for the given accelerator. -   * @param id the id of the accelerator -   * @return a localized description of the accelerator -   */ -  KCONFIGGUI_EXPORT QString whatsThis(StandardShortcut id); - -  /** -   * Return the StandardShortcut id of the standard accel action which -   * uses this key sequence, or AccelNone if none of them do. -   * This is used by class KKeyChooser. -   * @param keySeq the key sequence to search -   * @return the id of the standard accelerator, or AccelNone if there -   *          is none -   */ -  KCONFIGGUI_EXPORT StandardShortcut find(const QKeySequence &keySeq); - -  /** -   * Return the StandardShortcut id of the standard accel action which -   * has \a keyName as its name, or AccelNone if none of them do. -   * This is used by class KKeyChooser. -   * @param keyName the key sequence to search -   * @return the id of the standard accelerator, or AccelNone if there -   *          is none -   */ -  KCONFIGGUI_EXPORT StandardShortcut find(const char *keyName); - -  /** -   * Returns the hardcoded default shortcut for @p id. -   * This does not take into account the user's configuration. -   * @param id the id of the accelerator -   * @return the default shortcut of the accelerator -   */ -  KCONFIGGUI_EXPORT QList<QKeySequence> hardcodedDefaultShortcut(StandardShortcut id); - -  /** -   * Saves the new shortcut \a cut for standard accel \a id. -   */ -  KCONFIGGUI_EXPORT void saveShortcut(StandardShortcut id, const QList<QKeySequence> &newShortcut); - -  /** -   * Open file. Default: Ctrl-o -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &open(); - -  /** -   * Create a new document (or whatever). Default: Ctrl-n -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &openNew(); - -  /** -   * Close current document. Default: Ctrl-w -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &close(); - -  /** -   * Save current document. Default: Ctrl-s -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &save(); - -  /** -   * Print current document. Default: Ctrl-p -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &print(); - -  /** -   * Quit the program. Default: Ctrl-q -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &quit(); - -  /** -   * Undo last operation. Default: Ctrl-z -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &undo(); - -  /** -   * Redo. Default: Shift-Ctrl-z -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &redo(); - -  /** -   * Cut selected area and store it in the clipboard. Default: Ctrl-x -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &cut(); - -  /** -   * Copy selected area into the clipboard. Default: Ctrl-c -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> ©(); - -  /** -   * Paste contents of clipboard at mouse/cursor position. Default: Ctrl-v -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &paste(); - -  /** -   * Paste the selection at mouse/cursor position. Default: Ctrl-Shift-Insert -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &pasteSelection(); - -  /** -   * Select all. Default: Ctrl-A -   * @return the shortcut of the standard accelerator -   **/ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &selectAll(); - -  /** -   * Delete a word back from mouse/cursor position. Default: Ctrl-Backspace -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &deleteWordBack(); - -  /** -   * Delete a word forward from mouse/cursor position. Default: Ctrl-Delete -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &deleteWordForward(); - -  /** -   * Find, search. Default: Ctrl-f -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &find(); - -  /** -   * Find/search next. Default: F3 -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &findNext(); - -  /** -   * Find/search previous. Default: Shift-F3 -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &findPrev(); - -  /** -   * Find and replace matches. Default: Ctrl-r -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &replace(); - -  /** -   * Zoom in. Default: Ctrl-Plus -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &zoomIn(); - -  /** -   * Zoom out. Default: Ctrl-Minus -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &zoomOut(); - -  /** -   * Toggle insert/overwrite (with visual feedback, e.g. in the statusbar). Default: Insert -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &insert(); - -  /** -   * Goto home page. Default: Alt-Home -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &home(); - -  /** -   * Goto beginning of the document. Default: Ctrl-Home -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &begin(); - -  /** -   * Goto end of the document. Default: Ctrl-End -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &end(); - -  /** -   * Goto beginning of current line. Default: Home -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &beginningOfLine(); - -  /** -   * Goto end of current line. Default: End -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &endOfLine(); - -  /** -   * Scroll up one page. Default: Prior -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &prior(); - -  /** -   * Scroll down one page. Default: Next -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &next(); - -  /** -   * Go to line. Default: Ctrl+G -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &gotoLine(); - -  /** -   * Add current page to bookmarks. Default: Ctrl+B -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &addBookmark(); - -  /** -   * Next Tab. Default: Ctrl-< -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &tabNext(); - -  /** -   * Previous Tab. Default: Ctrl-> -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &tabPrev(); - -  /** -   * Full Screen Mode. Default: Ctrl+Shift+F -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &fullScreen(); - -  /** -   * Help the user in the current situation. Default: F1 -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &help(); - -  /** -   * Complete text in input widgets. Default Ctrl+E -   * @return the shortcut of the standard accelerator -   **/ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &completion(); - -  /** -   * Iterate through a list when completion returns -   * multiple items. Default: Ctrl+Up -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &prevCompletion(); - -  /** -   * Iterate through a list when completion returns -   * multiple items. Default: Ctrl+Down -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &nextCompletion(); - -  /** -   * Find a string within another string or list of strings. -   * Default: Ctrl-T -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &substringCompletion(); - -  /** -   * Help users iterate through a list of entries. Default: Up -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &rotateUp(); - -  /** -   * Help users iterate through a list of entries. Default: Down -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &rotateDown(); - -  /** -   * What's This button. Default: Shift+F1 -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &whatsThis(); - -  /** -   * Reload. Default: F5 -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &reload(); - -  /** -   * Up. Default: Alt+Up -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &up(); - -  /** -   * Back. Default: Alt+Left -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &back(); - -  /** -   * Forward. Default: ALT+Right -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &forward(); - -  /** -   * BackwardWord. Default: Ctrl+Left -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &backwardWord(); - -  /** -   * ForwardWord. Default: Ctrl+Right -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &forwardWord(); - -  /** -   * Show Menu Bar.  Default: Ctrl-M -   * @return the shortcut of the standard accelerator -   */ -  KCONFIGGUI_EXPORT const QList<QKeySequence> &showMenubar(); +}; + +/** + * Returns the keybinding for @p accel. + * On X11, if QApplication was initialized with GUI disabled, the + * default keybinding will always be returned. + * @param id the id of the accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &shortcut(StandardShortcut id); + +/** + * Returns a unique name for the given accel. + * @param id the id of the accelerator + * @return the unique name of the accelerator + */ +KCONFIGGUI_EXPORT QString name(StandardShortcut id); + +/** + * Returns a localized label for user-visible display. + * @param id the id of the accelerator + * @return a localized label for the accelerator + */ +KCONFIGGUI_EXPORT QString label(StandardShortcut id); + +/** + * Returns an extended WhatsThis description for the given accelerator. + * @param id the id of the accelerator + * @return a localized description of the accelerator + */ +KCONFIGGUI_EXPORT QString whatsThis(StandardShortcut id); + +/** + * Return the StandardShortcut id of the standard accel action which + * uses this key sequence, or AccelNone if none of them do. + * This is used by class KKeyChooser. + * @param keySeq the key sequence to search + * @return the id of the standard accelerator, or AccelNone if there + *          is none + */ +KCONFIGGUI_EXPORT StandardShortcut find(const QKeySequence &keySeq); + +/** + * Return the StandardShortcut id of the standard accel action which + * has \a keyName as its name, or AccelNone if none of them do. + * This is used by class KKeyChooser. + * @param keyName the key sequence to search + * @return the id of the standard accelerator, or AccelNone if there + *          is none + */ +KCONFIGGUI_EXPORT StandardShortcut find(const char *keyName); + +/** + * Returns the hardcoded default shortcut for @p id. + * This does not take into account the user's configuration. + * @param id the id of the accelerator + * @return the default shortcut of the accelerator + */ +KCONFIGGUI_EXPORT QList<QKeySequence> hardcodedDefaultShortcut(StandardShortcut id); + +/** + * Saves the new shortcut \a cut for standard accel \a id. + */ +KCONFIGGUI_EXPORT void saveShortcut(StandardShortcut id, const QList<QKeySequence> &newShortcut); + +/** + * Open file. Default: Ctrl-o + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &open(); + +/** + * Create a new document (or whatever). Default: Ctrl-n + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &openNew(); + +/** + * Close current document. Default: Ctrl-w + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &close(); + +/** + * Save current document. Default: Ctrl-s + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &save(); + +/** + * Print current document. Default: Ctrl-p + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &print(); + +/** + * Quit the program. Default: Ctrl-q + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &quit(); + +/** + * Undo last operation. Default: Ctrl-z + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &undo(); + +/** + * Redo. Default: Shift-Ctrl-z + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &redo(); + +/** + * Cut selected area and store it in the clipboard. Default: Ctrl-x + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &cut(); + +/** + * Copy selected area into the clipboard. Default: Ctrl-c + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> ©(); + +/** + * Paste contents of clipboard at mouse/cursor position. Default: Ctrl-v + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &paste(); + +/** + * Paste the selection at mouse/cursor position. Default: Ctrl-Shift-Insert + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &pasteSelection(); + +/** + * Select all. Default: Ctrl-A + * @return the shortcut of the standard accelerator + **/ +KCONFIGGUI_EXPORT const QList<QKeySequence> &selectAll(); + +/** + * Delete a word back from mouse/cursor position. Default: Ctrl-Backspace + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &deleteWordBack(); + +/** + * Delete a word forward from mouse/cursor position. Default: Ctrl-Delete + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &deleteWordForward(); + +/** + * Find, search. Default: Ctrl-f + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &find(); + +/** + * Find/search next. Default: F3 + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &findNext(); + +/** + * Find/search previous. Default: Shift-F3 + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &findPrev(); + +/** + * Find and replace matches. Default: Ctrl-r + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &replace(); + +/** + * Zoom in. Default: Ctrl-Plus + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &zoomIn(); + +/** + * Zoom out. Default: Ctrl-Minus + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &zoomOut(); + +/** + * Toggle insert/overwrite (with visual feedback, e.g. in the statusbar). Default: Insert + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &insert(); + +/** + * Goto home page. Default: Alt-Home + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &home(); + +/** + * Goto beginning of the document. Default: Ctrl-Home + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &begin(); + +/** + * Goto end of the document. Default: Ctrl-End + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &end(); + +/** + * Goto beginning of current line. Default: Home + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &beginningOfLine(); + +/** + * Goto end of current line. Default: End + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &endOfLine(); + +/** + * Scroll up one page. Default: Prior + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &prior(); + +/** + * Scroll down one page. Default: Next + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &next(); + +/** + * Go to line. Default: Ctrl+G + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &gotoLine(); + +/** + * Add current page to bookmarks. Default: Ctrl+B + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &addBookmark(); + +/** + * Next Tab. Default: Ctrl-< + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &tabNext(); + +/** + * Previous Tab. Default: Ctrl-> + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &tabPrev(); + +/** + * Full Screen Mode. Default: Ctrl+Shift+F + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &fullScreen(); + +/** + * Help the user in the current situation. Default: F1 + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &help(); + +/** + * Complete text in input widgets. Default Ctrl+E + * @return the shortcut of the standard accelerator + **/ +KCONFIGGUI_EXPORT const QList<QKeySequence> &completion(); + +/** + * Iterate through a list when completion returns + * multiple items. Default: Ctrl+Up + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &prevCompletion(); + +/** + * Iterate through a list when completion returns + * multiple items. Default: Ctrl+Down + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &nextCompletion(); + +/** + * Find a string within another string or list of strings. + * Default: Ctrl-T + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &substringCompletion(); + +/** + * Help users iterate through a list of entries. Default: Up + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &rotateUp(); + +/** + * Help users iterate through a list of entries. Default: Down + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &rotateDown(); + +/** + * What's This button. Default: Shift+F1 + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &whatsThis(); + +/** + * Reload. Default: F5 + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &reload(); + +/** + * Up. Default: Alt+Up + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &up(); + +/** + * Back. Default: Alt+Left + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &back(); + +/** + * Forward. Default: ALT+Right + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &forward(); + +/** + * BackwardWord. Default: Ctrl+Left + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &backwardWord(); + +/** + * ForwardWord. Default: Ctrl+Right + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &forwardWord(); + +/** + * Show Menu Bar.  Default: Ctrl-M + * @return the shortcut of the standard accelerator + */ +KCONFIGGUI_EXPORT const QList<QKeySequence> &showMenubar();  } diff --git a/src/gui/kwindowconfig.cpp b/src/gui/kwindowconfig.cpp index 6b7ae5f0..c3cefb74 100644 --- a/src/gui/kwindowconfig.cpp +++ b/src/gui/kwindowconfig.cpp @@ -24,13 +24,14 @@  #include <QScreen>  #include <QWindow> -static const char* s_initialSizePropertyName = "_kconfig_initial_size"; -static const char* s_initialScreenSizePropertyName = "_kconfig_initial_screen_size"; +static const char *s_initialSizePropertyName = "_kconfig_initial_size"; +static const char *s_initialScreenSizePropertyName = "_kconfig_initial_screen_size";  void KWindowConfig::saveWindowSize(const QWindow *window, KConfigGroup &config, KConfigGroup::WriteConfigFlags options)  { -    if (!window) +    if (!window) {          return; +    }      const QRect desk = window->screen()->geometry();      const QSize sizeToSave = window->size(); @@ -41,25 +42,27 @@ void KWindowConfig::saveWindowSize(const QWindow *window, KConfigGroup &config,      if (!isMaximized) {          const QSize defaultSize(window->property(s_initialSizePropertyName).toSize());          const QSize defaultScreenSize(window->property(s_initialScreenSizePropertyName).toSize()); -	const bool sizeValid = defaultSize.isValid() && defaultScreenSize.isValid(); -	if (!sizeValid || (sizeValid && (defaultSize != sizeToSave || defaultScreenSize != desk.size()))) { -	    const QString wString(QString::fromLatin1("Width %1").arg(desk.width())); -	    const QString hString(QString::fromLatin1("Height %1").arg(desk.height())); -	    config.writeEntry(wString, sizeToSave.width(), options); -	    config.writeEntry(hString, sizeToSave.height(), options); +        const bool sizeValid = defaultSize.isValid() && defaultScreenSize.isValid(); +        if (!sizeValid || (sizeValid && (defaultSize != sizeToSave || defaultScreenSize != desk.size()))) { +            const QString wString(QString::fromLatin1("Width %1").arg(desk.width())); +            const QString hString(QString::fromLatin1("Height %1").arg(desk.height())); +            config.writeEntry(wString, sizeToSave.width(), options); +            config.writeEntry(hString, sizeToSave.height(), options);          }      } -    if ( (isMaximized == false) && !config.hasDefault(screenMaximizedString) ) +    if ((isMaximized == false) && !config.hasDefault(screenMaximizedString)) {          config.revertToDefault(screenMaximizedString); -    else +    } else {          config.writeEntry(screenMaximizedString, isMaximized, options); +    }  } -void KWindowConfig::restoreWindowSize(QWindow* window, const KConfigGroup& config) +void KWindowConfig::restoreWindowSize(QWindow *window, const KConfigGroup &config)  { -    if (!window) +    if (!window) {          return; +    }      const QRect desk = window->screen()->geometry(); diff --git a/src/gui/kwindowconfig.h b/src/gui/kwindowconfig.h index 2c70571d..e21d3d61 100644 --- a/src/gui/kwindowconfig.h +++ b/src/gui/kwindowconfig.h @@ -29,30 +29,30 @@ class QWindow;  namespace KWindowConfig  { -    /** -     * Saves the window's size dependent on the screen dimension either to the -     * global or application config file. -     * -     * @note the group must be set before calling -     * -     * @param window The window to save size. -     * @param config The config group to read from. -     * @param options passed to KConfigGroup::writeEntry() -     * @since 5.0 -     */ -    KCONFIGGUI_EXPORT void saveWindowSize( const QWindow* window, KConfigGroup& config, KConfigGroup::WriteConfigFlags options = KConfigGroup::Normal ); - -    /** -     * Restores the dialog's size from the configuration according to -     * the screen size. -     * -     * @note the group must be set before calling -     * -     * @param dialog The dialog to restore size. -     * @param config The config group to read from. -     * @since 5.0. -     */ -    KCONFIGGUI_EXPORT void restoreWindowSize( QWindow* window,  const KConfigGroup& config ); +/** + * Saves the window's size dependent on the screen dimension either to the + * global or application config file. + * + * @note the group must be set before calling + * + * @param window The window to save size. + * @param config The config group to read from. + * @param options passed to KConfigGroup::writeEntry() + * @since 5.0 + */ +KCONFIGGUI_EXPORT void saveWindowSize(const QWindow *window, KConfigGroup &config, KConfigGroup::WriteConfigFlags options = KConfigGroup::Normal); + +/** + * Restores the dialog's size from the configuration according to + * the screen size. + * + * @note the group must be set before calling + * + * @param dialog The dialog to restore size. + * @param config The config group to read from. + * @since 5.0. + */ +KCONFIGGUI_EXPORT void restoreWindowSize(QWindow *window,  const KConfigGroup &config);  }  #endif // KWINDOWCONFIG_H diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp index 60a61db3..f8ba16d1 100644 --- a/src/kconf_update/kconf_update.cpp +++ b/src/kconf_update/kconf_update.cpp @@ -102,8 +102,8 @@ protected:      int m_lineCount;  }; -KonfUpdate::KonfUpdate(QCommandLineParser * parser) -        : m_textStream(0), m_file(0) +KonfUpdate::KonfUpdate(QCommandLineParser *parser) +    : m_textStream(0), m_file(0)  {      bool updateAll = false;      m_oldConfig1 = 0; @@ -130,8 +130,9 @@ KonfUpdate::KonfUpdate(QCommandLineParser * parser)      } else if (parser->positionalArguments().count()) {          updateFiles += parser->positionalArguments();      } else { -        if (cg.readEntry("autoUpdateDisabled", false)) +        if (cg.readEntry("autoUpdateDisabled", false)) {              return; +        }          updateFiles = findUpdateFiles(true);          updateAll = true;      } @@ -162,7 +163,7 @@ KonfUpdate::~KonfUpdate()      delete m_textStream;  } -QTextStream & operator<<(QTextStream & stream, const QStringList & lst) +QTextStream &operator<<(QTextStream &stream, const QStringList &lst)  {      stream << lst.join(", ");      return stream; @@ -200,9 +201,9 @@ QStringList KonfUpdate::findUpdateFiles(bool dirtyOnly)      QStringList result;      const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "kconf_update", QStandardPaths::LocateDirectory); -    Q_FOREACH(const QString& dir, dirs) { +    Q_FOREACH (const QString &dir, dirs) {          const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.upd")); -        Q_FOREACH(const QString& fileName, fileNames) { +        Q_FOREACH (const QString &fileName, fileNames) {              const QString file = dir + '/' + fileName;              QFileInfo info(file); @@ -365,8 +366,6 @@ bool KonfUpdate::updateFile(const QString &filename)      return true;  } - -  void KonfUpdate::gotId(const QString &_id)  {      if (!m_id.isEmpty() && !m_skip) { @@ -551,7 +550,6 @@ void KonfUpdate::gotRemoveGroup(const QString &_group)      log() << m_currentFilename << ": RemoveGroup removes group " << m_oldFile << ":" << m_oldGroup << endl;  } -  void KonfUpdate::gotKey(const QString &_key)  {      QString oldKey, newKey; @@ -584,8 +582,9 @@ void KonfUpdate::copyOrMoveKey(const QStringList &srcGroupPath, const QString &s      }      KConfigGroup srcCg = KConfigUtils::openGroup(m_oldConfig1, srcGroupPath); -    if (!srcCg.hasKey(srcKey)) +    if (!srcCg.hasKey(srcKey)) {          return; +    }      QString value = srcCg.readEntry(srcKey, QString());      log() << m_currentFilename << ": Updating " << m_newFileName << ":" << dstCg.name() << ":" << dstKey << " to '" << value << "'" << endl;      dstCg.writeEntry(dstKey, value); @@ -596,8 +595,8 @@ void KonfUpdate::copyOrMoveKey(const QStringList &srcGroupPath, const QString &s      // Delete old entry      if (m_oldConfig2 == m_newConfig -        && srcGroupPath == dstGroupPath -        && srcKey == dstKey) { +            && srcGroupPath == dstGroupPath +            && srcKey == dstKey) {          return; // Don't delete!      }      KConfigGroup srcCg2 = KConfigUtils::openGroup(m_oldConfig2, srcGroupPath); @@ -610,12 +609,12 @@ void KonfUpdate::copyOrMoveGroup(const QStringList &srcGroupPath, const QStringL      KConfigGroup cg = KConfigUtils::openGroup(m_oldConfig1, srcGroupPath);      // Keys -    Q_FOREACH(const QString &key, cg.keyList()) { +    Q_FOREACH (const QString &key, cg.keyList()) {          copyOrMoveKey(srcGroupPath, key, dstGroupPath, key);      }      // Subgroups -    Q_FOREACH(const QString &group, cg.groupList()) { +    Q_FOREACH (const QString &group, cg.groupList()) {          QStringList groupPath = QStringList() << group;          copyOrMoveGroup(srcGroupPath + groupPath, dstGroupPath + groupPath);      } @@ -711,7 +710,7 @@ void KonfUpdate::copyGroup(const KConfigGroup &cg1, KConfigGroup &cg2)      }      // Copy subgroups -    Q_FOREACH(const QString &group, cg1.groupList()) { +    Q_FOREACH (const QString &group, cg1.groupList()) {          copyGroup(&cg1, group, &cg2, group);      }  } @@ -732,23 +731,21 @@ void KonfUpdate::gotScript(const QString &_script)          interpreter = _script.mid(i + 1).trimmed();      } -      if (script.isEmpty()) {          logFileError() << "Script fails to specify filename";          m_skip = true;          return;      } - -      QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kconf_update/" + script);      if (path.isEmpty()) {          if (interpreter.isEmpty()) {              // KDE4: this was looking into locate("lib", "kconf_update_bin/"). But QStandardPaths doesn't know the lib dirs.              // Let's look in the install prefix and in PATH.              path = CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/kconf_update_bin/" + script; -            if (QFile::exists(path)) +            if (QFile::exists(path)) {                  path = QStandardPaths::findExecutable(script); +            }          }          if (path.isEmpty()) { @@ -808,23 +805,20 @@ void KonfUpdate::gotScript(const QString &_script)  #ifndef _WIN32_WCE          result = system(QFile::encodeName(QString("%1 < %2 > %3 2> %4").arg(cmd, scriptIn.fileName(), scriptOut.fileName(), scriptErr.fileName())).constData());  #else -        QString path_ = QDir::convertSeparators ( QFileInfo ( cmd ).absoluteFilePath() ); -        QString file_ = QFileInfo ( cmd ).fileName(); +        QString path_ = QDir::convertSeparators(QFileInfo(cmd).absoluteFilePath()); +        QString file_ = QFileInfo(cmd).fileName();          SHELLEXECUTEINFO execInfo; -        memset ( &execInfo,0,sizeof ( execInfo ) ); -        execInfo.cbSize = sizeof ( execInfo ); +        memset(&execInfo, 0, sizeof(execInfo)); +        execInfo.cbSize = sizeof(execInfo);          execInfo.fMask =  SEE_MASK_FLAG_NO_UI;          execInfo.lpVerb = L"open";          execInfo.lpFile = (LPCWSTR) path_.utf16();          execInfo.lpDirectory = (LPCWSTR) file_.utf16(); -        execInfo.lpParameters = (LPCWSTR) QString(" < %1 > %2 2> %3").arg( scriptIn.fileName(), scriptOut.fileName(), scriptErr.fileName()).utf16(); -        result = ShellExecuteEx ( &execInfo ); -        if (result != 0) -        { +        execInfo.lpParameters = (LPCWSTR) QString(" < %1 > %2 2> %3").arg(scriptIn.fileName(), scriptOut.fileName(), scriptErr.fileName()).utf16(); +        result = ShellExecuteEx(&execInfo); +        if (result != 0) {              result = 0; -        } -        else -        { +        } else {              result = -1;          }  #endif @@ -833,23 +827,20 @@ void KonfUpdate::gotScript(const QString &_script)  #ifndef _WIN32_WCE          result = system(QFile::encodeName(QString("%1 2> %2").arg(cmd, scriptErr.fileName())).constData());  #else -        QString path_ = QDir::convertSeparators ( QFileInfo ( cmd ).absoluteFilePath() ); -        QString file_ = QFileInfo ( cmd ).fileName(); +        QString path_ = QDir::convertSeparators(QFileInfo(cmd).absoluteFilePath()); +        QString file_ = QFileInfo(cmd).fileName();          SHELLEXECUTEINFO execInfo; -        memset ( &execInfo,0,sizeof ( execInfo ) ); -        execInfo.cbSize = sizeof ( execInfo ); +        memset(&execInfo, 0, sizeof(execInfo)); +        execInfo.cbSize = sizeof(execInfo);          execInfo.fMask =  SEE_MASK_FLAG_NO_UI;          execInfo.lpVerb = L"open";          execInfo.lpFile = (LPCWSTR) path_.utf16();          execInfo.lpDirectory = (LPCWSTR) file_.utf16(); -        execInfo.lpParameters = (LPCWSTR) QString(" 2> %1").arg( scriptErr.fileName()).utf16(); -        result = ShellExecuteEx ( &execInfo ); -        if (result != 0) -        { +        execInfo.lpParameters = (LPCWSTR) QString(" 2> %1").arg(scriptErr.fileName()).utf16(); +        result = ShellExecuteEx(&execInfo); +        if (result != 0) {              result = 0; -        } -        else -        { +        } else {              result = -1;          }  #endif @@ -932,7 +923,7 @@ void KonfUpdate::gotScript(const QString &_script)          KConfigGroup dstCg = KConfigUtils::openGroup(m_newConfig, m_newGroup);          copyGroup(srcCg, dstCg);      } -    Q_FOREACH(const QString &group, scriptOutConfig.groupList()) { +    Q_FOREACH (const QString &group, scriptOutConfig.groupList()) {          copyGroup(&scriptOutConfig, group, m_newConfig, group);      }  } @@ -944,7 +935,6 @@ void KonfUpdate::resetOptions()      m_arguments.clear();  } -  int main(int argc, char **argv)  {      QCoreApplication app(argc, argv); diff --git a/src/kconfig_compiler/kconfig_compiler.cpp b/src/kconfig_compiler/kconfig_compiler.cpp index ae192eec..bdbd03c3 100644 --- a/src/kconfig_compiler/kconfig_compiler.cpp +++ b/src/kconfig_compiler/kconfig_compiler.cpp @@ -1,4 +1,3 @@ -// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-  /*      This file is part of KDE. @@ -42,8 +41,8 @@  namespace  { -  QTextStream cout(stdout); -  QTextStream cerr(stderr); +QTextStream cout(stdout); +QTextStream cerr(stderr);  }  static void parseArgs(const QStringList &args, QString &directory, QString &file1, QString &file2) @@ -109,236 +108,379 @@ QString Const;  class CfgConfig  {  public: -  CfgConfig( const QString &codegenFilename ) -  { -    // Configure the compiler with some settings -    QSettings codegenConfig(codegenFilename, QSettings::IniFormat); - -    nameSpace = codegenConfig.value("NameSpace").toString(); -    className = codegenConfig.value("ClassName").toString(); -    if ( className.isEmpty() ) { -      cerr << "Class name missing" << endl; -      exit(1); -    } -    inherits = codegenConfig.value("Inherits").toString(); -    if ( inherits.isEmpty() ) inherits = "KConfigSkeleton"; -    visibility = codegenConfig.value("Visibility").toString(); -    if ( !visibility.isEmpty() ) visibility += ' '; -    forceStringFilename = codegenConfig.value("ForceStringFilename", false).toBool(); -    singleton = codegenConfig.value("Singleton", false).toBool(); -    staticAccessors = singleton; -    customAddons = codegenConfig.value("CustomAdditions", false).toBool(); -    memberVariables = codegenConfig.value("MemberVariables").toString(); -    dpointer = (memberVariables == "dpointer"); -    headerIncludes = codegenConfig.value("IncludeFiles", QStringList()).toStringList(); -    sourceIncludes = codegenConfig.value("SourceIncludeFiles", QStringList()).toStringList(); -    mutators = codegenConfig.value("Mutators", QStringList()).toStringList(); -    allMutators = ((mutators.count() == 1) && (mutators.at(0).toLower() == "true")); -    itemAccessors = codegenConfig.value("ItemAccessors", false).toBool(); -    setUserTexts = codegenConfig.value("SetUserTexts", false).toBool(); -    defaultGetters = codegenConfig.value("DefaultValueGetters", QStringList()).toStringList(); -    allDefaultGetters = (defaultGetters.count() == 1) && (defaultGetters.at(0).toLower() == "true"); -    globalEnums = codegenConfig.value("GlobalEnums", false).toBool(); -    useEnumTypes = codegenConfig.value("UseEnumTypes", false).toBool(); - -    const QString trString = codegenConfig.value("TranslationSystem").toString().toLower(); -    if ( trString == "kde" ) { -        translationSystem = KdeTranslation; -    } else { -        if ( !trString.isEmpty() && trString != "qt" ) { -            cerr << "Unknown translation system, falling back to Qt tr()" << endl; +    CfgConfig(const QString &codegenFilename) +    { +        // Configure the compiler with some settings +        QSettings codegenConfig(codegenFilename, QSettings::IniFormat); + +        nameSpace = codegenConfig.value("NameSpace").toString(); +        className = codegenConfig.value("ClassName").toString(); +        if (className.isEmpty()) { +            cerr << "Class name missing" << endl; +            exit(1); +        } +        inherits = codegenConfig.value("Inherits").toString(); +        if (inherits.isEmpty()) { +            inherits = "KConfigSkeleton"; +        } +        visibility = codegenConfig.value("Visibility").toString(); +        if (!visibility.isEmpty()) { +            visibility += ' '; +        } +        forceStringFilename = codegenConfig.value("ForceStringFilename", false).toBool(); +        singleton = codegenConfig.value("Singleton", false).toBool(); +        staticAccessors = singleton; +        customAddons = codegenConfig.value("CustomAdditions", false).toBool(); +        memberVariables = codegenConfig.value("MemberVariables").toString(); +        dpointer = (memberVariables == "dpointer"); +        headerIncludes = codegenConfig.value("IncludeFiles", QStringList()).toStringList(); +        sourceIncludes = codegenConfig.value("SourceIncludeFiles", QStringList()).toStringList(); +        mutators = codegenConfig.value("Mutators", QStringList()).toStringList(); +        allMutators = ((mutators.count() == 1) && (mutators.at(0).toLower() == "true")); +        itemAccessors = codegenConfig.value("ItemAccessors", false).toBool(); +        setUserTexts = codegenConfig.value("SetUserTexts", false).toBool(); +        defaultGetters = codegenConfig.value("DefaultValueGetters", QStringList()).toStringList(); +        allDefaultGetters = (defaultGetters.count() == 1) && (defaultGetters.at(0).toLower() == "true"); +        globalEnums = codegenConfig.value("GlobalEnums", false).toBool(); +        useEnumTypes = codegenConfig.value("UseEnumTypes", false).toBool(); + +        const QString trString = codegenConfig.value("TranslationSystem").toString().toLower(); +        if (trString == "kde") { +            translationSystem = KdeTranslation; +        } else { +            if (!trString.isEmpty() && trString != "qt") { +                cerr << "Unknown translation system, falling back to Qt tr()" << endl; +            } +            translationSystem = QtTranslation;          } -        translationSystem = QtTranslation;      } -  }  public: -  enum TranslationSystem { -      QtTranslation, -      KdeTranslation -  }; - -  // These are read from the .kcfgc configuration file -  QString nameSpace;     // The namespace for the class to be generated -  QString className;     // The class name to be generated -  QString inherits;      // The class the generated class inherits (if empty, from KConfigSkeleton) -  QString visibility; -  bool forceStringFilename; -  bool singleton;        // The class will be a singleton -  bool staticAccessors;  // provide or not static accessors -  bool customAddons; -  QString memberVariables; -  QStringList headerIncludes; -  QStringList sourceIncludes; -  QStringList mutators; -  QStringList defaultGetters; -  bool allMutators; -  bool setUserTexts; -  bool allDefaultGetters; -  bool dpointer; -  bool globalEnums; -  bool useEnumTypes; -  bool itemAccessors; -  TranslationSystem translationSystem; -}; +    enum TranslationSystem { +        QtTranslation, +        KdeTranslation +    }; +    // These are read from the .kcfgc configuration file +    QString nameSpace;     // The namespace for the class to be generated +    QString className;     // The class name to be generated +    QString inherits;      // The class the generated class inherits (if empty, from KConfigSkeleton) +    QString visibility; +    bool forceStringFilename; +    bool singleton;        // The class will be a singleton +    bool staticAccessors;  // provide or not static accessors +    bool customAddons; +    QString memberVariables; +    QStringList headerIncludes; +    QStringList sourceIncludes; +    QStringList mutators; +    QStringList defaultGetters; +    bool allMutators; +    bool setUserTexts; +    bool allDefaultGetters; +    bool dpointer; +    bool globalEnums; +    bool useEnumTypes; +    bool itemAccessors; +    TranslationSystem translationSystem; +}; -struct SignalArguments -{ -      QString type; -      QString variableName; +struct SignalArguments { +    QString type; +    QString variableName;  }; -class Signal { +class Signal +{  public: -  QString name; -  QString label; -  QList<SignalArguments> arguments; +    QString name; +    QString label; +    QList<SignalArguments> arguments;  }; - - -  class CfgEntry  { -  public: -    struct Choice -    { -      QString name; -      QString context; -      QString label; -      QString toolTip; -      QString whatsThis; +public: +    struct Choice { +        QString name; +        QString context; +        QString label; +        QString toolTip; +        QString whatsThis;      };      class Choices      { -      public: +    public:          Choices() {} -        Choices( const QList<Choice> &d, const QString &n, const QString &p ) -             : prefix(p), choices(d), mName(n) +        Choices(const QList<Choice> &d, const QString &n, const QString &p) +            : prefix(p), choices(d), mName(n)          { -          int i = n.indexOf(QLatin1String("::")); -          if (i >= 0) -            mExternalQual = n.left(i + 2); +            int i = n.indexOf(QLatin1String("::")); +            if (i >= 0) { +                mExternalQual = n.left(i + 2); +            }          }          QString prefix;          QList<Choice> choices; -        const QString& name() const  { return mName; } -        const QString& externalQualifier() const  { return mExternalQual; } -        bool external() const  { return !mExternalQual.isEmpty(); } -      private: +        const QString &name() const +        { +            return mName; +        } +        const QString &externalQualifier() const +        { +            return mExternalQual; +        } +        bool external() const +        { +            return !mExternalQual.isEmpty(); +        } +    private:          QString mName;          QString mExternalQual;      }; -    CfgEntry( const QString &group, const QString &type, const QString &key, -              const QString &name, const QString &labelContext, const QString &label, -              const QString &toolTipContext, const QString &toolTip, const QString &whatsThisContext, const QString &whatsThis, const QString &code, -              const QString &defaultValue, const Choices &choices, const QList<Signal> signalList, -              bool hidden ) -      : mGroup( group ), mType( type ), mKey( key ), mName( name ), -        mLabelContext( labelContext ), mLabel( label ), mToolTipContext( toolTipContext ), mToolTip( toolTip ), -        mWhatsThisContext( whatsThisContext ), mWhatsThis( whatsThis ), -        mCode( code ), mDefaultValue( defaultValue ), mChoices( choices ), -        mSignalList(signalList), mHidden( hidden ) +    CfgEntry(const QString &group, const QString &type, const QString &key, +             const QString &name, const QString &labelContext, const QString &label, +             const QString &toolTipContext, const QString &toolTip, const QString &whatsThisContext, const QString &whatsThis, const QString &code, +             const QString &defaultValue, const Choices &choices, const QList<Signal> signalList, +             bool hidden) +        : mGroup(group), mType(type), mKey(key), mName(name), +          mLabelContext(labelContext), mLabel(label), mToolTipContext(toolTipContext), mToolTip(toolTip), +          mWhatsThisContext(whatsThisContext), mWhatsThis(whatsThis), +          mCode(code), mDefaultValue(defaultValue), mChoices(choices), +          mSignalList(signalList), mHidden(hidden)      {      } -    void setGroup( const QString &group ) { mGroup = group; } -    QString group() const { return mGroup; } +    void setGroup(const QString &group) +    { +        mGroup = group; +    } +    QString group() const +    { +        return mGroup; +    } -    void setType( const QString &type ) { mType = type; } -    QString type() const { return mType; } +    void setType(const QString &type) +    { +        mType = type; +    } +    QString type() const +    { +        return mType; +    } -    void setKey( const QString &key ) { mKey = key; } -    QString key() const { return mKey; } +    void setKey(const QString &key) +    { +        mKey = key; +    } +    QString key() const +    { +        return mKey; +    } -    void setName( const QString &name ) { mName = name; } -    QString name() const { return mName; } +    void setName(const QString &name) +    { +        mName = name; +    } +    QString name() const +    { +        return mName; +    } -    void setLabelContext( const QString &labelContext ) { mLabelContext = labelContext; } -    QString labelContext() const { return mLabelContext; } +    void setLabelContext(const QString &labelContext) +    { +        mLabelContext = labelContext; +    } +    QString labelContext() const +    { +        return mLabelContext; +    } -    void setLabel( const QString &label ) { mLabel = label; } -    QString label() const { return mLabel; } +    void setLabel(const QString &label) +    { +        mLabel = label; +    } +    QString label() const +    { +        return mLabel; +    } -    void setToolTipContext( const QString &toolTipContext ) { mToolTipContext = toolTipContext; } -    QString toolTipContext() const { return mToolTipContext; } +    void setToolTipContext(const QString &toolTipContext) +    { +        mToolTipContext = toolTipContext; +    } +    QString toolTipContext() const +    { +        return mToolTipContext; +    } -    void setToolTip( const QString &toolTip ) { mToolTip = toolTip; } -    QString toolTip() const { return mToolTip; } +    void setToolTip(const QString &toolTip) +    { +        mToolTip = toolTip; +    } +    QString toolTip() const +    { +        return mToolTip; +    } -    void setWhatsThisContext( const QString &whatsThisContext ) { mWhatsThisContext = whatsThisContext; } -    QString whatsThisContext() const { return mWhatsThisContext; } +    void setWhatsThisContext(const QString &whatsThisContext) +    { +        mWhatsThisContext = whatsThisContext; +    } +    QString whatsThisContext() const +    { +        return mWhatsThisContext; +    } -    void setWhatsThis( const QString &whatsThis ) { mWhatsThis = whatsThis; } -    QString whatsThis() const { return mWhatsThis; } +    void setWhatsThis(const QString &whatsThis) +    { +        mWhatsThis = whatsThis; +    } +    QString whatsThis() const +    { +        return mWhatsThis; +    } -    void setDefaultValue( const QString &d ) { mDefaultValue = d; } -    QString defaultValue() const { return mDefaultValue; } +    void setDefaultValue(const QString &d) +    { +        mDefaultValue = d; +    } +    QString defaultValue() const +    { +        return mDefaultValue; +    } -    void setCode( const QString &d ) { mCode = d; } -    QString code() const { return mCode; } +    void setCode(const QString &d) +    { +        mCode = d; +    } +    QString code() const +    { +        return mCode; +    } -    void setMinValue( const QString &d ) { mMin = d; } -    QString minValue() const { return mMin; } +    void setMinValue(const QString &d) +    { +        mMin = d; +    } +    QString minValue() const +    { +        return mMin; +    } -    void setMaxValue( const QString &d ) { mMax = d; } -    QString maxValue() const { return mMax; } +    void setMaxValue(const QString &d) +    { +        mMax = d; +    } +    QString maxValue() const +    { +        return mMax; +    } -    void setParam( const QString &d ) { mParam = d; } -    QString param() const { return mParam; } +    void setParam(const QString &d) +    { +        mParam = d; +    } +    QString param() const +    { +        return mParam; +    } -    void setParamName( const QString &d ) { mParamName = d; } -    QString paramName() const { return mParamName; } +    void setParamName(const QString &d) +    { +        mParamName = d; +    } +    QString paramName() const +    { +        return mParamName; +    } -    void setParamType( const QString &d ) { mParamType = d; } -    QString paramType() const { return mParamType; } +    void setParamType(const QString &d) +    { +        mParamType = d; +    } +    QString paramType() const +    { +        return mParamType; +    } -    void setChoices( const QList<Choice> &d, const QString &n, const QString &p ) { mChoices = Choices( d, n, p ); } -    Choices choices() const { return mChoices; } +    void setChoices(const QList<Choice> &d, const QString &n, const QString &p) +    { +        mChoices = Choices(d, n, p); +    } +    Choices choices() const +    { +        return mChoices; +    } -    void setParamValues( const QStringList &d ) { mParamValues = d; } -    QStringList paramValues() const { return mParamValues; } +    void setParamValues(const QStringList &d) +    { +        mParamValues = d; +    } +    QStringList paramValues() const +    { +        return mParamValues; +    } -    void setParamDefaultValues( const QStringList &d ) { mParamDefaultValues = d; } -    QString paramDefaultValue(int i) const { return mParamDefaultValues[i]; } +    void setParamDefaultValues(const QStringList &d) +    { +        mParamDefaultValues = d; +    } +    QString paramDefaultValue(int i) const +    { +        return mParamDefaultValues[i]; +    } -    void setParamMax( int d ) { mParamMax = d; } -    int paramMax() const { return mParamMax; } +    void setParamMax(int d) +    { +        mParamMax = d; +    } +    int paramMax() const +    { +        return mParamMax; +    } -    void setSignalList( const QList<Signal> &value ) { mSignalList = value; } -    QList<Signal> signalList() const { return mSignalList; } +    void setSignalList(const QList<Signal> &value) +    { +        mSignalList = value; +    } +    QList<Signal> signalList() const +    { +        return mSignalList; +    } -    bool hidden() const { return mHidden; } +    bool hidden() const +    { +        return mHidden; +    }      void dump() const      { -      cerr << "<entry>" << endl; -      cerr << "  group: " << mGroup << endl; -      cerr << "  type: " << mType << endl; -      cerr << "  key: " << mKey << endl; -      cerr << "  name: " << mName << endl; -      cerr << "  label context: " << mLabelContext << endl; -      cerr << "  label: " << mLabel << endl; +        cerr << "<entry>" << endl; +        cerr << "  group: " << mGroup << endl; +        cerr << "  type: " << mType << endl; +        cerr << "  key: " << mKey << endl; +        cerr << "  name: " << mName << endl; +        cerr << "  label context: " << mLabelContext << endl; +        cerr << "  label: " << mLabel << endl;  // whatsthis -      cerr << "  code: " << mCode << endl; +        cerr << "  code: " << mCode << endl;  //      cerr << "  values: " << mValues.join(":") << endl; -      if (!param().isEmpty()) -      { -        cerr << "  param name: "<< mParamName << endl; -        cerr << "  param type: "<< mParamType << endl; -        cerr << "  paramvalues: " << mParamValues.join(QChar::fromLatin1(':')) << endl; -      } -      cerr << "  default: " << mDefaultValue << endl; -      cerr << "  hidden: " << mHidden << endl; -      cerr << "  min: " << mMin << endl; -      cerr << "  max: " << mMax << endl; -      cerr << "</entry>" << endl; +        if (!param().isEmpty()) { +            cerr << "  param name: " << mParamName << endl; +            cerr << "  param type: " << mParamType << endl; +            cerr << "  paramvalues: " << mParamValues.join(QChar::fromLatin1(':')) << endl; +        } +        cerr << "  default: " << mDefaultValue << endl; +        cerr << "  hidden: " << mHidden << endl; +        cerr << "  min: " << mMin << endl; +        cerr << "  max: " << mMax << endl; +        cerr << "</entry>" << endl;      } -  private: +private:      QString mGroup;      QString mType;      QString mKey; @@ -364,10 +506,11 @@ class CfgEntry      QString mMax;  }; -class Param { +class Param +{  public: -  QString name; -  QString type; +    QString name; +    QString type;  };  // returns the name of an member variable @@ -375,558 +518,562 @@ public:  // like using d-> in case of dpointer  static QString varName(const QString &n, const CfgConfig &cfg)  { -  QString result; -  if ( !cfg.dpointer ) { -    result = QChar::fromLatin1('m') + n; -    result[1] = result[1].toUpper(); -  } -  else { -    result = n; -    result[0] = result[0].toLower(); -  } -  return result; +    QString result; +    if (!cfg.dpointer) { +        result = QChar::fromLatin1('m') + n; +        result[1] = result[1].toUpper(); +    } else { +        result = n; +        result[0] = result[0].toLower(); +    } +    return result;  }  static QString varPath(const QString &n, const CfgConfig &cfg)  { -  QString result; -  if ( cfg.dpointer ) { -    result = "d->"+varName(n, cfg); -  } -  else { -    result = varName(n, cfg); -  } -  return result; +    QString result; +    if (cfg.dpointer) { +        result = "d->" + varName(n, cfg); +    } else { +        result = varName(n, cfg); +    } +    return result;  }  static QString enumName(const QString &n)  { -  QString result = QString::fromLatin1("Enum") + n; -  result[4] = result[4].toUpper(); -  return result; +    QString result = QString::fromLatin1("Enum") + n; +    result[4] = result[4].toUpper(); +    return result;  }  static QString enumName(const QString &n, const CfgEntry::Choices &c)  { -  QString result = c.name(); -  if ( result.isEmpty() ) -  { -    result = QString::fromLatin1("Enum") + n; -    result[4] = result[4].toUpper(); -  } -  return result; +    QString result = c.name(); +    if (result.isEmpty()) { +        result = QString::fromLatin1("Enum") + n; +        result[4] = result[4].toUpper(); +    } +    return result;  }  static QString enumType(const CfgEntry *e, bool globalEnums)  { -  QString result = e->choices().name(); -  if ( result.isEmpty() ) -  { -    result = QString::fromLatin1("Enum") + e->name(); -    if( !globalEnums ) -        result += QString::fromLatin1("::type"); -    result[4] = result[4].toUpper(); -  } -  return result; +    QString result = e->choices().name(); +    if (result.isEmpty()) { +        result = QString::fromLatin1("Enum") + e->name(); +        if (!globalEnums) { +            result += QString::fromLatin1("::type"); +        } +        result[4] = result[4].toUpper(); +    } +    return result;  }  static QString enumTypeQualifier(const QString &n, const CfgEntry::Choices &c)  { -  QString result = c.name(); -  if ( result.isEmpty() ) -  { -    result = QString::fromLatin1("Enum") + n + QString::fromLatin1("::"); -    result[4] = result[4].toUpper(); -  } -  else if ( c.external() ) -    result = c.externalQualifier(); -  else -    result.clear(); -  return result; +    QString result = c.name(); +    if (result.isEmpty()) { +        result = QString::fromLatin1("Enum") + n + QString::fromLatin1("::"); +        result[4] = result[4].toUpper(); +    } else if (c.external()) { +        result = c.externalQualifier(); +    } else { +        result.clear(); +    } +    return result;  }  static QString setFunction(const QString &n, const QString &className = QString())  { -  QString result = QString::fromLatin1("set") + n; -  result[3] = result[3].toUpper(); +    QString result = QString::fromLatin1("set") + n; +    result[3] = result[3].toUpper(); -  if ( !className.isEmpty() ) -    result = className + QString::fromLatin1("::") + result; -  return result; +    if (!className.isEmpty()) { +        result = className + QString::fromLatin1("::") + result; +    } +    return result;  }  static QString getDefaultFunction(const QString &n, const QString &className = QString())  { -  QString result = QString::fromLatin1("default") +  n + QString::fromLatin1("Value"); -  result[7] = result[7].toUpper(); +    QString result = QString::fromLatin1("default") +  n + QString::fromLatin1("Value"); +    result[7] = result[7].toUpper(); -  if ( !className.isEmpty() ) -    result = className + QString::fromLatin1("::") + result; -  return result; +    if (!className.isEmpty()) { +        result = className + QString::fromLatin1("::") + result; +    } +    return result;  }  static QString getFunction(const QString &n, const QString &className = QString())  { -  QString result = n; -  result[0] = result[0].toLower(); +    QString result = n; +    result[0] = result[0].toLower(); -  if ( !className.isEmpty() ) -    result = className + QString::fromLatin1("::") + result; -  return result; +    if (!className.isEmpty()) { +        result = className + QString::fromLatin1("::") + result; +    } +    return result;  } - -static void addQuotes( QString &s ) +static void addQuotes(QString &s)  { -  if ( !s.startsWith( QLatin1Char('"') ) ) -    s.prepend( QLatin1Char('"') ); -  if ( !s.endsWith( QLatin1Char('"') ) ) -    s.append( QLatin1Char('"') ); +    if (!s.startsWith(QLatin1Char('"'))) { +        s.prepend(QLatin1Char('"')); +    } +    if (!s.endsWith(QLatin1Char('"'))) { +        s.append(QLatin1Char('"')); +    }  } -static QString quoteString( const QString &s ) +static QString quoteString(const QString &s)  { -  QString r = s; -  r.replace( QLatin1Char('\\'), QLatin1String("\\\\") ); -  r.replace( QLatin1Char('\"'), QLatin1String("\\\"") ); -  r.remove( QLatin1Char('\r') ); -  r.replace( QLatin1Char('\n'), QLatin1String("\\n\"\n\"") ); -  return QLatin1Char('\"') + r + QLatin1Char('\"'); +    QString r = s; +    r.replace(QLatin1Char('\\'), QLatin1String("\\\\")); +    r.replace(QLatin1Char('\"'), QLatin1String("\\\"")); +    r.remove(QLatin1Char('\r')); +    r.replace(QLatin1Char('\n'), QLatin1String("\\n\"\n\"")); +    return QLatin1Char('\"') + r + QLatin1Char('\"');  } -static QString literalString( const QString &s ) +static QString literalString(const QString &s)  { -  bool isAscii = true; -  for(int i = s.length(); i--;) -     if (s[i].unicode() > 127) isAscii = false; - -  if (isAscii) -     return QString::fromLatin1("QLatin1String( ") + quoteString(s) + QString::fromLatin1(" )"); -  else -     return QString::fromLatin1("QString::fromUtf8( ") + quoteString(s) + QString::fromLatin1(" )"); +    bool isAscii = true; +    for (int i = s.length(); i--;) +        if (s[i].unicode() > 127) { +            isAscii = false; +        } + +    if (isAscii) { +        return QString::fromLatin1("QLatin1String( ") + quoteString(s) + QString::fromLatin1(" )"); +    } else { +        return QString::fromLatin1("QString::fromUtf8( ") + quoteString(s) + QString::fromLatin1(" )"); +    }  }  static QString dumpNode(const QDomNode &node)  { -  QString msg; -  QTextStream s(&msg, QIODevice::WriteOnly ); -  node.save(s, 0); - -  msg = msg.simplified(); -  if (msg.length() > 40) -    return msg.left(37) + QString::fromLatin1("..."); -  return msg; +    QString msg; +    QTextStream s(&msg, QIODevice::WriteOnly); +    node.save(s, 0); + +    msg = msg.simplified(); +    if (msg.length() > 40) { +        return msg.left(37) + QString::fromLatin1("..."); +    } +    return msg;  } -static QString filenameOnly(const QString& path) +static QString filenameOnly(const QString &path)  { -   int i = path.lastIndexOf(QRegExp(QLatin1String("[/\\]"))); -   if (i >= 0) -      return path.mid(i+1); -   return path; +    int i = path.lastIndexOf(QRegExp(QLatin1String("[/\\]"))); +    if (i >= 0) { +        return path.mid(i + 1); +    } +    return path;  }  static QString signalEnumName(const QString &signalName)  { -  QString result; -  result = QString::fromLatin1("signal") + signalName; -  result[6] = result[6].toUpper(); +    QString result; +    result = QString::fromLatin1("signal") + signalName; +    result[6] = result[6].toUpper(); -  return result; +    return result;  } -static void preProcessDefault( QString &defaultValue, const QString &name, -                               const QString &type, -                               const CfgEntry::Choices &choices, -                               QString &code, const CfgConfig &cfg ) +static void preProcessDefault(QString &defaultValue, const QString &name, +                              const QString &type, +                              const CfgEntry::Choices &choices, +                              QString &code, const CfgConfig &cfg)  { -    if ( type == QLatin1String("String") && !defaultValue.isEmpty() ) { -      defaultValue = literalString(defaultValue); - -    } else if ( type == QLatin1String("Path") && !defaultValue.isEmpty() ) { -      defaultValue = literalString( defaultValue ); -    } else if ( type == QLatin1String("Url") && !defaultValue.isEmpty() ) { -      // Use fromUserInput in order to support absolute paths and absolute urls, like KDE4's KUrl(QString) did. -      defaultValue = QString::fromLatin1("QUrl::fromUserInput( ") + literalString(defaultValue) + QLatin1Char(')'); -    } else if ( ( type == QLatin1String("UrlList") || type == QLatin1String("StringList") || type == QLatin1String("PathList")) && !defaultValue.isEmpty() ) { -      QTextStream cpp( &code, QIODevice::WriteOnly | QIODevice::Append ); -      if (!code.isEmpty()) -         cpp << endl; - -      if( type == "UrlList" ) { -        cpp << "  QList<QUrl> default" << name << ";" << endl; -      } else { -        cpp << "  QStringList default" << name << ";" << endl; -      } -      const QStringList defaults = defaultValue.split(QLatin1Char(',')); -      QStringList::ConstIterator it; -      for( it = defaults.constBegin(); it != defaults.constEnd(); ++it ) { -        cpp << "  default" << name << ".append( "; -        if( type == QLatin1String("UrlList") ) { -          cpp << "QUrl::fromUserInput("; -        } -        cpp << "QString::fromUtf8( \"" << *it << "\" ) "; -        if( type == QLatin1String("UrlList") ) { -          cpp << ") "; -        } -        cpp << ");" << endl; -      } -      defaultValue = QString::fromLatin1("default") + name; - -    } else if ( type == QLatin1String("Color") && !defaultValue.isEmpty() ) { -      QRegExp colorRe(QLatin1String("\\d+,\\s*\\d+,\\s*\\d+(,\\s*\\d+)?")); -      if (colorRe.exactMatch(defaultValue)) -      { -        defaultValue = QLatin1String("QColor( ") + defaultValue + QLatin1String(" )"); -      } -      else -      { -        defaultValue = QLatin1String("QColor( \"") + defaultValue + QLatin1String("\" )"); -      } - -    } else if ( type == QLatin1String("Enum") ) { -      QList<CfgEntry::Choice>::ConstIterator it; -      for( it = choices.choices.constBegin(); it != choices.choices.constEnd(); ++it ) { -        if ( (*it).name == defaultValue ) { -          if ( cfg.globalEnums && choices.name().isEmpty() ) -            defaultValue.prepend( choices.prefix ); -          else -            defaultValue.prepend( enumTypeQualifier(name, choices) + choices.prefix ); -          break; -        } -      } - -    } else if ( type == QLatin1String("IntList") ) { -      QTextStream cpp( &code, QIODevice::WriteOnly | QIODevice::Append ); -      if (!code.isEmpty()) -         cpp << endl; - -      cpp << "  QList<int> default" << name << ";" << endl; -      if (!defaultValue.isEmpty()) -      { -        const QStringList defaults = defaultValue.split( QLatin1Char(',') ); +    if (type == QLatin1String("String") && !defaultValue.isEmpty()) { +        defaultValue = literalString(defaultValue); + +    } else if (type == QLatin1String("Path") && !defaultValue.isEmpty()) { +        defaultValue = literalString(defaultValue); +    } else if (type == QLatin1String("Url") && !defaultValue.isEmpty()) { +        // Use fromUserInput in order to support absolute paths and absolute urls, like KDE4's KUrl(QString) did. +        defaultValue = QString::fromLatin1("QUrl::fromUserInput( ") + literalString(defaultValue) + QLatin1Char(')'); +    } else if ((type == QLatin1String("UrlList") || type == QLatin1String("StringList") || type == QLatin1String("PathList")) && !defaultValue.isEmpty()) { +        QTextStream cpp(&code, QIODevice::WriteOnly | QIODevice::Append); +        if (!code.isEmpty()) { +            cpp << endl; +        } + +        if (type == "UrlList") { +            cpp << "  QList<QUrl> default" << name << ";" << endl; +        } else { +            cpp << "  QStringList default" << name << ";" << endl; +        } +        const QStringList defaults = defaultValue.split(QLatin1Char(','));          QStringList::ConstIterator it; -        for( it = defaults.constBegin(); it != defaults.constEnd(); ++it ) { -          cpp << "  default" << name << ".append( " << *it << " );" -              << endl; +        for (it = defaults.constBegin(); it != defaults.constEnd(); ++it) { +            cpp << "  default" << name << ".append( "; +            if (type == QLatin1String("UrlList")) { +                cpp << "QUrl::fromUserInput("; +            } +            cpp << "QString::fromUtf8( \"" << *it << "\" ) "; +            if (type == QLatin1String("UrlList")) { +                cpp << ") "; +            } +            cpp << ");" << endl; +        } +        defaultValue = QString::fromLatin1("default") + name; + +    } else if (type == QLatin1String("Color") && !defaultValue.isEmpty()) { +        QRegExp colorRe(QLatin1String("\\d+,\\s*\\d+,\\s*\\d+(,\\s*\\d+)?")); +        if (colorRe.exactMatch(defaultValue)) { +            defaultValue = QLatin1String("QColor( ") + defaultValue + QLatin1String(" )"); +        } else { +            defaultValue = QLatin1String("QColor( \"") + defaultValue + QLatin1String("\" )"); +        } + +    } else if (type == QLatin1String("Enum")) { +        QList<CfgEntry::Choice>::ConstIterator it; +        for (it = choices.choices.constBegin(); it != choices.choices.constEnd(); ++it) { +            if ((*it).name == defaultValue) { +                if (cfg.globalEnums && choices.name().isEmpty()) { +                    defaultValue.prepend(choices.prefix); +                } else { +                    defaultValue.prepend(enumTypeQualifier(name, choices) + choices.prefix); +                } +                break; +            } +        } + +    } else if (type == QLatin1String("IntList")) { +        QTextStream cpp(&code, QIODevice::WriteOnly | QIODevice::Append); +        if (!code.isEmpty()) { +            cpp << endl; +        } + +        cpp << "  QList<int> default" << name << ";" << endl; +        if (!defaultValue.isEmpty()) { +            const QStringList defaults = defaultValue.split(QLatin1Char(',')); +            QStringList::ConstIterator it; +            for (it = defaults.constBegin(); it != defaults.constEnd(); ++it) { +                cpp << "  default" << name << ".append( " << *it << " );" +                    << endl; +            }          } -      } -      defaultValue = QString::fromLatin1("default") + name; +        defaultValue = QString::fromLatin1("default") + name;      }  } - -CfgEntry *parseEntry( const QString &group, const QDomElement &element, const CfgConfig &cfg ) +CfgEntry *parseEntry(const QString &group, const QDomElement &element, const CfgConfig &cfg)  { -  bool defaultCode = false; -  QString type = element.attribute( "type" ); -  QString name = element.attribute( "name" ); -  QString key = element.attribute( "key" ); -  QString hidden = element.attribute( "hidden" ); -  QString labelContext; -  QString label; -  QString toolTipContext; -  QString toolTip; -  QString whatsThisContext; -  QString whatsThis; -  QString defaultValue; -  QString code; -  QString param; -  QString paramName; -  QString paramType; -  CfgEntry::Choices choices; -  QList<Signal> signalList; -  QStringList paramValues; -  QStringList paramDefaultValues; -  QString minValue; -  QString maxValue; -  int paramMax = 0; - -  for ( QDomElement e = element.firstChildElement(); !e.isNull(); e = e.nextSiblingElement() ) { -    QString tag = e.tagName(); -    if ( tag == "label" ) { -      label = e.text(); -      labelContext = e.attribute( "context" ); -    } -    else if ( tag == "tooltip" ) { -      toolTip = e.text(); -      toolTipContext = e.attribute( "context" ); -    } -    else if ( tag == "whatsthis" ) { -      whatsThis = e.text(); -      whatsThisContext = e.attribute( "context" ); -    } -    else if ( tag == "min" ) minValue = e.text(); -    else if ( tag == "max" ) maxValue = e.text(); -    else if ( tag == "code" ) code = e.text(); -    else if ( tag == "parameter" ) -    { -      param = e.attribute( "name" ); -      paramType = e.attribute( "type" ); -      if ( param.isEmpty() ) { -        cerr << "Parameter must have a name: " << dumpNode(e) << endl; -        return 0; -      } -      if ( paramType.isEmpty() ) { -        cerr << "Parameter must have a type: " << dumpNode(e) << endl; -        return 0; -      } -      if ((paramType == "Int") || (paramType == "UInt")) -      { -         bool ok; -         paramMax = e.attribute("max").toInt(&ok); -         if (!ok) -         { -           cerr << "Integer parameter must have a maximum (e.g. max=\"0\"): " -                       << dumpNode(e) << endl; -           return 0; -         } -      } -      else if (paramType == "Enum") -      { -         for ( QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement() ) { -           if (e2.tagName() == "values") -           { -             for ( QDomElement e3 = e2.firstChildElement(); !e3.isNull(); e3 = e3.nextSiblingElement() ) { -               if (e3.tagName() == "value") -               { -                  paramValues.append( e3.text() ); -               } -             } -             break; -           } -         } -         if (paramValues.isEmpty()) -         { -           cerr << "No values specified for parameter '" << param -                       << "'." << endl; -           return 0; -         } -         paramMax = paramValues.count()-1; -      } -      else -      { -        cerr << "Parameter '" << param << "' has type " << paramType -                    << " but must be of type int, uint or Enum." << endl; -        return 0; -      } -    } -    else if ( tag == "default" ) -    { -      if (e.attribute("param").isEmpty()) -      { -        defaultValue = e.text(); -        if (e.attribute( "code" ) == "true") -          defaultCode = true; -      } -    } -    else if ( tag == "choices" ) { -      QString name = e.attribute( "name" ); -      QString prefix = e.attribute( "prefix" ); -      QList<CfgEntry::Choice> chlist; -      for( QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement() ) { -        if ( e2.tagName() == "choice" ) { -          CfgEntry::Choice choice; -          choice.name = e2.attribute( "name" ); -          if ( choice.name.isEmpty() ) { -            cerr << "Tag <choice> requires attribute 'name'." << endl; -          } -          for( QDomElement e3 = e2.firstChildElement(); !e3.isNull(); e3 = e3.nextSiblingElement() ) { -            if ( e3.tagName() == "label" ) { -              choice.label = e3.text(); -              choice.context = e3.attribute( "context" ); +    bool defaultCode = false; +    QString type = element.attribute("type"); +    QString name = element.attribute("name"); +    QString key = element.attribute("key"); +    QString hidden = element.attribute("hidden"); +    QString labelContext; +    QString label; +    QString toolTipContext; +    QString toolTip; +    QString whatsThisContext; +    QString whatsThis; +    QString defaultValue; +    QString code; +    QString param; +    QString paramName; +    QString paramType; +    CfgEntry::Choices choices; +    QList<Signal> signalList; +    QStringList paramValues; +    QStringList paramDefaultValues; +    QString minValue; +    QString maxValue; +    int paramMax = 0; + +    for (QDomElement e = element.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) { +        QString tag = e.tagName(); +        if (tag == "label") { +            label = e.text(); +            labelContext = e.attribute("context"); +        } else if (tag == "tooltip") { +            toolTip = e.text(); +            toolTipContext = e.attribute("context"); +        } else if (tag == "whatsthis") { +            whatsThis = e.text(); +            whatsThisContext = e.attribute("context"); +        } else if (tag == "min") { +            minValue = e.text(); +        } else if (tag == "max") { +            maxValue = e.text(); +        } else if (tag == "code") { +            code = e.text(); +        } else if (tag == "parameter") { +            param = e.attribute("name"); +            paramType = e.attribute("type"); +            if (param.isEmpty()) { +                cerr << "Parameter must have a name: " << dumpNode(e) << endl; +                return 0;              } -            if ( e3.tagName() == "tooltip" ) { -              choice.toolTip = e3.text(); -              choice.context = e3.attribute( "context" ); +            if (paramType.isEmpty()) { +                cerr << "Parameter must have a type: " << dumpNode(e) << endl; +                return 0;              } -            if ( e3.tagName() == "whatsthis" ) { -              choice.whatsThis = e3.text(); -              choice.context = e3.attribute( "context" ); +            if ((paramType == "Int") || (paramType == "UInt")) { +                bool ok; +                paramMax = e.attribute("max").toInt(&ok); +                if (!ok) { +                    cerr << "Integer parameter must have a maximum (e.g. max=\"0\"): " +                         << dumpNode(e) << endl; +                    return 0; +                } +            } else if (paramType == "Enum") { +                for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) { +                    if (e2.tagName() == "values") { +                        for (QDomElement e3 = e2.firstChildElement(); !e3.isNull(); e3 = e3.nextSiblingElement()) { +                            if (e3.tagName() == "value") { +                                paramValues.append(e3.text()); +                            } +                        } +                        break; +                    } +                } +                if (paramValues.isEmpty()) { +                    cerr << "No values specified for parameter '" << param +                         << "'." << endl; +                    return 0; +                } +                paramMax = paramValues.count() - 1; +            } else { +                cerr << "Parameter '" << param << "' has type " << paramType +                     << " but must be of type int, uint or Enum." << endl; +                return 0;              } -          } -          chlist.append( choice ); -        } -      } -      choices = CfgEntry::Choices( chlist, name, prefix ); -    } -   else if ( tag == "emit" ) { -    QDomNode signalNode; -    Signal signal; -    signal.name = e.attribute( "signal" ); -    signalList.append( signal); -   } -  } - - -  bool nameIsEmpty = name.isEmpty(); -  if ( nameIsEmpty && key.isEmpty() ) { -    cerr << "Entry must have a name or a key: " << dumpNode(element) << endl; -    return 0; -  } - -  if ( key.isEmpty() ) { -    key = name; -  } - -  if ( nameIsEmpty ) { -    name = key; -    name.remove( ' ' ); -  } else if ( name.contains( ' ' ) ) { -    cout<<"Entry '"<<name<<"' contains spaces! <name> elements can not contain spaces!"<<endl; -    name.remove( ' ' ); -  } - -  if (name.contains("$(")) -  { -    if (param.isEmpty()) -    { -      cerr << "Name may not be parameterized: " << name << endl; -      return 0; +        } else if (tag == "default") { +            if (e.attribute("param").isEmpty()) { +                defaultValue = e.text(); +                if (e.attribute("code") == "true") { +                    defaultCode = true; +                } +            } +        } else if (tag == "choices") { +            QString name = e.attribute("name"); +            QString prefix = e.attribute("prefix"); +            QList<CfgEntry::Choice> chlist; +            for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) { +                if (e2.tagName() == "choice") { +                    CfgEntry::Choice choice; +                    choice.name = e2.attribute("name"); +                    if (choice.name.isEmpty()) { +                        cerr << "Tag <choice> requires attribute 'name'." << endl; +                    } +                    for (QDomElement e3 = e2.firstChildElement(); !e3.isNull(); e3 = e3.nextSiblingElement()) { +                        if (e3.tagName() == "label") { +                            choice.label = e3.text(); +                            choice.context = e3.attribute("context"); +                        } +                        if (e3.tagName() == "tooltip") { +                            choice.toolTip = e3.text(); +                            choice.context = e3.attribute("context"); +                        } +                        if (e3.tagName() == "whatsthis") { +                            choice.whatsThis = e3.text(); +                            choice.context = e3.attribute("context"); +                        } +                    } +                    chlist.append(choice); +                } +            } +            choices = CfgEntry::Choices(chlist, name, prefix); +        } else if (tag == "emit") { +            QDomNode signalNode; +            Signal signal; +            signal.name = e.attribute("signal"); +            signalList.append(signal); +        }      } -  } -  else -  { -    if (!param.isEmpty()) -    { -      cerr << "Name must contain '$(" << param << ")': " << name << endl; -      return 0; + +    bool nameIsEmpty = name.isEmpty(); +    if (nameIsEmpty && key.isEmpty()) { +        cerr << "Entry must have a name or a key: " << dumpNode(element) << endl; +        return 0;      } -  } -  if ( label.isEmpty() ) { -    label = key; -  } +    if (key.isEmpty()) { +        key = name; +    } -  if ( type.isEmpty() ) type = "String"; // XXX : implicit type might be bad +    if (nameIsEmpty) { +        name = key; +        name.remove(' '); +    } else if (name.contains(' ')) { +        cout << "Entry '" << name << "' contains spaces! <name> elements can not contain spaces!" << endl; +        name.remove(' '); +    } -  if (!param.isEmpty()) -  { -    // Adjust name -    paramName = name; -    name.remove("$("+param+')'); -    // Lookup defaults for indexed entries -    for(int i = 0; i <= paramMax; i++) -    { -      paramDefaultValues.append(QString()); +    if (name.contains("$(")) { +        if (param.isEmpty()) { +            cerr << "Name may not be parameterized: " << name << endl; +            return 0; +        } +    } else { +        if (!param.isEmpty()) { +            cerr << "Name must contain '$(" << param << ")': " << name << endl; +            return 0; +        }      } -    for ( QDomElement e = element.firstChildElement(); !e.isNull(); e = e.nextSiblingElement() ) { -      QString tag = e.tagName(); -      if ( tag == "default" ) -      { -        QString index = e.attribute("param"); -        if (index.isEmpty()) -           continue; +    if (label.isEmpty()) { +        label = key; +    } -        bool ok; -        int i = index.toInt(&ok); -        if (!ok) -        { -          i = paramValues.indexOf(index); -          if (i == -1) -          { -            cerr << "Index '" << index << "' for default value is unknown." << endl; -            return 0; -          } +    if (type.isEmpty()) { +        type = "String";    // XXX : implicit type might be bad +    } + +    if (!param.isEmpty()) { +        // Adjust name +        paramName = name; +        name.remove("$(" + param + ')'); +        // Lookup defaults for indexed entries +        for (int i = 0; i <= paramMax; i++) { +            paramDefaultValues.append(QString());          } -        if ((i < 0) || (i > paramMax)) -        { -          cerr << "Index '" << i << "' for default value is out of range [0, "<< paramMax<<"]." << endl; -          return 0; -        } - -        QString tmpDefaultValue = e.text(); - -        if (e.attribute( "code" ) != "true") -           preProcessDefault(tmpDefaultValue, name, type, choices, code, cfg); - -        paramDefaultValues[i] = tmpDefaultValue; -      } -    } -  } - -  if (!validNameRegexp->exactMatch(name)) -  { -    if (nameIsEmpty) -      cerr << "The key '" << key << "' can not be used as name for the entry because " -                   "it is not a valid name. You need to specify a valid name for this entry." << endl; -    else -      cerr << "The name '" << name << "' is not a valid name for an entry." << endl; -    return 0; -  } - -  if (allNames.contains(name)) -  { -    if (nameIsEmpty) -      cerr << "The key '" << key << "' can not be used as name for the entry because " -                   "it does not result in a unique name. You need to specify a unique name for this entry." << endl; -    else -      cerr << "The name '" << name << "' is not unique." << endl; -    return 0; -  } -  allNames.append(name); - -  if (!defaultCode) -  { -    preProcessDefault(defaultValue, name, type, choices, code, cfg); -  } - -  CfgEntry *result = new CfgEntry( group, type, key, name, labelContext, label, toolTipContext, toolTip, whatsThisContext, whatsThis, -                                   code, defaultValue, choices, signalList, -                                   hidden == "true" ); -  if (!param.isEmpty()) -  { -    result->setParam(param); -    result->setParamName(paramName); -    result->setParamType(paramType); -    result->setParamValues(paramValues); -    result->setParamDefaultValues(paramDefaultValues); -    result->setParamMax(paramMax); -  } -  result->setMinValue(minValue); -  result->setMaxValue(maxValue); - -  return result; +        for (QDomElement e = element.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) { +            QString tag = e.tagName(); +            if (tag == "default") { +                QString index = e.attribute("param"); +                if (index.isEmpty()) { +                    continue; +                } + +                bool ok; +                int i = index.toInt(&ok); +                if (!ok) { +                    i = paramValues.indexOf(index); +                    if (i == -1) { +                        cerr << "Index '" << index << "' for default value is unknown." << endl; +                        return 0; +                    } +                } + +                if ((i < 0) || (i > paramMax)) { +                    cerr << "Index '" << i << "' for default value is out of range [0, " << paramMax << "]." << endl; +                    return 0; +                } + +                QString tmpDefaultValue = e.text(); + +                if (e.attribute("code") != "true") { +                    preProcessDefault(tmpDefaultValue, name, type, choices, code, cfg); +                } + +                paramDefaultValues[i] = tmpDefaultValue; +            } +        } +    } + +    if (!validNameRegexp->exactMatch(name)) { +        if (nameIsEmpty) +            cerr << "The key '" << key << "' can not be used as name for the entry because " +                 "it is not a valid name. You need to specify a valid name for this entry." << endl; +        else { +            cerr << "The name '" << name << "' is not a valid name for an entry." << endl; +        } +        return 0; +    } + +    if (allNames.contains(name)) { +        if (nameIsEmpty) +            cerr << "The key '" << key << "' can not be used as name for the entry because " +                 "it does not result in a unique name. You need to specify a unique name for this entry." << endl; +        else { +            cerr << "The name '" << name << "' is not unique." << endl; +        } +        return 0; +    } +    allNames.append(name); + +    if (!defaultCode) { +        preProcessDefault(defaultValue, name, type, choices, code, cfg); +    } + +    CfgEntry *result = new CfgEntry(group, type, key, name, labelContext, label, toolTipContext, toolTip, whatsThisContext, whatsThis, +                                    code, defaultValue, choices, signalList, +                                    hidden == "true"); +    if (!param.isEmpty()) { +        result->setParam(param); +        result->setParamName(paramName); +        result->setParamType(paramType); +        result->setParamValues(paramValues); +        result->setParamDefaultValues(paramDefaultValues); +        result->setParamMax(paramMax); +    } +    result->setMinValue(minValue); +    result->setMaxValue(maxValue); + +    return result;  } -static bool isUnsigned(const QString& type) +static bool isUnsigned(const QString &type)  { -    if ( type == "UInt" )        return true; -    if ( type == "ULongLong" )   return true; +    if (type == "UInt") { +        return true; +    } +    if (type == "ULongLong") { +        return true; +    }      return false;  }  /**    Return parameter declaration for given type.  */ -QString param( const QString &t ) +QString param(const QString &t)  {      const QString type = t.toLower(); -    if ( type == "string" )           return "const QString &"; -    else if ( type == "stringlist" )  return "const QStringList &"; -    else if ( type == "font" )        return "const QFont &"; -    else if ( type == "rect" )        return "const QRect &"; -    else if ( type == "size" )        return "const QSize &"; -    else if ( type == "color" )       return "const QColor &"; -    else if ( type == "point" )       return "const QPoint &"; -    else if ( type == "int" )         return "int"; -    else if ( type == "uint" )        return "uint"; -    else if ( type == "bool" )        return "bool"; -    else if ( type == "double" )      return "double"; -    else if ( type == "datetime" )    return "const QDateTime &"; -    else if ( type == "longlong" )    return "qint64"; -    else if ( type == "ulonglong" )   return "quint64"; -    else if ( type == "intlist" )     return "const QList<int> &"; -    else if ( type == "enum" )        return "int"; -    else if ( type == "path" )        return "const QString &"; -    else if ( type == "pathlist" )    return "const QStringList &"; -    else if ( type == "password" )    return "const QString &"; -    else if ( type == "url" )         return "const QUrl &"; -    else if ( type == "urllist" )     return "const QList<QUrl> &"; -    else { -        cerr <<"kconfig_compiler does not support type \""<< type <<"\""<<endl; +    if (type == "string") { +        return "const QString &"; +    } else if (type == "stringlist") { +        return "const QStringList &"; +    } else if (type == "font") { +        return "const QFont &"; +    } else if (type == "rect") { +        return "const QRect &"; +    } else if (type == "size") { +        return "const QSize &"; +    } else if (type == "color") { +        return "const QColor &"; +    } else if (type == "point") { +        return "const QPoint &"; +    } else if (type == "int") { +        return "int"; +    } else if (type == "uint") { +        return "uint"; +    } else if (type == "bool") { +        return "bool"; +    } else if (type == "double") { +        return "double"; +    } else if (type == "datetime") { +        return "const QDateTime &"; +    } else if (type == "longlong") { +        return "qint64"; +    } else if (type == "ulonglong") { +        return "quint64"; +    } else if (type == "intlist") { +        return "const QList<int> &"; +    } else if (type == "enum") { +        return "int"; +    } else if (type == "path") { +        return "const QString &"; +    } else if (type == "pathlist") { +        return "const QStringList &"; +    } else if (type == "password") { +        return "const QString &"; +    } else if (type == "url") { +        return "const QUrl &"; +    } else if (type == "urllist") { +        return "const QList<QUrl> &"; +    } else { +        cerr << "kconfig_compiler does not support type \"" << type << "\"" << endl;          return "QString"; //For now, but an assert would be better      }  } @@ -934,87 +1081,130 @@ QString param( const QString &t )  /**    Actual C++ storage type for given type.  */ -QString cppType( const QString &t ) +QString cppType(const QString &t)  {      const QString type = t.toLower(); -    if ( type == "string" )           return "QString"; -    else if ( type == "stringlist" )  return "QStringList"; -    else if ( type == "font" )        return "QFont"; -    else if ( type == "rect" )        return "QRect"; -    else if ( type == "size" )        return "QSize"; -    else if ( type == "color" )       return "QColor"; -    else if ( type == "point" )       return "QPoint"; -    else if ( type == "int" )         return "int"; -    else if ( type == "uint" )        return "uint"; -    else if ( type == "bool" )        return "bool"; -    else if ( type == "double" )      return "double"; -    else if ( type == "datetime" )    return "QDateTime"; -    else if ( type == "longlong" )    return "qint64"; -    else if ( type == "ulonglong" )   return "quint64"; -    else if ( type == "intlist" )     return "QList<int>"; -    else if ( type == "enum" )        return "int"; -    else if ( type == "path" )        return "QString"; -    else if ( type == "pathlist" )    return "QStringList"; -    else if ( type == "password" )    return "QString"; -    else if ( type == "url" )         return "QUrl"; -    else if ( type == "urllist" )     return "QList<QUrl>"; -    else { -        cerr<<"kconfig_compiler does not support type \""<< type <<"\""<<endl; +    if (type == "string") { +        return "QString"; +    } else if (type == "stringlist") { +        return "QStringList"; +    } else if (type == "font") { +        return "QFont"; +    } else if (type == "rect") { +        return "QRect"; +    } else if (type == "size") { +        return "QSize"; +    } else if (type == "color") { +        return "QColor"; +    } else if (type == "point") { +        return "QPoint"; +    } else if (type == "int") { +        return "int"; +    } else if (type == "uint") { +        return "uint"; +    } else if (type == "bool") { +        return "bool"; +    } else if (type == "double") { +        return "double"; +    } else if (type == "datetime") { +        return "QDateTime"; +    } else if (type == "longlong") { +        return "qint64"; +    } else if (type == "ulonglong") { +        return "quint64"; +    } else if (type == "intlist") { +        return "QList<int>"; +    } else if (type == "enum") { +        return "int"; +    } else if (type == "path") { +        return "QString"; +    } else if (type == "pathlist") { +        return "QStringList"; +    } else if (type == "password") { +        return "QString"; +    } else if (type == "url") { +        return "QUrl"; +    } else if (type == "urllist") { +        return "QList<QUrl>"; +    } else { +        cerr << "kconfig_compiler does not support type \"" << type << "\"" << endl;          return "QString"; //For now, but an assert would be better      }  } -QString defaultValue( const QString &t ) +QString defaultValue(const QString &t)  {      const QString type = t.toLower(); -    if ( type == "string" )           return "\"\""; // Use empty string, not null string! -    else if ( type == "stringlist" )  return "QStringList()"; -    else if ( type == "font" )        return "QFont()"; -    else if ( type == "rect" )        return "QRect()"; -    else if ( type == "size" )        return "QSize()"; -    else if ( type == "color" )       return "QColor(128, 128, 128)"; -    else if ( type == "point" )       return "QPoint()"; -    else if ( type == "int" )         return "0"; -    else if ( type == "uint" )        return "0"; -    else if ( type == "bool" )        return "false"; -    else if ( type == "double" )      return "0.0"; -    else if ( type == "datedime" )    return "QDateTime()"; -    else if ( type == "longlong" )    return "0"; -    else if ( type == "ulonglong" )   return "0"; -    else if ( type == "intlist" )     return "QList<int>()"; -    else if ( type == "enum" )        return "0"; -    else if ( type == "path" )        return "\"\""; // Use empty string, not null string! -    else if ( type == "pathlist" )    return "QStringList()"; -    else if ( type == "password" )    return "\"\""; // Use empty string, not null string! -    else if ( type == "url" )         return "QUrl()"; -    else if ( type == "urllist" )     return "QList<QUrl>()"; -    else { -        cerr<<"Error, kconfig_compiler does not support the \""<< type <<"\" type!"<<endl; +    if (type == "string") { +        return "\"\"";    // Use empty string, not null string! +    } else if (type == "stringlist") { +        return "QStringList()"; +    } else if (type == "font") { +        return "QFont()"; +    } else if (type == "rect") { +        return "QRect()"; +    } else if (type == "size") { +        return "QSize()"; +    } else if (type == "color") { +        return "QColor(128, 128, 128)"; +    } else if (type == "point") { +        return "QPoint()"; +    } else if (type == "int") { +        return "0"; +    } else if (type == "uint") { +        return "0"; +    } else if (type == "bool") { +        return "false"; +    } else if (type == "double") { +        return "0.0"; +    } else if (type == "datedime") { +        return "QDateTime()"; +    } else if (type == "longlong") { +        return "0"; +    } else if (type == "ulonglong") { +        return "0"; +    } else if (type == "intlist") { +        return "QList<int>()"; +    } else if (type == "enum") { +        return "0"; +    } else if (type == "path") { +        return "\"\"";    // Use empty string, not null string! +    } else if (type == "pathlist") { +        return "QStringList()"; +    } else if (type == "password") { +        return "\"\"";    // Use empty string, not null string! +    } else if (type == "url") { +        return "QUrl()"; +    } else if (type == "urllist") { +        return "QList<QUrl>()"; +    } else { +        cerr << "Error, kconfig_compiler does not support the \"" << type << "\" type!" << endl;          return "QString"; //For now, but an assert would be better      }  } -QString itemType( const QString &type ) +QString itemType(const QString &type)  { -  QString t; +    QString t; -  t = type; -  t.replace( 0, 1, t.left( 1 ).toUpper() ); +    t = type; +    t.replace(0, 1, t.left(1).toUpper()); -  return t; +    return t;  }  static QString itemDeclaration(const CfgEntry *e, const CfgConfig &cfg)  { -  if (cfg.itemAccessors) -     return QString(); - -  QString fCap = e->name(); -  fCap[0] = fCap[0].toUpper(); -  return "  "+cfg.inherits+"::Item"+itemType( e->type() ) + -         "  *item" + fCap + -         ( (!e->param().isEmpty())?(QString("[%1]").arg(e->paramMax()+1)) : QString()) + -         ";\n"; +    if (cfg.itemAccessors) { +        return QString(); +    } + +    QString fCap = e->name(); +    fCap[0] = fCap[0].toUpper(); +    return "  " + cfg.inherits + "::Item" + itemType(e->type()) + +           "  *item" + fCap + +           ((!e->param().isEmpty()) ? (QString("[%1]").arg(e->paramMax() + 1)) : QString()) + +           ";\n";  }  // returns the name of an item variable @@ -1022,97 +1212,90 @@ static QString itemDeclaration(const CfgEntry *e, const CfgConfig &cfg)  // like using d-> in case of dpointer  static QString itemVar(const CfgEntry *e, const CfgConfig &cfg)  { -  QString result; -  if (cfg.itemAccessors) -  { -    if ( !cfg.dpointer ) -    { -      result = 'm' + e->name() + "Item"; -      result[1] = result[1].toUpper(); -    } -    else -    { -      result = e->name() + "Item"; -      result[0] = result[0].toLower(); +    QString result; +    if (cfg.itemAccessors) { +        if (!cfg.dpointer) { +            result = 'm' + e->name() + "Item"; +            result[1] = result[1].toUpper(); +        } else { +            result = e->name() + "Item"; +            result[0] = result[0].toLower(); +        } +    } else { +        result = "item" + e->name(); +        result[4] = result[4].toUpper();      } -  } -  else -  { -    result = "item" + e->name(); -    result[4] = result[4].toUpper(); -  } -  return result; +    return result;  }  static QString itemPath(const CfgEntry *e, const CfgConfig &cfg)  { -  QString result; -  if ( cfg.dpointer ) { -    result = "d->"+itemVar(e, cfg); -  } -  else { -    result = itemVar(e, cfg); -  } -  return result; +    QString result; +    if (cfg.dpointer) { +        result = "d->" + itemVar(e, cfg); +    } else { +        result = itemVar(e, cfg); +    } +    return result;  } -QString newItem( const QString &type, const QString &name, const QString &key, -                 const QString &defaultValue, const CfgConfig &cfg, const QString ¶m = QString()) +QString newItem(const QString &type, const QString &name, const QString &key, +                const QString &defaultValue, const CfgConfig &cfg, const QString ¶m = QString())  { -  QString t = "new "+cfg.inherits+"::Item" + itemType( type ) + -              "( currentGroup(), " + key + ", " + varPath( name, cfg ) + param; -  if ( type == "Enum" ) t += ", values" + name; -  if ( !defaultValue.isEmpty() ) { -    t += ", "; -    if ( type == "String" ) t += defaultValue; -    else t+= defaultValue; -  } -  t += " );"; - -  return t; +    QString t = "new " + cfg.inherits + "::Item" + itemType(type) + +                "( currentGroup(), " + key + ", " + varPath(name, cfg) + param; +    if (type == "Enum") { +        t += ", values" + name; +    } +    if (!defaultValue.isEmpty()) { +        t += ", "; +        if (type == "String") { +            t += defaultValue; +        } else { +            t += defaultValue; +        } +    } +    t += " );"; + +    return t;  }  QString paramString(const QString &s, const CfgEntry *e, int i)  { -  QString result = s; -  QString needle = "$("+e->param()+')'; -  if (result.contains(needle)) -  { -    QString tmp; -    if (e->paramType() == "Enum") -    { -      tmp = e->paramValues()[i]; -    } -    else -    { -      tmp = QString::number(i); -    } +    QString result = s; +    QString needle = "$(" + e->param() + ')'; +    if (result.contains(needle)) { +        QString tmp; +        if (e->paramType() == "Enum") { +            tmp = e->paramValues()[i]; +        } else { +            tmp = QString::number(i); +        } -    result.replace(needle, tmp); -  } -  return result; +        result.replace(needle, tmp); +    } +    return result;  }  QString paramString(const QString &group, const QList<Param> ¶meters)  { -  QString paramString = group; -  QString arguments; -  int i = 1; -  for (QList<Param>::ConstIterator it = parameters.constBegin(); -       it != parameters.constEnd(); ++it) -  { -     if (paramString.contains("$("+(*it).name+')')) -     { -       QString tmp; -       tmp.sprintf("%%%d", i++); -       paramString.replace("$("+(*it).name+')', tmp); -       arguments += ".arg( mParam"+(*it).name+" )"; -     } -  } -  if (arguments.isEmpty()) -    return "QLatin1String( \""+group+"\" )"; - -  return "QString( QLatin1String( \""+paramString+"\" ) )"+arguments; +    QString paramString = group; +    QString arguments; +    int i = 1; +    for (QList<Param>::ConstIterator it = parameters.constBegin(); +            it != parameters.constEnd(); ++it) { +        if (paramString.contains("$(" + (*it).name + ')')) { +            QString tmp; +            tmp.sprintf("%%%d", i++); +            paramString.replace("$(" + (*it).name + ')', tmp); +            arguments += ".arg( mParam" + (*it).name + " )"; +        } +    } +    if (arguments.isEmpty()) { +        return "QLatin1String( \"" + group + "\" )"; +    } + +    return "QString( QLatin1String( \"" + paramString + "\" ) )" + arguments;  }  QString translatedString(const CfgConfig &cfg, const QString &string, const QString &context = QString(), const QString ¶m = QString(), const QString ¶mValue = QString()) @@ -1122,62 +1305,64 @@ QString translatedString(const CfgConfig &cfg, const QString &string, const QStr      switch (cfg.translationSystem) {      case CfgConfig::QtTranslation:          if (!context.isEmpty()) { -            result+= "/*: " + context + " */ QCoreApplication::translate(\""; +            result += "/*: " + context + " */ QCoreApplication::translate(\"";          } else { -            result+= "QCoreApplication::translate(\""; +            result += "QCoreApplication::translate(\"";          } -        result+= cfg.className + "\", "; +        result += cfg.className + "\", ";          break;      case CfgConfig::KdeTranslation:          if (!context.isEmpty()) { -            result+= "i18nc(" + quoteString(context) + ", "; +            result += "i18nc(" + quoteString(context) + ", ";          } else { -            result+= "i18n("; +            result += "i18n(";          }          break;      }      if (!param.isEmpty()) {          QString resolvedString = string; -        resolvedString.replace("$("+param+')', paramValue); -        result+= quoteString(resolvedString); +        resolvedString.replace("$(" + param + ')', paramValue); +        result += quoteString(resolvedString);      } else { -        result+= quoteString(string); +        result += quoteString(string);      } -    result+= ')'; +    result += ')';      return result;  }  /* int i is the value of the parameter */ -QString userTextsFunctions( CfgEntry *e, const CfgConfig &cfg, QString itemVarStr=QString(), QString i=QString() ) +QString userTextsFunctions(CfgEntry *e, const CfgConfig &cfg, QString itemVarStr = QString(), QString i = QString())  { -  QString txt; -  if (itemVarStr.isNull()) itemVarStr=itemPath(e, cfg); -  if ( !e->label().isEmpty() ) { -    txt += "  " + itemVarStr + "->setLabel( "; -    txt += translatedString(cfg, e->label(), e->labelContext(), e->param(), i); -    txt += " );\n"; -  } -  if ( !e->toolTip().isEmpty() ) { -    txt += "  " + itemVarStr + "->setToolTip( "; -    txt += translatedString(cfg, e->toolTip(), e->toolTipContext(), e->param(), i); -    txt += " );\n"; -  } -  if ( !e->whatsThis().isEmpty() ) { -    txt += "  " + itemVarStr + "->setWhatsThis( "; -    txt += translatedString(cfg, e->whatsThis(), e->whatsThisContext(), e->param(), i); -    txt += " );\n"; -  } -  return txt; +    QString txt; +    if (itemVarStr.isNull()) { +        itemVarStr = itemPath(e, cfg); +    } +    if (!e->label().isEmpty()) { +        txt += "  " + itemVarStr + "->setLabel( "; +        txt += translatedString(cfg, e->label(), e->labelContext(), e->param(), i); +        txt += " );\n"; +    } +    if (!e->toolTip().isEmpty()) { +        txt += "  " + itemVarStr + "->setToolTip( "; +        txt += translatedString(cfg, e->toolTip(), e->toolTipContext(), e->param(), i); +        txt += " );\n"; +    } +    if (!e->whatsThis().isEmpty()) { +        txt += "  " + itemVarStr + "->setWhatsThis( "; +        txt += translatedString(cfg, e->whatsThis(), e->whatsThisContext(), e->param(), i); +        txt += " );\n"; +    } +    return txt;  }  // returns the member accesor implementation  // which should go in the h file if inline  // or the cpp file if not inline -QString memberAccessorBody( CfgEntry *e, bool globalEnums, const CfgConfig &cfg ) +QString memberAccessorBody(CfgEntry *e, bool globalEnums, const CfgConfig &cfg)  {      QString result;      QTextStream out(&result, QIODevice::WriteOnly); @@ -1186,13 +1371,16 @@ QString memberAccessorBody( CfgEntry *e, bool globalEnums, const CfgConfig &cfg      bool useEnumType = cfg.useEnumTypes && t == "Enum";      out << "return "; -    if (useEnumType) -      out << "static_cast<" << enumType(e, globalEnums) << ">("; +    if (useEnumType) { +        out << "static_cast<" << enumType(e, globalEnums) << ">("; +    }      out << This << varPath(n, cfg); -    if (!e->param().isEmpty()) -      out << "[i]"; -    if (useEnumType) -      out << ")"; +    if (!e->param().isEmpty()) { +        out << "[i]"; +    } +    if (useEnumType) { +        out << ")"; +    }      out << ";" << endl;      return result; @@ -1201,113 +1389,110 @@ QString memberAccessorBody( CfgEntry *e, bool globalEnums, const CfgConfig &cfg  // returns the member mutator implementation  // which should go in the h file if inline  // or the cpp file if not inline -QString memberMutatorBody( CfgEntry *e, const CfgConfig &cfg ) +QString memberMutatorBody(CfgEntry *e, const CfgConfig &cfg)  { -  QString result; -  QTextStream out(&result, QIODevice::WriteOnly); -  QString n = e->name(); -  QString t = e->type(); - -  if (!e->minValue().isEmpty()) -  { -    if (e->minValue() != "0" || !isUnsigned(t)) { // skip writing "if uint<0" (#187579) -      out << "if (v < " << e->minValue() << ")" << endl; -      out << "{" << endl; -      out << "  qDebug() << \"" << setFunction(n); -      out << ": value \" << v << \" is less than the minimum value of "; -      out << e->minValue()<< "\";" << endl; -      out << "  v = " << e->minValue() << ";" << endl; -      out << "}" << endl; -    } -  } - -  if (!e->maxValue().isEmpty()) -  { -    out << endl << "if (v > " << e->maxValue() << ")" << endl; -    out << "{" << endl; -    out << "  qDebug() << \"" << setFunction(n); -    out << ": value \" << v << \" is greater than the maximum value of "; -    out << e->maxValue()<< "\";" << endl; -    out << "  v = " << e->maxValue() << ";" << endl; -    out << "}" << endl << endl; -  } - -  out << "if (!" << This << "isImmutable( QString::fromLatin1( \""; -  if (!e->param().isEmpty()) -  { -    out << e->paramName().replace("$("+e->param()+")", "%1") << "\" ).arg( "; -    if ( e->paramType() == "Enum" ) { -      out << "QLatin1String( "; - -      if (cfg.globalEnums) -        out << enumName(e->param()) << "ToString[i]"; -      else -        out << enumName(e->param()) << "::enumToString[i]"; +    QString result; +    QTextStream out(&result, QIODevice::WriteOnly); +    QString n = e->name(); +    QString t = e->type(); + +    if (!e->minValue().isEmpty()) { +        if (e->minValue() != "0" || !isUnsigned(t)) { // skip writing "if uint<0" (#187579) +            out << "if (v < " << e->minValue() << ")" << endl; +            out << "{" << endl; +            out << "  qDebug() << \"" << setFunction(n); +            out << ": value \" << v << \" is less than the minimum value of "; +            out << e->minValue() << "\";" << endl; +            out << "  v = " << e->minValue() << ";" << endl; +            out << "}" << endl; +        } +    } + +    if (!e->maxValue().isEmpty()) { +        out << endl << "if (v > " << e->maxValue() << ")" << endl; +        out << "{" << endl; +        out << "  qDebug() << \"" << setFunction(n); +        out << ": value \" << v << \" is greater than the maximum value of "; +        out << e->maxValue() << "\";" << endl; +        out << "  v = " << e->maxValue() << ";" << endl; +        out << "}" << endl << endl; +    } + +    out << "if (!" << This << "isImmutable( QString::fromLatin1( \""; +    if (!e->param().isEmpty()) { +        out << e->paramName().replace("$(" + e->param() + ")", "%1") << "\" ).arg( "; +        if (e->paramType() == "Enum") { +            out << "QLatin1String( "; +            if (cfg.globalEnums) { +                out << enumName(e->param()) << "ToString[i]"; +            } else { +                out << enumName(e->param()) << "::enumToString[i]"; +            } + +            out << " )"; +        } else { +            out << "i"; +        }          out << " )"; +    } else { +        out << n << "\" )";      } -    else -    { -      out << "i"; -    } -    out << " )"; -  } -  else -  { -    out << n << "\" )"; -  } -  out << " ))" << (!e->signalList().empty() ? " {" : "") << endl; -  out << "  " << This << varPath(n, cfg); -  if (!e->param().isEmpty()) -    out << "[i]"; -  out << " = v;" << endl; - -  if ( !e->signalList().empty() ) { -    Q_FOREACH(const Signal &signal, e->signalList()) { -      out << "  " << This << varPath("settingsChanged", cfg) << " |= " << signalEnumName(signal.name) << ";" << endl; -    } -    out << "}" << endl; -  } - -  return result; +    out << " ))" << (!e->signalList().empty() ? " {" : "") << endl; +    out << "  " << This << varPath(n, cfg); +    if (!e->param().isEmpty()) { +        out << "[i]"; +    } +    out << " = v;" << endl; + +    if (!e->signalList().empty()) { +        Q_FOREACH (const Signal &signal, e->signalList()) { +            out << "  " << This << varPath("settingsChanged", cfg) << " |= " << signalEnumName(signal.name) << ";" << endl; +        } +        out << "}" << endl; +    } + +    return result;  }  // returns the member get default implementation  // which should go in the h file if inline  // or the cpp file if not inline -QString memberGetDefaultBody( CfgEntry *e ) +QString memberGetDefaultBody(CfgEntry *e)  { -  QString result = e->code(); -  QTextStream out(&result, QIODevice::WriteOnly); -  out << endl; - -  if (!e->param().isEmpty()) { -    out << "  switch (i) {" << endl; -    for (int i = 0; i <= e->paramMax(); ++i) { -      if (!e->paramDefaultValue(i).isEmpty()) { -        out << "  case " << i << ": return " << e->paramDefaultValue(i) << ';' << endl; -      } -    } -    out << "  default:" << endl; -    out << "    return " << e->defaultValue().replace("$("+e->param()+')', "i") << ';' << endl; -    out << "  }" << endl; -  } else { -    out << "  return " << e->defaultValue() << ';'; -  } - -  return result; +    QString result = e->code(); +    QTextStream out(&result, QIODevice::WriteOnly); +    out << endl; + +    if (!e->param().isEmpty()) { +        out << "  switch (i) {" << endl; +        for (int i = 0; i <= e->paramMax(); ++i) { +            if (!e->paramDefaultValue(i).isEmpty()) { +                out << "  case " << i << ": return " << e->paramDefaultValue(i) << ';' << endl; +            } +        } +        out << "  default:" << endl; +        out << "    return " << e->defaultValue().replace("$(" + e->param() + ')', "i") << ';' << endl; +        out << "  }" << endl; +    } else { +        out << "  return " << e->defaultValue() << ';'; +    } + +    return result;  }  // returns the item accesor implementation  // which should go in the h file if inline  // or the cpp file if not inline -QString itemAccessorBody( CfgEntry *e, const CfgConfig &cfg ) +QString itemAccessorBody(CfgEntry *e, const CfgConfig &cfg)  {      QString result;      QTextStream out(&result, QIODevice::WriteOnly);      out << "return " << itemPath(e, cfg); -    if (!e->param().isEmpty()) out << "[i]"; +    if (!e->param().isEmpty()) { +        out << "[i]"; +    }      out << ";" << endl;      return result; @@ -1320,13 +1505,13 @@ QString indent(QString text, int spaces)      QTextStream out(&result, QIODevice::WriteOnly);      QTextStream in(&text, QIODevice::ReadOnly);      QString currLine; -    while ( !in.atEnd() ) -    { -      currLine = in.readLine(); -      if (!currLine.isEmpty()) -        for (int i=0; i < spaces; i++) -          out << " "; -      out << currLine << endl; +    while (!in.atEnd()) { +        currLine = in.readLine(); +        if (!currLine.isEmpty()) +            for (int i = 0; i < spaces; i++) { +                out << " "; +            } +        out << currLine << endl;      }      return result;  } @@ -1335,1004 +1520,1040 @@ QString indent(QString text, int spaces)  // there are namespaces in p_ns  void beginNamespaces(const QString &p_ns, QTextStream &p_out)  { -  if ( !p_ns.isEmpty() ) { -    const QStringList nameSpaces = p_ns.split( "::" ); -    foreach (const QString &ns, nameSpaces ) -      p_out << "namespace " << ns << " {" << endl; -    p_out << endl; -  } +    if (!p_ns.isEmpty()) { +        const QStringList nameSpaces = p_ns.split("::"); +        foreach (const QString &ns, nameSpaces) { +            p_out << "namespace " << ns << " {" << endl; +        } +        p_out << endl; +    }  }  // adds as many '}' lines to p_out as  // there are namespaces in p_ns  void endNamespaces(const QString &p_ns, QTextStream &p_out)  { -  if ( !p_ns.isEmpty() ) { -    const int namespaceCount = p_ns.count( "::" ) + 1; -    for ( int i = 0; i < namespaceCount; ++i ) -      p_out << "}" << endl; -    p_out << endl; -  } +    if (!p_ns.isEmpty()) { +        const int namespaceCount = p_ns.count("::") + 1; +        for (int i = 0; i < namespaceCount; ++i) { +            p_out << "}" << endl; +        } +        p_out << endl; +    }  } - -int main( int argc, char **argv ) +int main(int argc, char **argv)  { -  QCoreApplication app(argc, argv); +    QCoreApplication app(argc, argv); -  validNameRegexp = new QRegExp("[a-zA-Z_][a-zA-Z0-9_]*"); +    validNameRegexp = new QRegExp("[a-zA-Z_][a-zA-Z0-9_]*"); -  QString directoryName, inputFilename, codegenFilename; -  parseArgs(app.arguments(), directoryName, inputFilename, codegenFilename); +    QString directoryName, inputFilename, codegenFilename; +    parseArgs(app.arguments(), directoryName, inputFilename, codegenFilename); -  QString baseDir = directoryName; +    QString baseDir = directoryName;  #ifdef Q_OS_WIN -  if (!baseDir.endsWith('/') && !baseDir.endsWith('\\')) +    if (!baseDir.endsWith('/') && !baseDir.endsWith('\\'))  #else -  if (!baseDir.endsWith('/')) +    if (!baseDir.endsWith('/'))  #endif -    baseDir.append("/"); - -  if (!codegenFilename.endsWith(QLatin1String(".kcfgc"))) -  { -    cerr << "Codegen options file must have extension .kcfgc" << endl; -    return 1; -  } -  QString baseName = QFileInfo(codegenFilename).fileName(); -  baseName = baseName.left(baseName.length() - 6); - -  CfgConfig cfg = CfgConfig( codegenFilename ); - -  QFile input( inputFilename ); - -  QDomDocument doc; -  QString errorMsg; -  int errorRow; -  int errorCol; -  if ( !doc.setContent( &input, &errorMsg, &errorRow, &errorCol ) ) { -    cerr << "Unable to load document." << endl; -    cerr << "Parse error in " << inputFilename << ", line " << errorRow << ", col " << errorCol << ": " << errorMsg << endl; -    return 1; -  } - -  QDomElement cfgElement = doc.documentElement(); - -  if ( cfgElement.isNull() ) { -    cerr << "No document in kcfg file" << endl; -    return 1; -  } - -  QString cfgFileName; -  bool cfgFileNameArg = false; -  QList<Param> parameters; -  QList<Signal> signalList; -  QStringList includes; -  bool hasSignals = false; - -  QList<CfgEntry*> entries; - -  for ( QDomElement e = cfgElement.firstChildElement(); !e.isNull(); e = e.nextSiblingElement() ) { -    QString tag = e.tagName(); - -    if ( tag == "include" ) { -      QString includeFile = e.text(); -      if (!includeFile.isEmpty()) -        includes.append(includeFile); - -    } else if ( tag == "kcfgfile" ) { -      cfgFileName = e.attribute( "name" ); -      cfgFileNameArg = e.attribute( "arg" ).toLower() == "true"; -      for( QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement() ) { -        if ( e2.tagName() == "parameter" ) { -          Param p; -          p.name = e2.attribute( "name" ); -          p.type = e2.attribute( "type" ); -          if (p.type.isEmpty()) -             p.type = "String"; -          parameters.append( p ); -        } -      } - -    } else if ( tag == "group" ) { -      QString group = e.attribute( "name" ); -      if ( group.isEmpty() ) { -        cerr << "Group without name" << endl; +        baseDir.append("/"); + +    if (!codegenFilename.endsWith(QLatin1String(".kcfgc"))) { +        cerr << "Codegen options file must have extension .kcfgc" << endl;          return 1; -      } -      for( QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement() ) { -        if ( e2.tagName() != "entry" ) continue; -        CfgEntry *entry = parseEntry( group, e2, cfg ); -        if ( entry ) entries.append( entry ); -        else { -          cerr << "Can not parse entry." << endl; -          return 1; +    } +    QString baseName = QFileInfo(codegenFilename).fileName(); +    baseName = baseName.left(baseName.length() - 6); + +    CfgConfig cfg = CfgConfig(codegenFilename); + +    QFile input(inputFilename); + +    QDomDocument doc; +    QString errorMsg; +    int errorRow; +    int errorCol; +    if (!doc.setContent(&input, &errorMsg, &errorRow, &errorCol)) { +        cerr << "Unable to load document." << endl; +        cerr << "Parse error in " << inputFilename << ", line " << errorRow << ", col " << errorCol << ": " << errorMsg << endl; +        return 1; +    } + +    QDomElement cfgElement = doc.documentElement(); + +    if (cfgElement.isNull()) { +        cerr << "No document in kcfg file" << endl; +        return 1; +    } + +    QString cfgFileName; +    bool cfgFileNameArg = false; +    QList<Param> parameters; +    QList<Signal> signalList; +    QStringList includes; +    bool hasSignals = false; + +    QList<CfgEntry *> entries; + +    for (QDomElement e = cfgElement.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) { +        QString tag = e.tagName(); + +        if (tag == "include") { +            QString includeFile = e.text(); +            if (!includeFile.isEmpty()) { +                includes.append(includeFile); +            } + +        } else if (tag == "kcfgfile") { +            cfgFileName = e.attribute("name"); +            cfgFileNameArg = e.attribute("arg").toLower() == "true"; +            for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) { +                if (e2.tagName() == "parameter") { +                    Param p; +                    p.name = e2.attribute("name"); +                    p.type = e2.attribute("type"); +                    if (p.type.isEmpty()) { +                        p.type = "String"; +                    } +                    parameters.append(p); +                } +            } + +        } else if (tag == "group") { +            QString group = e.attribute("name"); +            if (group.isEmpty()) { +                cerr << "Group without name" << endl; +                return 1; +            } +            for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) { +                if (e2.tagName() != "entry") { +                    continue; +                } +                CfgEntry *entry = parseEntry(group, e2, cfg); +                if (entry) { +                    entries.append(entry); +                } else { +                    cerr << "Can not parse entry." << endl; +                    return 1; +                } +            } +        } else if (tag == "signal") { +            QString signalName = e.attribute("name"); +            if (signalName.isEmpty()) { +                cerr << "Signal without name." << endl; +                return 1; +            } +            Signal theSignal; +            theSignal.name = signalName; + +            for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) { +                if (e2.tagName() == "argument") { +                    SignalArguments argument; +                    argument.type = e2.attribute("type"); +                    if (argument.type.isEmpty()) { +                        cerr << "Signal argument without type." << endl; +                        return 1; +                    } +                    argument.variableName = e2.text(); +                    theSignal.arguments.append(argument); +                } else if (e2.tagName() == "label") { +                    theSignal.label = e2.text(); +                } +            } +            signalList.append(theSignal);          } -      }      } -    else if ( tag == "signal" ) { -      QString signalName = e.attribute( "name" ); -      if ( signalName.isEmpty() ) { -        cerr << "Signal without name." << endl; + +    if (cfg.className.isEmpty()) { +        cerr << "Class name missing" << endl;          return 1; -      } -      Signal theSignal; -      theSignal.name = signalName; - -      for( QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement() ) { -        if ( e2.tagName() == "argument") { -          SignalArguments argument; -          argument.type = e2.attribute("type"); -          if ( argument.type.isEmpty() ) { -            cerr << "Signal argument without type." << endl; -            return 1; -          } -          argument.variableName = e2.text(); -          theSignal.arguments.append(argument); -        } -        else if( e2.tagName() == "label") { -          theSignal.label = e2.text(); -        } -      } -      signalList.append(theSignal); -    } -  } - -  if ( cfg.className.isEmpty() ) { -    cerr << "Class name missing" << endl; -    return 1; -  } - -  if ( cfg.singleton && !parameters.isEmpty() ) { -    cerr << "Singleton class can not have parameters" << endl; -    return 1; -  } - -  if ( !cfgFileName.isEmpty() && cfgFileNameArg) -  { -    cerr << "Having both a fixed filename and a filename as argument is not possible." << endl; -    return 1; -  } - -  if ( entries.isEmpty() ) { -    cerr << "No entries." << endl; -  } +    } + +    if (cfg.singleton && !parameters.isEmpty()) { +        cerr << "Singleton class can not have parameters" << endl; +        return 1; +    } + +    if (!cfgFileName.isEmpty() && cfgFileNameArg) { +        cerr << "Having both a fixed filename and a filename as argument is not possible." << endl; +        return 1; +    } + +    if (entries.isEmpty()) { +        cerr << "No entries." << endl; +    }  #if 0 -  CfgEntry *cfg; -  for( cfg = entries.first(); cfg; cfg = entries.next() ) { -    cfg->dump(); -  } +    CfgEntry *cfg; +    for (cfg = entries.first(); cfg; cfg = entries.next()) { +        cfg->dump(); +    }  #endif -  hasSignals = !signalList.empty(); -  QString headerFileName = baseName + ".h"; -  QString implementationFileName = baseName + ".cpp"; -  QString mocFileName = baseName + ".moc"; -  QString cppPreamble; // code to be inserted at the beginnin of the cpp file, e.g. initialization of static values - -  QFile header( baseDir + headerFileName ); -  if ( !header.open( QIODevice::WriteOnly ) ) { -    cerr << "Can not open '" << baseDir  << headerFileName << "for writing." << endl; -    return 1; -  } - -  QTextStream h( &header ); - -  h << "// This file is generated by kconfig_compiler from " << QFileInfo(inputFilename).fileName() << "." << endl; -  h << "// All changes you do to this file will be lost." << endl; - -  h << "#ifndef " << ( !cfg.nameSpace.isEmpty() ? QString (QString(cfg.nameSpace).replace( "::", "_" ).toUpper() + '_') : "" ) -    << cfg.className.toUpper() << "_H" << endl; -  h << "#define " << ( !cfg.nameSpace.isEmpty() ? QString (QString(cfg.nameSpace).replace( "::", "_" ).toUpper() + '_') : "" ) -    << cfg.className.toUpper() << "_H" << endl << endl; - -  // Includes -  QStringList::ConstIterator it; -  for( it = cfg.headerIncludes.constBegin(); it != cfg.headerIncludes.constEnd(); ++it ) { -    if ( (*it).startsWith('"') ) -      h << "#include " << *it << endl; -    else -      h << "#include <" << *it << ">" << endl; -  } - -  if ( cfg.headerIncludes.count() > 0 ) h << endl; - -  if ( !cfg.singleton && parameters.isEmpty() ) -    h << "#include <qglobal.h>" << endl; - -  if ( cfg.inherits=="KCoreConfigSkeleton" ) { -    h << "#include <kcoreconfigskeleton.h>" << endl; -  } else { -    h << "#include <kconfigskeleton.h>" << endl; -  } - -  h << "#include <QCoreApplication>" << endl; -  h << "#include <QDebug>" << endl << endl; - -  // Includes -  for( it = includes.constBegin(); it != includes.constEnd(); ++it ) { -    if ( (*it).startsWith('"') ) -      h << "#include " << *it << endl; -    else -      h << "#include <" << *it << ">" << endl; -  } - -  beginNamespaces(cfg.nameSpace, h); - -  // Private class declaration -  if ( cfg.dpointer ) -    h << "class " << cfg.className << "Private;" << endl << endl; - -  // Class declaration header -  h << "class " << cfg.visibility << cfg.className << " : public " << cfg.inherits << endl; - -  h << "{" << endl; -  // Add Q_OBJECT macro if the config need signals. -  if( hasSignals ) -   h << "  Q_OBJECT" << endl; -  h << "  public:" << endl; - -  // enums -  QList<CfgEntry*>::ConstIterator itEntry; -  for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -    const CfgEntry::Choices &choices = (*itEntry)->choices(); -    const QList<CfgEntry::Choice> chlist = choices.choices; -    if ( !chlist.isEmpty() ) { -      QStringList values; -      QList<CfgEntry::Choice>::ConstIterator itChoice; -      for( itChoice = chlist.constBegin(); itChoice != chlist.constEnd(); ++itChoice ) { -        values.append( choices.prefix + (*itChoice).name ); -      } -      if ( choices.name().isEmpty() ) { -        if ( cfg.globalEnums ) { -          h << "    enum " << enumName( (*itEntry)->name(), (*itEntry)->choices() ) << " { " << values.join( ", " ) << " };" << endl; +    hasSignals = !signalList.empty(); +    QString headerFileName = baseName + ".h"; +    QString implementationFileName = baseName + ".cpp"; +    QString mocFileName = baseName + ".moc"; +    QString cppPreamble; // code to be inserted at the beginnin of the cpp file, e.g. initialization of static values + +    QFile header(baseDir + headerFileName); +    if (!header.open(QIODevice::WriteOnly)) { +        cerr << "Can not open '" << baseDir  << headerFileName << "for writing." << endl; +        return 1; +    } + +    QTextStream h(&header); + +    h << "// This file is generated by kconfig_compiler from " << QFileInfo(inputFilename).fileName() << "." << endl; +    h << "// All changes you do to this file will be lost." << endl; + +    h << "#ifndef " << (!cfg.nameSpace.isEmpty() ? QString(QString(cfg.nameSpace).replace("::", "_").toUpper() + '_') : "") +      << cfg.className.toUpper() << "_H" << endl; +    h << "#define " << (!cfg.nameSpace.isEmpty() ? QString(QString(cfg.nameSpace).replace("::", "_").toUpper() + '_') : "") +      << cfg.className.toUpper() << "_H" << endl << endl; + +    // Includes +    QStringList::ConstIterator it; +    for (it = cfg.headerIncludes.constBegin(); it != cfg.headerIncludes.constEnd(); ++it) { +        if ((*it).startsWith('"')) { +            h << "#include " << *it << endl;          } else { -          // Create an automatically named enum -          h << "    class " << enumName( (*itEntry)->name(), (*itEntry)->choices() ) << endl; -          h << "    {" << endl; -          h << "      public:" << endl; -          h << "      enum type { " << values.join( ", " ) << ", COUNT };" << endl; -          h << "    };" << endl; -        } -      } else if ( !choices.external() ) { -        // Create a named enum -        h << "    enum " << enumName( (*itEntry)->name(), (*itEntry)->choices() ) << " { " << values.join( ", " ) << " };" << endl; -      } -    } -    const QStringList values = (*itEntry)->paramValues(); -    if ( !values.isEmpty() ) { -      if ( cfg.globalEnums ) { -        // ### FIXME!! -        // make the following string table an index-based string search! -        // ### -        h << "    enum " << enumName( (*itEntry)->param() ) << " { " << values.join( ", " ) << " };" << endl; -        h << "    static const char* const " << enumName( (*itEntry)->param() ) << "ToString[];" << endl; -        cppPreamble += "const char* const " + cfg.className + "::" + enumName( (*itEntry)->param() ) + -           "ToString[] = { \"" + values.join( "\", \"" ) + "\" };\n"; -      } else { -        h << "    class " << enumName( (*itEntry)->param() ) << endl; -        h << "    {" << endl; -        h << "      public:" << endl; -        h << "      enum type { " << values.join( ", " ) << ", COUNT };" << endl; -        h << "      static const char* const enumToString[];" << endl; -        h << "    };" << endl; -        cppPreamble += "const char* const " + cfg.className + "::" + enumName( (*itEntry)->param() ) + -           "::enumToString[] = { \"" + values.join( "\", \"" ) + "\" };\n"; -      } -    } -  } -  if ( hasSignals ) { -   h << "\n    enum {" << endl; -   unsigned val = 1; -   QList<Signal>::ConstIterator it, itEnd = signalList.constEnd(); -   for ( it = signalList.constBegin(); it != itEnd; val <<= 1) { -     if ( !val ) { -       cerr << "Too many signals to create unique bit masks" << endl; -       exit(1); -     } -     Signal signal = *it; -     h << "      " << signalEnumName(signal.name) << " = 0x" << hex << val; -     if ( ++it != itEnd ) -      h << ","; -     h << endl; -   } -   h << " };" << dec << endl; -  } -  h << endl; -  // Constructor or singleton accessor -  if ( !cfg.singleton ) { -    h << "    " << cfg.className << "("; -    if (cfgFileNameArg) -    { -        if(cfg.forceStringFilename) -            h << " const QString &cfgfilename" -                << (parameters.isEmpty() ? " = QString()" : ", "); -        else -            h << " KSharedConfig::Ptr config" -                << (parameters.isEmpty() ? " = KSharedConfig::openConfig()" : ", "); +            h << "#include <" << *it << ">" << endl; +        }      } -    for (QList<Param>::ConstIterator it = parameters.constBegin(); -         it != parameters.constEnd(); ++it) -    { -       if (it != parameters.constBegin()) -         h << ","; -       h << " " << param((*it).type) << " " << (*it).name; -    } -    h << " );" << endl; -  } else { -    h << "    static " << cfg.className << " *self();" << endl; -    if (cfgFileNameArg) -    { -      h << "    static void instance(const QString& cfgfilename);" << endl; + +    if (cfg.headerIncludes.count() > 0) { +        h << endl;      } -  } -  // Destructor -  h << "    ~" << cfg.className << "();" << endl << endl; +    if (!cfg.singleton && parameters.isEmpty()) { +        h << "#include <qglobal.h>" << endl; +    } -  // global variables -  if (cfg.staticAccessors) -    This = "self()->"; -  else -    Const = " const"; +    if (cfg.inherits == "KCoreConfigSkeleton") { +        h << "#include <kcoreconfigskeleton.h>" << endl; +    } else { +        h << "#include <kconfigskeleton.h>" << endl; +    } -  for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -    QString n = (*itEntry)->name(); -    QString t = (*itEntry)->type(); +    h << "#include <QCoreApplication>" << endl; +    h << "#include <QDebug>" << endl << endl; -    // Manipulator -    if (cfg.allMutators || cfg.mutators.contains(n)) -    { -      h << "    /**" << endl; -      h << "      Set " << (*itEntry)->label() << endl; -      h << "    */" << endl; -      if (cfg.staticAccessors) -        h << "    static" << endl; -      h << "    void " << setFunction(n) << "( "; -      if (!(*itEntry)->param().isEmpty()) -        h << cppType((*itEntry)->paramType()) << " i, "; -      if (cfg.useEnumTypes && t == "Enum") -        h << enumType(*itEntry, cfg.globalEnums); -      else -        h << param( t ); -      h << " v )"; -      // function body inline only if not using dpointer -      // for BC mode -      if ( !cfg.dpointer ) -      { -        h << endl << "    {" << endl; -        h << indent(memberMutatorBody(*itEntry, cfg), 6 ); -        h << "    }" << endl; -      } -      else -      { -        h << ";" << endl; -      } -    } -    h << endl; -    // Accessor -    h << "    /**" << endl; -    h << "      Get " << (*itEntry)->label() << endl; -    h << "    */" << endl; -    if (cfg.staticAccessors) -      h << "    static" << endl; -    h << "    "; -    if (cfg.useEnumTypes && t == "Enum") -      h << enumType(*itEntry, cfg.globalEnums); -    else -      h << cppType(t); -    h << " " << getFunction(n) << "("; -    if (!(*itEntry)->param().isEmpty()) -      h << " " << cppType((*itEntry)->paramType()) <<" i "; -    h << ")" << Const; -    // function body inline only if not using dpointer -    // for BC mode -    if ( !cfg.dpointer ) -    { -       h << endl << "    {" << endl; -      h << indent(memberAccessorBody(*itEntry, cfg.globalEnums, cfg), 6 ); -       h << "    }" << endl; +    // Includes +    for (it = includes.constBegin(); it != includes.constEnd(); ++it) { +        if ((*it).startsWith('"')) { +            h << "#include " << *it << endl; +        } else { +            h << "#include <" << *it << ">" << endl; +        }      } -    else -    { -      h << ";" << endl; -    } - -    // Default value Accessor -    if ((cfg.allDefaultGetters || cfg.defaultGetters.contains(n)) && !(*itEntry)->defaultValue().isEmpty()) { -      h << endl; -      h << "    /**" << endl; -      h << "      Get " << (*itEntry)->label() << " default value" << endl; -      h << "    */" << endl; -      if (cfg.staticAccessors) -        h << "    static" << endl; -      h << "    "; -      if (cfg.useEnumTypes && t == "Enum") -        h << enumType(*itEntry, cfg.globalEnums); -      else -        h << cppType(t); -      h << " " << getDefaultFunction(n) << "("; -      if ( !(*itEntry)->param().isEmpty() ) -          h << " " << cppType( (*itEntry)->paramType() ) <<" i "; -      h << ")" << Const << endl; -      h << "    {" << endl; -      h << "        return "; -      if (cfg.useEnumTypes && t == "Enum") -        h << "static_cast<" << enumType(*itEntry, cfg.globalEnums) << ">("; -      h << getDefaultFunction(n) << "_helper("; -      if ( !(*itEntry)->param().isEmpty() ) -          h << " i "; -      h << ")"; -      if (cfg.useEnumTypes && t == "Enum") -        h << ")"; -      h << ";" << endl; -      h << "    }" << endl; -    } - -    // Item accessor -    if ( cfg.itemAccessors ) { -      h << endl; -      h << "    /**" << endl; -      h << "      Get Item object corresponding to " << n << "()" -        << endl; -      h << "    */" << endl; -      h << "    Item" << itemType( (*itEntry)->type() ) << " *" -        << getFunction( n ) << "Item("; -      if (!(*itEntry)->param().isEmpty()) { -        h << " " << cppType((*itEntry)->paramType()) << " i "; -      } -      h << ")"; -      if ( !cfg.dpointer ) -      { -        h << endl << "    {" << endl; -        h << indent( itemAccessorBody((*itEntry), cfg), 6); -        h << "    }" << endl; -      } -      else -      { -        h << ";" << endl; -      } + +    beginNamespaces(cfg.nameSpace, h); + +    // Private class declaration +    if (cfg.dpointer) { +        h << "class " << cfg.className << "Private;" << endl << endl;      } +    // Class declaration header +    h << "class " << cfg.visibility << cfg.className << " : public " << cfg.inherits << endl; + +    h << "{" << endl; +    // Add Q_OBJECT macro if the config need signals. +    if (hasSignals) { +        h << "  Q_OBJECT" << endl; +    } +    h << "  public:" << endl; + +    // enums +    QList<CfgEntry *>::ConstIterator itEntry; +    for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +        const CfgEntry::Choices &choices = (*itEntry)->choices(); +        const QList<CfgEntry::Choice> chlist = choices.choices; +        if (!chlist.isEmpty()) { +            QStringList values; +            QList<CfgEntry::Choice>::ConstIterator itChoice; +            for (itChoice = chlist.constBegin(); itChoice != chlist.constEnd(); ++itChoice) { +                values.append(choices.prefix + (*itChoice).name); +            } +            if (choices.name().isEmpty()) { +                if (cfg.globalEnums) { +                    h << "    enum " << enumName((*itEntry)->name(), (*itEntry)->choices()) << " { " << values.join(", ") << " };" << endl; +                } else { +                    // Create an automatically named enum +                    h << "    class " << enumName((*itEntry)->name(), (*itEntry)->choices()) << endl; +                    h << "    {" << endl; +                    h << "      public:" << endl; +                    h << "      enum type { " << values.join(", ") << ", COUNT };" << endl; +                    h << "    };" << endl; +                } +            } else if (!choices.external()) { +                // Create a named enum +                h << "    enum " << enumName((*itEntry)->name(), (*itEntry)->choices()) << " { " << values.join(", ") << " };" << endl; +            } +        } +        const QStringList values = (*itEntry)->paramValues(); +        if (!values.isEmpty()) { +            if (cfg.globalEnums) { +                // ### FIXME!! +                // make the following string table an index-based string search! +                // ### +                h << "    enum " << enumName((*itEntry)->param()) << " { " << values.join(", ") << " };" << endl; +                h << "    static const char* const " << enumName((*itEntry)->param()) << "ToString[];" << endl; +                cppPreamble += "const char* const " + cfg.className + "::" + enumName((*itEntry)->param()) + +                               "ToString[] = { \"" + values.join("\", \"") + "\" };\n"; +            } else { +                h << "    class " << enumName((*itEntry)->param()) << endl; +                h << "    {" << endl; +                h << "      public:" << endl; +                h << "      enum type { " << values.join(", ") << ", COUNT };" << endl; +                h << "      static const char* const enumToString[];" << endl; +                h << "    };" << endl; +                cppPreamble += "const char* const " + cfg.className + "::" + enumName((*itEntry)->param()) + +                               "::enumToString[] = { \"" + values.join("\", \"") + "\" };\n"; +            } +        } +    } +    if (hasSignals) { +        h << "\n    enum {" << endl; +        unsigned val = 1; +        QList<Signal>::ConstIterator it, itEnd = signalList.constEnd(); +        for (it = signalList.constBegin(); it != itEnd; val <<= 1) { +            if (!val) { +                cerr << "Too many signals to create unique bit masks" << endl; +                exit(1); +            } +            Signal signal = *it; +            h << "      " << signalEnumName(signal.name) << " = 0x" << hex << val; +            if (++it != itEnd) { +                h << ","; +            } +            h << endl; +        } +        h << " };" << dec << endl; +    }      h << endl; -  } +    // Constructor or singleton accessor +    if (!cfg.singleton) { +        h << "    " << cfg.className << "("; +        if (cfgFileNameArg) { +            if (cfg.forceStringFilename) +                h << " const QString &cfgfilename" +                  << (parameters.isEmpty() ? " = QString()" : ", "); +            else +                h << " KSharedConfig::Ptr config" +                  << (parameters.isEmpty() ? " = KSharedConfig::openConfig()" : ", "); +        } +        for (QList<Param>::ConstIterator it = parameters.constBegin(); +                it != parameters.constEnd(); ++it) { +            if (it != parameters.constBegin()) { +                h << ","; +            } +            h << " " << param((*it).type) << " " << (*it).name; +        } +        h << " );" << endl; +    } else { +        h << "    static " << cfg.className << " *self();" << endl; +        if (cfgFileNameArg) { +            h << "    static void instance(const QString& cfgfilename);" << endl; +        } +    } +    // Destructor +    h << "    ~" << cfg.className << "();" << endl << endl; -  // Signal definition. -  if( hasSignals ) { -    h << endl; -    h << "  Q_SIGNALS:"; -    Q_FOREACH(const Signal &signal, signalList) { -      h << endl; -      if ( !signal.label.isEmpty() ) { +    // global variables +    if (cfg.staticAccessors) { +        This = "self()->"; +    } else { +        Const = " const"; +    } + +    for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +        QString n = (*itEntry)->name(); +        QString t = (*itEntry)->type(); + +        // Manipulator +        if (cfg.allMutators || cfg.mutators.contains(n)) { +            h << "    /**" << endl; +            h << "      Set " << (*itEntry)->label() << endl; +            h << "    */" << endl; +            if (cfg.staticAccessors) { +                h << "    static" << endl; +            } +            h << "    void " << setFunction(n) << "( "; +            if (!(*itEntry)->param().isEmpty()) { +                h << cppType((*itEntry)->paramType()) << " i, "; +            } +            if (cfg.useEnumTypes && t == "Enum") { +                h << enumType(*itEntry, cfg.globalEnums); +            } else { +                h << param(t); +            } +            h << " v )"; +            // function body inline only if not using dpointer +            // for BC mode +            if (!cfg.dpointer) { +                h << endl << "    {" << endl; +                h << indent(memberMutatorBody(*itEntry, cfg), 6); +                h << "    }" << endl; +            } else { +                h << ";" << endl; +            } +        } +        h << endl; +        // Accessor          h << "    /**" << endl; -        h << "      " << signal.label << endl; +        h << "      Get " << (*itEntry)->label() << endl;          h << "    */" << endl; -      } -      h << "    void " << signal.name << "("; -      QList<SignalArguments>::ConstIterator it, itEnd = signal.arguments.constEnd(); -      for ( it = signal.arguments.constBegin(); it != itEnd; ) { -        SignalArguments argument = *it; -        QString type = param(argument.type); -        if ( cfg.useEnumTypes && argument.type == "Enum" ) { -          for ( int i = 0, end = entries.count(); i < end; ++i ) { -            if ( entries[i]->name() == argument.variableName ) { -              type = enumType(entries[i], cfg.globalEnums); -              break; +        if (cfg.staticAccessors) { +            h << "    static" << endl; +        } +        h << "    "; +        if (cfg.useEnumTypes && t == "Enum") { +            h << enumType(*itEntry, cfg.globalEnums); +        } else { +            h << cppType(t); +        } +        h << " " << getFunction(n) << "("; +        if (!(*itEntry)->param().isEmpty()) { +            h << " " << cppType((*itEntry)->paramType()) << " i "; +        } +        h << ")" << Const; +        // function body inline only if not using dpointer +        // for BC mode +        if (!cfg.dpointer) { +            h << endl << "    {" << endl; +            h << indent(memberAccessorBody(*itEntry, cfg.globalEnums, cfg), 6); +            h << "    }" << endl; +        } else { +            h << ";" << endl; +        } + +        // Default value Accessor +        if ((cfg.allDefaultGetters || cfg.defaultGetters.contains(n)) && !(*itEntry)->defaultValue().isEmpty()) { +            h << endl; +            h << "    /**" << endl; +            h << "      Get " << (*itEntry)->label() << " default value" << endl; +            h << "    */" << endl; +            if (cfg.staticAccessors) { +                h << "    static" << endl; +            } +            h << "    "; +            if (cfg.useEnumTypes && t == "Enum") { +                h << enumType(*itEntry, cfg.globalEnums); +            } else { +                h << cppType(t); +            } +            h << " " << getDefaultFunction(n) << "("; +            if (!(*itEntry)->param().isEmpty()) { +                h << " " << cppType((*itEntry)->paramType()) << " i "; +            } +            h << ")" << Const << endl; +            h << "    {" << endl; +            h << "        return "; +            if (cfg.useEnumTypes && t == "Enum") { +                h << "static_cast<" << enumType(*itEntry, cfg.globalEnums) << ">("; +            } +            h << getDefaultFunction(n) << "_helper("; +            if (!(*itEntry)->param().isEmpty()) { +                h << " i "; +            } +            h << ")"; +            if (cfg.useEnumTypes && t == "Enum") { +                h << ")";              } -          } +            h << ";" << endl; +            h << "    }" << endl;          } -        h << type << " " << argument.variableName; -        if ( ++it != itEnd ) { -         h << ", "; + +        // Item accessor +        if (cfg.itemAccessors) { +            h << endl; +            h << "    /**" << endl; +            h << "      Get Item object corresponding to " << n << "()" +              << endl; +            h << "    */" << endl; +            h << "    Item" << itemType((*itEntry)->type()) << " *" +              << getFunction(n) << "Item("; +            if (!(*itEntry)->param().isEmpty()) { +                h << " " << cppType((*itEntry)->paramType()) << " i "; +            } +            h << ")"; +            if (!cfg.dpointer) { +                h << endl << "    {" << endl; +                h << indent(itemAccessorBody((*itEntry), cfg), 6); +                h << "    }" << endl; +            } else { +                h << ";" << endl; +            }          } -      } -      h << ");" << endl; + +        h << endl;      } -    h << endl; -  } - -  h << "  protected:" << endl; - -  // Private constructor for singleton -  if ( cfg.singleton ) { -    h << "    " << cfg.className << "("; -    if ( cfgFileNameArg ) -      h << "const QString& arg"; -    h << ");" << endl; -    h << "    friend class " << cfg.className << "Helper;" << endl << endl; -  } - -  if ( hasSignals ) { -    h << "    virtual bool usrWriteConfig();" << endl; -  } - -  // Member variables -  if ( !cfg.memberVariables.isEmpty() && cfg.memberVariables != "private" && cfg.memberVariables != "dpointer") { -    h << "  " << cfg.memberVariables << ":" << endl; -  } - -  // Class Parameters -  for (QList<Param>::ConstIterator it = parameters.constBegin(); -       it != parameters.constEnd(); ++it) -  { -     h << "    " << cppType((*it).type) << " mParam" << (*it).name << ";" << endl; -  } - -  if ( cfg.memberVariables != "dpointer" ) -  { -    QString group; -    for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -      if ( (*itEntry)->group() != group ) { -        group = (*itEntry)->group(); + +    // Signal definition. +    if (hasSignals) { +        h << endl; +        h << "  Q_SIGNALS:"; +        Q_FOREACH (const Signal &signal, signalList) { +            h << endl; +            if (!signal.label.isEmpty()) { +                h << "    /**" << endl; +                h << "      " << signal.label << endl; +                h << "    */" << endl; +            } +            h << "    void " << signal.name << "("; +            QList<SignalArguments>::ConstIterator it, itEnd = signal.arguments.constEnd(); +            for (it = signal.arguments.constBegin(); it != itEnd;) { +                SignalArguments argument = *it; +                QString type = param(argument.type); +                if (cfg.useEnumTypes && argument.type == "Enum") { +                    for (int i = 0, end = entries.count(); i < end; ++i) { +                        if (entries[i]->name() == argument.variableName) { +                            type = enumType(entries[i], cfg.globalEnums); +                            break; +                        } +                    } +                } +                h << type << " " << argument.variableName; +                if (++it != itEnd) { +                    h << ", "; +                } +            } +            h << ");" << endl; +        }          h << endl; -        h << "    // " << group << endl; -      } -      h << "    " << cppType( (*itEntry)->type() ) << " " << varName( (*itEntry)->name(), cfg ); -      if ( !(*itEntry)->param().isEmpty() ) -      { -        h << QString("[%1]").arg( (*itEntry)->paramMax()+1 ); -      } -      h << ";" << endl; - -      if ( cfg.allDefaultGetters || cfg.defaultGetters.contains((*itEntry)->name()) ) -      { -        h << "    "; -        if (cfg.staticAccessors) -          h << "static "; -        h << cppType((*itEntry)->type()) << " " << getDefaultFunction((*itEntry)->name()) << "_helper("; -        if ( !(*itEntry)->param().isEmpty() ) -            h << " " << cppType( (*itEntry)->paramType() ) <<" i "; -        h << ")" << Const << ";" << endl; -      } -    } - -    h << endl << "  private:" << endl; -    if ( cfg.itemAccessors ) { -       for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -        h << "    Item" << itemType( (*itEntry)->type() ) << " *" << itemVar( *itEntry, cfg ); -        if ( !(*itEntry)->param().isEmpty() ) h << QString("[%1]").arg( (*itEntry)->paramMax()+1 ); -        h << ";" << endl; -      } -    } -    if ( hasSignals ) -     h << "    uint " << varName("settingsChanged", cfg) << ";" << endl; - -  } -  else -  { -    // use a private class for both member variables and items -    h << "  private:" << endl; -    for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -      if ( cfg.allDefaultGetters || cfg.defaultGetters.contains((*itEntry)->name()) ) { -        h << "    "; -        if (cfg.staticAccessors) -          h << "static "; -        h << cppType((*itEntry)->type()) << " " << getDefaultFunction((*itEntry)->name()) << "_helper("; -        if ( !(*itEntry)->param().isEmpty() ) -            h << " " << cppType( (*itEntry)->paramType() ) <<" i "; -        h << ")" << Const << ";" << endl; -      }      } -    h << "    " + cfg.className + "Private *d;" << endl; -  } -  if (cfg.customAddons) -  { -     h << "    // Include custom additions" << endl; -     h << "    #include \"" << filenameOnly(baseName) << "_addons.h\"" <<endl; -  } +    h << "  protected:" << endl; -  h << "};" << endl << endl; +    // Private constructor for singleton +    if (cfg.singleton) { +        h << "    " << cfg.className << "("; +        if (cfgFileNameArg) { +            h << "const QString& arg"; +        } +        h << ");" << endl; +        h << "    friend class " << cfg.className << "Helper;" << endl << endl; +    } -  endNamespaces(cfg.nameSpace, h); +    if (hasSignals) { +        h << "    virtual bool usrWriteConfig();" << endl; +    } -  h << "#endif" << endl << endl; +    // Member variables +    if (!cfg.memberVariables.isEmpty() && cfg.memberVariables != "private" && cfg.memberVariables != "dpointer") { +        h << "  " << cfg.memberVariables << ":" << endl; +    } +    // Class Parameters +    for (QList<Param>::ConstIterator it = parameters.constBegin(); +            it != parameters.constEnd(); ++it) { +        h << "    " << cppType((*it).type) << " mParam" << (*it).name << ";" << endl; +    } -  header.close(); +    if (cfg.memberVariables != "dpointer") { +        QString group; +        for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +            if ((*itEntry)->group() != group) { +                group = (*itEntry)->group(); +                h << endl; +                h << "    // " << group << endl; +            } +            h << "    " << cppType((*itEntry)->type()) << " " << varName((*itEntry)->name(), cfg); +            if (!(*itEntry)->param().isEmpty()) { +                h << QString("[%1]").arg((*itEntry)->paramMax() + 1); +            } +            h << ";" << endl; + +            if (cfg.allDefaultGetters || cfg.defaultGetters.contains((*itEntry)->name())) { +                h << "    "; +                if (cfg.staticAccessors) { +                    h << "static "; +                } +                h << cppType((*itEntry)->type()) << " " << getDefaultFunction((*itEntry)->name()) << "_helper("; +                if (!(*itEntry)->param().isEmpty()) { +                    h << " " << cppType((*itEntry)->paramType()) << " i "; +                } +                h << ")" << Const << ";" << endl; +            } +        } -  QFile implementation( baseDir + implementationFileName ); -  if ( !implementation.open( QIODevice::WriteOnly ) ) { -    cerr << "Can not open '" << implementationFileName << "for writing." -              << endl; -    return 1; -  } +        h << endl << "  private:" << endl; +        if (cfg.itemAccessors) { +            for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +                h << "    Item" << itemType((*itEntry)->type()) << " *" << itemVar(*itEntry, cfg); +                if (!(*itEntry)->param().isEmpty()) { +                    h << QString("[%1]").arg((*itEntry)->paramMax() + 1); +                } +                h << ";" << endl; +            } +        } +        if (hasSignals) { +            h << "    uint " << varName("settingsChanged", cfg) << ";" << endl; +        } -  QTextStream cpp( &implementation ); +    } else { +        // use a private class for both member variables and items +        h << "  private:" << endl; +        for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +            if (cfg.allDefaultGetters || cfg.defaultGetters.contains((*itEntry)->name())) { +                h << "    "; +                if (cfg.staticAccessors) { +                    h << "static "; +                } +                h << cppType((*itEntry)->type()) << " " << getDefaultFunction((*itEntry)->name()) << "_helper("; +                if (!(*itEntry)->param().isEmpty()) { +                    h << " " << cppType((*itEntry)->paramType()) << " i "; +                } +                h << ")" << Const << ";" << endl; +            } +        } +        h << "    " + cfg.className + "Private *d;" << endl; +    } +    if (cfg.customAddons) { +        h << "    // Include custom additions" << endl; +        h << "    #include \"" << filenameOnly(baseName) << "_addons.h\"" << endl; +    } -  cpp << "// This file is generated by kconfig_compiler from " << QFileInfo(inputFilename).fileName() << "." << endl; -  cpp << "// All changes you do to this file will be lost." << endl << endl; +    h << "};" << endl << endl; -  cpp << "#include \"" << headerFileName << "\"" << endl << endl; +    endNamespaces(cfg.nameSpace, h); -  for( it = cfg.sourceIncludes.constBegin(); it != cfg.sourceIncludes.constEnd(); ++it ) { -    if ( (*it).startsWith('"') ) -      cpp << "#include " << *it << endl; -    else -      cpp << "#include <" << *it << ">" << endl; -  } +    h << "#endif" << endl << endl; -  if ( cfg.sourceIncludes.count() > 0 ) cpp << endl; +    header.close(); -  if ( cfg.setUserTexts && cfg.translationSystem==CfgConfig::KdeTranslation) -    cpp << "#include <klocalizedstring.h>" << endl << endl; +    QFile implementation(baseDir + implementationFileName); +    if (!implementation.open(QIODevice::WriteOnly)) { +        cerr << "Can not open '" << implementationFileName << "for writing." +             << endl; +        return 1; +    } -  // Header required by singleton implementation -  if ( cfg.singleton ) -    cpp << "#include <qglobal.h>" << endl << "#include <QtCore/QFile>" << endl << endl; -  if ( cfg.singleton && cfgFileNameArg ) -    cpp << "#include <QDebug>" << endl << endl; +    QTextStream cpp(&implementation); -  if ( !cfg.nameSpace.isEmpty() ) -    cpp << "using namespace " << cfg.nameSpace << ";" << endl << endl; +    cpp << "// This file is generated by kconfig_compiler from " << QFileInfo(inputFilename).fileName() << "." << endl; +    cpp << "// All changes you do to this file will be lost." << endl << endl; -  QString group; +    cpp << "#include \"" << headerFileName << "\"" << endl << endl; -  // private class implementation -  if ( cfg.dpointer ) -  { -    beginNamespaces(cfg.nameSpace, cpp); -    cpp << "class " << cfg.className << "Private" << endl; -    cpp << "{" << endl; -    cpp << "  public:" << endl; -    for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -      if ( (*itEntry)->group() != group ) { -        group = (*itEntry)->group(); +    for (it = cfg.sourceIncludes.constBegin(); it != cfg.sourceIncludes.constEnd(); ++it) { +        if ((*it).startsWith('"')) { +            cpp << "#include " << *it << endl; +        } else { +            cpp << "#include <" << *it << ">" << endl; +        } +    } + +    if (cfg.sourceIncludes.count() > 0) {          cpp << endl; -        cpp << "    // " << group << endl; -      } -      cpp << "    " << cppType( (*itEntry)->type() ) << " " << varName( (*itEntry)->name(), cfg ); -      if ( !(*itEntry)->param().isEmpty() ) -      { -        cpp << QString("[%1]").arg( (*itEntry)->paramMax()+1 ); -      } -      cpp << ";" << endl; -    } -    cpp << endl << "    // items" << endl; -    for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -      cpp << "    "+cfg.inherits+"::Item" << itemType( (*itEntry)->type() ) << " *" << itemVar( *itEntry, cfg ); -      if ( !(*itEntry)->param().isEmpty() ) cpp << QString("[%1]").arg( (*itEntry)->paramMax()+1 ); -        cpp << ";" << endl; -    } -    if ( hasSignals ) { -      cpp << "    uint " << varName("settingsChanged", cfg) << ";" << endl; -    } - -    cpp << "};" << endl << endl; -    endNamespaces(cfg.nameSpace, cpp); -  } - -  // Singleton implementation -  if ( cfg.singleton ) { -    beginNamespaces(cfg.nameSpace, cpp); -    cpp << "class " << cfg.className << "Helper" << endl; -    cpp << '{' << endl; -    cpp << "  public:" << endl; -    cpp << "    " << cfg.className << "Helper() : q(0) {}" << endl; -    cpp << "    ~" << cfg.className << "Helper() { delete q; }" << endl; -    cpp << "    " << cfg.className << " *q;" << endl; -    cpp << "};" << endl; -    endNamespaces(cfg.nameSpace, cpp); -    cpp << "Q_GLOBAL_STATIC(" << cfg.className << "Helper, s_global" << cfg.className << ")" << endl; - -    cpp << cfg.className << " *" << cfg.className << "::self()" << endl; -    cpp << "{" << endl; -    if ( cfgFileNameArg ) { -      cpp << "  if (!s_global" << cfg.className << "()->q)" << endl; -      cpp << "     qFatal(\"you need to call " << cfg.className << "::instance before using\");" << endl; -    } else { -      cpp << "  if (!s_global" << cfg.className << "()->q) {" << endl; -      cpp << "    new " << cfg.className << ';' << endl; -      cpp << "    s_global" << cfg.className << "()->q->readConfig();" << endl; -      cpp << "  }" << endl << endl;      } -    cpp << "  return s_global" << cfg.className << "()->q;" << endl; -    cpp << "}" << endl << endl; -    if ( cfgFileNameArg ) { -      cpp << "void " << cfg.className << "::instance(const QString& cfgfilename)" << endl; -      cpp << "{" << endl; -      cpp << "  if (s_global" << cfg.className << "()->q) {" << endl; -      cpp << "     qDebug() << \"" << cfg.className << "::instance called after the first use - ignoring\";" << endl; -      cpp << "     return;" << endl; -      cpp << "  }" << endl; -      cpp << "  new " << cfg.className << "(cfgfilename);" << endl; -      cpp << "  s_global" << cfg.className << "()->q->readConfig();" << endl; -      cpp << "}" << endl << endl; -    } -  } - -  if ( !cppPreamble.isEmpty() ) -    cpp << cppPreamble << endl; - -  // Constructor -  cpp << cfg.className << "::" << cfg.className << "( "; -  if ( cfgFileNameArg ) { -    if ( !cfg.singleton && ! cfg.forceStringFilename) -      cpp << " KSharedConfig::Ptr config"; -    else -      cpp << " const QString& config"; -    cpp << (parameters.isEmpty() ? " " : ", "); -  } - -  for (QList<Param>::ConstIterator it = parameters.constBegin(); -       it != parameters.constEnd(); ++it) -  { -     if (it != parameters.constBegin()) -       cpp << ","; -     cpp << " " << param((*it).type) << " " << (*it).name; -  } -  cpp << " )" << endl; - -  cpp << "  : " << cfg.inherits << "("; -  if ( !cfgFileName.isEmpty() ) cpp << " QLatin1String( \"" << cfgFileName << "\" "; -  if ( cfgFileNameArg ) cpp << " config "; -  if ( !cfgFileName.isEmpty() ) cpp << ") "; -  cpp << ")" << endl; - -  // Store parameters -  for (QList<Param>::ConstIterator it = parameters.constBegin(); -       it != parameters.constEnd(); ++it) -  { -     cpp << "  , mParam" << (*it).name << "(" << (*it).name << ")" << endl; -  } - -  if ( hasSignals && !cfg.dpointer ) -    cpp << "  , " << varName("settingsChanged", cfg) << "(0)" << endl; - -  cpp << "{" << endl; - -  if (cfg.dpointer) -  { -    cpp << "  d = new " + cfg.className + "Private;" << endl; -    if (hasSignals) -      cpp << "  " << varPath("settingsChanged", cfg) << " = 0;" << endl; -  } -  // Needed in case the singleton class is used as baseclass for -  // another singleton. -  if (cfg.singleton) { -    cpp << "  Q_ASSERT(!s_global" << cfg.className << "()->q);" << endl; -    cpp << "  s_global" << cfg.className << "()->q = this;" << endl; -  } - -  group.clear(); - -  for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -    if ( (*itEntry)->group() != group ) { -      if ( !group.isEmpty() ) cpp << endl; -      group = (*itEntry)->group(); -      cpp << "  setCurrentGroup( " << paramString(group, parameters) << " );" << endl << endl; -    } - -    QString key = paramString( (*itEntry)->key(), parameters ); -    if ( !(*itEntry)->code().isEmpty() ) { -      cpp << (*itEntry)->code() << endl; -    } -    if ( (*itEntry)->type() == "Enum" ) { -      cpp << "  QList<"+cfg.inherits+"::ItemEnum::Choice> values" -          << (*itEntry)->name() << ";" << endl; -      const QList<CfgEntry::Choice> choices = (*itEntry)->choices().choices; -      QList<CfgEntry::Choice>::ConstIterator it; -      for( it = choices.constBegin(); it != choices.constEnd(); ++it ) { -        cpp << "  {" << endl; -        cpp << "    "+cfg.inherits+"::ItemEnum::Choice choice;" << endl; -        cpp << "    choice.name = QLatin1String(\"" << (*it).name << "\");" << endl; -        if ( cfg.setUserTexts ) { -          if ( !(*it).label.isEmpty() ) { -            cpp << "    choice.label = " -                << translatedString(cfg, (*it).label, (*it).context) -                << ";" << endl; -          } -          if ( !(*it).toolTip.isEmpty() ) { -            cpp << "    choice.toolTip = " -                << translatedString(cfg, (*it).toolTip, (*it).context) -                << ";" << endl; -          } -          if ( !(*it).whatsThis.isEmpty() ) { -            cpp << "    choice.whatsThis = " -                << translatedString(cfg, (*it).whatsThis, (*it).context) -                << ";" << endl; -          } -        } -        cpp << "    values" << (*itEntry)->name() << ".append( choice );" << endl; -        cpp << "  }" << endl; -      } -    } - -    if (!cfg.dpointer) -      cpp << itemDeclaration( *itEntry, cfg ); - -    if ( (*itEntry)->param().isEmpty() ) -    { -      // Normal case -      cpp << "  " << itemPath( *itEntry, cfg ) << " = " -          << newItem( (*itEntry)->type(), (*itEntry)->name(), key, (*itEntry)->defaultValue(), cfg ) << endl; +    if (cfg.setUserTexts && cfg.translationSystem == CfgConfig::KdeTranslation) { +        cpp << "#include <klocalizedstring.h>" << endl << endl; +    } -      if ( !(*itEntry)->minValue().isEmpty() ) -        cpp << "  " << itemPath( *itEntry, cfg ) << "->setMinValue(" << (*itEntry)->minValue() << ");" << endl; -      if ( !(*itEntry)->maxValue().isEmpty() ) -        cpp << "  " << itemPath( *itEntry, cfg ) << "->setMaxValue(" << (*itEntry)->maxValue() << ");" << endl; +    // Header required by singleton implementation +    if (cfg.singleton) { +        cpp << "#include <qglobal.h>" << endl << "#include <QtCore/QFile>" << endl << endl; +    } +    if (cfg.singleton && cfgFileNameArg) { +        cpp << "#include <QDebug>" << endl << endl; +    } + +    if (!cfg.nameSpace.isEmpty()) { +        cpp << "using namespace " << cfg.nameSpace << ";" << endl << endl; +    } + +    QString group; -      if ( cfg.setUserTexts ) -        cpp << userTextsFunctions( (*itEntry), cfg ); +    // private class implementation +    if (cfg.dpointer) { +        beginNamespaces(cfg.nameSpace, cpp); +        cpp << "class " << cfg.className << "Private" << endl; +        cpp << "{" << endl; +        cpp << "  public:" << endl; +        for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +            if ((*itEntry)->group() != group) { +                group = (*itEntry)->group(); +                cpp << endl; +                cpp << "    // " << group << endl; +            } +            cpp << "    " << cppType((*itEntry)->type()) << " " << varName((*itEntry)->name(), cfg); +            if (!(*itEntry)->param().isEmpty()) { +                cpp << QString("[%1]").arg((*itEntry)->paramMax() + 1); +            } +            cpp << ";" << endl; +        } +        cpp << endl << "    // items" << endl; +        for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +            cpp << "    " + cfg.inherits + "::Item" << itemType((*itEntry)->type()) << " *" << itemVar(*itEntry, cfg); +            if (!(*itEntry)->param().isEmpty()) { +                cpp << QString("[%1]").arg((*itEntry)->paramMax() + 1); +            } +            cpp << ";" << endl; +        } +        if (hasSignals) { +            cpp << "    uint " << varName("settingsChanged", cfg) << ";" << endl; +        } -      cpp << "  addItem( " << itemPath( *itEntry, cfg ); -      QString quotedName = (*itEntry)->name(); -      addQuotes( quotedName ); -      if ( quotedName != key ) cpp << ", QLatin1String( \"" << (*itEntry)->name() << "\" )"; -      cpp << " );" << endl; +        cpp << "};" << endl << endl; +        endNamespaces(cfg.nameSpace, cpp);      } -    else -    { -      // Indexed -      for(int i = 0; i <= (*itEntry)->paramMax(); i++) -      { -        QString defaultStr; -        QString itemVarStr(itemPath( *itEntry, cfg )+QString("[%1]").arg(i)); - -        if ( !(*itEntry)->paramDefaultValue(i).isEmpty() ) -          defaultStr = (*itEntry)->paramDefaultValue(i); -        else if ( !(*itEntry)->defaultValue().isEmpty() ) -          defaultStr = paramString( (*itEntry)->defaultValue(), (*itEntry), i ); -        else -          defaultStr = defaultValue( (*itEntry)->type() ); - -        cpp << "  " << itemVarStr << " = " -            << newItem( (*itEntry)->type(), (*itEntry)->name(), paramString(key, *itEntry, i), defaultStr,cfg,  QString("[%1]").arg(i) ) -            << endl; - -        if ( cfg.setUserTexts ) -          cpp << userTextsFunctions( *itEntry, cfg, itemVarStr, (*itEntry)->paramName() ); - -        // Make mutators for enum parameters work by adding them with $(..) replaced by the -        // param name. The check for isImmutable in the set* functions doesn't have the param -        // name available, just the corresponding enum value (int), so we need to store the -        // param names in a separate static list!. -        cpp << "  addItem( " << itemVarStr << ", QLatin1String( \""; -        if ( (*itEntry)->paramType()=="Enum" ) -          cpp << (*itEntry)->paramName().replace( "$("+(*itEntry)->param()+')', "%1").arg((*itEntry)->paramValues()[i] ); -        else -          cpp << (*itEntry)->paramName().replace( "$("+(*itEntry)->param()+')', "%1").arg(i); -        cpp << "\" ) );" << endl; -      } -    } -  } - -  cpp << "}" << endl << endl; - -  if (cfg.dpointer) -  { -    // setters and getters go in Cpp if in dpointer mode -    for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -      QString n = (*itEntry)->name(); -      QString t = (*itEntry)->type(); - -      // Manipulator -      if (cfg.allMutators || cfg.mutators.contains(n)) -      { -        cpp << "void " << setFunction(n, cfg.className) << "( "; -        if ( !(*itEntry)->param().isEmpty() ) -          cpp << cppType( (*itEntry)->paramType() ) << " i, "; -        if (cfg.useEnumTypes && t == "Enum") -          cpp << enumType(*itEntry, cfg.globalEnums); -        else -          cpp << param( t ); -        cpp << " v )" << endl; -        // function body inline only if not using dpointer -        // for BC mode + +    // Singleton implementation +    if (cfg.singleton) { +        beginNamespaces(cfg.nameSpace, cpp); +        cpp << "class " << cfg.className << "Helper" << endl; +        cpp << '{' << endl; +        cpp << "  public:" << endl; +        cpp << "    " << cfg.className << "Helper() : q(0) {}" << endl; +        cpp << "    ~" << cfg.className << "Helper() { delete q; }" << endl; +        cpp << "    " << cfg.className << " *q;" << endl; +        cpp << "};" << endl; +        endNamespaces(cfg.nameSpace, cpp); +        cpp << "Q_GLOBAL_STATIC(" << cfg.className << "Helper, s_global" << cfg.className << ")" << endl; + +        cpp << cfg.className << " *" << cfg.className << "::self()" << endl;          cpp << "{" << endl; -        cpp << indent(memberMutatorBody( *itEntry, cfg ), 6); +        if (cfgFileNameArg) { +            cpp << "  if (!s_global" << cfg.className << "()->q)" << endl; +            cpp << "     qFatal(\"you need to call " << cfg.className << "::instance before using\");" << endl; +        } else { +            cpp << "  if (!s_global" << cfg.className << "()->q) {" << endl; +            cpp << "    new " << cfg.className << ';' << endl; +            cpp << "    s_global" << cfg.className << "()->q->readConfig();" << endl; +            cpp << "  }" << endl << endl; +        } +        cpp << "  return s_global" << cfg.className << "()->q;" << endl;          cpp << "}" << endl << endl; -      } - -      // Accessor -      if (cfg.useEnumTypes && t == "Enum") -        cpp << enumType(*itEntry, cfg.globalEnums); -      else -        cpp << cppType(t); -      cpp << " " << getFunction(n, cfg.className) << "("; -      if ( !(*itEntry)->param().isEmpty() ) -        cpp << " " << cppType( (*itEntry)->paramType() ) <<" i "; -      cpp << ")" << Const << endl; -      // function body inline only if not using dpointer -      // for BC mode -      cpp << "{" << endl; -      cpp << indent(memberAccessorBody( *itEntry, cfg.globalEnums, cfg ), 2); -      cpp << "}" << endl << endl; - -      // Default value Accessor -- written by the loop below - -      // Item accessor -      if ( cfg.itemAccessors ) -      { -        cpp << endl; -        cpp << cfg.inherits+"::Item" << itemType( (*itEntry)->type() ) << " *" -          << getFunction( n, cfg.className ) << "Item("; -        if ( !(*itEntry)->param().isEmpty() ) { -          cpp << " " << cppType( (*itEntry)->paramType() ) << " i "; + +        if (cfgFileNameArg) { +            cpp << "void " << cfg.className << "::instance(const QString& cfgfilename)" << endl; +            cpp << "{" << endl; +            cpp << "  if (s_global" << cfg.className << "()->q) {" << endl; +            cpp << "     qDebug() << \"" << cfg.className << "::instance called after the first use - ignoring\";" << endl; +            cpp << "     return;" << endl; +            cpp << "  }" << endl; +            cpp << "  new " << cfg.className << "(cfgfilename);" << endl; +            cpp << "  s_global" << cfg.className << "()->q->readConfig();" << endl; +            cpp << "}" << endl << endl;          } -        cpp << ")" << endl; -        cpp << "{" << endl; -        cpp << indent(itemAccessorBody( *itEntry, cfg ), 2); -        cpp << "}" << endl; -      } - -      cpp << endl; -    } -  } - -  // default value getters always go in Cpp -  for( itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry ) { -    QString n = (*itEntry)->name(); -    QString t = (*itEntry)->type(); - -    // Default value Accessor, as "helper" function -    if (( cfg.allDefaultGetters || cfg.defaultGetters.contains(n) ) && !(*itEntry)->defaultValue().isEmpty() ) { -      cpp << cppType(t) << " " << getDefaultFunction(n, cfg.className) << "_helper("; -      if ( !(*itEntry)->param().isEmpty() ) -        cpp << " " << cppType( (*itEntry)->paramType() ) <<" i "; -      cpp << ")" << Const << endl; -      cpp << "{" << endl; -      cpp << memberGetDefaultBody(*itEntry) << endl; -      cpp << "}" << endl << endl; -    } -  } - -  // Destructor -  cpp << cfg.className << "::~" << cfg.className << "()" << endl; -  cpp << "{" << endl; -  if ( cfg.singleton ) { -    if ( cfg.dpointer ) -      cpp << "  delete d;" << endl; -    cpp << "  s_global" << cfg.className << "()->q = 0;" << endl; -  } -  cpp << "}" << endl << endl; - -  if ( hasSignals ) { -    cpp << "bool " << cfg.className << "::" << "usrWriteConfig()" << endl; +    } + +    if (!cppPreamble.isEmpty()) { +        cpp << cppPreamble << endl; +    } + +    // Constructor +    cpp << cfg.className << "::" << cfg.className << "( "; +    if (cfgFileNameArg) { +        if (!cfg.singleton && ! cfg.forceStringFilename) { +            cpp << " KSharedConfig::Ptr config"; +        } else { +            cpp << " const QString& config"; +        } +        cpp << (parameters.isEmpty() ? " " : ", "); +    } + +    for (QList<Param>::ConstIterator it = parameters.constBegin(); +            it != parameters.constEnd(); ++it) { +        if (it != parameters.constBegin()) { +            cpp << ","; +        } +        cpp << " " << param((*it).type) << " " << (*it).name; +    } +    cpp << " )" << endl; + +    cpp << "  : " << cfg.inherits << "("; +    if (!cfgFileName.isEmpty()) { +        cpp << " QLatin1String( \"" << cfgFileName << "\" "; +    } +    if (cfgFileNameArg) { +        cpp << " config "; +    } +    if (!cfgFileName.isEmpty()) { +        cpp << ") "; +    } +    cpp << ")" << endl; + +    // Store parameters +    for (QList<Param>::ConstIterator it = parameters.constBegin(); +            it != parameters.constEnd(); ++it) { +        cpp << "  , mParam" << (*it).name << "(" << (*it).name << ")" << endl; +    } + +    if (hasSignals && !cfg.dpointer) { +        cpp << "  , " << varName("settingsChanged", cfg) << "(0)" << endl; +    } + +    cpp << "{" << endl; + +    if (cfg.dpointer) { +        cpp << "  d = new " + cfg.className + "Private;" << endl; +        if (hasSignals) { +            cpp << "  " << varPath("settingsChanged", cfg) << " = 0;" << endl; +        } +    } +    // Needed in case the singleton class is used as baseclass for +    // another singleton. +    if (cfg.singleton) { +        cpp << "  Q_ASSERT(!s_global" << cfg.className << "()->q);" << endl; +        cpp << "  s_global" << cfg.className << "()->q = this;" << endl; +    } + +    group.clear(); + +    for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +        if ((*itEntry)->group() != group) { +            if (!group.isEmpty()) { +                cpp << endl; +            } +            group = (*itEntry)->group(); +            cpp << "  setCurrentGroup( " << paramString(group, parameters) << " );" << endl << endl; +        } + +        QString key = paramString((*itEntry)->key(), parameters); +        if (!(*itEntry)->code().isEmpty()) { +            cpp << (*itEntry)->code() << endl; +        } +        if ((*itEntry)->type() == "Enum") { +            cpp << "  QList<" + cfg.inherits + "::ItemEnum::Choice> values" +                << (*itEntry)->name() << ";" << endl; +            const QList<CfgEntry::Choice> choices = (*itEntry)->choices().choices; +            QList<CfgEntry::Choice>::ConstIterator it; +            for (it = choices.constBegin(); it != choices.constEnd(); ++it) { +                cpp << "  {" << endl; +                cpp << "    " + cfg.inherits + "::ItemEnum::Choice choice;" << endl; +                cpp << "    choice.name = QLatin1String(\"" << (*it).name << "\");" << endl; +                if (cfg.setUserTexts) { +                    if (!(*it).label.isEmpty()) { +                        cpp << "    choice.label = " +                            << translatedString(cfg, (*it).label, (*it).context) +                            << ";" << endl; +                    } +                    if (!(*it).toolTip.isEmpty()) { +                        cpp << "    choice.toolTip = " +                            << translatedString(cfg, (*it).toolTip, (*it).context) +                            << ";" << endl; +                    } +                    if (!(*it).whatsThis.isEmpty()) { +                        cpp << "    choice.whatsThis = " +                            << translatedString(cfg, (*it).whatsThis, (*it).context) +                            << ";" << endl; +                    } +                } +                cpp << "    values" << (*itEntry)->name() << ".append( choice );" << endl; +                cpp << "  }" << endl; +            } +        } + +        if (!cfg.dpointer) { +            cpp << itemDeclaration(*itEntry, cfg); +        } + +        if ((*itEntry)->param().isEmpty()) { +            // Normal case +            cpp << "  " << itemPath(*itEntry, cfg) << " = " +                << newItem((*itEntry)->type(), (*itEntry)->name(), key, (*itEntry)->defaultValue(), cfg) << endl; + +            if (!(*itEntry)->minValue().isEmpty()) { +                cpp << "  " << itemPath(*itEntry, cfg) << "->setMinValue(" << (*itEntry)->minValue() << ");" << endl; +            } +            if (!(*itEntry)->maxValue().isEmpty()) { +                cpp << "  " << itemPath(*itEntry, cfg) << "->setMaxValue(" << (*itEntry)->maxValue() << ");" << endl; +            } + +            if (cfg.setUserTexts) { +                cpp << userTextsFunctions((*itEntry), cfg); +            } + +            cpp << "  addItem( " << itemPath(*itEntry, cfg); +            QString quotedName = (*itEntry)->name(); +            addQuotes(quotedName); +            if (quotedName != key) { +                cpp << ", QLatin1String( \"" << (*itEntry)->name() << "\" )"; +            } +            cpp << " );" << endl; +        } else { +            // Indexed +            for (int i = 0; i <= (*itEntry)->paramMax(); i++) { +                QString defaultStr; +                QString itemVarStr(itemPath(*itEntry, cfg) + QString("[%1]").arg(i)); + +                if (!(*itEntry)->paramDefaultValue(i).isEmpty()) { +                    defaultStr = (*itEntry)->paramDefaultValue(i); +                } else if (!(*itEntry)->defaultValue().isEmpty()) { +                    defaultStr = paramString((*itEntry)->defaultValue(), (*itEntry), i); +                } else { +                    defaultStr = defaultValue((*itEntry)->type()); +                } + +                cpp << "  " << itemVarStr << " = " +                    << newItem((*itEntry)->type(), (*itEntry)->name(), paramString(key, *itEntry, i), defaultStr, cfg,  QString("[%1]").arg(i)) +                    << endl; + +                if (cfg.setUserTexts) { +                    cpp << userTextsFunctions(*itEntry, cfg, itemVarStr, (*itEntry)->paramName()); +                } + +                // Make mutators for enum parameters work by adding them with $(..) replaced by the +                // param name. The check for isImmutable in the set* functions doesn't have the param +                // name available, just the corresponding enum value (int), so we need to store the +                // param names in a separate static list!. +                cpp << "  addItem( " << itemVarStr << ", QLatin1String( \""; +                if ((*itEntry)->paramType() == "Enum") { +                    cpp << (*itEntry)->paramName().replace("$(" + (*itEntry)->param() + ')', "%1").arg((*itEntry)->paramValues()[i]); +                } else { +                    cpp << (*itEntry)->paramName().replace("$(" + (*itEntry)->param() + ')', "%1").arg(i); +                } +                cpp << "\" ) );" << endl; +            } +        } +    } + +    cpp << "}" << endl << endl; + +    if (cfg.dpointer) { +        // setters and getters go in Cpp if in dpointer mode +        for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +            QString n = (*itEntry)->name(); +            QString t = (*itEntry)->type(); + +            // Manipulator +            if (cfg.allMutators || cfg.mutators.contains(n)) { +                cpp << "void " << setFunction(n, cfg.className) << "( "; +                if (!(*itEntry)->param().isEmpty()) { +                    cpp << cppType((*itEntry)->paramType()) << " i, "; +                } +                if (cfg.useEnumTypes && t == "Enum") { +                    cpp << enumType(*itEntry, cfg.globalEnums); +                } else { +                    cpp << param(t); +                } +                cpp << " v )" << endl; +                // function body inline only if not using dpointer +                // for BC mode +                cpp << "{" << endl; +                cpp << indent(memberMutatorBody(*itEntry, cfg), 6); +                cpp << "}" << endl << endl; +            } + +            // Accessor +            if (cfg.useEnumTypes && t == "Enum") { +                cpp << enumType(*itEntry, cfg.globalEnums); +            } else { +                cpp << cppType(t); +            } +            cpp << " " << getFunction(n, cfg.className) << "("; +            if (!(*itEntry)->param().isEmpty()) { +                cpp << " " << cppType((*itEntry)->paramType()) << " i "; +            } +            cpp << ")" << Const << endl; +            // function body inline only if not using dpointer +            // for BC mode +            cpp << "{" << endl; +            cpp << indent(memberAccessorBody(*itEntry, cfg.globalEnums, cfg), 2); +            cpp << "}" << endl << endl; + +            // Default value Accessor -- written by the loop below + +            // Item accessor +            if (cfg.itemAccessors) { +                cpp << endl; +                cpp << cfg.inherits + "::Item" << itemType((*itEntry)->type()) << " *" +                    << getFunction(n, cfg.className) << "Item("; +                if (!(*itEntry)->param().isEmpty()) { +                    cpp << " " << cppType((*itEntry)->paramType()) << " i "; +                } +                cpp << ")" << endl; +                cpp << "{" << endl; +                cpp << indent(itemAccessorBody(*itEntry, cfg), 2); +                cpp << "}" << endl; +            } + +            cpp << endl; +        } +    } + +    // default value getters always go in Cpp +    for (itEntry = entries.constBegin(); itEntry != entries.constEnd(); ++itEntry) { +        QString n = (*itEntry)->name(); +        QString t = (*itEntry)->type(); + +        // Default value Accessor, as "helper" function +        if ((cfg.allDefaultGetters || cfg.defaultGetters.contains(n)) && !(*itEntry)->defaultValue().isEmpty()) { +            cpp << cppType(t) << " " << getDefaultFunction(n, cfg.className) << "_helper("; +            if (!(*itEntry)->param().isEmpty()) { +                cpp << " " << cppType((*itEntry)->paramType()) << " i "; +            } +            cpp << ")" << Const << endl; +            cpp << "{" << endl; +            cpp << memberGetDefaultBody(*itEntry) << endl; +            cpp << "}" << endl << endl; +        } +    } + +    // Destructor +    cpp << cfg.className << "::~" << cfg.className << "()" << endl;      cpp << "{" << endl; -    cpp << "  const bool res = " << cfg.inherits << "::usrWriteConfig();" << endl; -    cpp << "  if (!res) return false;" << endl << endl; -    Q_FOREACH(const Signal &signal, signalList) { -      cpp << "  if ( " << varPath("settingsChanged", cfg) << " & " << signalEnumName(signal.name) << " ) " << endl; -      cpp << "    emit " << signal.name << "("; -      QList<SignalArguments>::ConstIterator it, itEnd = signal.arguments.constEnd(); -      for ( it = signal.arguments.constBegin(); it != itEnd; ) { -        SignalArguments argument = *it; -        bool cast = false; -        if ( cfg.useEnumTypes && argument.type == "Enum" ) { -          for ( int i = 0, end = entries.count(); i < end; ++i ) { -            if ( entries[i]->name() == argument.variableName ) { -              cpp << "static_cast<" << enumType(entries[i], cfg.globalEnums) << ">("; -              cast = true; -              break; +    if (cfg.singleton) { +        if (cfg.dpointer) { +            cpp << "  delete d;" << endl; +        } +        cpp << "  s_global" << cfg.className << "()->q = 0;" << endl; +    } +    cpp << "}" << endl << endl; + +    if (hasSignals) { +        cpp << "bool " << cfg.className << "::" << "usrWriteConfig()" << endl; +        cpp << "{" << endl; +        cpp << "  const bool res = " << cfg.inherits << "::usrWriteConfig();" << endl; +        cpp << "  if (!res) return false;" << endl << endl; +        Q_FOREACH (const Signal &signal, signalList) { +            cpp << "  if ( " << varPath("settingsChanged", cfg) << " & " << signalEnumName(signal.name) << " ) " << endl; +            cpp << "    emit " << signal.name << "("; +            QList<SignalArguments>::ConstIterator it, itEnd = signal.arguments.constEnd(); +            for (it = signal.arguments.constBegin(); it != itEnd;) { +                SignalArguments argument = *it; +                bool cast = false; +                if (cfg.useEnumTypes && argument.type == "Enum") { +                    for (int i = 0, end = entries.count(); i < end; ++i) { +                        if (entries[i]->name() == argument.variableName) { +                            cpp << "static_cast<" << enumType(entries[i], cfg.globalEnums) << ">("; +                            cast = true; +                            break; +                        } +                    } +                } +                cpp << varPath(argument.variableName, cfg); +                if (cast) { +                    cpp << ")"; +                } +                if (++it != itEnd) { +                    cpp << ", "; +                }              } -          } -        } -        cpp << varPath(argument.variableName, cfg); -        if ( cast ) -          cpp << ")"; -        if ( ++it != itEnd ) -          cpp << ", "; -      } -      cpp << ");" << endl << endl; -    } -    cpp << "  " << varPath("settingsChanged", cfg) << " = 0;" << endl; -    cpp << "  return true;" << endl; -    cpp << "}" << endl; -  } - -  // Add includemoc if they are signals defined. -  if( hasSignals ) { -    cpp << endl; -    cpp << "#include \"" << mocFileName << "\"" << endl; -    cpp << endl; -  } - -  // clear entries list -  qDeleteAll( entries ); - -  implementation.close(); +            cpp << ");" << endl << endl; +        } +        cpp << "  " << varPath("settingsChanged", cfg) << " = 0;" << endl; +        cpp << "  return true;" << endl; +        cpp << "}" << endl; +    } + +    // Add includemoc if they are signals defined. +    if (hasSignals) { +        cpp << endl; +        cpp << "#include \"" << mocFileName << "\"" << endl; +        cpp << endl; +    } + +    // clear entries list +    qDeleteAll(entries); + +    implementation.close();  } | 
