From 150db600ffa7395cdfa1460820f87930ebdb2715 Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Mon, 23 Jun 2003 13:17:57 +0000
Subject: moved toolbar resources from screen to Toolbar

---
 src/Toolbar.cc | 377 +++++++++++++++++++++++++++++++++++----------------------
 src/Toolbar.hh |  38 +++---
 2 files changed, 254 insertions(+), 161 deletions(-)

diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index 115a5fc..df5bd86 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -22,7 +22,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: Toolbar.cc,v 1.92 2003/06/22 19:39:47 fluxgen Exp $
+// $Id: Toolbar.cc,v 1.93 2003/06/23 13:17:57 fluxgen Exp $
 
 #include "Toolbar.hh"
 
@@ -77,14 +77,89 @@
 
 using namespace std;
 
+template<>
+void FbTk::Resource<Toolbar::Placement>::
+setFromString(const char *strval) {
+    if (strcasecmp(strval, "TopLeft")==0)
+        m_value = Toolbar::TOPLEFT;
+    else if (strcasecmp(strval, "BottomLeft")==0)
+        m_value = Toolbar::BOTTOMLEFT;
+    else if (strcasecmp(strval, "TopCenter")==0)
+        m_value = Toolbar::TOPCENTER;
+    else if (strcasecmp(strval, "BottomCenter")==0)
+        m_value = Toolbar::BOTTOMCENTER;
+    else if (strcasecmp(strval, "TopRight")==0)
+        m_value = Toolbar::TOPRIGHT;
+    else if (strcasecmp(strval, "BottomRight")==0)
+        m_value = Toolbar::BOTTOMRIGHT;
+    else if (strcasecmp(strval, "LeftTop") == 0)
+        m_value = Toolbar::LEFTTOP;
+    else if (strcasecmp(strval, "LeftCenter") == 0)
+        m_value = Toolbar::LEFTCENTER;
+    else if (strcasecmp(strval, "LeftBottom") == 0)
+        m_value = Toolbar::LEFTBOTTOM;
+    else if (strcasecmp(strval, "RightTop") == 0)
+        m_value = Toolbar::RIGHTTOP;
+    else if (strcasecmp(strval, "RightCenter") == 0)
+        m_value = Toolbar::RIGHTCENTER;
+    else if (strcasecmp(strval, "RightBottom") == 0)
+        m_value = Toolbar::RIGHTBOTTOM;
+    else
+        setDefaultValue();
+}
+
+string FbTk::Resource<Toolbar::Placement>::
+getString() {
+    switch (m_value) {
+    case Toolbar::TOPLEFT:
+        return string("TopLeft");
+        break;
+    case Toolbar::BOTTOMLEFT:
+        return string("BottomLeft");
+        break;
+    case Toolbar::TOPCENTER:
+        return string("TopCenter");
+        break;			
+    case Toolbar::BOTTOMCENTER:
+        return string("BottomCenter");
+        break;
+    case Toolbar::TOPRIGHT:
+        return string("TopRight");
+        break;
+    case Toolbar::BOTTOMRIGHT:
+        return string("BottomRight");
+        break;
+    case Toolbar::LEFTTOP:
+        return string("LeftTop");
+        break;
+    case Toolbar::LEFTCENTER:
+        return string("LeftCenter");
+        break;
+    case Toolbar::LEFTBOTTOM:
+        return string("LeftBottom");
+        break;
+    case Toolbar::RIGHTTOP:
+        return string("RightTop");
+        break;
+    case Toolbar::RIGHTCENTER:
+        return string("RightCenter");
+        break;
+    case Toolbar::RIGHTBOTTOM:
+        return string("RightBottom");
+        break;
+    }
+    //default string
+    return string("BottomCenter");
+}
+
+
 namespace {
 class SetToolbarPlacementCmd: public FbTk::Command {
 public:
     explicit SetToolbarPlacementCmd(Toolbar &tbar, Toolbar::Placement place):m_tbar(tbar), m_place(place) { }
     void execute() {
         m_tbar.setPlacement(m_place);
-        m_tbar.reconfigure();
-        m_tbar.screen().saveToolbarPlacement(m_place);
+        m_tbar.reconfigure();        
         Fluxbox::instance()->save_rc();
     }
 private:
@@ -92,102 +167,6 @@ private:
     Toolbar::Placement m_place;
 };
 
-
-void setupMenus(Toolbar &tbar) {
-    I18n *i18n = I18n::instance();
-    using namespace FBNLS;
-    using namespace FbTk;
-
-    FbTk::Menu &menu = tbar.menu();
-    
-    RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit));
-    menu.insert(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarEditWkspcName,
-                                 "Edit current workspace name"),
-                start_edit);
-
-    menu.setLabel(i18n->getMessage(
-                                   FBNLS::ToolbarSet, FBNLS::ToolbarToolbarTitle,
-                                   "Toolbar")); 
-
-    FbTk::MenuItem *toolbar_menuitem = new IntResMenuItem("Toolbar width percent",
-                                                          tbar.screen().getToolbarWidthPercentResource(),
-                                                          0, 100); // min/max value
-
-
-    FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk::
-                                                   SimpleCommand<Toolbar>
-                                                   (tbar, &Toolbar::reconfigure));
-    FbTk::RefCount<FbTk::Command> save_resources(new FbTk::
-                                                 SimpleCommand<Fluxbox>
-                                                 (*Fluxbox::instance(), &Fluxbox::save_rc));
-    FbTk::MacroCommand *toolbar_menuitem_macro = new FbTk::MacroCommand();
-    toolbar_menuitem_macro->add(reconfig_toolbar);
-    toolbar_menuitem_macro->add(save_resources);
-
-    FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro);
-    toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);  
-
-    menu.insert(toolbar_menuitem);
-
-    menu.insert(new BoolMenuItem(i18n->getMessage(FBNLS::CommonSet, FBNLS::CommonAutoHide,
-                                                  "Auto hide"),
-                                 tbar.screen().doToolbarAutoHide(),
-                                 reconfig_toolbar_and_save_resource));
-
-    menu.insert("Layer...", &tbar.layermenu());
-
-    if (tbar.screen().hasXinerama()) {
-        menu.insert("On Head...", new XineramaHeadMenu<Toolbar>(
-                        *tbar.screen().menuTheme(),
-                        tbar.screen(),
-                        tbar.screen().imageControl(),
-                        *tbar.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
-                        &tbar
-                        ));
-    }
-
-    // setup items in placement menu
-    struct {
-        int set;
-        int base;
-        const char *default_str;
-        Toolbar::Placement placement;
-    } place_menu[]  = {
-        {0, 0, "Top Left", Toolbar::TOPLEFT},
-        {0, 0, "Left Top", Toolbar::LEFTTOP},
-        {0, 0, "Left Center", Toolbar::LEFTCENTER},
-        {0, 0, "Left Bottom", Toolbar::LEFTBOTTOM}, 
-        {0, 0, "Bottom Left", Toolbar::BOTTOMLEFT},
-        {0, 0, "Top Center", Toolbar::TOPCENTER},
-        {0, 0, 0, Toolbar::TOPCENTER},
-        {0, 0, 0, Toolbar::BOTTOMCENTER},
-        {0, 0, 0, Toolbar::BOTTOMCENTER},
-        {0, 0, "Bottom Center", Toolbar::BOTTOMCENTER},
-        {0, 0, "Top Right", Toolbar::TOPRIGHT},
-        {0, 0, "Right Top", Toolbar::RIGHTTOP},
-        {0, 0, "Right Center", Toolbar::RIGHTCENTER},
-        {0, 0, "Right Bottom", Toolbar::RIGHTBOTTOM},
-        {0, 0, "Bottom Right", Toolbar::BOTTOMRIGHT}
-    };
-    tbar.placementMenu().setMinimumSublevels(3);
-    // create items in sub menu
-    for (size_t i=0; i<15; ++i) {
-        if (place_menu[i].default_str == 0) {
-            tbar.placementMenu().insert("");
-        } else {
-            const char *i18n_str = i18n->getMessage(place_menu[i].set, 
-                                                    place_menu[i].base,
-                                                    place_menu[i].default_str);
-            RefCount<FbTk::Command> setplace(new SetToolbarPlacementCmd(tbar, place_menu[i].placement));
-            tbar.placementMenu().insert(i18n_str, setplace);
-                                                              
-        }
-    }
-    menu.insert("Placement", &tbar.placementMenu());
-    tbar.placementMenu().update();
-    menu.update();
-}
-
 }; // end anonymous
 
 // toolbar frame
@@ -262,9 +241,8 @@ Toolbar::Frame::~Frame() {
 }
 
 Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t width):
-    editing(false),
-    hidden(scrn.doToolbarAutoHide()), 
-    do_auto_hide(scrn.doToolbarAutoHide()),
+    m_editing(false),
+    m_hidden(false),
     frame(*this, scrn.screenNumber()),
     m_screen(scrn),
     m_clock_timer(this), // get the clock updating every minute
@@ -279,17 +257,27 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi
                 this,
                 true),
     m_theme(scrn.screenNumber()),
-    m_place(scrn.toolbarPlacement()),
     m_themelistener(*this),
     m_layeritem(frame.window, layer),
-    m_strut(0) {
+    m_strut(0),
+    m_rc_auto_hide(scrn.resourceManager(), false, 
+                   scrn.name() + ".toolbar.autoHide", scrn.altName() + ".Toolbar.AutoHide"),
+    m_rc_width_percent(scrn.resourceManager(), 65, 
+                       scrn.name() + ".toolbar.widthPercent", scrn.altName() + ".Toolbar.WidthPercent"),  
+    m_rc_layernum(scrn.resourceManager(), Fluxbox::Layer(Fluxbox::instance()->getDesktopLayer()), 
+                  scrn.name() + ".toolbar.layer", scrn.altName() + ".Toolbar.Layer"),
+    m_rc_on_head(scrn.resourceManager(), 0,
+                 scrn.name() + ".toolbar.onhead", scrn.altName() + ".Toolbar.onHead"),
+    m_rc_placement(scrn.resourceManager(), Toolbar::BOTTOMCENTER, 
+                   scrn.name() + ".toolbar.placement", scrn.altName() + ".Toolbar.Placement")
+{
 
     // we need to get notified when the theme is reloaded
     m_theme.addListener(m_themelistener);
 
     m_layermenu.setInternalMenu();
     m_placementmenu.setInternalMenu();
-    setupMenus(*this);
+    setupMenus();
 
     // geometry settings
     frame.width = width;
@@ -313,8 +301,6 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi
 
     frame.grab_x = frame.grab_y = 0;
 
-    display = FbTk::App::instance()->display();
-
     frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
         frame.pbutton = None;
 
@@ -373,7 +359,7 @@ void Toolbar::updateStrut() {
 
     // request area on screen
     int top = 0, bottom = 0, left = 0, right = 0;
-    switch (m_place) {
+    switch (placement()) {
     case TOPLEFT:
     case TOPCENTER:
     case TOPRIGHT:
@@ -400,12 +386,12 @@ void Toolbar::updateStrut() {
 }
 
 bool Toolbar::isVertical() const {
-    return (m_place == RIGHTCENTER ||
-            m_place == RIGHTTOP ||
-            m_place == RIGHTBOTTOM ||
-            m_place == LEFTCENTER ||
-            m_place == LEFTTOP ||
-            m_place == LEFTBOTTOM);
+    return (placement() == RIGHTCENTER ||
+            placement() == RIGHTTOP ||
+            placement() == RIGHTBOTTOM ||
+            placement() == LEFTCENTER ||
+            placement() == LEFTTOP ||
+            placement() == LEFTBOTTOM);
 }
 
 void Toolbar::addIcon(FluxboxWindow *w) {
@@ -454,15 +440,18 @@ void Toolbar::disableIconBar() {
 
 }
 
+void Toolbar::raise() {
+    m_layeritem.raise();
+}
+
+void Toolbar::lower() {
+    m_layeritem.lower();
+}
 
 void Toolbar::reconfigure() {
 
-    if (do_auto_hide == false && 
-        do_auto_hide != screen().doToolbarAutoHide()) {
+    if (doAutoHide())
         m_hide_timer.start();
-    }
-
-    do_auto_hide = screen().doToolbarAutoHide();
 
     bool vertical = isVertical();
 
@@ -472,7 +461,7 @@ void Toolbar::reconfigure() {
     frame.bevel_w = screen().rootTheme().bevelWidth();
 
     // recallibrate size
-    setPlacement(m_place);
+    setPlacement(placement());
 
 #ifdef HAVE_STRFTIME
     time_t ttmp = time(0);
@@ -552,7 +541,7 @@ void Toolbar::reconfigure() {
         frame.window_label_w = w - i;
 
 
-    if (hidden)
+    if (isHidden())
         frame.window.moveResize(frame.x_hidden, frame.y_hidden,
                                 frame.width, frame.height);
     else {
@@ -912,8 +901,8 @@ void Toolbar::edit() {
     Window window;
     int foo;
 
-    editing = true;	//mark for editing
-	
+    m_editing = true;	//mark for editing
+    Display *display = FbTk::App::instance()->display();
     //workspace label already has intput focus ?
     if (XGetInputFocus(display, &window, &foo) &&
         window == frame.workspace_label)
@@ -948,6 +937,7 @@ void Toolbar::buttonPressEvent(XButtonEvent &be) {
             checkClock(true, true);
         }
 #endif // HAVE_STRFTIME
+
     } else if (be.button == 3) {
         FluxboxWindow *fluxboxwin = 0;
         // if we clicked on a icon then show window menu
@@ -995,6 +985,7 @@ void Toolbar::buttonPressEvent(XButtonEvent &be) {
 
 void Toolbar::buttonReleaseEvent(XButtonEvent &re) {
     if (re.button == 1) {
+        raise();
         if (re.window == frame.workspace_label) {
             FbTk::Menu *menu = screen().getWorkspacemenu();
             //move the workspace label and make it visible
@@ -1031,10 +1022,10 @@ void Toolbar::buttonReleaseEvent(XButtonEvent &re) {
 
 
 void Toolbar::enterNotifyEvent(XCrossingEvent &not_used) {
-    if (! do_auto_hide)
+    if (! doAutoHide())
         return;
 
-    if (hidden) {
+    if (isHidden()) {
         if (! m_hide_timer.isTiming())
             m_hide_timer.start();
     } else {
@@ -1044,10 +1035,10 @@ void Toolbar::enterNotifyEvent(XCrossingEvent &not_used) {
 }
 
 void Toolbar::leaveNotifyEvent(XCrossingEvent &not_used) {
-    if (! do_auto_hide)
+    if (! doAutoHide())
         return;
 
-    if (hidden) {
+    if (isHidden()) {
         if (m_hide_timer.isTiming()) 
             m_hide_timer.stop();
     } else if (! m_toolbarmenu.isVisible() && ! m_hide_timer.isTiming()) 
@@ -1059,7 +1050,7 @@ void Toolbar::leaveNotifyEvent(XCrossingEvent &not_used) {
 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 && (! isEditing()))
         redrawWorkspaceLabel();
     else if (m_iconbar.get() != 0)
         m_iconbar->exposeEvent(&ee);
@@ -1067,7 +1058,7 @@ void Toolbar::exposeEvent(XExposeEvent &ee) {
 
 
 void Toolbar::keyPressEvent(XKeyEvent &ke) {
-    if (ke.window != frame.workspace_label.window() || !editing)
+    if (ke.window != frame.workspace_label.window() || !isEditing())
         return;
 		
     KeySym ks;
@@ -1075,35 +1066,35 @@ void Toolbar::keyPressEvent(XKeyEvent &ke) {
     XLookupString(&ke, keychar, 1, &ks, 0);
 
     if (ks == XK_Return || ks == XK_Escape) {			
-        editing = false;
+        m_editing = false;
         Fluxbox * const fluxbox = Fluxbox::instance();			
 
         if (fluxbox->getFocusedWindow()) {
             fluxbox->getFocusedWindow()->setInputFocus();
             fluxbox->getFocusedWindow()->setFocusFlag(true);
         } else
-            XSetInputFocus(display, PointerRoot, None, CurrentTime);
+            XSetInputFocus(FbTk::App::instance()->display(), PointerRoot, None, CurrentTime);
 			
         if (ks == XK_Return)	//change workspace name if keypress = Return
-            screen().currentWorkspace()->setName(new_workspace_name.c_str());
+            screen().currentWorkspace()->setName(m_new_workspace_name.c_str());
 
-        new_workspace_name.erase(); //erase temporary workspace name
+        m_new_workspace_name.erase(); //erase temporary workspace name
         reconfigure();
         //save workspace names
         Fluxbox::instance()->save_rc();
 
     } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) {
 
-        if (ks == XK_BackSpace && new_workspace_name.size())
-            new_workspace_name.erase(new_workspace_name.size()-1);
+        if (ks == XK_BackSpace && m_new_workspace_name.size())
+            m_new_workspace_name.erase(m_new_workspace_name.size() - 1);
         else
-            new_workspace_name += keychar[0];
+            m_new_workspace_name += keychar[0];
 
 
         frame.workspace_label.clear();
-        int l = new_workspace_name.size(), tw, x;
+        int l = m_new_workspace_name.size(), tw, x;
 
-        tw = m_theme.font().textWidth(new_workspace_name.c_str(), l);
+        tw = m_theme.font().textWidth(m_new_workspace_name.c_str(), l);
         x = (frame.workspace_label_w - tw) / 2;
 
         if (x < (signed) frame.bevel_w)
@@ -1118,7 +1109,7 @@ void Toolbar::keyPressEvent(XKeyEvent &ke) {
         m_theme.font().drawText(frame.workspace_label.window(),
                                 screen().screenNumber(),
                                 screen().winFrameTheme().labelTextFocusGC(),
-                                new_workspace_name.c_str(), l,
+                                m_new_workspace_name.c_str(), l,
                                 x, dy);
 
         frame.workspace_label.drawRectangle(screen().winFrameTheme().labelTextFocusGC(),
@@ -1139,6 +1130,7 @@ void Toolbar::timeout() {
 
 
 void Toolbar::setPlacement(Toolbar::Placement where) {
+    *m_rc_placement = where;
     int head_x = 0,
         head_y = 0,
         head_w,
@@ -1146,7 +1138,7 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
 
 #ifdef XINERAMA
     if (screen().hasXinerama()) {
-        int head = screen().getToolbarOnHead();
+        int head = *m_rc_on_head;
         head_x = screen().getHeadX(head);
         head_y = screen().getHeadY(head);
         head_w = screen().getHeadWidth(head);
@@ -1158,9 +1150,8 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
         head_h = screen().height();
     }
 
-    m_place = where;
 
-    frame.width = head_w * screen().getToolbarWidthPercent() / 100;
+    frame.width = head_w * (*m_rc_width_percent) / 100;
     frame.height = m_theme.font().height();
 
     frame.height += 2;
@@ -1170,7 +1161,7 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
     // should we flipp sizes?
     if (isVertical()) {
         frame.width = frame.height;
-        frame.height = head_h * screen().getToolbarWidthPercent() / 100;
+        frame.height = head_h * (*m_rc_width_percent) / 100;
         if (!m_theme.font().isRotated())
             m_theme.font().rotate(90); // rotate to vertical text
 
@@ -1289,8 +1280,9 @@ void Toolbar::HideHandler::timeout() {
 
     toolbar->m_hide_timer.fireOnce(true);
 
-    toolbar->hidden = ! toolbar->hidden;
-    if (toolbar->hidden) {
+    // toggle hidden
+    toolbar->m_hidden = ! toolbar->m_hidden;
+    if (toolbar->isHidden()) {
         toolbar->frame.window.move(toolbar->frame.x_hidden, toolbar->frame.y_hidden);
     } else {
         toolbar->frame.window.move(toolbar->frame.x, toolbar->frame.y);
@@ -1299,5 +1291,98 @@ void Toolbar::HideHandler::timeout() {
 
 void Toolbar::moveToLayer(int layernum) {
     m_layeritem.moveToLayer(layernum); 
-    m_screen.saveToolbarLayer((Fluxbox::Layer) layernum); 
+    *m_rc_layernum = layernum;
+}
+
+void Toolbar::setupMenus() {
+    Toolbar &tbar = *this;
+    I18n *i18n = I18n::instance();
+    using namespace FBNLS;
+    using namespace FbTk;
+
+    FbTk::Menu &menu = tbar.menu();
+    
+    RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit));
+    menu.insert(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarEditWkspcName,
+                                 "Edit current workspace name"),
+                start_edit);
+
+    menu.setLabel(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarToolbarTitle,
+                                   "Toolbar")); 
+
+    FbTk::MenuItem *toolbar_menuitem = new IntResMenuItem("Toolbar width percent",
+                                                          m_rc_width_percent,
+                                                          0, 100); // min/max value
+
+
+    FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk::
+                                                   SimpleCommand<Toolbar>
+                                                   (tbar, &Toolbar::reconfigure));
+    FbTk::RefCount<FbTk::Command> save_resources(new FbCommands::SaveResources());
+    FbTk::MacroCommand *toolbar_menuitem_macro = new FbTk::MacroCommand();
+    toolbar_menuitem_macro->add(reconfig_toolbar);
+    toolbar_menuitem_macro->add(save_resources);
+
+    FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro);
+    toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);  
+
+    menu.insert(toolbar_menuitem);
+
+    menu.insert(new BoolMenuItem(i18n->getMessage(FBNLS::CommonSet, FBNLS::CommonAutoHide,
+                                                  "Auto hide"),
+                                 *m_rc_auto_hide,
+                                 reconfig_toolbar_and_save_resource));
+
+    menu.insert("Layer...", &tbar.layermenu());
+
+    if (tbar.screen().hasXinerama()) {
+        menu.insert("On Head...", new XineramaHeadMenu<Toolbar>(
+                        *tbar.screen().menuTheme(),
+                        tbar.screen(),
+                        tbar.screen().imageControl(),
+                        *tbar.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
+                        &tbar
+                        ));
+    }
+
+    // setup items in placement menu
+    struct {
+        int set;
+        int base;
+        const char *default_str;
+        Toolbar::Placement placement;
+    } place_menu[]  = {
+        {0, 0, "Top Left", Toolbar::TOPLEFT},
+        {0, 0, "Left Top", Toolbar::LEFTTOP},
+        {0, 0, "Left Center", Toolbar::LEFTCENTER},
+        {0, 0, "Left Bottom", Toolbar::LEFTBOTTOM}, 
+        {0, 0, "Bottom Left", Toolbar::BOTTOMLEFT},
+        {0, 0, "Top Center", Toolbar::TOPCENTER},
+        {0, 0, 0, Toolbar::TOPCENTER},
+        {0, 0, 0, Toolbar::BOTTOMCENTER},
+        {0, 0, 0, Toolbar::BOTTOMCENTER},
+        {0, 0, "Bottom Center", Toolbar::BOTTOMCENTER},
+        {0, 0, "Top Right", Toolbar::TOPRIGHT},
+        {0, 0, "Right Top", Toolbar::RIGHTTOP},
+        {0, 0, "Right Center", Toolbar::RIGHTCENTER},
+        {0, 0, "Right Bottom", Toolbar::RIGHTBOTTOM},
+        {0, 0, "Bottom Right", Toolbar::BOTTOMRIGHT}
+    };
+    tbar.placementMenu().setMinimumSublevels(3);
+    // create items in sub menu
+    for (size_t i=0; i<15; ++i) {
+        if (place_menu[i].default_str == 0) {
+            tbar.placementMenu().insert("");
+        } else {
+            const char *i18n_str = i18n->getMessage(place_menu[i].set, 
+                                                    place_menu[i].base,
+                                                    place_menu[i].default_str);
+            RefCount<FbTk::Command> setplace(new SetToolbarPlacementCmd(tbar, place_menu[i].placement));
+            tbar.placementMenu().insert(i18n_str, setplace);
+                                                              
+        }
+    }
+    menu.insert("Placement", &tbar.placementMenu());
+    tbar.placementMenu().update();
+    menu.update();
 }
diff --git a/src/Toolbar.hh b/src/Toolbar.hh
index 6dd7860..87cd223 100644
--- a/src/Toolbar.hh
+++ b/src/Toolbar.hh
@@ -22,7 +22,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: Toolbar.hh,v 1.34 2003/06/22 19:38:38 fluxgen Exp $
+// $Id: Toolbar.hh,v 1.35 2003/06/23 13:16:50 fluxgen Exp $
 
 #ifndef	 TOOLBAR_HH
 #define	 TOOLBAR_HH
@@ -73,11 +73,11 @@ public:
     void delIcon(FluxboxWindow *w);
     /// remove all icons
     void delAllIcons();
-
     void enableIconBar();
     void disableIconBar();
+    void raise();
+    void lower();
 
-    bool containsIcon(const FluxboxWindow &win) const;
     inline const FbTk::Menu &menu() const { return m_toolbarmenu; }
     inline FbTk::Menu &menu() { return m_toolbarmenu; }
     inline FbTk::Menu &placementMenu() { return m_placementmenu; }
@@ -91,25 +91,28 @@ public:
     FbTk::XLayerItem &layerItem() { return m_layeritem; }
 
     /// are we in workspacename editing?
-    inline bool isEditing() const { return editing; }
+    inline bool isEditing() const { return m_editing; }
     /// are we hidden?
-    inline bool isHidden() const { return hidden; }
+    inline bool isHidden() const { return m_hidden; }
     /// do we auto hide the toolbar?
-    inline bool doAutoHide() const { return do_auto_hide; }
+    inline bool doAutoHide() const { return *m_rc_auto_hide; }
     ///	@return X window of the toolbar
     inline const FbTk::FbWindow &window() const { return frame.window; }
     inline BScreen &screen() { return m_screen; }
     inline const BScreen &screen() const { return m_screen; }
     inline unsigned int width() const { return frame.width; }
     inline unsigned int height() const { return frame.height; }
-    inline unsigned int exposedHeight() const { return ((do_auto_hide) ? frame.bevel_w : frame.height); }
-    inline int x() const { return ((hidden) ? frame.x_hidden : frame.x); }
-    inline int y() const { return ((hidden) ? frame.y_hidden : frame.y); }
+    inline unsigned int exposedHeight() const { return doAutoHide() ? frame.bevel_w : frame.height; }
+    inline int x() const { return isHidden() ? frame.x_hidden : frame.x; }
+    inline int y() const { return isHidden() ? frame.y_hidden : frame.y; }
+    inline Placement placement() const { return *m_rc_placement; }
     /// @return pointer to iconbar if it got one, else 0
     inline const IconBar *iconBar()  const { return m_iconbar.get(); }
     inline const ToolbarTheme &theme() const { return m_theme; }
     inline ToolbarTheme &theme() { return m_theme; }
     bool isVertical() const;
+    bool containsIcon(const FluxboxWindow &win) const;
+
     /**
        @name eventhandlers
     */
@@ -134,13 +137,12 @@ public:
 
 		
 private:
+    void setupMenus();
     void clearStrut();
     void updateStrut();
 
-    bool editing;      ///< edit workspace label mode
-    bool hidden;       ///< hidden state
-    bool do_auto_hide; ///< do we auto hide	
-    Display *display;  ///< display connection
+    bool m_editing;      ///< edit workspace label mode
+    bool m_hidden;       ///< hidden state
 
     /// Toolbar frame
     struct Frame {
@@ -174,10 +176,10 @@ private:
     LayerMenu<Toolbar> m_layermenu;
     std::auto_ptr<IconBar> m_iconbar;
 	
-    std::string new_workspace_name; ///< temp variable in edit workspace name mode
+    std::string m_new_workspace_name; ///< temp variable in edit workspace name mode
 
     ToolbarTheme m_theme;
-    Placement m_place;
+
     //!! TODO this is just temporary
     class ThemeListener: public FbTk::Observer {
     public:
@@ -194,6 +196,12 @@ private:
     FbTk::XLayerItem m_layeritem;
 
     Strut *m_strut; ///< created and destroyed by BScreen
+    // resources
+    FbTk::Resource<bool> m_rc_auto_hide;
+    FbTk::Resource<int> m_rc_width_percent;
+    FbTk::Resource<Fluxbox::Layer> m_rc_layernum;
+    FbTk::Resource<int> m_rc_on_head;
+    FbTk::Resource<Placement> m_rc_placement;
 };
 
 
-- 
cgit v0.11.2