aboutsummaryrefslogtreecommitdiff
path: root/src/Toolbar.cc
diff options
context:
space:
mode:
authorMathias Gumz <akira at fluxbox dot org>2010-09-17 12:44:58 (GMT)
committerMathias Gumz <akira at fluxbox dot org>2010-09-17 12:44:58 (GMT)
commit041d586972db4da170123f5468d7b11d4eda8ae5 (patch)
tree2481268e38587c324939a7989ce2fae51743a926 /src/Toolbar.cc
parent0b1f160830f048ed6d499b774b5addab059f9917 (diff)
downloadfluxbox_pavel-041d586972db4da170123f5468d7b11d4eda8ae5.zip
fluxbox_pavel-041d586972db4da170123f5468d7b11d4eda8ae5.tar.bz2
code simplification by reducing if-else hell
a lot of the parsing-related and menu-building stuff is just plain stupid boiler plate code. putting the data into a const array separates the boiler plate data from the actual code.
Diffstat (limited to 'src/Toolbar.cc')
-rw-r--r--src/Toolbar.cc104
1 files changed, 38 insertions, 66 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index 79e8929..1f401c9 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -53,6 +53,7 @@
53#include "FbTk/SimpleObserver.hh" 53#include "FbTk/SimpleObserver.hh"
54#include "FbTk/MemFun.hh" 54#include "FbTk/MemFun.hh"
55#include "FbTk/STLUtil.hh" 55#include "FbTk/STLUtil.hh"
56#include "FbTk/Util.hh"
56 57
57// use GNU extensions 58// use GNU extensions
58#ifndef _GNU_SOURCE 59#ifndef _GNU_SOURCE
@@ -81,82 +82,53 @@ using std::list;
81 82
82using FbTk::STLUtil::forAll; 83using FbTk::STLUtil::forAll;
83 84
85namespace {
86
87struct ToolbarPlacementString {
88 Toolbar::Placement placement;
89 const char* str;
90};
91
92const ToolbarPlacementString placement_strings[] = {
93 { Toolbar::TOPLEFT, "TopLeft" },
94 { Toolbar::TOPCENTER, "TopCenter" },
95 { Toolbar::TOPRIGHT, "TopRight" },
96 { Toolbar::BOTTOMLEFT, "BottomLeft" },
97 { Toolbar::BOTTOMCENTER, "BottomCenter" },
98 { Toolbar::BOTTOMRIGHT, "BottomRight" },
99 { Toolbar::LEFTBOTTOM, "LeftBottom" },
100 { Toolbar::LEFTCENTER, "LeftCenter" },
101 { Toolbar::LEFTTOP, "LeftTop" },
102 { Toolbar::RIGHTCENTER, "RightCenter" },
103 { Toolbar::RIGHTBOTTOM, "RightBottom" },
104 { Toolbar::RIGHTTOP, "RightTop" }
105};
106
107}
108
84namespace FbTk { 109namespace FbTk {
85 110
86template<> 111template<>
87string FbTk::Resource<Toolbar::Placement>:: 112string FbTk::Resource<Toolbar::Placement>::
88getString() const { 113getString() const {
89 switch (m_value) { 114
90 case Toolbar::TOPLEFT: 115 size_t i = (m_value == FbTk::Util::clamp(m_value, Toolbar::TOPLEFT, Toolbar::RIGHTTOP)
91 return string("TopLeft"); 116 ? m_value
92 break; 117 : Toolbar::DEFAULT) - 1;
93 case Toolbar::BOTTOMLEFT: 118 return placement_strings[i].str;
94 return string("BottomLeft");
95 break;
96 case Toolbar::TOPCENTER:
97 return string("TopCenter");
98 break;
99 case Toolbar::BOTTOMCENTER:
100 return string("BottomCenter");
101 break;
102 case Toolbar::TOPRIGHT:
103 return string("TopRight");
104 break;
105 case Toolbar::BOTTOMRIGHT:
106 return string("BottomRight");
107 break;
108 case Toolbar::LEFTTOP:
109 return string("LeftTop");
110 break;
111 case Toolbar::LEFTCENTER:
112 return string("LeftCenter");
113 break;
114 case Toolbar::LEFTBOTTOM:
115 return string("LeftBottom");
116 break;
117 case Toolbar::RIGHTTOP:
118 return string("RightTop");
119 break;
120 case Toolbar::RIGHTCENTER:
121 return string("RightCenter");
122 break;
123 case Toolbar::RIGHTBOTTOM:
124 return string("RightBottom");
125 break;
126 }
127 //default string
128 return string("BottomCenter");
129} 119}
130 120
131template<> 121template<>
132void FbTk::Resource<Toolbar::Placement>:: 122void FbTk::Resource<Toolbar::Placement>::
133setFromString(const char *strval) { 123setFromString(const char *strval) {
134 if (strcasecmp(strval, "TopLeft")==0) 124 size_t i;
135 m_value = Toolbar::TOPLEFT; 125 for (i = 0; i < sizeof(placement_strings)/sizeof(ToolbarPlacementString); ++i) {
136 else if (strcasecmp(strval, "BottomLeft")==0) 126 if (strcasecmp(strval, placement_strings[i].str) == 0) {
137 m_value = Toolbar::BOTTOMLEFT; 127 m_value = placement_strings[i].placement;
138 else if (strcasecmp(strval, "TopCenter")==0) 128 return;
139 m_value = Toolbar::TOPCENTER; 129 }
140 else if (strcasecmp(strval, "BottomCenter")==0) 130 }
141 m_value = Toolbar::BOTTOMCENTER; 131 setDefaultValue();
142 else if (strcasecmp(strval, "TopRight")==0)
143 m_value = Toolbar::TOPRIGHT;
144 else if (strcasecmp(strval, "BottomRight")==0)
145 m_value = Toolbar::BOTTOMRIGHT;
146 else if (strcasecmp(strval, "LeftTop") == 0)
147 m_value = Toolbar::LEFTTOP;
148 else if (strcasecmp(strval, "LeftCenter") == 0)
149 m_value = Toolbar::LEFTCENTER;
150 else if (strcasecmp(strval, "LeftBottom") == 0)
151 m_value = Toolbar::LEFTBOTTOM;
152 else if (strcasecmp(strval, "RightTop") == 0)
153 m_value = Toolbar::RIGHTTOP;
154 else if (strcasecmp(strval, "RightCenter") == 0)
155 m_value = Toolbar::RIGHTCENTER;
156 else if (strcasecmp(strval, "RightBottom") == 0)
157 m_value = Toolbar::RIGHTBOTTOM;
158 else
159 setDefaultValue();
160} 132}
161 133
162} // end namespace FbTk 134} // end namespace FbTk