diff options
-rw-r--r-- | src/ToolbarHandler.cc | 98 | ||||
-rw-r--r-- | src/ToolbarHandler.hh | 13 |
2 files changed, 84 insertions, 27 deletions
diff --git a/src/ToolbarHandler.cc b/src/ToolbarHandler.cc index a2b960f..d7cf8f0 100644 --- a/src/ToolbarHandler.cc +++ b/src/ToolbarHandler.cc | |||
@@ -20,7 +20,7 @@ | |||
20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
21 | // DEALINGS IN THE SOFTWARE. | 21 | // DEALINGS IN THE SOFTWARE. |
22 | 22 | ||
23 | // $Id: ToolbarHandler.cc,v 1.16 2003/06/24 10:37:39 fluxgen Exp $ | 23 | // $Id: ToolbarHandler.cc,v 1.17 2003/06/24 16:27:18 fluxgen Exp $ |
24 | 24 | ||
25 | /** | 25 | /** |
26 | * The ToolbarHandler class acts as a rough interface to the toolbar. | 26 | * The ToolbarHandler class acts as a rough interface to the toolbar. |
@@ -41,6 +41,58 @@ | |||
41 | #include "IntResMenuItem.hh" | 41 | #include "IntResMenuItem.hh" |
42 | #include "BoolMenuItem.hh" | 42 | #include "BoolMenuItem.hh" |
43 | 43 | ||
44 | #include <string> | ||
45 | |||
46 | using namespace std; | ||
47 | |||
48 | template<> | ||
49 | void FbTk::Resource<ToolbarHandler::ToolbarMode>:: | ||
50 | setFromString(const char *strval) { | ||
51 | if (strcasecmp(strval, "Off") == 0) | ||
52 | m_value = ToolbarHandler::OFF; | ||
53 | else if (strcasecmp(strval, "None") == 0) | ||
54 | m_value = ToolbarHandler::NONE; | ||
55 | else if (strcasecmp(strval, "Icons") == 0) | ||
56 | m_value = ToolbarHandler::ICONS; | ||
57 | else if (strcasecmp(strval, "WorkspaceIcons") == 0) | ||
58 | m_value = ToolbarHandler::WORKSPACEICONS; | ||
59 | else if (strcasecmp(strval, "Workspace") == 0) | ||
60 | m_value = ToolbarHandler::WORKSPACE; | ||
61 | else if (strcasecmp(strval, "AllWindows") == 0) | ||
62 | m_value = ToolbarHandler::ALLWINDOWS; | ||
63 | else | ||
64 | setDefaultValue(); | ||
65 | } | ||
66 | |||
67 | |||
68 | template<> | ||
69 | string FbTk::Resource<ToolbarHandler::ToolbarMode>:: | ||
70 | getString() { | ||
71 | switch (m_value) { | ||
72 | case ToolbarHandler::OFF: | ||
73 | return string("Off"); | ||
74 | break; | ||
75 | case ToolbarHandler::NONE: | ||
76 | return string("None"); | ||
77 | break; | ||
78 | case ToolbarHandler::LASTMODE: | ||
79 | case ToolbarHandler::ICONS: | ||
80 | return string("Icons"); | ||
81 | break; | ||
82 | case ToolbarHandler::WORKSPACEICONS: | ||
83 | return string("WorkspaceIcons"); | ||
84 | break; | ||
85 | case ToolbarHandler::WORKSPACE: | ||
86 | return string("Workspace"); | ||
87 | break; | ||
88 | case ToolbarHandler::ALLWINDOWS: | ||
89 | return string("AllWindows"); | ||
90 | break; | ||
91 | } | ||
92 | // default string | ||
93 | return string("Icons"); | ||
94 | } | ||
95 | |||
44 | namespace { | 96 | namespace { |
45 | 97 | ||
46 | class ToolbarModeMenuItem : public FbTk::MenuItem { | 98 | class ToolbarModeMenuItem : public FbTk::MenuItem { |
@@ -50,7 +102,7 @@ public: | |||
50 | FbTk::RefCount<FbTk::Command> &cmd): | 102 | FbTk::RefCount<FbTk::Command> &cmd): |
51 | FbTk::MenuItem(label, cmd), m_handler(handler), m_mode(mode) { | 103 | FbTk::MenuItem(label, cmd), m_handler(handler), m_mode(mode) { |
52 | } | 104 | } |
53 | bool isEnabled() const { return m_handler.getMode() != m_mode; } | 105 | bool isEnabled() const { return m_handler.mode() != m_mode; } |
54 | void click(int button, int time) { | 106 | void click(int button, int time) { |
55 | m_handler.setMode(m_mode); | 107 | m_handler.setMode(m_mode); |
56 | FbTk::MenuItem::click(button, time); | 108 | FbTk::MenuItem::click(button, time); |
@@ -88,26 +140,29 @@ void setupModeMenu(FbTk::Menu &menu, ToolbarHandler &handler) { | |||
88 | 140 | ||
89 | }; // end anonymous namespace | 141 | }; // end anonymous namespace |
90 | 142 | ||
91 | ToolbarHandler::ToolbarHandler(BScreen &screen, ToolbarMode mode) | 143 | ToolbarHandler::ToolbarHandler(BScreen &screen) |
92 | : m_screen(screen), m_mode(mode), m_toolbar(0), m_current_workspace(0), | 144 | : m_screen(screen), |
145 | m_rc_mode(screen.resourceManager(), ToolbarHandler::ICONS, | ||
146 | screen.name() + ".toolbar.mode", screen.altName() + ".Toolbar.Mode"), | ||
147 | m_toolbar(0), | ||
148 | m_current_workspace(0), | ||
93 | m_modemenu(*screen.menuTheme(), | 149 | m_modemenu(*screen.menuTheme(), |
94 | screen.screenNumber(), screen.imageControl()), | 150 | screen.screenNumber(), screen.imageControl()), |
95 | m_toolbarmenu(*screen.menuTheme(), | 151 | m_toolbarmenu(*screen.menuTheme(), |
96 | screen.screenNumber(), screen.imageControl()) | 152 | screen.screenNumber(), screen.imageControl()) { |
97 | { | ||
98 | m_modemenu.setInternalMenu(); | 153 | m_modemenu.setInternalMenu(); |
99 | m_toolbarmenu.setInternalMenu(); | 154 | m_toolbarmenu.setInternalMenu(); |
100 | setupModeMenu(m_modemenu, *this); | 155 | setupModeMenu(m_modemenu, *this); |
101 | setMode(mode, false); // the atomhandler part will initialise it shortly | 156 | setMode(*m_rc_mode, false); // the atomhandler part will initialise it shortly |
102 | } | 157 | } |
103 | 158 | ||
104 | void ToolbarHandler::setMode(ToolbarMode mode, bool initialise) { | 159 | void ToolbarHandler::setMode(ToolbarMode newmode, bool initialise) { |
105 | if (mode < 0 || mode >= LASTMODE || (mode == m_mode && initialise)) | 160 | if (newmode < 0 || newmode >= LASTMODE || (newmode == mode() && initialise)) |
106 | return; | 161 | return; |
107 | 162 | ||
108 | m_screen.saveToolbarMode(mode); | 163 | *m_rc_mode = newmode; |
109 | if (mode == OFF) { | 164 | |
110 | m_mode = mode; | 165 | if (newmode == OFF) { |
111 | m_toolbarmenu.removeAll(); | 166 | m_toolbarmenu.removeAll(); |
112 | //TODO: nls | 167 | //TODO: nls |
113 | m_toolbarmenu.insert("Mode...", &m_modemenu); | 168 | m_toolbarmenu.insert("Mode...", &m_modemenu); |
@@ -127,7 +182,7 @@ void ToolbarHandler::setMode(ToolbarMode mode, bool initialise) { | |||
127 | } | 182 | } |
128 | 183 | ||
129 | 184 | ||
130 | if (mode == NONE) { | 185 | if (newmode == NONE) { |
131 | // disableIconBar will clean up | 186 | // disableIconBar will clean up |
132 | m_toolbar->disableIconBar(); | 187 | m_toolbar->disableIconBar(); |
133 | } else { | 188 | } else { |
@@ -136,8 +191,7 @@ void ToolbarHandler::setMode(ToolbarMode mode, bool initialise) { | |||
136 | m_toolbar->enableIconBar(); | 191 | m_toolbar->enableIconBar(); |
137 | m_toolbar->delAllIcons(); | 192 | m_toolbar->delAllIcons(); |
138 | } | 193 | } |
139 | // reset Toolbar, and reload it (initForScreen) | 194 | |
140 | m_mode = mode; | ||
141 | if (initialise) | 195 | if (initialise) |
142 | initForScreen(m_screen); | 196 | initForScreen(m_screen); |
143 | } | 197 | } |
@@ -145,7 +199,7 @@ void ToolbarHandler::setMode(ToolbarMode mode, bool initialise) { | |||
145 | void ToolbarHandler::initForScreen(BScreen &screen) { | 199 | void ToolbarHandler::initForScreen(BScreen &screen) { |
146 | if (&m_screen != &screen) | 200 | if (&m_screen != &screen) |
147 | return; | 201 | return; |
148 | switch (m_mode) { | 202 | switch (mode()) { |
149 | case OFF: | 203 | case OFF: |
150 | break; | 204 | break; |
151 | case NONE: | 205 | case NONE: |
@@ -207,7 +261,7 @@ void ToolbarHandler::setupWindow(FluxboxWindow &win) { | |||
207 | if (&win.screen() != &m_screen) | 261 | if (&win.screen() != &m_screen) |
208 | return; | 262 | return; |
209 | 263 | ||
210 | switch (m_mode) { | 264 | switch (mode()) { |
211 | case OFF: | 265 | case OFF: |
212 | case NONE: | 266 | case NONE: |
213 | break; | 267 | break; |
@@ -236,7 +290,7 @@ void ToolbarHandler::updateWindowClose(FluxboxWindow &win) { | |||
236 | return; | 290 | return; |
237 | 291 | ||
238 | // check status of window (in current workspace, etc) and remove if necessary | 292 | // check status of window (in current workspace, etc) and remove if necessary |
239 | switch (m_mode) { | 293 | switch (mode()) { |
240 | case OFF: | 294 | case OFF: |
241 | case NONE: | 295 | case NONE: |
242 | break; | 296 | break; |
@@ -265,7 +319,7 @@ void ToolbarHandler::updateState(FluxboxWindow &win) { | |||
265 | return; | 319 | return; |
266 | 320 | ||
267 | // this function only relevant for icons | 321 | // this function only relevant for icons |
268 | switch (m_mode) { | 322 | switch (mode()) { |
269 | case OFF: | 323 | case OFF: |
270 | case NONE: | 324 | case NONE: |
271 | case WORKSPACE: | 325 | case WORKSPACE: |
@@ -296,7 +350,9 @@ void ToolbarHandler::updateWorkspace(FluxboxWindow &win) { | |||
296 | return; | 350 | return; |
297 | 351 | ||
298 | // don't care about current workspace except if in workspace mode | 352 | // don't care about current workspace except if in workspace mode |
299 | if (!(m_mode == WORKSPACE || (m_mode == WORKSPACEICONS && win.isIconic()))) return; | 353 | if (!(mode() == WORKSPACE || |
354 | (mode() == WORKSPACEICONS && win.isIconic()))) | ||
355 | return; | ||
300 | 356 | ||
301 | if (win.workspaceNumber() == m_current_workspace) { | 357 | if (win.workspaceNumber() == m_current_workspace) { |
302 | //!! TODO | 358 | //!! TODO |
@@ -317,7 +373,7 @@ void ToolbarHandler::updateCurrentWorkspace(BScreen &screen) { | |||
317 | return; | 373 | return; |
318 | // if only displaying current workspace, update list | 374 | // if only displaying current workspace, update list |
319 | // otherwise ignore it | 375 | // otherwise ignore it |
320 | if (m_mode != WORKSPACE && m_mode != WORKSPACEICONS) | 376 | if (mode() != WORKSPACE && mode() != WORKSPACEICONS) |
321 | return; | 377 | return; |
322 | m_toolbar->delAllIcons(); | 378 | m_toolbar->delAllIcons(); |
323 | initForScreen(m_screen); | 379 | initForScreen(m_screen); |
diff --git a/src/ToolbarHandler.hh b/src/ToolbarHandler.hh index 4017e53..3986cc0 100644 --- a/src/ToolbarHandler.hh +++ b/src/ToolbarHandler.hh | |||
@@ -20,7 +20,7 @@ | |||
20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
21 | // DEALINGS IN THE SOFTWARE. | 21 | // DEALINGS IN THE SOFTWARE. |
22 | 22 | ||
23 | // $Id: ToolbarHandler.hh,v 1.3 2003/06/18 13:35:36 fluxgen Exp $ | 23 | // $Id: ToolbarHandler.hh,v 1.4 2003/06/24 16:27:18 fluxgen Exp $ |
24 | 24 | ||
25 | #ifndef TOOLBARHANDLER_HH | 25 | #ifndef TOOLBARHANDLER_HH |
26 | #define TOOLBARHANDLER_HH | 26 | #define TOOLBARHANDLER_HH |
@@ -28,6 +28,7 @@ | |||
28 | #include "AtomHandler.hh" | 28 | #include "AtomHandler.hh" |
29 | #include "Menu.hh" | 29 | #include "Menu.hh" |
30 | #include "Toolbar.hh" | 30 | #include "Toolbar.hh" |
31 | #include "Resource.hh" | ||
31 | 32 | ||
32 | class BScreen; | 33 | class BScreen; |
33 | class FluxboxWindow; | 34 | class FluxboxWindow; |
@@ -44,14 +45,14 @@ public: | |||
44 | LASTMODE | 45 | LASTMODE |
45 | }; | 46 | }; |
46 | 47 | ||
47 | ToolbarHandler(BScreen &screen, ToolbarMode mode); | 48 | explicit ToolbarHandler(BScreen &screen); |
48 | ~ToolbarHandler() { } | 49 | ~ToolbarHandler() { } |
49 | 50 | ||
50 | void setMode(ToolbarMode mode, bool initialise = true); | 51 | void setMode(ToolbarMode mode, bool initialise = true); |
51 | ToolbarMode getMode() { return m_mode; }; | 52 | ToolbarMode mode() const { return *m_rc_mode; }; |
52 | 53 | ||
53 | inline const Toolbar *getToolbar() const { return m_toolbar.get(); } | 54 | inline const Toolbar *toolbar() const { return m_toolbar.get(); } |
54 | inline Toolbar *getToolbar() { return m_toolbar.get(); } | 55 | inline Toolbar *toolbar() { return m_toolbar.get(); } |
55 | 56 | ||
56 | 57 | ||
57 | void initForScreen(BScreen &screen); | 58 | void initForScreen(BScreen &screen); |
@@ -84,7 +85,7 @@ public: | |||
84 | 85 | ||
85 | private: | 86 | private: |
86 | BScreen &m_screen; | 87 | BScreen &m_screen; |
87 | ToolbarMode m_mode; | 88 | FbTk::Resource<ToolbarMode> m_rc_mode; |
88 | std::auto_ptr<Toolbar> m_toolbar; | 89 | std::auto_ptr<Toolbar> m_toolbar; |
89 | unsigned int m_current_workspace; | 90 | unsigned int m_current_workspace; |
90 | 91 | ||