diff options
-rw-r--r-- | src/Resource.cc | 21 | ||||
-rw-r--r-- | src/Resource.hh | 49 |
2 files changed, 42 insertions, 28 deletions
diff --git a/src/Resource.cc b/src/Resource.cc index 8bd4e26..cb871f1 100644 --- a/src/Resource.cc +++ b/src/Resource.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: Resource.cc,v 1.2 2002/02/04 06:47:34 fluxgen Exp $ | 22 | // $Id: Resource.cc,v 1.3 2002/07/20 09:51:26 fluxgen Exp $ |
23 | 23 | ||
24 | #include "Resource.hh" | 24 | #include "Resource.hh" |
25 | #include "XrmDatabaseHelper.hh" | 25 | #include "XrmDatabaseHelper.hh" |
@@ -55,11 +55,11 @@ bool ResourceManager::load(const char *filename) { | |||
55 | for (; i != i_end; ++i) { | 55 | for (; i != i_end; ++i) { |
56 | 56 | ||
57 | Resource_base *resource = *i; | 57 | Resource_base *resource = *i; |
58 | if (XrmGetResource(*database, resource->getName().c_str(), | 58 | if (XrmGetResource(*database, resource->name().c_str(), |
59 | resource->getAltName().c_str(), &value_type, &value)) | 59 | resource->altName().c_str(), &value_type, &value)) |
60 | resource->setFromString(value.addr); | 60 | resource->setFromString(value.addr); |
61 | else { | 61 | else { |
62 | cerr<<"Faild to read: "<<resource->getName()<<endl; | 62 | cerr<<"Failed to read: "<<resource->name()<<endl; |
63 | cerr<<"Setting default value"<<endl; | 63 | cerr<<"Setting default value"<<endl; |
64 | resource->setDefaultValue(); | 64 | resource->setDefaultValue(); |
65 | } | 65 | } |
@@ -87,7 +87,7 @@ bool ResourceManager::save(const char *filename, const char *mergefilename) { | |||
87 | //write all resources to database | 87 | //write all resources to database |
88 | for (; i != i_end; ++i) { | 88 | for (; i != i_end; ++i) { |
89 | Resource_base *resource = *i; | 89 | Resource_base *resource = *i; |
90 | rc_string = resource->getName() + string(": ") + resource->getString(); | 90 | rc_string = resource->name() + string(": ") + resource->getString(); |
91 | XrmPutLineResource(&*database, rc_string.c_str()); | 91 | XrmPutLineResource(&*database, rc_string.c_str()); |
92 | } | 92 | } |
93 | 93 | ||
@@ -97,13 +97,14 @@ bool ResourceManager::save(const char *filename, const char *mergefilename) { | |||
97 | //check if we want to merge a database | 97 | //check if we want to merge a database |
98 | if (mergefilename) { | 98 | if (mergefilename) { |
99 | XrmDatabaseHelper olddatabase(mergefilename); | 99 | XrmDatabaseHelper olddatabase(mergefilename); |
100 | if (olddatabase == 0) | 100 | if (olddatabase == 0) // did we load the file? |
101 | return false; | 101 | return false; |
102 | 102 | ||
103 | XrmMergeDatabases(*database, &*olddatabase); | 103 | XrmMergeDatabases(*database, &*olddatabase); // merge databases |
104 | XrmPutFileDatabase(*olddatabase, filename); //save database to file | 104 | XrmPutFileDatabase(*olddatabase, filename); // save database to file |
105 | *database=0; //don't try to destroy the database | 105 | |
106 | } else //save database to file | 106 | *database = 0; // don't try to destroy the database |
107 | } else // save database to file | ||
107 | XrmPutFileDatabase(*database, filename); | 108 | XrmPutFileDatabase(*database, filename); |
108 | 109 | ||
109 | return true; | 110 | return true; |
diff --git a/src/Resource.hh b/src/Resource.hh index 10a77f7..8055701 100644 --- a/src/Resource.hh +++ b/src/Resource.hh | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: Resource.hh,v 1.5 2002/05/17 10:59:58 fluxgen Exp $ | 22 | // $Id: Resource.hh,v 1.6 2002/07/20 09:51:03 fluxgen Exp $ |
23 | 23 | ||
24 | #ifndef RESOURCE_HH | 24 | #ifndef RESOURCE_HH |
25 | #define RESOURCE_HH | 25 | #define RESOURCE_HH |
@@ -31,23 +31,29 @@ | |||
31 | class Resource_base:private NotCopyable | 31 | class Resource_base:private NotCopyable |
32 | { | 32 | { |
33 | public: | 33 | public: |
34 | 34 | virtual ~Resource_base() { }; | |
35 | virtual void setFromString(char const *strval)=0; | ||
36 | virtual void setDefaultValue()=0; | ||
37 | |||
38 | virtual std::string getString()=0; | ||
39 | inline const std::string& getAltName() const { return m_altname; } | ||
40 | inline const std::string& getName() const { return m_name; } | ||
41 | 35 | ||
36 | /// set from string value | ||
37 | virtual void setFromString(char const *strval) = 0; | ||
38 | /// set default value | ||
39 | virtual void setDefaultValue() = 0; | ||
40 | /// get string value | ||
41 | virtual std::string getString() = 0; | ||
42 | /// get alternative name of this resource | ||
43 | inline const std::string& altName() const { return m_altname; } | ||
44 | /// get name of this resource | ||
45 | inline const std::string& name() const { return m_name; } | ||
46 | |||
42 | protected: | 47 | protected: |
43 | Resource_base(const std::string &name, const std::string &altname): | 48 | Resource_base(const std::string &name, const std::string &altname): |
44 | m_name(name), m_altname(altname) | 49 | m_name(name), m_altname(altname) |
45 | { | 50 | { |
46 | 51 | ||
47 | } | 52 | } |
48 | virtual ~Resource_base(){ }; | 53 | |
49 | private: | 54 | private: |
50 | std::string m_name, m_altname; | 55 | std::string m_name; // name of this resource |
56 | std::string m_altname; // alternative name | ||
51 | }; | 57 | }; |
52 | 58 | ||
53 | class ResourceManager; | 59 | class ResourceManager; |
@@ -62,10 +68,10 @@ public: | |||
62 | m_value(val), m_defaultval(val), | 68 | m_value(val), m_defaultval(val), |
63 | m_rm(rm) | 69 | m_rm(rm) |
64 | { | 70 | { |
65 | m_rm.addResource(*this); | 71 | m_rm.addResource(*this); // add this to resource handler |
66 | } | 72 | } |
67 | ~Resource() { | 73 | virtual ~Resource() { |
68 | m_rm.removeResource(*this); | 74 | m_rm.removeResource(*this); // remove this from resource handler |
69 | } | 75 | } |
70 | 76 | ||
71 | inline void setDefaultValue() { m_value = m_defaultval; } | 77 | inline void setDefaultValue() { m_value = m_defaultval; } |
@@ -87,10 +93,16 @@ class ResourceManager | |||
87 | public: | 93 | public: |
88 | typedef std::list<Resource_base *> ResourceList; | 94 | typedef std::list<Resource_base *> ResourceList; |
89 | 95 | ||
90 | ResourceManager(){ } | 96 | ResourceManager() { } |
91 | 97 | virtual ~ResourceManager() {} | |
92 | bool load(const char *filename); | 98 | /** |
93 | bool save(const char *filename, const char *mergefilename=0); | 99 | load all resouces registered to this class |
100 | */ | ||
101 | virtual bool load(const char *filename); | ||
102 | /** | ||
103 | save all resouces registered to this class | ||
104 | */ | ||
105 | virtual bool save(const char *filename, const char *mergefilename=0); | ||
94 | template <class T> | 106 | template <class T> |
95 | void addResource(Resource<T> &r) { | 107 | void addResource(Resource<T> &r) { |
96 | m_resourcelist.push_back(&r); | 108 | m_resourcelist.push_back(&r); |
@@ -100,8 +112,9 @@ public: | |||
100 | void removeResource(Resource<T> &r) { | 112 | void removeResource(Resource<T> &r) { |
101 | m_resourcelist.remove(&r); | 113 | m_resourcelist.remove(&r); |
102 | } | 114 | } |
103 | private: | 115 | protected: |
104 | static inline void ensureXrmIsInitialize(); | 116 | static inline void ensureXrmIsInitialize(); |
117 | private: | ||
105 | static bool m_init; | 118 | static bool m_init; |
106 | ResourceList m_resourcelist; | 119 | ResourceList m_resourcelist; |
107 | 120 | ||