00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00057
00058
00059
00060 #ifndef __MXM_CONFIGSECTION_H__
00061 #define __MXM_CONFIGSECTION_H__
00062
00063
00064
00065 #include <mxm/core/mxmPerlStyleHash.h>
00066 #include <mxm/core/mxm_generic_stuff.h>
00067
00068 #ifdef MX_PLATFORM_CAMERA
00069 extern "C" {
00070 #include <mxsystem/mx_camera_services.h>
00071 }
00072 #endif
00073
00074
00075
00127 class MXM_CORE_API mxmConfigSection : public mxmObject {
00128
00129 public:
00130 static const char *LegacyProfileStringKey;
00131 static const char *WhitespaceCharacters;
00132
00141
00142 static const mxm::flags HeaderTrailerNone;
00144 static const mxm::flags HeaderLibBuildDate;
00147 static const mxm::flags HeaderSectionName;
00149 static const mxm::flags HeaderSectionOwner;
00151 static const mxm::flags HeaderTimestamp;
00153 static const mxm::flags TrailerProfileSummary;
00156 static const mxm::flags SingleLineProfiles;
00157
00159
00160 public:
00162
00165 class Profile : public mxmObject {
00166 private:
00167 mxmString Name;
00168 mxmPerlStyleHash Keys;
00169 public:
00170 Profile(const mxmString &profile_name, bool case_insensitive_keys);
00171 public:
00172 const mxmString &name(void);
00173 void setName(mxmString const & new_name);
00174 mxmPerlStyleHash &keys(void);
00175 int size(void);
00176 };
00177 private:
00178 class ProfileSet : public mxmObject {
00179 private:
00180 mxmString ProfileTypeId;
00181 mxmList Profiles;
00182 bool CaseInsensitiveKeys;
00183 public:
00184 ProfileSet(const mxmString &type_id, bool case_insensitive_keys);
00185 public:
00186 const mxmString &profileTypeId(void);
00188 Profile &addorgetProfile(const mxmString &profile_name);
00190 Profile &getProfile(int const profile_index);
00192 Profile *lookupProfile(const mxmString &profile_name);
00194 mxmStringList *enumerateProfiles(void);
00196 void moveProfileToTop(const mxmString &profile_name);
00198 mxmList::Iterator iterator(void);
00200 int size(void);
00201 };
00202
00203 private:
00204 mxmString SectionName;
00205 mxmString SectionOwner;
00206 mxmPerlStyleHash OwnKeys;
00207 mxmList ProfileSets;
00208 bool CaseInsensitiveKeys;
00209 bool IsInternal;
00210 void *StableABIDataExtension;
00211
00212 public:
00213 mxmConfigSection();
00214
00215 public:
00217 void setName(const mxmString §ion_name);
00218 #ifdef MX_PLATFORM_CAMERA
00219
00220 void setOwner(const mxCameraService_t owner);
00221 #endif
00222
00223 void setOwner(const mxmString §ion_owner);
00226 void setInternalMode(bool enable);
00229 bool load(const mxmStringList &config_section_file,
00230 const char **profile_type_ids = 0,
00231 bool allow_multi_line = false);
00232
00234
00235
00236
00237
00240
00241
00242
00243
00244
00245
00247 void clear();
00251 void purgeValueCharacters(const mxmString &key,
00252 const mxmString &characters_to_purge);
00254 void dump(std::FILE *outfile = stdout);
00255
00257 mxmString &operator[](const mxmString &key);
00259 mxmPerlStyleHash & getKeys(void);
00262 mxmPerlStyleHash &profile(const mxmString &profile_type_id,
00263 const mxmString &profile_name);
00266 mxmPerlStyleHash &profile(const mxmString &profile_type_id,
00267 int const profile_index,
00268 mxmString &profile_name) const;
00271 mxmPerlStyleHash *lookupProfile(const mxmString &profile_type_id,
00272 const mxmString &profile_name) const;
00274 mxm::smart<mxmStringList> enumerateProfiles(const mxmString
00275 &profile_type_id);
00277 void deleteProfile(const mxmString &profile_type_id,
00278 const mxmString &profile_name);
00280 bool renameProfile(mxmString const & profile_type_id,
00281 mxmString const & profile_name_old,
00282 mxmString const & profile_name_new);
00285 int profileSetSize(const mxmString &profile_type_id,
00286 mxmList::Iterator *profile_iterator = 0) const;
00288 void deleteProfileSet(const mxmString &profile_type_id);
00290 void moveProfileToTop(const mxmString &profile_type_id,
00291 const mxmString &profile_name);
00292
00293 private:
00295 ProfileSet &profileSet(const mxmString &type_id);
00298 ProfileSet *lookupProfileSet(const mxmString &type_id,
00299 mxmList::Iterator *profile_set_iterator = 0)
00300 const;
00302 void announceChange(void);
00303 };
00304
00305
00306
00307 #endif // __MXM_CONFIGSECTION_H__
00308