diff options
Diffstat (limited to 'src/IconbarTool.cc')
-rw-r--r-- | src/IconbarTool.cc | 70 |
1 files changed, 25 insertions, 45 deletions
diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc index a912030..621a8a1 100644 --- a/src/IconbarTool.cc +++ b/src/IconbarTool.cc | |||
@@ -77,19 +77,16 @@ const EnumTraits<Container::Alignment>::Pair EnumTraits<Container::Alignment>::s | |||
77 | 77 | ||
78 | } // end namespace FbTk | 78 | } // end namespace FbTk |
79 | 79 | ||
80 | namespace { | 80 | class IconbarTool::ToolbarModeMenuItem : public FbTk::RadioMenuItem { |
81 | |||
82 | class ToolbarModeMenuItem : public FbTk::RadioMenuItem { | ||
83 | public: | 81 | public: |
84 | ToolbarModeMenuItem(const FbTk::FbString &label, IconbarTool &handler, | 82 | ToolbarModeMenuItem(const FbTk::FbString &label, IconbarTool &handler, |
85 | string mode, | 83 | string mode): |
86 | FbTk::RefCount<FbTk::Command<void> > &cmd): | 84 | FbTk::RadioMenuItem(label), m_handler(handler), m_mode(mode) { |
87 | FbTk::RadioMenuItem(label, cmd), m_handler(handler), m_mode(mode) { | ||
88 | setCloseOnClick(false); | 85 | setCloseOnClick(false); |
89 | } | 86 | } |
90 | bool isSelected() const { return m_handler.mode() == m_mode; } | 87 | bool isSelected() const { return m_handler.m_rc_mode.get() == m_mode; } |
91 | void click(int button, int time, unsigned int mods) { | 88 | void click(int button, int time, unsigned int mods) { |
92 | m_handler.setMode(m_mode); | 89 | *m_handler.m_rc_mode = m_mode; |
93 | FbTk::RadioMenuItem::click(button, time, mods); | 90 | FbTk::RadioMenuItem::click(button, time, mods); |
94 | } | 91 | } |
95 | 92 | ||
@@ -98,12 +95,11 @@ private: | |||
98 | string m_mode; | 95 | string m_mode; |
99 | }; | 96 | }; |
100 | 97 | ||
101 | class ToolbarAlignMenuItem: public FbTk::RadioMenuItem { | 98 | class IconbarTool::ToolbarAlignMenuItem: public FbTk::RadioMenuItem { |
102 | public: | 99 | public: |
103 | ToolbarAlignMenuItem(const FbTk::FbString &label, IconbarTool &handler, | 100 | ToolbarAlignMenuItem(const FbTk::FbString &label, IconbarTool &handler, |
104 | FbTk::Container::Alignment mode, | 101 | FbTk::Container::Alignment mode): |
105 | FbTk::RefCount<FbTk::Command<void> > &cmd): | 102 | FbTk::RadioMenuItem(label), m_handler(handler), m_mode(mode) { |
106 | FbTk::RadioMenuItem(label, cmd), m_handler(handler), m_mode(mode) { | ||
107 | setCloseOnClick(false); | 103 | setCloseOnClick(false); |
108 | } | 104 | } |
109 | bool isSelected() const { return m_handler.alignment() == m_mode; } | 105 | bool isSelected() const { return m_handler.alignment() == m_mode; } |
@@ -117,77 +113,66 @@ private: | |||
117 | FbTk::Container::Alignment m_mode; | 113 | FbTk::Container::Alignment m_mode; |
118 | }; | 114 | }; |
119 | 115 | ||
120 | void setupModeMenu(FbTk::Menu &menu, IconbarTool &handler) { | 116 | void IconbarTool::setupModeMenu(FbTk::Menu &menu) { |
121 | using namespace FbTk; | 117 | using namespace FbTk; |
122 | _FB_USES_NLS; | 118 | _FB_USES_NLS; |
123 | 119 | ||
124 | menu.setLabel(_FB_XTEXT(Toolbar, IconbarMode, "Iconbar Mode", "Menu title - chooses which set of icons are shown in the iconbar")); | 120 | menu.setLabel(_FB_XTEXT(Toolbar, IconbarMode, "Iconbar Mode", "Menu title - chooses which set of icons are shown in the iconbar")); |
125 | 121 | ||
126 | RefCount<Command<void> > saverc_cmd(new FbCommands::SaveResources()); | ||
127 | |||
128 | |||
129 | menu.insert(new ToolbarModeMenuItem(_FB_XTEXT(Toolbar, IconbarModeNone, | 122 | menu.insert(new ToolbarModeMenuItem(_FB_XTEXT(Toolbar, IconbarModeNone, |
130 | "None", "No icons are shown in the iconbar"), | 123 | "None", "No icons are shown in the iconbar"), |
131 | handler, | 124 | *this, "none")); |
132 | "none", saverc_cmd)); | ||
133 | 125 | ||
134 | menu.insert(new ToolbarModeMenuItem( | 126 | menu.insert(new ToolbarModeMenuItem( |
135 | _FB_XTEXT(Toolbar, IconbarModeIcons, | 127 | _FB_XTEXT(Toolbar, IconbarModeIcons, |
136 | "Icons", "Iconified windows from all workspaces are shown"), | 128 | "Icons", "Iconified windows from all workspaces are shown"), |
137 | handler, | 129 | *this, "{static groups} (minimized=yes)")); |
138 | "{static groups} (minimized=yes)", saverc_cmd)); | ||
139 | 130 | ||
140 | menu.insert(new ToolbarModeMenuItem( | 131 | menu.insert(new ToolbarModeMenuItem( |
141 | _FB_XTEXT(Toolbar, IconbarModeNoIcons, | 132 | _FB_XTEXT(Toolbar, IconbarModeNoIcons, |
142 | "NoIcons", "No iconified windows from all workspaces are shown"), | 133 | "NoIcons", "No iconified windows from all workspaces are shown"), |
143 | handler, | 134 | *this, "{static groups} (minimized=no)")); |
144 | "{static groups} (minimized=no)", saverc_cmd)); | ||
145 | 135 | ||
146 | menu.insert(new ToolbarModeMenuItem( | 136 | menu.insert(new ToolbarModeMenuItem( |
147 | _FB_XTEXT(Toolbar, IconbarModeWorkspaceIcons, | 137 | _FB_XTEXT(Toolbar, IconbarModeWorkspaceIcons, |
148 | "WorkspaceIcons", "Iconified windows from this workspace are shown"), | 138 | "WorkspaceIcons", "Iconified windows from this workspace are shown"), |
149 | handler, | 139 | *this, "{static groups} (minimized=yes) (workspace)")); |
150 | "{static groups} (minimized=yes) (workspace)", saverc_cmd)); | ||
151 | 140 | ||
152 | menu.insert(new ToolbarModeMenuItem( | 141 | menu.insert(new ToolbarModeMenuItem( |
153 | _FB_XTEXT(Toolbar, IconbarModeWorkspaceNoIcons, | 142 | _FB_XTEXT(Toolbar, IconbarModeWorkspaceNoIcons, |
154 | "WorkspaceNoIcons", "No iconified windows from this workspace are shown"), | 143 | "WorkspaceNoIcons", "No iconified windows from this workspace are shown"), |
155 | handler, | 144 | *this, "{static groups} (minimized=no) (workspace)")); |
156 | "{static groups} (minimized=no) (workspace)", saverc_cmd)); | ||
157 | 145 | ||
158 | menu.insert(new ToolbarModeMenuItem( | 146 | menu.insert(new ToolbarModeMenuItem( |
159 | _FB_XTEXT(Toolbar, IconbarModeWorkspace, | 147 | _FB_XTEXT(Toolbar, IconbarModeWorkspace, |
160 | "Workspace", "Normal and iconified windows from this workspace are shown"), | 148 | "Workspace", "Normal and iconified windows from this workspace are shown"), |
161 | handler, | 149 | *this, "{static groups} (workspace)")); |
162 | "{static groups} (workspace)", saverc_cmd)); | ||
163 | 150 | ||
164 | menu.insert(new ToolbarModeMenuItem( | 151 | menu.insert(new ToolbarModeMenuItem( |
165 | _FB_XTEXT(Toolbar, IconbarModeAllWindows, "All Windows", "All windows are shown"), | 152 | _FB_XTEXT(Toolbar, IconbarModeAllWindows, "All Windows", "All windows are shown"), |
166 | handler, | 153 | *this, "{static groups}")); |
167 | "{static groups}", saverc_cmd)); | ||
168 | 154 | ||
169 | menu.insert(new FbTk::MenuSeparator()); | 155 | menu.insert(new FbTk::MenuSeparator()); |
170 | 156 | ||
171 | menu.insert(new ToolbarAlignMenuItem( | 157 | menu.insert(new ToolbarAlignMenuItem( |
172 | _FB_XTEXT(Align, Left, "Left", "Align to the left"), | 158 | _FB_XTEXT(Align, Left, "Left", "Align to the left"), |
173 | handler, | 159 | *this, FbTk::Container::LEFT)); |
174 | FbTk::Container::LEFT, saverc_cmd)); | ||
175 | 160 | ||
176 | menu.insert(new ToolbarAlignMenuItem( | 161 | menu.insert(new ToolbarAlignMenuItem( |
177 | _FB_XTEXT(Align, Relative, "Relative", "Align relative to the width"), | 162 | _FB_XTEXT(Align, Relative, "Relative", "Align relative to the width"), |
178 | handler, | 163 | *this, FbTk::Container::RELATIVE)); |
179 | FbTk::Container::RELATIVE, saverc_cmd)); | ||
180 | 164 | ||
181 | menu.insert(new ToolbarAlignMenuItem( | 165 | menu.insert(new ToolbarAlignMenuItem( |
182 | _FB_XTEXT(Align, Right, "Right", "Align to the right"), | 166 | _FB_XTEXT(Align, Right, "Right", "Align to the right"), |
183 | handler, | 167 | *this, FbTk::Container::RIGHT)); |
184 | FbTk::Container::RIGHT, saverc_cmd)); | ||
185 | 168 | ||
186 | menu.insert(new FbTk::MenuSeparator()); | 169 | menu.insert(new FbTk::MenuSeparator()); |
187 | 170 | ||
188 | menu.updateMenu(); | 171 | menu.updateMenu(); |
189 | } | 172 | } |
190 | 173 | ||
174 | namespace { | ||
175 | |||
191 | typedef FbTk::RefCount<FbTk::Command<void> > RefCmd; | 176 | typedef FbTk::RefCount<FbTk::Command<void> > RefCmd; |
192 | 177 | ||
193 | class ShowMenu: public FbTk::Command<void> { | 178 | class ShowMenu: public FbTk::Command<void> { |
@@ -237,7 +222,6 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, | |||
237 | m_unfocused_theme(unfocused_theme), | 222 | m_unfocused_theme(unfocused_theme), |
238 | m_empty_pm( screen.imageControl() ), | 223 | m_empty_pm( screen.imageControl() ), |
239 | m_winlist(new FocusableList(screen)), | 224 | m_winlist(new FocusableList(screen)), |
240 | m_mode("none"), | ||
241 | m_rc_mode(screen.resourceManager(), "{static groups} (workspace)", | 225 | m_rc_mode(screen.resourceManager(), "{static groups} (workspace)", |
242 | screen.name() + ".iconbar.mode"), | 226 | screen.name() + ".iconbar.mode"), |
243 | m_rc_alignment(screen.resourceManager(), FbTk::Container::RELATIVE, | 227 | m_rc_alignment(screen.resourceManager(), FbTk::Container::RELATIVE, |
@@ -251,7 +235,7 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, | |||
251 | m_alpha(255) { | 235 | m_alpha(255) { |
252 | 236 | ||
253 | // setup mode menu | 237 | // setup mode menu |
254 | setupModeMenu(*m_menu, *this); | 238 | setupModeMenu(*m_menu); |
255 | _FB_USES_NLS; | 239 | _FB_USES_NLS; |
256 | using namespace FbTk; | 240 | using namespace FbTk; |
257 | // setup use pixmap item to reconfig iconbar and save resource on click | 241 | // setup use pixmap item to reconfig iconbar and save resource on click |
@@ -270,7 +254,8 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, | |||
270 | menu.insert(m_menu->label().logical(), FbTk::RefCount<FbTk::Menu>(m_menu)); | 254 | menu.insert(m_menu->label().logical(), FbTk::RefCount<FbTk::Menu>(m_menu)); |
271 | 255 | ||
272 | // setup signals | 256 | // setup signals |
273 | setMode(*m_rc_mode); | 257 | m_tracker.join(m_rc_mode.modifiedSig(), FbTk::MemFun(*this, &IconbarTool::modeChanged)); |
258 | modeChanged(*m_rc_mode); | ||
274 | } | 259 | } |
275 | 260 | ||
276 | IconbarTool::~IconbarTool() { | 261 | IconbarTool::~IconbarTool() { |
@@ -309,12 +294,7 @@ void IconbarTool::setAlignment(FbTk::Container::Alignment align) { | |||
309 | m_menu->reconfigure(); | 294 | m_menu->reconfigure(); |
310 | } | 295 | } |
311 | 296 | ||
312 | void IconbarTool::setMode(string mode) { | 297 | void IconbarTool::modeChanged(const std::string &mode) { |
313 | if (mode == m_mode) | ||
314 | return; | ||
315 | |||
316 | *m_rc_mode = m_mode = mode; | ||
317 | |||
318 | // lock graphics update | 298 | // lock graphics update |
319 | m_icon_container.setUpdateLock(true); | 299 | m_icon_container.setUpdateLock(true); |
320 | 300 | ||