diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-07-12 12:16:32 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2011-07-12 12:16:32 (GMT) |
commit | d03f47e861140e93e7edea61e6276bc22b406559 (patch) | |
tree | bfd12e07377810c8d05ca4a7d6cc12451dadd816 | |
parent | 881aa0d8fbda2b3198a8e47a317794663af3c2e1 (diff) | |
download | fluxbox_pavel-d03f47e861140e93e7edea61e6276bc22b406559.zip fluxbox_pavel-d03f47e861140e93e7edea61e6276bc22b406559.tar.bz2 |
Enable the resource traits classes to hold non-static members
ps: the Resource class inherits from the Traits class instead of holding it as a member because
it's more size-efficient (base classes can have zero size, members cannot).
-rw-r--r-- | src/FbTk/ResTraits.hh | 18 | ||||
-rw-r--r-- | src/FbTk/Resource.hh | 12 | ||||
-rw-r--r-- | src/Screen.cc | 5 | ||||
-rw-r--r-- | src/Screen.hh | 4 | ||||
-rw-r--r-- | src/Window.cc | 9 |
5 files changed, 25 insertions, 23 deletions
diff --git a/src/FbTk/ResTraits.hh b/src/FbTk/ResTraits.hh index 3284801..19decb5 100644 --- a/src/FbTk/ResTraits.hh +++ b/src/FbTk/ResTraits.hh | |||
@@ -160,14 +160,17 @@ struct EnumTraits { | |||
160 | } | 160 | } |
161 | }; | 161 | }; |
162 | 162 | ||
163 | template<typename Traits, const char *delim> | 163 | template<typename Traits> |
164 | struct VectorTraits { | 164 | struct VectorTraits { |
165 | typedef std::vector<typename Traits::Type> Type; | 165 | typedef std::vector<typename Traits::Type> Type; |
166 | static std::string toString(const Type &x) { | 166 | |
167 | VectorTraits(const std::string &delim) : m_delim(delim) {} | ||
168 | |||
169 | std::string toString(const Type &x) const { | ||
167 | std::string retval; | 170 | std::string retval; |
168 | for(size_t i = 0; i < x.size(); ++i) { | 171 | for(size_t i = 0; i < x.size(); ++i) { |
169 | retval.append(Traits::toString(x[i])); | 172 | retval += Traits::toString(x[i]); |
170 | retval.append(" "); | 173 | retval += m_delim[0]; |
171 | } | 174 | } |
172 | 175 | ||
173 | return retval; | 176 | return retval; |
@@ -184,9 +187,9 @@ struct VectorTraits { | |||
184 | } | 187 | } |
185 | } | 188 | } |
186 | 189 | ||
187 | static Type fromString(const std::string &x) { | 190 | Type fromString(const std::string &x) const { |
188 | std::vector<std::string> val; | 191 | std::vector<std::string> val; |
189 | StringUtil::stringtok(val, x, delim); | 192 | StringUtil::stringtok(val, x, m_delim.c_str()); |
190 | Type retval; | 193 | Type retval; |
191 | 194 | ||
192 | for(size_t i = 0; i < val.size(); i++) { | 195 | for(size_t i = 0; i < val.size(); i++) { |
@@ -218,6 +221,9 @@ struct VectorTraits { | |||
218 | throw ConversionError( std::string("Cannot convert to vector from lua type ") | 221 | throw ConversionError( std::string("Cannot convert to vector from lua type ") |
219 | + l.type_name(l.type(-1)) ); | 222 | + l.type_name(l.type(-1)) ); |
220 | } | 223 | } |
224 | |||
225 | private: | ||
226 | std::string m_delim; | ||
221 | }; | 227 | }; |
222 | 228 | ||
223 | } // end namespace FbTk | 229 | } // end namespace FbTk |
diff --git a/src/FbTk/Resource.hh b/src/FbTk/Resource.hh index 32d24b6..c6f12d6 100644 --- a/src/FbTk/Resource.hh +++ b/src/FbTk/Resource.hh | |||
@@ -188,19 +188,21 @@ private: | |||
188 | * If there is no traits class for your type, you have to implement one. | 188 | * If there is no traits class for your type, you have to implement one. |
189 | */ | 189 | */ |
190 | template <typename T, typename Traits> | 190 | template <typename T, typename Traits> |
191 | class Resource:public Resource_base, public Accessor<T> { | 191 | class Resource:public Resource_base, public Accessor<T>, private Traits { |
192 | public: | 192 | public: |
193 | typedef T Type; | 193 | typedef T Type; |
194 | 194 | ||
195 | Resource(ResourceManager_base &rm, T val, const std::string &name, const std::string &altname): | 195 | Resource(ResourceManager_base &rm, T val, const std::string &name, |
196 | Resource_base(name, altname), m_value(val), m_defaultval(val), m_rm(rm) { | 196 | const std::string &altname, const Traits &traits = Traits() ): |
197 | Resource_base(name, altname), Traits(traits), m_value(val), m_defaultval(val), m_rm(rm) { | ||
197 | m_rm.addResource(*this); // add this to resource handler | 198 | m_rm.addResource(*this); // add this to resource handler |
198 | } | 199 | } |
199 | 200 | ||
200 | // LResourceManager does not use altname, so we provide a constructor which initializes | 201 | // LResourceManager does not use altname, so we provide a constructor which initializes |
201 | // altname to name | 202 | // altname to name |
202 | Resource(ResourceManager_base &rm, T val, const std::string &name): | 203 | Resource(ResourceManager_base &rm, T val, const std::string &name, |
203 | Resource_base(name, name), m_value(val), m_defaultval(val), m_rm(rm) { | 204 | const Traits &traits = Traits() ): |
205 | Resource_base(name, name), Traits(traits), m_value(val), m_defaultval(val), m_rm(rm) { | ||
204 | m_rm.addResource(*this); // add this to resource handler | 206 | m_rm.addResource(*this); // add this to resource handler |
205 | } | 207 | } |
206 | virtual ~Resource() { | 208 | virtual ~Resource() { |
diff --git a/src/Screen.cc b/src/Screen.cc index cb86c73..e4eca07 100644 --- a/src/Screen.cc +++ b/src/Screen.cc | |||
@@ -242,11 +242,10 @@ const EnumTraits<FbWinFrame::TabPlacement>::Pair EnumTraits<FbWinFrame::TabPlace | |||
242 | } // end namespace FbTk | 242 | } // end namespace FbTk |
243 | 243 | ||
244 | 244 | ||
245 | const char BScreen::ScreenResource::workspace_names_delim[] = ","; | ||
246 | |||
247 | BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager_base &rm, | 245 | BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager_base &rm, |
248 | const string &scrname): | 246 | const string &scrname): |
249 | workspace_names(rm, std::vector<std::string>(), scrname + ".workspaceNames"), | 247 | workspace_names(rm, std::vector<std::string>(), scrname + ".workspaceNames", |
248 | FbTk::VectorTraits<FbTk::StringTraits>(",") ), | ||
250 | opaque_move(rm, true, scrname + ".opaqueMove"), | 249 | opaque_move(rm, true, scrname + ".opaqueMove"), |
251 | full_max(rm, false, scrname+".fullMaximization"), | 250 | full_max(rm, false, scrname+".fullMaximization"), |
252 | max_ignore_inc(rm, true, scrname+".maxIgnoreIncrement"), | 251 | max_ignore_inc(rm, true, scrname+".maxIgnoreIncrement"), |
diff --git a/src/Screen.hh b/src/Screen.hh index 6492104..1906d67 100644 --- a/src/Screen.hh +++ b/src/Screen.hh | |||
@@ -508,10 +508,8 @@ private: | |||
508 | struct ScreenResource { | 508 | struct ScreenResource { |
509 | ScreenResource(FbTk::ResourceManager_base &rm, const std::string &scrname); | 509 | ScreenResource(FbTk::ResourceManager_base &rm, const std::string &scrname); |
510 | 510 | ||
511 | static const char workspace_names_delim[]; | ||
512 | FbTk::Resource< | 511 | FbTk::Resource< |
513 | std::vector<std::string>, | 512 | std::vector<std::string>, FbTk::VectorTraits<FbTk::StringTraits> |
514 | FbTk::VectorTraits<FbTk::StringTraits, workspace_names_delim> | ||
515 | > workspace_names; | 513 | > workspace_names; |
516 | 514 | ||
517 | FbTk::BoolResource opaque_move, full_max, | 515 | FbTk::BoolResource opaque_move, full_max, |
diff --git a/src/Window.cc b/src/Window.cc index 47118fa..95bf9b3 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -251,11 +251,8 @@ private: | |||
251 | int m_mode; | 251 | int m_mode; |
252 | }; | 252 | }; |
253 | 253 | ||
254 | extern const char win_buttons_delim[] = " \t\n"; | 254 | typedef FbTk::VectorTraits<FbTk::EnumTraits<WinButton::Type> > WinButtonsTraits; |
255 | typedef FbTk::Resource< | 255 | typedef FbTk::Resource<vector<WinButton::Type>, WinButtonsTraits> WinButtonsResource; |
256 | vector<WinButton::Type>, | ||
257 | FbTk::VectorTraits<FbTk::EnumTraits<WinButton::Type>, win_buttons_delim> | ||
258 | > WinButtonsResource; | ||
259 | 256 | ||
260 | } | 257 | } |
261 | 258 | ||
@@ -3477,7 +3474,7 @@ void FluxboxWindow::setupWindow() { | |||
3477 | titlebar_side[i] = | 3474 | titlebar_side[i] = |
3478 | new WinButtonsResource(rm, | 3475 | new WinButtonsResource(rm, |
3479 | WinButtonsResource::Type(begin, end), | 3476 | WinButtonsResource::Type(begin, end), |
3480 | titlebar_name[i]); | 3477 | titlebar_name[i], WinButtonsTraits(" \t\n")); |
3481 | 3478 | ||
3482 | 3479 | ||
3483 | screen().addManagedResource(titlebar_side[i]); | 3480 | screen().addManagedResource(titlebar_side[i]); |