* renamed *Value classes to *Option (GConfStringValue, GConfBooleanValue, GConfInteg...
[simple-launcher] / gconf-wrapper.h
1 // This file is a part of Simple Launcher
2 //
3 // Copyright (C) 2006, 2007, Mikhail Sobolev
4 //
5 // Simple Launcher is free software; you can redistribute it and/or modify it
6 // under the terms of the GNU General Public License version 2 as published by
7 // the Free Software Foundation.
8 //
9 // This program is distributed in the hope that it will be useful, but WITHOUT
10 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12 // more details.
13 //
14 // You should have received a copy of the GNU General Public License along with
15 // this program; if not, write to the Free Software Foundation, Inc., 51
16 // Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 #ifndef _GCONF_WRAPPER_H_
19 #define _GCONF_WRAPPER_H_
20
21 #include <string>
22
23 #include <gconf/gconf-client.h>
24
25 class GConfItem {
26 public:
27   virtual ~GConfItem() {}
28
29 protected:
30   GConfItem();  // I do not want to create instances of this class
31
32   static void allocateClient();
33
34 protected:
35   // TODO: should I count the references and unref the client when the last user is gone??
36   static GConfClient *ourClient;
37 };
38
39 class GConfKey : public GConfItem {
40 public:
41   GConfKey(const std::string&);
42   GConfKey(const GConfKey&, const std::string&);
43  ~GConfKey() { }
44
45   const std::string& path() const { return myKeyPath; }
46
47   std::string merge(const std::string&) const;
48
49 private:
50   const std::string myKeyPath;
51 };
52
53 class GConfOption : public GConfItem {
54 protected:
55   GConfOption(GConfValueType kind, const GConfKey& key, const std::string& path): myKind(kind), myIsSynchronized(false), myPath(key.merge(path)) { }
56
57   GConfValueType kind() const { return myKind; }
58
59   void setGConfValue(const GConfValue *);
60   GConfValue *getGConfValue() const;
61   void unsetGConfValue();
62
63 protected:
64   const GConfValueType myKind;
65   mutable bool myIsSynchronized;
66   const std::string myPath;
67 };
68
69 class GConfStringOption : public GConfOption {
70 public:
71   GConfStringOption(const GConfKey&, const std::string&, const std::string& = "");
72
73   const std::string& value() const;
74   const std::string& setValue(const std::string& newValue);
75
76 private:
77   mutable std::string myValue;
78   const std::string myDefaultValue;
79 };
80
81 class GConfBooleanOption : public GConfOption {
82 public:
83   GConfBooleanOption(const GConfKey&, const std::string&, bool = false);
84
85   bool value() const;
86   bool setValue(bool newValue);
87
88 private:
89   mutable bool myValue;
90   const bool myDefaultValue;
91 };
92
93 class GConfIntegerOption : public GConfOption {
94 public:
95   GConfIntegerOption(const GConfKey&, const std::string&, int = false);
96
97   int value() const;
98   int setValue(int newValue);
99
100 private:
101   mutable int myValue;
102   const int myDefaultValue;
103 };
104
105 #endif
106
107 // vim:ts=2:sw=2:et