00001
00002
00003 #ifndef _GCONFMM_CLIENT_H
00004 #define _GCONFMM_CLIENT_H
00005
00006
00007 #include <glibmm.h>
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <gconf/gconf-client.h>
00032
00033 #include <glibmm/object.h>
00034
00035 #include <glibmm/error.h>
00036 #include <gconfmm/value.h>
00037 #include <gconfmm/callback.h>
00038 #include <gconfmm/entry.h>
00039 #include <gconfmm/schema.h>
00040 #include <gconfmm/setinterface.h>
00041 #include <gconfmm/changeset.h>
00042
00043
00044 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00045 typedef struct _GConfClient GConfClient;
00046 typedef struct _GConfClientClass GConfClientClass;
00047 #endif
00048
00049
00050 namespace Gnome
00051 {
00052
00053 namespace Conf
00054 { class Client_Class; }
00055
00056 }
00057 namespace Gnome
00058 {
00059 namespace Conf
00060 {
00061
00067 enum ClientErrorHandlingMode
00068 {
00069 CLIENT_HANDLE_NONE,
00070 CLIENT_HANDLE_UNRETURNED,
00071 CLIENT_HANDLE_ALL
00072 };
00073
00074 }
00075
00076 }
00077
00078
00079 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00080 namespace Glib
00081 {
00082
00083 template <>
00084 class Value<Gnome::Conf::ClientErrorHandlingMode> : public Glib::Value_Enum<Gnome::Conf::ClientErrorHandlingMode>
00085 {
00086 public:
00087 static GType value_type() G_GNUC_CONST;
00088 };
00089
00090 }
00091 #endif
00092
00093
00094 namespace Gnome
00095 {
00096
00097 namespace Conf
00098 {
00099
00103 enum ClientPreloadType
00104 {
00105 CLIENT_PRELOAD_NONE,
00106 CLIENT_PRELOAD_ONELEVEL,
00107 CLIENT_PRELOAD_RECURSIVE
00108 };
00109
00110 }
00111
00112 }
00113
00114
00115 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00116 namespace Glib
00117 {
00118
00119 template <>
00120 class Value<Gnome::Conf::ClientPreloadType> : public Glib::Value_Enum<Gnome::Conf::ClientPreloadType>
00121 {
00122 public:
00123 static GType value_type() G_GNUC_CONST;
00124 };
00125
00126 }
00127 #endif
00128
00129
00130 namespace Gnome
00131 {
00132
00133 namespace Conf
00134 {
00135
00136
00139 class Error : public Glib::Error
00140 {
00141 public:
00142 enum Code
00143 {
00144 SUCCESS = 0,
00145 NO_SERVER = 2,
00146 NO_PERMISSION = 3,
00147 BAD_ADDRESS = 4,
00148 PARSE_ERROR = 6,
00149 CORRUPT = 7,
00150 TYPE_MISMATCH = 8,
00151 IS_DIR = 9,
00152 IS_KEY = 10,
00153 OVERRIDDEN = 11,
00154 OAF_ERROR = 12,
00155 LOCAL_ENGINE = 13,
00156 LOCK_FAILED = 14,
00157 NO_WRITABLE_DATABASE = 15,
00158 IN_SHUTDOWN = 16
00159 };
00160
00161 Error(Code error_code, const Glib::ustring& error_message);
00162 explicit Error(GError* gobject);
00163 Code code() const;
00164
00165 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00166 private:
00167
00168 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00169 static void throw_func(GError* gobject);
00170 #else
00171
00172 static std::auto_ptr<Glib::Error> throw_func(GError* gobject);
00173 #endif //GLIBMM_EXCEPTIONS_ENABLED
00174
00175 friend void wrap_init();
00176 #endif
00177 };
00178
00179 }
00180
00181 }
00182
00183 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00184 namespace Glib
00185 {
00186
00187 template <>
00188 class Value<Gnome::Conf::Error::Code> : public Glib::Value_Enum<Gnome::Conf::Error::Code>
00189 {
00190 public:
00191 static GType value_type() G_GNUC_CONST;
00192 };
00193
00194 }
00195 #endif
00196
00197
00198 namespace Gnome
00199 {
00200
00201 namespace Conf
00202 {
00203
00204
00205 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00206 template <typename T>
00207 struct BasicTypeTraits
00208 {
00209 typedef T CppType;
00210 typedef CppType* CType;
00211 typedef CppType* CTypeNonConst;
00212
00213 static CType to_c_type(CppType val)
00214 {
00215 CType pVal = new CppType;
00216 *pVal = val;
00217 return pVal;
00218 }
00219
00220 static CType to_c_type(CType ptr)
00221 { return ptr; }
00222
00223 static CppType to_cpp_type(CType ptr)
00224 {
00225 if(ptr)
00226 {
00227 return *ptr;
00228 }
00229 else
00230 return CppType();
00231 }
00232
00233 static void release_c_type(CType ptr)
00234 {
00235 if(ptr)
00236 delete ptr;
00237 }
00238 };
00239
00240
00241
00242 template <>
00243 struct BasicTypeTraits<int>
00244 {
00245 typedef int CppType;
00246 typedef CppType* CType;
00247 typedef CppType* CTypeNonConst;
00248
00249 static CType to_c_type(CppType val)
00250 { return (int*)GINT_TO_POINTER(val); }
00251
00252 static CType to_c_type(CType ptr)
00253 { return ptr; }
00254
00255 static CppType to_cpp_type(CType ptr)
00256 {
00257 if(ptr)
00258 {
00259 return GPOINTER_TO_INT(ptr);
00260 }
00261 else
00262 return CppType();
00263 }
00264
00265 static void release_c_type(CType )
00266 {
00267 }
00268 };
00269
00270 template <>
00271 struct BasicTypeTraits<bool>
00272 {
00273 typedef bool CppType;
00274 typedef gboolean* CType;
00275 typedef gboolean* CTypeNonConst;
00276
00277 static CType to_c_type(CppType val)
00278 {
00279 return (int*)GINT_TO_POINTER(val);
00280 }
00281
00282 static CType to_c_type(CType ptr)
00283 { return ptr; }
00284
00285 static CppType to_cpp_type(CType ptr)
00286 {
00287 if(ptr)
00288 {
00289
00290 return GPOINTER_TO_INT(ptr);
00291 }
00292 else
00293 return CppType();
00294 }
00295
00296 static void release_c_type(CType )
00297 {
00298
00299 }
00300 };
00301
00302 #endif //DOXYGEN_SHOULD_SKIP_THIS
00303
00304
00315 class Client : public Glib::Object, public SetInterface
00316 {
00317
00318 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00319
00320 public:
00321 typedef Client CppObjectType;
00322 typedef Client_Class CppClassType;
00323 typedef GConfClient BaseObjectType;
00324 typedef GConfClientClass BaseClassType;
00325
00326 private: friend class Client_Class;
00327 static CppClassType client_class_;
00328
00329 private:
00330
00331 Client(const Client&);
00332 Client& operator=(const Client&);
00333
00334 protected:
00335 explicit Client(const Glib::ConstructParams& construct_params);
00336 explicit Client(GConfClient* castitem);
00337
00338 #endif
00339
00340 public:
00341 virtual ~Client();
00342
00343 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00344 static GType get_type() G_GNUC_CONST;
00345
00346
00347 static GType get_base_type() G_GNUC_CONST;
00348 #endif
00349
00351 GConfClient* gobj() { return reinterpret_cast<GConfClient*>(gobject_); }
00352
00354 const GConfClient* gobj() const { return reinterpret_cast<GConfClient*>(gobject_); }
00355
00357 GConfClient* gobj_copy();
00358
00359 private:
00360
00361
00362 public:
00363
00367 static Glib::RefPtr<Client> get_default_client();
00368 static Glib::RefPtr<Client> get_client_for_engine(GConfEngine* engine);
00369
00383 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00384 void add_dir(const Glib::ustring& dir, ClientPreloadType preload = CLIENT_PRELOAD_NONE);
00385 #else
00386 void add_dir(const Glib::ustring& dir, ClientPreloadType preload, std::auto_ptr<Glib::Error>& error);
00387 #endif //GLIBMM_EXCEPTIONS_ENABLED
00388
00389
00393 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00394 void remove_dir(const Glib::ustring& dir);
00395 #else
00396 void remove_dir(const Glib::ustring& dir, std::auto_ptr<Glib::Error>& error);
00397 #endif //GLIBMM_EXCEPTIONS_ENABLED
00398
00399
00400
00419 guint notify_add(const Glib::ustring& namespace_section, Callback callback);
00420
00421
00427 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00428 void notify_remove(guint cnxn);
00429 #else
00430 void notify_remove(guint cnxn, std::auto_ptr<Glib::Error>& error);
00431 #endif //GLIBMM_EXCEPTIONS_ENABLED
00432
00433
00440 void notify(const Glib::ustring& key);
00441
00442
00443 void set_error_handling(ClientErrorHandlingMode mode);
00444
00447 void clear_cache();
00448
00455 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00456 void preload(const Glib::ustring& dirname, ClientPreloadType type);
00457 #else
00458 void preload(const Glib::ustring& dirname, ClientPreloadType type, std::auto_ptr<Glib::Error>& error);
00459 #endif //GLIBMM_EXCEPTIONS_ENABLED
00460
00461
00468 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00469 Value get(const Glib::ustring& key) const;
00470 #else
00471 Value get(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00472 #endif //GLIBMM_EXCEPTIONS_ENABLED
00473
00474
00483 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00484 Value get_without_default(const Glib::ustring& key) const;
00485 #else
00486 Value get_without_default(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00487 #endif //GLIBMM_EXCEPTIONS_ENABLED
00488
00489
00496 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00497 Value get_default_from_schema(const Glib::ustring& key) const;
00498 #else
00499 Value get_default_from_schema(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00500 #endif //GLIBMM_EXCEPTIONS_ENABLED
00501
00502
00511 Entry get_entry(const Glib::ustring& key, bool use_schema_default = true) const;
00512
00522 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00523 Entry get_entry(const Glib::ustring& key, const char* locale, bool use_schema_default = true) const;
00524 #else
00525 Entry get_entry(const Glib::ustring& key, const char* locale, bool use_schema_default, std::auto_ptr<Glib::Error>& error) const;
00526 #endif //GLIBMM_EXCEPTIONS_ENABLED
00527
00528
00534 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00535 void unset(const Glib::ustring& key);
00536 #else
00537 void unset(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error);
00538 #endif //GLIBMM_EXCEPTIONS_ENABLED
00539
00540
00550 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00551 void recursive_unset(const Glib::ustring& key, UnsetFlags flags = UNSET_INCLUDING_SCHEMA_NAMES);
00552 #else
00553 void recursive_unset(const Glib::ustring& key, UnsetFlags flags, std::auto_ptr<Glib::Error>& error);
00554 #endif //GLIBMM_EXCEPTIONS_ENABLED
00555
00556
00564 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00565 Glib::SListHandle<Entry> all_entries(const Glib::ustring& dir) const;
00566 #else
00567 Glib::SListHandle<Entry> all_entries(const Glib::ustring& dir, std::auto_ptr<Glib::Error>& error) const;
00568 #endif //GLIBMM_EXCEPTIONS_ENABLED
00569
00570
00577 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00578 Glib::SListHandle<Glib::ustring> all_dirs(const Glib::ustring& dir) const;
00579 #else
00580 Glib::SListHandle<Glib::ustring> all_dirs(const Glib::ustring& dir, std::auto_ptr<Glib::Error>& error) const;
00581 #endif //GLIBMM_EXCEPTIONS_ENABLED
00582
00583
00589 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00590 void suggest_sync();
00591 #else
00592 void suggest_sync(std::auto_ptr<Glib::Error>& error);
00593 #endif //GLIBMM_EXCEPTIONS_ENABLED
00594
00595
00601 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00602 bool dir_exists(const Glib::ustring&) const;
00603 #else
00604 bool dir_exists(const Glib::ustring& p1, std::auto_ptr<Glib::Error>& error) const;
00605 #endif //GLIBMM_EXCEPTIONS_ENABLED
00606
00607
00613 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00614 bool key_is_writable(const Glib::ustring&) const;
00615 #else
00616 bool key_is_writable(const Glib::ustring& p1, std::auto_ptr<Glib::Error>& error) const;
00617 #endif //GLIBMM_EXCEPTIONS_ENABLED
00618
00619
00627 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00628 double get_float(const Glib::ustring& key) const;
00629 #else
00630 double get_float(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00631 #endif //GLIBMM_EXCEPTIONS_ENABLED
00632
00633
00637 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00638 gint get_int(const Glib::ustring& key) const;
00639 #else
00640 gint get_int(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00641 #endif //GLIBMM_EXCEPTIONS_ENABLED
00642
00643
00647 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00648 bool get_bool(const Glib::ustring& key) const;
00649 #else
00650 bool get_bool(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00651 #endif //GLIBMM_EXCEPTIONS_ENABLED
00652
00653
00657 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00658 Glib::ustring get_string(const Glib::ustring& key) const;
00659 #else
00660 Glib::ustring get_string(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00661 #endif //GLIBMM_EXCEPTIONS_ENABLED
00662
00663
00667 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00668 Schema get_schema(const Glib::ustring& key) const;
00669 #else
00670 Schema get_schema(const Glib::ustring& key, std::auto_ptr<Glib::Error>& error) const;
00671 #endif //GLIBMM_EXCEPTIONS_ENABLED
00672
00673
00681 SListHandle_ValueInt get_int_list(const Glib::ustring& key) const;
00682
00685 SListHandle_ValueBool get_bool_list(const Glib::ustring& key) const;
00686
00689 SListHandle_ValueFloat get_float_list(const Glib::ustring& key) const;
00690
00693 SListHandle_ValueSchema get_schema_list(const Glib::ustring& key) const;
00694
00697 SListHandle_ValueString get_string_list(const Glib::ustring& key) const;
00698
00699
00708 ValuePair get_pair(const Glib::ustring& key, ValueTypePair types) const;
00709
00710
00717 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00718 void set(const Glib::ustring& key, int what);
00719 #else
00720 void set(const Glib::ustring& key, int what, std::auto_ptr<Glib::Error>& error);
00721 #endif //GLIBMM_EXCEPTIONS_ENABLED
00722
00723
00727 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00728 void set(const Glib::ustring& key, bool what);
00729 #else
00730 void set(const Glib::ustring& key, bool what, std::auto_ptr<Glib::Error>& error);
00731 #endif //GLIBMM_EXCEPTIONS_ENABLED
00732
00733
00737 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00738 void set(const Glib::ustring& key,double what);
00739 #else
00740 void set(const Glib::ustring& key, double what, std::auto_ptr<Glib::Error>& error);
00741 #endif //GLIBMM_EXCEPTIONS_ENABLED
00742
00743
00747 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00748 void set(const Glib::ustring& key, const Glib::ustring& what);
00749 #else
00750 void set(const Glib::ustring& key, const Glib::ustring& what, std::auto_ptr<Glib::Error>& error);
00751 #endif //GLIBMM_EXCEPTIONS_ENABLED
00752
00753
00757 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00758 void set(const Glib::ustring& key, const Schema& what);
00759 #else
00760 void set(const Glib::ustring& key, const Schema& what, std::auto_ptr<Glib::Error>& error);
00761 #endif //GLIBMM_EXCEPTIONS_ENABLED
00762
00763
00768 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00769 void set(const Glib::ustring& key, const Value& what);
00770 #else
00771 void set(const Glib::ustring& key, const Value& what, std::auto_ptr<Glib::Error>& error);
00772 #endif //GLIBMM_EXCEPTIONS_ENABLED
00773
00774
00775 typedef Glib::SListHandle< int, BasicTypeTraits<int> > SListHandleInts;
00776 void set_int_list(const Glib::ustring& key, const SListHandleInts& what);
00777
00778 typedef Glib::SListHandle< bool, BasicTypeTraits<bool> > SListHandleBools;
00779 void set_bool_list(const Glib::ustring& key, const SListHandleBools& what);
00780
00781 typedef Glib::SListHandle< double, BasicTypeTraits<double> > SListHandleFloats;
00782 void set_float_list(const Glib::ustring& key, const SListHandleFloats& what);
00783
00784 void set_schema_list(const Glib::ustring& key, const Glib::SListHandle<Schema>& what);
00785 void set_string_list(const Glib::ustring& key, const Glib::SListHandle<Glib::ustring>& what);
00786
00796 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00797 ChangeSet change_set_from_current(const Glib::SArray& set);
00798 #else
00799 ChangeSet change_set_from_current(const Glib::SArray& set, std::auto_ptr<Glib::Error>& error);
00800 #endif //GLIBMM_EXCEPTIONS_ENABLED
00801
00802
00814 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00815 void change_set_commit(ChangeSet& set, bool remove_commited);
00816 #else
00817 void change_set_commit(ChangeSet& set, bool remove_commited, std::auto_ptr<Glib::Error>& error);
00818 #endif //GLIBMM_EXCEPTIONS_ENABLED
00819
00820
00832 #ifdef GLIBMM_EXCEPTIONS_ENABLED
00833 ChangeSet change_set_reverse(const ChangeSet& set);
00834 #else
00835 ChangeSet change_set_reverse(const ChangeSet& set, std::auto_ptr<Glib::Error>& error);
00836 #endif //GLIBMM_EXCEPTIONS_ENABLED
00837
00838
00846 Glib::SignalProxy2< void,const Glib::ustring&,const Value& > signal_value_changed();
00847
00848
00849 void value_changed(const Glib::ustring& key, const Value& value);
00850
00851 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00852
00853
00854
00860 Glib::SignalProxy1< void,const Glib::Error& > signal_unreturned_error();
00861
00862
00863 void unreturned_error(const Glib::Error& error);
00864 #endif
00865
00873 Glib::SignalProxy1< void,const Glib::Error& > signal_error();
00874
00875
00876 void error(const Glib::Error& error);
00877
00878 private:
00879 void handle_error(GError* pError) const;
00880
00881 GSList* get_list(const Glib::ustring& key, GConfValueType list_type) const;
00882
00883
00884 public:
00885
00886 public:
00887
00888 #ifdef GLIBMM_VFUNCS_ENABLED
00889 #endif //GLIBMM_VFUNCS_ENABLED
00890
00891 protected:
00892
00893 #ifdef GLIBMM_VFUNCS_ENABLED
00894 #endif //GLIBMM_VFUNCS_ENABLED
00895
00896
00897 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00898 virtual void on_value_changed(const Glib::ustring& key, const Value& value);
00899 virtual void on_unreturned_error(const Glib::Error& error);
00900 virtual void on_error(const Glib::Error& error);
00901 #endif //GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00902
00903
00904 };
00905
00906 }
00907 }
00908
00909
00910 namespace Glib
00911 {
00920 Glib::RefPtr<Gnome::Conf::Client> wrap(GConfClient* object, bool take_copy = false);
00921 }
00922
00923
00924 #endif
00925