version bump
[blackbox.git] / src / Toolbarmenu.cc
blob605fab9b0ec0097933c0448b7eb99c0d5b256738
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 // Toolbarmenu.cc for Blackbox - an X11 Window manager
3 // Copyright (c) 2001 - 2005 Sean 'Shaleh' Perry <shaleh@debian.org>
4 // Copyright (c) 1997 - 2000, 2002 - 2005
5 // Bradley T Hughes <bhughes at trolltech.com>
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a
8 // copy of this software and associated documentation files (the "Software"),
9 // to deal in the Software without restriction, including without limitation
10 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 // and/or sell copies of the Software, and to permit persons to whom the
12 // Software is furnished to do so, subject to the following conditions:
14 // The above copyright notice and this permission notice shall be included in
15 // all copies or substantial portions of the Software.
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 // DEALINGS IN THE SOFTWARE.
25 #include "Toolbarmenu.hh"
26 #include "Toolbar.hh"
28 #include <Unicode.hh>
31 class ToolbarPlacementmenu : public bt::Menu {
32 public:
33 ToolbarPlacementmenu(bt::Application &app, unsigned int screen,
34 BScreen *bscreen);
36 void refresh(void);
38 protected:
39 void itemClicked(unsigned int id, unsigned int button);
41 private:
42 BScreen *_bscreen;
46 enum {
47 EnableToolbar,
48 Placement,
49 AlwaysOnTop,
50 AutoHide
54 Toolbarmenu::Toolbarmenu(bt::Application &app, unsigned int screen,
55 BScreen *bscreen)
56 : bt::Menu(app, screen), _bscreen(bscreen)
58 setTitle(bt::toUnicode("Toolbar Options"));
59 showTitle();
61 ToolbarPlacementmenu *menu = new ToolbarPlacementmenu(app, screen, bscreen);
62 insertItem(bt::toUnicode("Enable Toolbar"), EnableToolbar);
63 insertSeparator();
64 insertItem(bt::toUnicode("Placement"), menu, Placement);
65 insertItem(bt::toUnicode("Always on top"), AlwaysOnTop);
66 insertItem(bt::toUnicode("Auto Hide"), AutoHide);
70 void Toolbarmenu::refresh(void) {
71 const ToolbarOptions &options = _bscreen->resource().toolbarOptions();
72 setItemChecked(EnableToolbar, options.enabled);
73 setItemChecked(AlwaysOnTop, options.always_on_top);
74 setItemChecked(AutoHide, options.auto_hide);
78 void Toolbarmenu::itemClicked(unsigned int id, unsigned int button) {
79 if (button != 1)
80 return;
82 Toolbar *toolbar = _bscreen->toolbar();
83 ToolbarOptions &options =
84 const_cast<ToolbarOptions &>(_bscreen->resource().toolbarOptions());
86 switch (id) {
87 case EnableToolbar:
88 options.enabled = (toolbar == 0);
89 _bscreen->saveResource();
90 if (toolbar != 0)
91 _bscreen->destroyToolbar();
92 else
93 _bscreen->createToolbar();
94 break;
96 case AlwaysOnTop:
97 options.always_on_top = !options.always_on_top;
98 _bscreen->saveResource();
99 if (toolbar) {
100 StackingList::Layer new_layer = (options.always_on_top
101 ? StackingList::LayerAbove
102 : StackingList::LayerNormal);
103 _bscreen->stackingList().changeLayer(toolbar, new_layer);
104 _bscreen->restackWindows();
106 break;
108 case AutoHide:
109 options.auto_hide = !options.auto_hide;
110 _bscreen->saveResource();
111 if (toolbar)
112 toolbar->toggleAutoHide();
113 break;
115 default:
116 break;
117 } // switch
121 ToolbarPlacementmenu::ToolbarPlacementmenu(bt::Application &app,
122 unsigned int screen,
123 BScreen *bscreen)
124 : bt::Menu(app, screen), _bscreen(bscreen)
126 setTitle(bt::toUnicode("Toolbar Placement"));
127 showTitle();
129 insertItem(bt::toUnicode("Top Left"), Toolbar::TopLeft);
130 insertItem(bt::toUnicode("Top Center"), Toolbar::TopCenter);
131 insertItem(bt::toUnicode("Top Right"), Toolbar::TopRight);
132 insertSeparator();
133 insertItem(bt::toUnicode("Bottom Left"), Toolbar::BottomLeft);
134 insertItem(bt::toUnicode("Bottom Center"), Toolbar::BottomCenter);
135 insertItem(bt::toUnicode("Bottom Right"), Toolbar::BottomRight);
139 void ToolbarPlacementmenu::refresh(void) {
140 const ToolbarOptions &options = _bscreen->resource().toolbarOptions();
141 setItemChecked(Toolbar::TopLeft,
142 options.placement == Toolbar::TopLeft);
143 setItemChecked(Toolbar::TopCenter,
144 options.placement == Toolbar::TopCenter);
145 setItemChecked(Toolbar::TopRight,
146 options.placement == Toolbar::TopRight);
147 setItemChecked(Toolbar::BottomLeft,
148 options.placement == Toolbar::BottomLeft);
149 setItemChecked(Toolbar::BottomCenter,
150 options.placement == Toolbar::BottomCenter);
151 setItemChecked(Toolbar::BottomRight,
152 options.placement == Toolbar::BottomRight);
156 void ToolbarPlacementmenu::itemClicked(unsigned int id, unsigned int button) {
157 if (button != 1)
158 return;
160 Toolbar *toolbar = _bscreen->toolbar();
161 ToolbarOptions &options =
162 const_cast<ToolbarOptions &>(_bscreen->resource().toolbarOptions());
164 options.placement = id;
165 if (toolbar)
166 toolbar->setPlacement((Toolbar::Placement) id);
167 _bscreen->saveResource();