From 3501eef8f8f2cb80b5ec6c724d004fd50f5a1fba Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Fri, 25 Jul 2003 18:10:34 +0000 Subject: [PATCH] towards saner frontends. Part I: the toolbar git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7357 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/Toolbar.C | 54 +++++----------- src/frontends/Toolbar.h | 36 +++++++---- src/frontends/qt2/ChangeLog | 10 +++ src/frontends/qt2/Makefile.dialogs | 2 +- .../qt2/{Toolbar_pimpl.C => QLToolbar.C} | 40 +++++------- .../qt2/{Toolbar_pimpl.h => QLToolbar.h} | 22 +++---- src/frontends/qt2/QtView.C | 5 +- src/frontends/xforms/ChangeLog | 8 +++ src/frontends/xforms/Makefile.am | 4 +- .../{Toolbar_pimpl.C => XFormsToolbar.C} | 64 +++++++++---------- .../{Toolbar_pimpl.h => XFormsToolbar.h} | 21 +++--- src/frontends/xforms/XFormsView.C | 5 +- 12 files changed, 135 insertions(+), 136 deletions(-) rename src/frontends/qt2/{Toolbar_pimpl.C => QLToolbar.C} (85%) rename src/frontends/qt2/{Toolbar_pimpl.h => QLToolbar.h} (84%) rename src/frontends/xforms/{Toolbar_pimpl.C => XFormsToolbar.C} (81%) rename src/frontends/xforms/{Toolbar_pimpl.h => XFormsToolbar.h} (84%) diff --git a/src/frontends/Toolbar.C b/src/frontends/Toolbar.C index b243030f90..e9045711c8 100644 --- a/src/frontends/Toolbar.C +++ b/src/frontends/Toolbar.C @@ -13,35 +13,36 @@ #include "Toolbar.h" #include "ToolbarBackend.h" -#include "Toolbar_pimpl.h" #include "debug.h" #include "LyXAction.h" using std::endl; -Toolbar::Toolbar(LyXView * o, int x, int y) +Toolbar::Toolbar() : last_textclass_(-1) { - pimpl_ = new Pimpl(o, x, y); - - // extracts the toolbars from the backend - ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin(); - ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end(); - - for (; cit != end; ++cit) - pimpl_->add(*cit); } Toolbar::~Toolbar() { - delete pimpl_; +} + + +void Toolbar::init() +{ + // extracts the toolbars from the backend + ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin(); + ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end(); + + for (; cit != end; ++cit) + add(*cit); } void Toolbar::update(bool in_math, bool in_table) { - pimpl_->update(); + update(); // extracts the toolbars from the backend ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin(); @@ -49,41 +50,20 @@ void Toolbar::update(bool in_math, bool in_table) for (; cit != end; ++cit) { if (cit->flags & ToolbarBackend::MATH) - pimpl_->displayToolbar(*cit, in_math); + displayToolbar(*cit, in_math); else if (cit->flags & ToolbarBackend::TABLE) - pimpl_->displayToolbar(*cit, in_table); + displayToolbar(*cit, in_table); } } - -void Toolbar::setLayout(string const & layout) -{ - pimpl_->setLayout(layout); -} - - bool Toolbar::updateLayoutList(int textclass) { // update the layout display if (last_textclass_ != textclass) { - pimpl_->updateLayoutList(true); + updateLayoutList(); last_textclass_ = textclass; return true; - } else { - pimpl_->updateLayoutList(false); + } else return false; - } -} - - -void Toolbar::openLayoutList() -{ - pimpl_->openLayoutList(); -} - - -void Toolbar::clearLayoutList() -{ - pimpl_->clearLayoutList(); } diff --git a/src/frontends/Toolbar.h b/src/frontends/Toolbar.h index c12a21b2f9..3d0777c46e 100644 --- a/src/frontends/Toolbar.h +++ b/src/frontends/Toolbar.h @@ -14,10 +14,10 @@ #include "LString.h" +#include "ToolbarBackend.h" class LyXView; - /** * The LyX GUI independent toolbar class * @@ -26,33 +26,43 @@ class LyXView; class Toolbar { public: /// - Toolbar(LyXView * o, int x, int y); + Toolbar(); - /// - ~Toolbar(); + /// + virtual ~Toolbar(); + + /// Initialize toolbar from backend + void init(); /// update the state of the toolbars void update(bool in_math, bool in_table); /// update the layout combox - void setLayout(string const & layout); + virtual void setLayout(string const & layout) = 0; /** * Populate the layout combox - returns whether we did a full * update or not */ bool updateLayoutList(int textclass); /// Drop down the layout list - void openLayoutList(); + virtual void openLayoutList() = 0; /// Erase the layout list - void clearLayoutList(); + virtual void clearLayoutList() = 0; - /// Compaq cxx 6.5 requires this to be public - struct Pimpl; private: - /// - friend struct Toolbar::Pimpl; - /// - Pimpl * pimpl_; + + virtual void add(ToolbarBackend::Toolbar const & tb) = 0; + + /// update the state of the icons + virtual void update() = 0; + + /// show or hide a toolbar + virtual void displayToolbar(ToolbarBackend::Toolbar const & tb, + bool show) = 0; + + /// Populate the layout combox. + virtual void updateLayoutList() = 0; + /** * The last textclass layout list in the layout choice selector diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index 1131a72075..52d3a27f16 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,13 @@ +2003-07-25 Jean-Marc Lasgouttes + + * QLToolbar.h: + * QLToolbar.C: derives from Toolbar (replaces Toolbar::Pimpl) + + * Toolbar_pimpl.C: + * Toolbar_pimpl.h: removed + + * QtView.C: modified because of changes above + 2003-07-24 John Levon * QPrefs.C: make sure to correctly split a default diff --git a/src/frontends/qt2/Makefile.dialogs b/src/frontends/qt2/Makefile.dialogs index 50e400a9b5..07139f2253 100644 --- a/src/frontends/qt2/Makefile.dialogs +++ b/src/frontends/qt2/Makefile.dialogs @@ -122,4 +122,4 @@ MOCFILES = \ QURLDialog.C QURLDialog.h \ QVCLogDialog.C QVCLogDialog.h \ QWrapDialog.C QWrapDialog.h \ - Toolbar_pimpl.C Toolbar_pimpl.h + QLToolbar.C QLToolbar.h diff --git a/src/frontends/qt2/Toolbar_pimpl.C b/src/frontends/qt2/QLToolbar.C similarity index 85% rename from src/frontends/qt2/Toolbar_pimpl.C rename to src/frontends/qt2/QLToolbar.C index 76fc851eaa..7bcf253592 100644 --- a/src/frontends/qt2/Toolbar_pimpl.C +++ b/src/frontends/qt2/QLToolbar.C @@ -1,10 +1,11 @@ /** - * \file qt2/Toolbar_pimpl.C + * \file qt2/QLToolbar.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes * \author John Levon + * \author Jean-Marc Lasgouttes * * Full author contact details are available in file CREDITS */ @@ -28,7 +29,7 @@ #include #include "QtView.h" -#include "Toolbar_pimpl.h" +#include "QLToolbar.h" #include #include @@ -45,20 +46,15 @@ public: }; -Toolbar::Pimpl::Pimpl(LyXView * o, int, int) +QLToolbar::QLToolbar(LyXView * o) : owner_(static_cast(o)), - combo_(0) + combo_(0) { proxy_.reset(new ToolbarProxy(*this)); } -Toolbar::Pimpl::~Pimpl() -{ -} - - -void Toolbar::Pimpl::displayToolbar(ToolbarBackend::Toolbar const & tb, bool show) +void QLToolbar::displayToolbar(ToolbarBackend::Toolbar const & tb, bool show) { QToolBar * qtb = toolbars_[tb.name]; if (show) { @@ -69,7 +65,7 @@ void Toolbar::Pimpl::displayToolbar(ToolbarBackend::Toolbar const & tb, bool sho } -void Toolbar::Pimpl::update() +void QLToolbar::update() { ButtonMap::const_iterator p = map_.begin(); ButtonMap::const_iterator end = map_.end(); @@ -95,7 +91,7 @@ void Toolbar::Pimpl::update() } -void Toolbar::Pimpl::button_selected(QToolButton * button) +void QLToolbar::button_selected(QToolButton * button) { ButtonMap::const_iterator cit = map_.find(button); @@ -108,7 +104,7 @@ void Toolbar::Pimpl::button_selected(QToolButton * button) } -void Toolbar::Pimpl::changed_layout(string const & sel) +void QLToolbar::changed_layout(string const & sel) { owner_->centralWidget()->setFocus(); @@ -124,12 +120,12 @@ void Toolbar::Pimpl::changed_layout(string const & sel) return; } } - lyxerr << "ERROR (Toolbar::Pimpl::layoutSelected): layout not found!" + lyxerr << "ERROR (QLToolbar::layoutSelected): layout not found!" << endl; } -void Toolbar::Pimpl::setLayout(string const & layout) +void QLToolbar::setLayout(string const & layout) { if (!combo_) return; @@ -155,15 +151,11 @@ void Toolbar::Pimpl::setLayout(string const & layout) } -void Toolbar::Pimpl::updateLayoutList(bool force) +void QLToolbar::updateLayoutList() { if (!combo_) return; - // if we don't need an update, don't ... - if (combo_->count() && !force) - return; - LyXTextClass const & tc = owner_->buffer()->params.getLyXTextClass(); @@ -189,7 +181,7 @@ void Toolbar::Pimpl::updateLayoutList(bool force) } -void Toolbar::Pimpl::clearLayoutList() +void QLToolbar::clearLayoutList() { if (!combo_) return; @@ -198,7 +190,7 @@ void Toolbar::Pimpl::clearLayoutList() } -void Toolbar::Pimpl::openLayoutList() +void QLToolbar::openLayoutList() { if (!combo_) return; @@ -225,7 +217,7 @@ QMainWindow::ToolBarDock getPosition(ToolbarBackend::Flags const & flags) }; -void Toolbar::Pimpl::add(ToolbarBackend::Toolbar const & tb) +void QLToolbar::add(ToolbarBackend::Toolbar const & tb) { QToolBar * qtb = new QToolBar(qt_(tb.name), owner_, getPosition(tb.flags)); // give visual separation between adjacent toolbars @@ -242,7 +234,7 @@ void Toolbar::Pimpl::add(ToolbarBackend::Toolbar const & tb) } -void Toolbar::Pimpl::add(QToolBar * tb, int action, string const & tooltip) +void QLToolbar::add(QToolBar * tb, int action, string const & tooltip) { switch (action) { case ToolbarBackend::SEPARATOR: diff --git a/src/frontends/qt2/Toolbar_pimpl.h b/src/frontends/qt2/QLToolbar.h similarity index 84% rename from src/frontends/qt2/Toolbar_pimpl.h rename to src/frontends/qt2/QLToolbar.h index 9ae211ec1c..4bebbd6f8f 100644 --- a/src/frontends/qt2/Toolbar_pimpl.h +++ b/src/frontends/qt2/QLToolbar.h @@ -5,16 +5,16 @@ * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes + * \author John Levon + * \author Jean-Marc Lasgouttes * * Full author contact details are available in file CREDITS */ -#ifndef TOOLBAR_PIMPL_H -#define TOOLBAR_PIMPL_H - +#ifndef QLTOOLBAR__H +#define QLTOOLBAR_H #include "frontends/Toolbar.h" -#include "ToolbarBackend.h" #include "qt_helpers.h" @@ -30,13 +30,11 @@ class QToolBar; class QLComboBox; class ToolbarProxy; -struct Toolbar::Pimpl { +class QLToolbar : public Toolbar { public: friend class ToolbarProxy; - Pimpl(LyXView * o, int x, int y); - - ~Pimpl(); + QLToolbar(LyXView * o); /// add a new toolbar void add(ToolbarBackend::Toolbar const & tb); @@ -52,8 +50,8 @@ public: /// select the right layout in the combox void setLayout(string const & layout); - /// Populate the layout combox; re-do everything if force is true. - void updateLayoutList(bool force); + /// Populate the layout combox. + void updateLayoutList(); /// Drop down the layout list void openLayoutList(); /// Erase the layout list @@ -81,7 +79,7 @@ private: class ToolbarProxy : public QObject { Q_OBJECT public: - ToolbarProxy(Toolbar::Pimpl & owner) + ToolbarProxy(QLToolbar & owner) : owner_(owner) {} public slots: @@ -96,7 +94,7 @@ public slots: ); } private: - Toolbar::Pimpl & owner_; + QLToolbar & owner_; }; #endif diff --git a/src/frontends/qt2/QtView.C b/src/frontends/qt2/QtView.C index 8e03a98861..6e411efc37 100644 --- a/src/frontends/qt2/QtView.C +++ b/src/frontends/qt2/QtView.C @@ -21,7 +21,6 @@ #include "lyxfunc.h" #include "BufferView.h" -#include "frontends/Toolbar.h" #include "frontends/Menubar.h" #include "frontends/Dialogs.h" #include "frontends/Timeout.h" @@ -29,6 +28,7 @@ #include #include "QtView.h" +#include "QLToolbar.h" #include "qfont_loader.h" #include "QCommandBuffer.h" #include "qt_helpers.h" @@ -62,7 +62,8 @@ QtView::QtView(unsigned int width, unsigned int height) bufferview_.reset(new BufferView(this, 0, 0, width, height)); menubar_.reset(new Menubar(this, menubackend)); - toolbar_.reset(new Toolbar(this, 0, 0)); + toolbar_.reset(new QLToolbar(this)); + toolbar_->init(); statusBar()->setSizeGripEnabled(false); diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 691b9a15b4..5048b25a16 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,11 @@ +2003-07-25 Jean-Marc Lasgouttes + + * + +2003-07-25 Jean-Marc Lasgouttes + + * XFormsToolbar.h: + 2003-07-23 Angus Leeming * FormColorpicker.[Ch] diff --git a/src/frontends/xforms/Makefile.am b/src/frontends/xforms/Makefile.am index fa80744323..988c2f5954 100644 --- a/src/frontends/xforms/Makefile.am +++ b/src/frontends/xforms/Makefile.am @@ -155,8 +155,8 @@ libxforms_la_SOURCES = \ Menubar_pimpl.h \ RadioButtonGroup.C \ RadioButtonGroup.h \ - Toolbar_pimpl.C \ - Toolbar_pimpl.h \ + XFormsToolbar.C \ + XFormsToolbar.h \ Tooltips.C \ Tooltips.h \ WorkAreaFactory.C \ diff --git a/src/frontends/xforms/Toolbar_pimpl.C b/src/frontends/xforms/XFormsToolbar.C similarity index 81% rename from src/frontends/xforms/Toolbar_pimpl.C rename to src/frontends/xforms/XFormsToolbar.C index 02f632728b..2c08f12071 100644 --- a/src/frontends/xforms/Toolbar_pimpl.C +++ b/src/frontends/xforms/XFormsToolbar.C @@ -1,9 +1,10 @@ /** - * \file xforms/Toolbar_pimpl.C + * \file xforms/XFormsToolbar.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes * * Full author contact details are available in file CREDITS */ @@ -13,7 +14,7 @@ #include -#include "Toolbar_pimpl.h" +#include "XFormsToolbar.h" #include "debug.h" #include "XFormsView.h" #include "lyxfunc.h" @@ -40,12 +41,12 @@ const int sepspace = 6; // extra space const int buttonwidth = 30; // the standard button width const int height = 30; // the height of all items in the toolbar -Toolbar::Pimpl::toolbarItem::toolbarItem() +XFormsToolbar::toolbarItem::toolbarItem() : action(LFUN_NOACTION), icon(0) {} -Toolbar::Pimpl::toolbarItem::~toolbarItem() +XFormsToolbar::toolbarItem::~toolbarItem() { // Lars said here that ~XFormsView() dealt with the icons. // This is not true. But enabling this causes crashes, @@ -57,12 +58,12 @@ Toolbar::Pimpl::toolbarItem::~toolbarItem() /// Display toolbar, not implemented. But moved out of line so that /// linking will work properly. -void Toolbar::Pimpl::displayToolbar(ToolbarBackend::Toolbar const & /*tb*/, +void XFormsToolbar::displayToolbar(ToolbarBackend::Toolbar const & /*tb*/, bool /*show*/) {} -void Toolbar::Pimpl::toolbarItem::kill_icon() +void XFormsToolbar::toolbarItem::kill_icon() { if (icon) { fl_delete_object(icon); @@ -72,8 +73,8 @@ void Toolbar::Pimpl::toolbarItem::kill_icon() } -Toolbar::Pimpl::toolbarItem & -Toolbar::Pimpl::toolbarItem::operator=(toolbarItem const & ti) +XFormsToolbar::toolbarItem & +XFormsToolbar::toolbarItem::operator=(toolbarItem const & ti) { if (this == &ti) return *this; @@ -89,14 +90,14 @@ Toolbar::Pimpl::toolbarItem::operator=(toolbarItem const & ti) -Toolbar::Pimpl::Pimpl(LyXView * o, int x, int y) +XFormsToolbar::XFormsToolbar(LyXView * o, int x, int y) : owner_(static_cast(o)), combox_(0), xpos(x), ypos(y) { tooltip_ = new Tooltips(); } -Toolbar::Pimpl::~Pimpl() +XFormsToolbar::~XFormsToolbar() { fl_freeze_form(owner_->getForm()); @@ -109,7 +110,7 @@ Toolbar::Pimpl::~Pimpl() } -void Toolbar::Pimpl::update() +void XFormsToolbar::update() { ToolbarList::const_iterator p = toollist_.begin(); ToolbarList::const_iterator end = toollist_.end(); @@ -156,14 +157,14 @@ void C_layoutSelectedCB(FL_OBJECT * ob, long) { if (!ob || !ob->u_vdata) return; - Toolbar::Pimpl * ptr = static_cast(ob->u_vdata); + XFormsToolbar * ptr = static_cast(ob->u_vdata); ptr->layoutSelected(); } } // namespace anon -void Toolbar::Pimpl::layoutSelected() +void XFormsToolbar::layoutSelected() { if (!combox_) return; @@ -180,12 +181,12 @@ void Toolbar::Pimpl::layoutSelected() return; } } - lyxerr << "ERROR (Toolbar::Pimpl::layoutSelected): layout not found!" + lyxerr << "ERROR (XFormsToolbar::layoutSelected): layout not found!" << endl; } -void Toolbar::Pimpl::setLayout(string const & layout) +void XFormsToolbar::setLayout(string const & layout) { if (!combox_) return; @@ -204,32 +205,29 @@ void Toolbar::Pimpl::setLayout(string const & layout) } -void Toolbar::Pimpl::updateLayoutList(bool force) +void XFormsToolbar::updateLayoutList() { if (!combox_) return; - // If textclass is different, we need to update the list - if (fl_get_combox_maxitems(combox_) == 0 || force) { - fl_clear_combox(combox_); - LyXTextClass const & tc = - owner_->buffer()->params.getLyXTextClass(); - LyXTextClass::const_iterator end = tc.end(); - for (LyXTextClass::const_iterator cit = tc.begin(); - cit != end; ++cit) { - // ignore obsolete entries - if ((*cit)->obsoleted_by().empty()) { - string const & name = _((*cit)->name()); - fl_addto_combox(combox_, name.c_str()); - } + fl_clear_combox(combox_); + LyXTextClass const & tc = owner_->buffer()->params.getLyXTextClass(); + LyXTextClass::const_iterator end = tc.end(); + for (LyXTextClass::const_iterator cit = tc.begin(); + cit != end; ++cit) { + // ignore obsolete entries + if ((*cit)->obsoleted_by().empty()) { + string const & name = _((*cit)->name()); + fl_addto_combox(combox_, name.c_str()); } } + // we need to do this. fl_redraw_object(combox_); } -void Toolbar::Pimpl::clearLayoutList() +void XFormsToolbar::clearLayoutList() { if (!combox_) return; @@ -239,7 +237,7 @@ void Toolbar::Pimpl::clearLayoutList() } -void Toolbar::Pimpl::openLayoutList() +void XFormsToolbar::openLayoutList() { if (!combox_) return; @@ -270,7 +268,7 @@ void C_Toolbar_ToolbarCB(FL_OBJECT * ob, long data) } // namespace anon -void Toolbar::Pimpl::add(ToolbarBackend::Toolbar const & tb) +void XFormsToolbar::add(ToolbarBackend::Toolbar const & tb) { // we can only handle one toolbar if (!toollist_.empty()) @@ -283,7 +281,7 @@ void Toolbar::Pimpl::add(ToolbarBackend::Toolbar const & tb) } -void Toolbar::Pimpl::add(int action, string const & tooltip) +void XFormsToolbar::add(int action, string const & tooltip) { toolbarItem item; item.action = action; diff --git a/src/frontends/xforms/Toolbar_pimpl.h b/src/frontends/xforms/XFormsToolbar.h similarity index 84% rename from src/frontends/xforms/Toolbar_pimpl.h rename to src/frontends/xforms/XFormsToolbar.h index b81a996936..89559a60b8 100644 --- a/src/frontends/xforms/Toolbar_pimpl.h +++ b/src/frontends/xforms/XFormsToolbar.h @@ -1,16 +1,17 @@ // -*- C++ -*- /** - * \file xforms/Toolbar_pimpl.h + * \file xforms/XFormsToolbar.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes * * Full author contact details are available in file CREDITS */ -#ifndef TOOLBAR_PIMPL_H -#define TOOLBAR_PIMPL_H +#ifndef XFORMSTOOLBAR_H +#define XFROMSTOOLBAR_H #include #include "forms_fwd.h" @@ -18,18 +19,18 @@ #include "frontends/Toolbar.h" #include "ToolbarBackend.h" - class XFormsView; class Tooltips; /** The LyX xforms toolbar class */ -struct Toolbar::Pimpl { +class XFormsToolbar : public Toolbar { public: /// create an empty toolbar - Pimpl(LyXView * o, int x, int y); + XFormsToolbar(LyXView * o, int x, int y); - ~Pimpl(); + /// + ~XFormsToolbar(); /// add a new toolbar void add(ToolbarBackend::Toolbar const & tb); @@ -45,8 +46,8 @@ public: /// select the right layout in the combox void setLayout(string const & layout); - /// Populate the layout combox; re-do everything if force is true. - void updateLayoutList(bool force); + /// Populate the layout combox. + void updateLayoutList(); /// Drop down the layout list void openLayoutList(); /// Erase the layout list @@ -88,4 +89,4 @@ public: int ypos; }; -#endif // TOOLBAR_PIMPL_H +#endif diff --git a/src/frontends/xforms/XFormsView.C b/src/frontends/xforms/XFormsView.C index a9fede2356..948f47f44b 100644 --- a/src/frontends/xforms/XFormsView.C +++ b/src/frontends/xforms/XFormsView.C @@ -15,11 +15,11 @@ #include "lyx_forms.h" #include "XMiniBuffer.h" +#include "XFormsToolbar.h" #include "debug.h" #include "intl.h" #include "lyxrc.h" #include "support/filetools.h" // OnlyFilename() -#include "frontends/Toolbar.h" #include "frontends/Menubar.h" #include "frontends/Timeout.h" #include "frontends/Dialogs.h" @@ -142,7 +142,8 @@ void XFormsView::create_form_form_main(int width, int height) menubar_.reset(new Menubar(this, menubackend)); - toolbar_.reset(new Toolbar(this, air, 30 + air + bw)); + toolbar_.reset(new XFormsToolbar(this, air, 30 + air + bw)); + toolbar_->init(); int const ywork = 60 + 2 * air + bw; int const workheight = height - ywork - (25 + 2 * air);