Warning, /frameworks/kconfig/DESIGN is written in an unsupported language. File is not indexed.
0001 If you add a major new feature, suggest using it in
0002 http://techbase.kde.org/Development/Tutorials/KConfig
0003
0004 kconfigdata_p.h contains definitions of the data formats used by kconfig.
0005
0006 Configuration entries are stored as "KEntry". They are indexed with "KEntryKey".
0007 The primary store is a "KEntryMap" which is defined as a std::map from "KEntryKey"
0008 to "KEntry"
0009
0010 KEntry's are stored in order in the KEntryMap. The most significant sort
0011 criteria is mGroup. This means that all entries who belong in the same group,
0012 are grouped in the std::map as well.
0013
0014 The start of a group is indicated with a KEntryKey with an empty mKey and a
0015 dummy KEntry. This allows us to search for the start of the group and then to
0016 iterate until we end up in another group. That way we will find all entries
0017 of a certain group.
0018
0019 Entries that are localised with the _current_ locale are stored with bLocal
0020 set to true. Entries that are localised with another locale are either not
0021 stored at all (default), or with the localization as part of the key and bRaw
0022 set to true (when reading a file in order to merge it).
0023
0024 Entries that are being read from a location other than the location to
0025 which is written back are marked as "default" and will be added both as
0026 normal entry as well as an entry with the key marked as default.
0027
0028 When the configuration is synced to disk, the current on-disk state is re-read
0029 into a temporary map, updated with dirty (modified) entries from the
0030 current config object's entry map and then written back.
0031
0032
0033 Note that there is a subtle difference between revertToDefault() and deleteEntry().
0034 revertToDefault() will change the entry to the default value set by the system
0035 administrator (Via e.g. $KDEDIR/share/config) or, if no such default was set,
0036 non-existent.
0037 deleteEntry() will make the entry non-existent. If if the system administrator
0038 has specified a default value, the local entry is marked with [$d].
0039
0040 Entries are marked "immutable" if the key is followed by [$i] (e.g. 'key[$i]=value');
0041 groups are marked "immutable" if the group is followed by [$i] (.e.g '[GroupName][$i]').
0042 An "immutable" entry/group cannot be overriden by the user.
0043
0044 For more details see docs/options.md.
0045
0046
0047 ------------------------------------------------------------------------------
0048
0049 KConfig XT
0050 ==========
0051
0052 My buzzword picker offered KConfig XT ("eXtended Technology") and KConfig NG
0053 ("Next Generation"). Since the planned changes are meant to be evolutionary
0054 rather than revolutionary, KConfig NG was dropped.
0055
0056 Goals
0057 =====
0058
0059 * Have the default value for config entries defined in 1 place. Currently it is
0060 not uncommon to have them defined in three places:
0061 1) In the application that reads the setting in order to use it
0062 2) In the settings dialog when reading the setting
0063 3) In the settings dialog when selecting "Use defaults".
0064
0065 * Provide type-information about config entries to facilate "KConfEdit" like
0066 tools. Ideally type-information also includes range-information; this is even
0067 mandatory if enums become an explicit type.
0068
0069 * Facilitate the documentation of config entries.
0070
0071 KCoreConfigSkeleton
0072 |
0073 v
0074 KConfigSkeleton /--< myapp.kcfg
0075 | /
0076 |*---------------<
0077 |kconfig_compiler \
0078 | \--< myconfig.kcfgc
0079 v
0080 MyConfig <-----KConfigDialogManager----> MyConfigWidget *---< myconfigwidget.ui
0081 uic
0082
0083 KCoreConfigSkeleton/ base class for deriving classes that store application
0084 KConfigSkeleton: specific options providing type-safety and single-point
0085 defaults.
0086
0087 MyConfig: An application specific class that offers configuration options
0088 to the applications via variables or accessor functions and that
0089 handles type-safety and defaults. MyConfig is just an example
0090 name, the application developer choses the actual name.
0091
0092 myapp.kcfg: File describing the configuration options used by a specific
0093 application. myapp.kcfg is just an example name, the application
0094 developer choses the actual name.
0095
0096 myconfig.kcfgc: Implementation specific code generation instructions
0097 for the MyConfig class. myconfig.kcfgc is
0098 just an example name, the application developer
0099 choses the actual name.
0100
0101 KConfigDialogManager: Class that links widgets in a dialog up with their
0102 corresponding configuration options in a configuration
0103 object derived from KConfigSkeleton.
0104
0105 MyConfigWidget: Dialog generated from a .ui description file. Widget names
0106 in the dialog that start with "kcfg_" refer to configuration
0107 options.
0108
0109 See http://techbase.kde.org/Development/Tutorials/Using_KConfig_XT