From 19f4dc774c19a8b9ebe06aa41a41c4e3fc23b05f Mon Sep 17 00:00:00 2001 From: fluxgen <fluxgen> Date: Sun, 23 Feb 2003 00:49:01 +0000 Subject: changed layeritem to normal type instead of pointer, added placement menu and fixed font to iconbar --- src/Toolbar.cc | 113 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 79 insertions(+), 34 deletions(-) diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 73a8650..f0f0b82 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.60 2003/02/22 23:07:23 fluxgen Exp $ +// $Id: Toolbar.cc,v 1.61 2003/02/23 00:49:01 fluxgen Exp $ #include "Toolbar.hh" @@ -71,9 +71,13 @@ using namespace std; 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); + Fluxbox::instance()->save_rc(); } private: Toolbar &m_tbar; @@ -83,21 +87,62 @@ private: void setupMenus(Toolbar &tbar) { I18n *i18n = I18n::instance(); using namespace FBNLS; - FbTk::Menu &menu = tbar.menu(); - menu.setLabel(i18n->getMessage( - ToolbarSet, ToolbarToolbarTitle, - "Toolbar")); - menu.setInternalMenu(); - - menu.insert("Layer...", tbar.layermenu()); - using namespace FbTk; + + FbTk::Menu &menu = tbar.menu(); + RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit)); menu.insert(i18n->getMessage( ToolbarSet, ToolbarEditWkspcName, "Edit current workspace name"), start_edit); + menu.setLabel(i18n->getMessage( + ToolbarSet, ToolbarToolbarTitle, + "Toolbar")); + menu.setInternalMenu(); + + menu.insert("Layer...", &tbar.layermenu()); + + // 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 Left", Toolbar::TOPLEFT}, + {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(); } @@ -179,18 +224,18 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width): hide_timer(&hide_handler), m_toolbarmenu(*scrn.menuTheme(), scrn.getScreenNumber(), *scrn.getImageControl()), - m_layermenu(0), + m_placementmenu(*scrn.menuTheme(), + scrn.getScreenNumber(), *scrn.getImageControl()), + m_layermenu(*scrn.menuTheme(), + scrn.getScreenNumber(), + *scrn.getImageControl(), + *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), + this), m_theme(scrn.getScreenNumber()), m_place(BOTTOMCENTER), m_themelistener(*this), - m_layeritem(0) { - - m_layermenu = new LayerMenu<Toolbar>( - *scrn.menuTheme(), - scrn.getScreenNumber(), - *scrn.getImageControl(), - *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), - this); + m_layeritem(frame.window, layer) { + // we need to get notified when the theme is reloaded m_theme.addListener(m_themelistener); @@ -205,8 +250,6 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width): frame.button_w = 20; frame.bevel_w = 1; - m_layeritem = new FbTk::XLayerItem(frame.window, layer); - timeval delay; delay.tv_sec = 1; delay.tv_usec = 0; @@ -226,7 +269,7 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width): if (Fluxbox::instance()->useIconBar()) - m_iconbar.reset(new IconBar(&screen(), frame.window_label.window())); + m_iconbar.reset(new IconBar(&screen(), frame.window_label.window(), m_theme.font())); XMapSubwindows(display, frame.window.window()); @@ -247,6 +290,7 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width): frame.pwbutton.setOnClick(prevwindow); frame.nwbutton.setOnClick(nextwindow); + reconfigure(); } @@ -260,8 +304,6 @@ Toolbar::~Toolbar() { if (frame.clk) image_ctrl.removeImage(frame.clk); if (frame.button) image_ctrl.removeImage(frame.button); if (frame.pbutton) image_ctrl.removeImage(frame.pbutton); - if (m_layeritem) delete m_layeritem; - if (m_layermenu) delete m_layermenu; } @@ -285,6 +327,10 @@ void Toolbar::delIcon(FluxboxWindow *w) { } void Toolbar::reconfigure() { + bool vertical = isVertical(); + + if (m_iconbar.get()) + m_iconbar->setVertical(vertical); frame.bevel_w = screen().getBevelWidth(); @@ -357,7 +403,7 @@ void Toolbar::reconfigure() { frame.width, frame.height); } - bool vertical = isVertical(); + unsigned int next_x = frame.workspace_label_w; unsigned int next_y = frame.window.height(); @@ -370,21 +416,19 @@ void Toolbar::reconfigure() { next_x = 0; next_y = 0; if (vertical) { - next_y += frame.workspace_label.height() + 1; + next_y += frame.workspace_label.height() + 1 + frame.bevel_w * 2; } else { - next_x += frame.workspace_label.width() + 1; + next_x += frame.workspace_label.width() + 1 + frame.bevel_w * 2; } - frame.psbutton.moveResize(frame.bevel_w * 2 + - next_x , next_y, + frame.psbutton.moveResize(next_x , next_y, frame.button_w, frame.button_w); if (vertical) - next_y += frame.psbutton.height() + 1; + next_y += frame.psbutton.height() + 1 + frame.bevel_w * 3; else - next_x += frame.psbutton.width() + 1; + next_x += frame.psbutton.width() + 1 + frame.bevel_w * 3; - frame.nsbutton.moveResize(frame.bevel_w * 3 + - next_x, next_y, + frame.nsbutton.moveResize(next_x, next_y, frame.button_w, frame.button_w); size_t label_w = frame.window_label_w; size_t label_h = frame.height; @@ -436,7 +480,8 @@ void Toolbar::reconfigure() { frame.window.height(), *texture); frame.window.setBackgroundPixmap(frame.base); } - if (tmp) image_ctrl.removeImage(tmp); + if (tmp) + image_ctrl.removeImage(tmp); tmp = frame.label; texture = &(m_theme.window()); @@ -541,7 +586,7 @@ void Toolbar::reconfigure() { if (Fluxbox::instance()->useIconBar()) { if (m_iconbar.get() == 0) { // create new iconbar if we don't have one - m_iconbar.reset(new IconBar(&screen(), frame.window_label.window())); + m_iconbar.reset(new IconBar(&screen(), frame.window_label.window(), m_theme.font())); if (screen().getIconCount()) { BScreen::Icons & l = screen().getIconList(); BScreen::Icons::iterator it = l.begin(); -- cgit v0.11.2