summaryrefslogtreecommitdiff
path: root/src/Toolbar.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-04-17 03:44:09 +0000
committerDana Jansens <danakj@orodu.net>2002-04-17 03:44:09 +0000
commit66c879bd5c0c9f668096f620007388ef347becd0 (patch)
tree1b6e92ac90084838ce7d20b5e190facd25fbb1b4 /src/Toolbar.cc
parent73a3c979b39ae0b51298d16bc5e76b61d31c89d5 (diff)
Toolbar saves its settings as their changed
Main config's Hide Toolbar option is also saved when it is changed Removed 2 debug couts from Slit
Diffstat (limited to 'src/Toolbar.cc')
-rw-r--r--src/Toolbar.cc194
1 files changed, 150 insertions, 44 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index b44017d4..b6469957 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -62,8 +62,18 @@
# endif // HAVE_SYS_TIME_H
#endif // TIME_WITH_SYS_TIME
+#include <strstream>
+#include <string>
+
+Toolbar::Toolbar(BScreen &scrn, Resource &conf) : screen(scrn),
+ openbox(scrn.getOpenbox()), config(conf)
+{
+ // default values
+ m_width_percent =66;
+ m_placement = BottomCenter;
+ m_ontop = false;
+ m_hidden = m_autohide = false;
-Toolbar::Toolbar(BScreen &scrn) : screen(scrn), openbox(scrn.getOpenbox()) {
// get the clock updating every minute
clock_timer = new BTimer(openbox, *this);
timeval now;
@@ -78,10 +88,7 @@ Toolbar::Toolbar(BScreen &scrn) : screen(scrn), openbox(scrn.getOpenbox()) {
image_ctrl = screen.getImageControl();
- on_top = screen.isToolbarOnTop();
- hidden = do_auto_hide = screen.doToolbarAutoHide();
-
- editing = False;
+ m_editing = False;
new_workspace_name = (char *) 0;
new_name_pos = 0;
frame.grab_x = frame.grab_y = 0;
@@ -151,20 +158,36 @@ Toolbar::Toolbar(BScreen &scrn) : screen(scrn), openbox(scrn.getOpenbox()) {
mapToolbar();
}
-inline void Toolbar::mapToolbar(){
- if(!screen.doToolbarHide()){
- do_hide=false;//not hidden, so windows should not maximize over the toolbar
+int Toolbar::getX() const {
+ return ((m_hidden) ? frame.x_hidden : frame.x);
+}
+
+int Toolbar::getY() const {
+ if (screen.hideToolbar()) return screen.size().h();
+ else if (m_hidden) return frame.y_hidden;
+ else return frame.y;
+}
+
+unsigned int Toolbar::getExposedHeight() const {
+ if (screen.hideToolbar()) return 0;
+ else if (m_autohide) return frame.bevel_w;
+ else return frame.height;
+}
+
+void Toolbar::mapToolbar(){
+ if (!screen.hideToolbar()) {
+ //not hidden, so windows should not maximize over the toolbar
XMapSubwindows(display, frame.window);
XMapWindow(display, frame.window);
- }else
- do_hide=true;
+ }
}
-inline void Toolbar::unMapToolbar(){
- do_hide=true; //hidden so we can maximize over the toolbar
+
+void Toolbar::unMapToolbar(){
+ //hidden so we can maximize over the toolbar
XUnmapWindow(display, frame.window);
}
-Toolbar::~Toolbar(void) {
+Toolbar::~Toolbar() {
unMapToolbar();
if (frame.base) image_ctrl->removeImage(frame.base);
if (frame.label) image_ctrl->removeImage(frame.label);
@@ -194,9 +217,92 @@ Toolbar::~Toolbar(void) {
}
-void Toolbar::reconfigure(void) {
+void Toolbar::setOnTop(bool b) {
+ m_ontop = b;
+ ostrstream s;
+ s << "session.screen" << screen.getScreenNumber() << ".toolbar.onTop" << ends;
+ config.setValue(s.str(), m_ontop ? "True" : "False");
+}
+
+void Toolbar::setAutoHide(bool b) {
+ m_autohide = b;
+ ostrstream s;
+ s << "session.screen" << screen.getScreenNumber() << ".toolbar.autoHide" <<
+ ends;
+ config.setValue(s.str(), m_autohide ? "True" : "False");
+}
+
+void Toolbar::setWidthPercent(int w) {
+ m_width_percent = w;
+ ostrstream s;
+ s << "session.screen" << screen.getScreenNumber() << ".toolbar.widthPercent"
+ << ends;
+ config.setValue(s.str(), m_width_percent);
+}
+
+void Toolbar::setPlacement(int p) {
+ m_placement = p;
+ ostrstream s;
+ s << "session.screen" << screen.getScreenNumber() << ".toolbar.placement" <<
+ ends;
+ const char *placement;
+ switch (m_placement) {
+ case TopLeft: placement = "TopLeft"; break;
+ case BottomLeft: placement = "BottomLeft"; break;
+ case TopCenter: placement = "TopCenter"; break;
+ case TopRight: placement = "TopRight"; break;
+ case BottomRight: placement = "BottomRight"; break;
+ case BottomCenter: default: placement = "BottomCenter"; break;
+ }
+ config.setValue(s.str(), placement);
+}
+
+void Toolbar::load() {
+ std::ostrstream rscreen, rname, rclass;
+ std::string s;
+ bool b;
+ long l;
+ rscreen << "session.screen" << screen.getScreenNumber() << '.' << ends;
+
+ rname << rscreen.str() << "toolbar.widthPercent" << ends;
+ rclass << rscreen.str() << "Toolbar.WidthPercent" << ends;
+ if (config.getValue(rname.str(), rclass.str(), l) && (l > 0 && l <= 100))
+ m_width_percent = l;
+
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "toolbar.placement" << ends;
+ rclass << rscreen.str() << "Toolbar.Placement" << ends;
+ if (config.getValue(rname.str(), rclass.str(), s)) {
+ if (0 == strncasecmp(s.c_str(), "TopLeft", s.length()))
+ m_placement = TopLeft;
+ else if (0 == strncasecmp(s.c_str(), "BottomLeft", s.length()))
+ m_placement = BottomLeft;
+ else if (0 == strncasecmp(s.c_str(), "TopCenter", s.length()))
+ m_placement = TopCenter;
+ else if (0 == strncasecmp(s.c_str(), "TopRight", s.length()))
+ m_placement = TopRight;
+ else if ( 0 == strncasecmp(s.c_str(), "BottomRight", s.length()))
+ m_placement = BottomRight;
+ else if ( 0 == strncasecmp(s.c_str(), "BottomCenter", s.length()))
+ m_placement = BottomCenter;
+ }
+
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "toolbar.onTop" << ends;
+ rclass << rscreen.str() << "Toolbar.OnTop" << ends;
+ if (config.getValue(rname.str(), rclass.str(), b))
+ m_ontop = b;
+
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "toolbar.autoHide" << ends;
+ rclass << rscreen.str() << "Toolbar.AutoHide" << ends;
+ if (config.getValue(rname.str(), rclass.str(), b))
+ m_hidden = m_autohide = b;
+}
+
+void Toolbar::reconfigure() {
frame.bevel_w = screen.getBevelWidth();
- frame.width = screen.size().w() * screen.getToolbarWidthPercent() / 100;
+ frame.width = screen.size().w() * m_width_percent / 100;
if (i18n->multibyte())
frame.height =
@@ -209,7 +315,7 @@ void Toolbar::reconfigure(void) {
frame.label_h = frame.height;
frame.height += (frame.bevel_w * 2);
- switch (screen.getToolbarPlacement()) {
+ switch (m_placement) {
case TopLeft:
frame.x = 0;
frame.y = 0;
@@ -348,7 +454,7 @@ void Toolbar::reconfigure(void) {
(frame.width - (frame.clock_w + (frame.button_w * 4) +
frame.workspace_label_w + (frame.bevel_w * 8) + 6));
- if (hidden) {
+ if (m_hidden) {
XMoveResizeWindow(display, frame.window, frame.x_hidden, frame.y_hidden,
frame.width, frame.height);
} else {
@@ -834,11 +940,11 @@ void Toolbar::redrawNextWindowButton(Bool pressed, Bool redraw) {
}
-void Toolbar::edit(void) {
+void Toolbar::edit() {
Window window;
int foo;
- editing = True;
+ m_editing = True;
if (XGetInputFocus(display, &window, &foo) &&
window == frame.workspace_label)
return;
@@ -890,11 +996,11 @@ void Toolbar::buttonPressEvent(XButtonEvent *be) {
checkClock(True, True);
}
#endif // HAVE_STRFTIME
- else if (! on_top) {
+ else if (! m_ontop) {
Window w[1] = { frame.window };
screen.raiseWindows(w, 1);
}
- } else if (be->button == 2 && (! on_top)) {
+ } else if (be->button == 2 && (! m_ontop)) {
XLowerWindow(display, frame.window);
} else if (be->button == 3) {
if (! toolbarmenu->isVisible()) {
@@ -970,10 +1076,10 @@ void Toolbar::buttonReleaseEvent(XButtonEvent *re) {
void Toolbar::enterNotifyEvent(XCrossingEvent *) {
- if (! do_auto_hide)
+ if (! m_autohide)
return;
- if (hidden) {
+ if (m_hidden) {
if (! hide_timer->isTiming()) hide_timer->start();
} else {
if (hide_timer->isTiming()) hide_timer->stop();
@@ -981,10 +1087,10 @@ void Toolbar::enterNotifyEvent(XCrossingEvent *) {
}
void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
- if (! do_auto_hide)
+ if (! m_autohide)
return;
- if (hidden) {
+ if (m_hidden) {
if (hide_timer->isTiming()) hide_timer->stop();
} else if (! toolbarmenu->isVisible()) {
if (! hide_timer->isTiming()) hide_timer->start();
@@ -994,7 +1100,7 @@ void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
void Toolbar::exposeEvent(XExposeEvent *ee) {
if (ee->window == frame.clock) checkClock(True);
- else if (ee->window == frame.workspace_label && (! editing))
+ else if (ee->window == frame.workspace_label && (! m_editing))
redrawWorkspaceLabel();
else if (ee->window == frame.window_label) redrawWindowLabel();
else if (ee->window == frame.psbutton) redrawPrevWorkspaceButton();
@@ -1005,7 +1111,7 @@ void Toolbar::exposeEvent(XExposeEvent *ee) {
void Toolbar::keyPressEvent(XKeyEvent *ke) {
- if (ke->window == frame.workspace_label && editing) {
+ if (ke->window == frame.workspace_label && m_editing) {
openbox.grab();
if (! new_workspace_name) {
@@ -1023,7 +1129,7 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
if (ks == XK_Return || new_name_pos == 127) {
*(new_workspace_name + new_name_pos) = 0;
- editing = False;
+ m_editing = False;
openbox.setNoFocus(False);
if (openbox.getFocusedWindow()) {
@@ -1124,7 +1230,7 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
}
-void Toolbar::timeout(void) {
+void Toolbar::timeout() {
checkClock(True);
timeval now;
@@ -1133,9 +1239,9 @@ void Toolbar::timeout(void) {
}
-void Toolbar::HideHandler::timeout(void) {
- toolbar->hidden = ! toolbar->hidden;
- if (toolbar->hidden)
+void Toolbar::HideHandler::timeout() {
+ toolbar->m_hidden = !toolbar->m_hidden;
+ if (toolbar->m_hidden)
XMoveWindow(toolbar->display, toolbar->frame.window,
toolbar->frame.x_hidden, toolbar->frame.y_hidden);
else
@@ -1159,12 +1265,12 @@ Toolbarmenu::Toolbarmenu(Toolbar &tb) : Basemenu(tb.screen), toolbar(tb) {
update();
- if (toolbar.isOnTop()) setItemSelected(1, True);
- if (toolbar.doAutoHide()) setItemSelected(2, True);
+ if (toolbar.onTop()) setItemSelected(1, True);
+ if (toolbar.autoHide()) setItemSelected(2, True);
}
-Toolbarmenu::~Toolbarmenu(void) {
+Toolbarmenu::~Toolbarmenu() {
delete placementmenu;
}
@@ -1178,17 +1284,17 @@ void Toolbarmenu::itemSelected(int button, int index) {
switch (item->function()) {
case 1: { // always on top
- Bool change = ((toolbar.isOnTop()) ? False : True);
- toolbar.on_top = change;
+ Bool change = ((toolbar.onTop()) ? False : True);
+ toolbar.setOnTop(change);
setItemSelected(1, change);
- if (toolbar.isOnTop()) toolbar.screen.raiseWindows((Window *) 0, 0);
+ if (toolbar.onTop()) toolbar.screen.raiseWindows((Window *) 0, 0);
break;
}
case 2: { // auto hide
- Bool change = ((toolbar.doAutoHide()) ? False : True);
- toolbar.do_auto_hide = change;
+ Bool change = ((toolbar.autoHide()) ? False : True);
+ toolbar.setAutoHide(change);
setItemSelected(2, change);
#ifdef SLIT
@@ -1207,14 +1313,14 @@ void Toolbarmenu::itemSelected(int button, int index) {
}
-void Toolbarmenu::internal_hide(void) {
+void Toolbarmenu::internal_hide() {
Basemenu::internal_hide();
- if (toolbar.doAutoHide() && ! toolbar.isEditing())
+ if (toolbar.autoHide() && ! toolbar.isEditing())
toolbar.hide_handler.timeout();
}
-void Toolbarmenu::reconfigure(void) {
+void Toolbarmenu::reconfigure() {
placementmenu->reconfigure();
Basemenu::reconfigure();
@@ -1251,7 +1357,7 @@ void Toolbarmenu::Placementmenu::itemSelected(int button, int index) {
BasemenuItem *item = find(index);
if (! item) return;
- toolbarmenu.toolbar.screen.saveToolbarPlacement(item->function());
+ toolbarmenu.toolbar.setPlacement(item->function());
hide();
toolbarmenu.toolbar.reconfigure();