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