Hi!

Is there any chance to make toolbars customizable directly in LyX? Just looked through the Qt documentation. Either I just didn't see it or there is nothing like that, a toolbar customize dialog?!

Schimmi

the attached patch refactors the current toolbarbackend into toolbaritems, toolbar(info) and backend

comments?
Index: lib/ui/stdtoolbars.inc
===================================================================
--- lib/ui/stdtoolbars.inc      (revision 17731)
+++ lib/ui/stdtoolbars.inc      (working copy)
@@ -30,6 +30,8 @@
 #
 #   Minibuffer adds the command buffer (Qt only, only one may exist)
 #
+#   TableInsert adds a special widget for quick inserting of tables
+#
 # The icons are found in the lib/image direcory under the name
 # action.xpm or action_parameter.xpm, except for math-insert, which
 # is e.g. lib/image/math/sum.xpm. Note that some characters are
@@ -39,135 +41,183 @@
 #
 # This is the default toolbar:

-Toolbar "standard" "Standard"
-       Layouts
-       Item "New document" "buffer-new"
-       Item "Open document" "file-open"
-       Item "Save document" "buffer-write"
-       Item "Print document" "dialog-show print"
-       Separator
-       Item "Undo" "undo"
-       Item "Redo" "redo"
-       Item "Cut" "cut"
-       Item "Copy" "copy"
-       Item "Paste" "paste"
-       Item "Find and replace" "dialog-show findreplace"
-       Separator
-       Item "Toggle emphasis" "font-emph"
-       Item "Toggle noun" "font-noun"
-       Item "Apply last" "font-free-apply"
-       Separator
-       Item "Insert math" "math-mode"
-       Item "Insert graphics" "dialog-show-new-inset graphics"
-       Item "Insert table" "tabular-insert"
-End
+ToolbarSet

-Toolbar "extra" "Extra"
-       Item "Default" "layout"
-       Item "Numbered list" "layout Enumerate"
-       Item "Itemized list" "layout Itemize"
-       Item "List" "layout List"
-       Item "Description" "layout Description"
-       Item "Increase depth" "depth-increment"
-       Item "Decrease depth" "depth-decrement"
-       Separator
-       Item "Insert figure float" "float-insert figure"
-       Item "Insert table float" "float-insert table"
-       Item "Insert label" "label-insert"
-       Item "Insert cross-reference" "dialog-show-new-inset ref"
-       Item "Insert citation" "dialog-show-new-inset citation"
-       Item "Insert index entry" "index-insert"
-       Item "Insert glossary entry" "nomencl-insert"
-       Separator
-       Item "Insert footnote" "footnote-insert"
-       Item "Insert margin note" "marginalnote-insert"
-       Item "Insert note" "note-insert"
-       Item "Insert URL" "url-insert"
-       Item "Insert TeX code" "ert-insert"
-       Item "Include file" "dialog-show-new-inset include"
-       Separator
-       Item "Text style" "dialog-show character"
-       Item "Paragraph settings" "layout-paragraph"
-       Item "Table of contents" "toc-view"
-       Item "Check spelling" "dialog-show spellchecker"
-       Item "Thesaurus" "thesaurus-entry"
-End
+       Toolbar "standard" "Standard"
+               Layouts
+               Item "New document" "buffer-new"
+               Item "Open document" "file-open"
+               Item "Save document" "buffer-write"
+               Item "Print document" "dialog-show print"
+               Separator
+               Item "Undo" "undo"
+               Item "Redo" "redo"
+               Item "Cut" "cut"
+               Item "Copy" "copy"
+               Item "Paste" "paste"
+               Item "Find and replace" "dialog-show findreplace"
+               Separator
+               Item "Toggle emphasis" "font-emph"
+               Item "Toggle noun" "font-noun"
+               Item "Apply last" "font-free-apply"
+               Separator
+               Item "Insert math" "math-mode"
+               Item "Insert graphics" "dialog-show-new-inset graphics"
+               TableInsert
+       End
+       
+       Toolbar "extra" "Extra"
+               Item "Default" "layout"
+               Item "Numbered list" "layout Enumerate"
+               Item "Itemized list" "layout Itemize"
+               Item "List" "layout List"
+               Item "Description" "layout Description"
+               Item "Increase depth" "depth-increment"
+               Item "Decrease depth" "depth-decrement"
+               Separator
+               Item "Insert figure float" "float-insert figure"
+               Item "Insert table float" "float-insert table"
+               Item "Insert label" "label-insert"
+               Item "Insert cross-reference" "dialog-show-new-inset ref"
+               Item "Insert citation" "dialog-show-new-inset citation"
+               Item "Insert index entry" "index-insert"
+               Item "Insert glossary entry" "nomencl-insert"
+               Separator
+               Item "Insert footnote" "footnote-insert"
+               Item "Insert margin note" "marginalnote-insert"
+               Item "Insert note" "note-insert"
+               Item "Insert URL" "url-insert"
+               Item "Insert TeX code" "ert-insert"
+               Item "Include file" "dialog-show-new-inset include"
+               Separator
+               Item "Text style" "dialog-show character"
+               Item "Paragraph settings" "layout-paragraph"
+               Item "Table of contents" "toc-view"
+               Item "Check spelling" "dialog-show spellchecker"
+               Item "Thesaurus" "thesaurus-entry"
+       End
+       
+       Toolbar "table" "Table"
+               Item "Add row" "tabular-feature append-row"
+               Item "Add column" "tabular-feature append-column"
+               Item "Delete row" "tabular-feature delete-row"
+               Item "Delete column" "tabular-feature delete-column"
+               Separator
+               Item "Set top line" "tabular-feature toggle-line-top"
+               Item "Set bottom line" "tabular-feature toggle-line-bottom"
+               Item "Set left line" "tabular-feature toggle-line-left"
+               Item "Set right line" "tabular-feature toggle-line-right"
+               Item "Set all lines" "tabular-feature set-all-lines"
+               Item "Unset all lines" "tabular-feature unset-all-lines"
+               Separator
+               Item "Align left" "tabular-feature align-left"
+               Item "Align center" "tabular-feature align-center"
+               Item "Align right" "tabular-feature align-right"
+               Separator
+               Item "Align top" "tabular-feature valign-top"
+               Item "Align middle" "tabular-feature valign-middle"
+               Item "Align bottom" "tabular-feature valign-bottom"
+               Separator
+               Item "Rotate cell" "tabular-feature set-rotate-cell"
+               Item "Rotate table" "tabular-feature set-rotate-tabular"
+               Item "Set multi-column" "tabular-feature multicolumn"
+       End
+       
+       Toolbar "math" "Math"
+               Item "Show math panel" "dialog-show mathpanel"
+               Item "Set display mode" "math-display"
+               Item "Subscript" "math-subscript"
+               Item "Superscript" "math-superscript"
+               Item "Insert root" "math-insert \root"
+               Item "Insert square root" "math-insert \sqrt"
+               Item "Insert sum" "math-insert \sum"
+               Item "Insert integral" "math-insert \int"
+               Item "Insert product" "math-insert \prod"
+               Separator
+               Item "Insert standard fraction" "math-insert \frac"
+               Item "Delimiters" "dialog-show mathdelimiter"
+               Item "Insert ( )" "math-delim ( )"
+               Item "Insert [ ]" "math-delim [ ]"
+               Item "Insert { }" "math-delim { }"
+               Separator
+               Item "Insert matrix" "math-matrix 2 2"
+               Item "Insert cases environment" "math-insert \cases"
+               Item "Add row" "tabular-feature append-row"
+               Item "Add column" "tabular-feature append-column"
+               Item "Delete row" "tabular-feature delete-row"
+               Item "Delete column" "tabular-feature delete-column"
+       End
+       
+       Toolbar "minibuffer" "Command Buffer"
+               Minibuffer
+       End
+       
+       Toolbar "review" "Review"
+               Item "Track changes" "changes-track"
+               Item "Show changes in output" "changes-output"
+               Separator
+               Item "Next change" "change-next"
+               Item "Accept change" "change-accept"
+               Item "Reject change" "change-reject"
+               Separator
+               Item "Merge changes" "changes-merge"
+               Item "Accept all changes" "all-changes-accept"
+               Item "Reject all changes" "all-changes-reject"
+               Separator
+               Item "Insert note" "note-insert"
+               Item "Next note" "note-next"
+       End
+       
+       Toolbar "view/update" "View/Update"
+               Item "View DVI" "buffer-view dvi"
+               Item "Update DVI" "buffer-update dvi"
+               Item "View PDF (pdflatex)" "buffer-view pdf2"
+               Item "Update PDF (pdflatex)" "buffer-update pdf2"
+               Item "View PostScript" "buffer-view ps"
+               Item "Update PostScript" "buffer-update ps"
+       End
+       
+       Toolbar "space" "Spacing"
+               Item "Thin space   \\," "math-insert \\,"
+               Item "Medium space \\:" "math-insert \\:"
+               Item "Thick space  \\;" "math-insert \\;"
+               Item "Quadratin space      \\quad" "math-insert \\quad"
+               Item "Double quadratin space       \\qquad" "math-insert 
\\qquad"
+               Item "Negative space       \\!" "math-insert \\!"
+       End
+       
+       Toolbar "sqrt-square" "Roots"
+               Item "Square root  \\sqrt" "math-insert \\sqrt"
+               Item "Other root   \\root" "math-insert \\root"
+       End
+       
+       Toolbar "style" "Styles"
+               Item "Display style        \\displaystyle" "displaystyle"
+               Item "Normal text style    \\textstyle" "textstyle"
+               Item "Script (small) style \\scriptstyle" "scriptstyle"
+ Item "Scriptscript (smaller) style \\scriptscriptstyle" "scriptscriptstyle"
+       End
+       
+       Toolbar "frac-square" "Fractions"
+               Item "Standard     \\frac" "math-insert \\frac"
+               Item "No hor. line \\atop" "math-insert \\atop"
+               Item "Nice \\nicefrac" "math-insert \\nicefrac"
+               Item "Text frac (amsmath)  \\tfrac" "math-insert \\tfrac"
+               Item "Display frac (amsmath)       \\dfrac" "math-insert 
\\dfrac"
+               Item "Binomial     \\choose"  "math-insert \\choose"
+       End
+       
+       Toolbar "font" "Fonts"
+               Item "Roman        \\mathrm" "math-insert \\mathrm"
+               Item "Bold \\mathbf" "math-insert \\mathbf"
+               Item "Bold symbol  \\boldsymbol" "math-insert \\boldsymbol"
+               Item "Sans serif   \\mathsf" "math-insert \\mathsf"
+               Item "Italic       \\mathit" "math-insert \\mathit"
+               Item "Typewriter   \\mathtt" "math-insert \\mathtt"
+               Item "Blackboard   \\mathbb" "math-insert \\mathbb"
+               Item "Fraktur      \\mathfrak" "math-insert \\mathfrak"
+               Item "Calligraphic \\mathcal" "math-insert \\mathcal"
+               Item "Normal text mode     \\textrm" "math-insert \\textrm"
+       End

-Toolbar "table" "Table"
-       Item "Add row" "tabular-feature append-row"
-       Item "Add column" "tabular-feature append-column"
-       Item "Delete row" "tabular-feature delete-row"
-       Item "Delete column" "tabular-feature delete-column"
-       Separator
-       Item "Set top line" "tabular-feature toggle-line-top"
-       Item "Set bottom line" "tabular-feature toggle-line-bottom"
-       Item "Set left line" "tabular-feature toggle-line-left"
-       Item "Set right line" "tabular-feature toggle-line-right"
-       Item "Set all lines" "tabular-feature set-all-lines"
-       Item "Unset all lines" "tabular-feature unset-all-lines"
-       Separator
-       Item "Align left" "tabular-feature align-left"
-       Item "Align center" "tabular-feature align-center"
-       Item "Align right" "tabular-feature align-right"
-       Separator
-       Item "Align top" "tabular-feature valign-top"
-       Item "Align middle" "tabular-feature valign-middle"
-       Item "Align bottom" "tabular-feature valign-bottom"
-       Separator
-       Item "Rotate cell" "tabular-feature set-rotate-cell"
-       Item "Rotate table" "tabular-feature set-rotate-tabular"
-       Item "Set multi-column" "tabular-feature multicolumn"
 End
-
-Toolbar "math" "Math"
-       Item "Show math panel" "dialog-show mathpanel"
-       Item "Set display mode" "math-display"
-       Item "Subscript" "math-subscript"
-       Item "Superscript" "math-superscript"
-       Item "Insert root" "math-insert \root"
-       Item "Insert square root" "math-insert \sqrt"
-       Item "Insert sum" "math-insert \sum"
-       Item "Insert integral" "math-insert \int"
-       Item "Insert product" "math-insert \prod"
-       Separator
-       Item "Insert standard fraction" "math-insert \frac"
-       Item "Insert ( )" "math-delim ( )"
-       Item "Insert [ ]" "math-delim [ ]"
-       Item "Insert { }" "math-delim { }"
-       Separator
-       Item "Insert matrix" "math-matrix 2 2"
-       Item "Insert cases environment" "math-insert \cases"
-       Item "Add row" "tabular-feature append-row"
-       Item "Add column" "tabular-feature append-column"
-       Item "Delete row" "tabular-feature delete-row"
-       Item "Delete column" "tabular-feature delete-column"
-End
-
-Toolbar "minibuffer" "Command Buffer"
-       Minibuffer
-End
-
-Toolbar "review" "Review"
-       Item "Track changes" "changes-track"
-       Item "Show changes in output" "changes-output"
-       Separator
-       Item "Next change" "change-next"
-       Item "Accept change" "change-accept"
-       Item "Reject change" "change-reject"
-       Separator
-       Item "Merge changes" "changes-merge"
-       Item "Accept all changes" "all-changes-accept"
-       Item "Reject all changes" "all-changes-reject"
-       Separator
-       Item "Insert note" "note-insert"
-       Item "Next note" "note-next"
-End
-
-Toolbar "view/update" "View/Update"
-       Item "View DVI" "buffer-view dvi"
-       Item "Update DVI" "buffer-update dvi"
-       Item "View PDF (pdflatex)" "buffer-view pdf2"
-       Item "Update PDF (pdflatex)" "buffer-update pdf2"
-       Item "View PostScript" "buffer-view ps"
-       Item "Update PostScript" "buffer-update ps"
-End
Index: src/frontends/LyXView.C
===================================================================
--- src/frontends/LyXView.C     (revision 17731)
+++ src/frontends/LyXView.C     (working copy)
@@ -342,7 +342,7 @@
 }


-ToolbarBackend::Flags LyXView::getToolbarState(string const & name)
+ToolbarInfo::Flags LyXView::getToolbarState(string const & name)
 {
        return toolbars_->getToolbarState(name);
 }
Index: src/frontends/LyXView.h
===================================================================
--- src/frontends/LyXView.h     (revision 17731)
+++ src/frontends/LyXView.h     (working copy)
@@ -112,7 +112,7 @@
        /// show busy cursor
        virtual void busy(bool) = 0;

- virtual Toolbars::ToolbarPtr makeToolbar(ToolbarBackend::Toolbar const & tbb, bool newline) = 0; + virtual Toolbars::ToolbarPtr makeToolbar(ToolbarInfo const & tbb, bool newline) = 0;

        //@{ generic accessor functions

@@ -154,7 +154,7 @@
        /// update the toolbar
        void updateToolbars();
        /// get toolbar state
-       ToolbarBackend::Flags getToolbarState(std::string const & name);
+       ToolbarInfo::Flags getToolbarState(std::string const & name);
        /// toggle toolbar state
        void toggleToolbarState(std::string const & name);
        /// update the menubar
Index: src/frontends/qt4/GuiView.C
===================================================================
--- src/frontends/qt4/GuiView.C (revision 17731)
+++ src/frontends/qt4/GuiView.C (working copy)
@@ -694,17 +694,17 @@
 }


-Toolbars::ToolbarPtr GuiView::makeToolbar(ToolbarBackend::Toolbar const & tbb, bool newline) +Toolbars::ToolbarPtr GuiView::makeToolbar(ToolbarInfo const & tbb, bool newline)
 {
        QLToolbar * Tb = new QLToolbar(tbb, *this);

-       if (tbb.flags & ToolbarBackend::TOP) {
+       if (tbb.flags & ToolbarInfo::TOP) {
                if (newline)
                        addToolBarBreak(Qt::TopToolBarArea);
                addToolBar(Qt::TopToolBarArea, Tb);
        }

-       if (tbb.flags & ToolbarBackend::BOTTOM) {
+       if (tbb.flags & ToolbarInfo::BOTTOM) {
 // Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
 #if (QT_VERSION >= 0x040202)
                if (newline)
@@ -713,7 +713,7 @@
                addToolBar(Qt::BottomToolBarArea, Tb);
        }

-       if (tbb.flags & ToolbarBackend::LEFT) {
+       if (tbb.flags & ToolbarInfo::LEFT) {
 // Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
 #if (QT_VERSION >= 0x040202)
                if (newline)
@@ -722,7 +722,7 @@
                addToolBar(Qt::LeftToolBarArea, Tb);
        }

-       if (tbb.flags & ToolbarBackend::RIGHT) {
+       if (tbb.flags & ToolbarInfo::RIGHT) {
 // Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
 #if (QT_VERSION >= 0x040202)
                if (newline)
Index: src/frontends/qt4/GuiView.h
===================================================================
--- src/frontends/qt4/GuiView.h (revision 17731)
+++ src/frontends/qt4/GuiView.h (working copy)
@@ -67,7 +67,7 @@
        virtual void saveGeometry();
        virtual void busy(bool);
/// add toolbar, if newline==true, add a toolbar break before the toolbar - Toolbars::ToolbarPtr makeToolbar(ToolbarBackend::Toolbar const & tbb, bool newline); + Toolbars::ToolbarPtr makeToolbar(ToolbarInfo const & tbb, bool newline);
        virtual void updateStatusBar();
        virtual void message(lyx::docstring const & str);
        virtual void clearMessage();
Index: src/frontends/qt4/QLToolbar.C
===================================================================
--- src/frontends/qt4/QLToolbar.C       (revision 17731)
+++ src/frontends/qt4/QLToolbar.C       (working copy)
@@ -24,9 +24,13 @@

 #include "GuiView.h"
 #include "QLToolbar.h"
+#include "LyXAction.h"
 #include "Action.h"
 #include "qt_helpers.h"
 #include "InsertTableWidget.h"
+#include "support/filetools.h"
+#include "support/lstrings.h"
+#include "controllers/ControlMath.h"

 #include <QComboBox>
 #include <QToolBar>
@@ -38,6 +42,10 @@
 using std::string;

 namespace lyx {
+
+using support::libFileSearch;
+using support::subst;
+
 namespace frontend {

 namespace {
@@ -146,7 +154,7 @@
 }


-QLToolbar::QLToolbar(ToolbarBackend::Toolbar const & tbb, GuiView & owner)
+QLToolbar::QLToolbar(ToolbarInfo const & tbb, GuiView & owner)
        : QToolBar(qt_(tbb.gui_name), &owner), owner_(owner)
 {
        // give visual separation between adjacent toolbars
@@ -155,32 +163,32 @@
        // TODO: save toolbar position
        setMovable(true);

-       ToolbarBackend::item_iterator it = tbb.items.begin();
-       ToolbarBackend::item_iterator end = tbb.items.end();
+       ToolbarInfo::item_iterator it = tbb.items.begin();
+       ToolbarInfo::item_iterator end = tbb.items.end();
        for (; it != end; ++it)
-               add(it->first, it->second);
+               add(*it);
 }


-void QLToolbar::add(FuncRequest const & func, docstring const & tooltip)
+void QLToolbar::add(ToolbarItem const & item)
 {
-       switch (func.action) {
-       case ToolbarBackend::SEPARATOR:
+       switch (item.type_) {
+       case ToolbarItem::SEPARATOR:
                addSeparator();
                break;
-       case ToolbarBackend::LAYOUTS:
+       case ToolbarItem::LAYOUTS:
                layout_.reset(new QLayoutBox(this, owner_));
                break;
-       case ToolbarBackend::MINIBUFFER:
+       case ToolbarItem::MINIBUFFER:
                owner_.addCommandBuffer(this);
                /// \todo find a Qt4 equivalent to 
setHorizontalStretchable(true);
                //setHorizontalStretchable(true);
                break;
-       case LFUN_TABULAR_INSERT: {
+       case ToolbarItem::TABLEINSERT: {
                QToolButton * tb = new QToolButton;
                tb->setCheckable(true);
-               tb->setIcon(QPixmap(toqstr(toolbarbackend.getIcon(func))));
-               tb->setToolTip(toqstr(tooltip));
+ tb->setIcon(QPixmap(toqstr(getIcon(FuncRequest (LFUN_TABULAR_INSERT)))));
+               tb->setToolTip(toqstr(item.label_));
                tb->setFocusPolicy(Qt::NoFocus);
                InsertTableWidget * iv = new InsertTableWidget(owner_, tb);
                connect(tb, SIGNAL(clicked(bool)), iv, SLOT(show(bool)));
@@ -190,14 +198,14 @@
                break;
                }
        default: {
-               if (lyx::getStatus(func).unknown())
+               if (lyx::getStatus(item.func_).unknown())
                        break;

                Action * action = new Action(owner_,
-                       toolbarbackend.getIcon(func),
-                       tooltip,
-                       func,
-                       tooltip);
+                       getIcon(item.func_),
+                       item.label_,
+                       item.func_,
+                       item.label_);
                addAction(action);
                ActionVector.push_back(action);
                break;
@@ -261,6 +269,49 @@
 }


+string const getIcon(FuncRequest const & f)
+{
+       using frontend::find_xpm;
+
+       string fullname;
+
+       switch (f.action) {
+       case LFUN_MATH_INSERT:
+               if (!f.argument().empty())
+                       fullname = find_xpm(to_utf8(f.argument()).substr(1));
+               break;
+       case LFUN_MATH_DELIM:
+       case LFUN_MATH_BIGDELIM:
+               fullname = find_xpm(to_utf8(f.argument()));
+               break;
+       default:
+               string const name = lyxaction.getActionName(f.action);
+               string xpm_name(name);
+
+               if (!f.argument().empty())
+                       xpm_name = subst(name + ' ' + to_utf8(f.argument()), ' 
', '_');
+
+               fullname = libFileSearch("images", xpm_name, 
"xpm").absFilename();
+
+               if (fullname.empty()) {
+                       // try without the argument
+                       fullname = libFileSearch("images", name, 
"xpm").absFilename();
+               }
+       }
+
+       if (!fullname.empty()) {
+               LYXERR(Debug::GUI) << "Full icon name is `"
+                                  << fullname << '\'' << endl;
+               return fullname;
+       }
+
+       LYXERR(Debug::GUI) << "Cannot find icon for command \""
+                          << lyxaction.getActionName(f.action)
+                          << '(' << to_utf8(f.argument()) << ")\"" << endl;
+       return libFileSearch("images", "unknown", "xpm").absFilename();
+}
+
+
 } // namespace frontend
 } // namespace lyx

Index: src/frontends/qt4/QLToolbar.h
===================================================================
--- src/frontends/qt4/QLToolbar.h       (revision 17731)
+++ src/frontends/qt4/QLToolbar.h       (working copy)
@@ -26,6 +26,7 @@
 class QComboBox;

 namespace lyx {
+class FuncRequest;
 namespace frontend {

 class QLayoutBox;
@@ -61,11 +62,11 @@
 class QLToolbar : public QToolBar, public Toolbar {
        Q_OBJECT
 public:
-       QLToolbar(ToolbarBackend::Toolbar const &, GuiView &);
+       QLToolbar(ToolbarInfo const &, GuiView &);

        //~QLToolbar();

-       void add(FuncRequest const & func, lyx::docstring const & tooltip);
+       void add(ToolbarItem const & item);
        void hide(bool);
        void show(bool);
        void saveInfo(ToolbarSection::ToolbarInfo & info);
@@ -85,6 +86,9 @@
        boost::scoped_ptr<QLayoutBox> layout_;
 };

+/// return a full path of an XPM for the given action
+std::string const getIcon(FuncRequest const & f);
+
 } // namespace frontend
 } // namespace lyx

Index: src/frontends/Toolbars.C
===================================================================
--- src/frontends/Toolbars.C    (revision 17731)
+++ src/frontends/Toolbars.C    (working copy)
@@ -37,10 +37,10 @@
          last_textclass_(-1)
 {}

-#define TurnOnFlag(x)   flags |= ToolbarBackend::x
-#define TurnOffFlag(x)  flags &= ~ToolbarBackend::x
+#define TurnOnFlag(x)   flags |= ToolbarInfo::x
+#define TurnOffFlag(x)  flags &= ~ToolbarInfo::x

-void Toolbars::initFlags(ToolbarBackend::Toolbar & tbb)
+void Toolbars::initFlags(ToolbarInfo & tbb)
 {
ToolbarSection::ToolbarInfo & info = LyX::ref().session().toolbars ().load(tbb.name);

@@ -99,7 +99,7 @@
                << std::endl;
        */
        // now set the flags
-       tbb.flags = static_cast<lyx::ToolbarBackend::Flags>(flags);
+       tbb.flags = static_cast<lyx::ToolbarInfo::Flags>(flags);
 }


@@ -159,7 +159,7 @@
                                TurnOnFlag(OFF);
                                TurnOnFlag(ON);
                        }
-                       cit->flags = 
static_cast<lyx::ToolbarBackend::Flags>(flags);
+                       cit->flags = 
static_cast<lyx::ToolbarInfo::Flags>(flags);
                        displayToolbar(*cit, show);
                        return;
                }
@@ -170,7 +170,7 @@
 }


-ToolbarBackend::Flags Toolbars::getToolbarState(string const & name)
+ToolbarInfo::Flags Toolbars::getToolbarState(string const & name)
 {      
ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin();
        ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end();
@@ -184,7 +184,7 @@
                << name << endl;

        // return dummy for msvc
-       return ToolbarBackend::OFF;
+       return ToolbarInfo::OFF;
 }


@@ -197,15 +197,15 @@
                if (cit->name == name) {
                        int flags = cit->flags;
                        // off -> on
-                       if (flags & ToolbarBackend::OFF) {
+                       if (flags & ToolbarInfo::OFF) {
                                TurnOffFlag(OFF);
                                TurnOnFlag(ON);
                        // auto -> off
-                       } else if (flags & ToolbarBackend::AUTO) {
+                       } else if (flags & ToolbarInfo::AUTO) {
                                TurnOffFlag(AUTO);
                                TurnOnFlag(OFF);
- } else if ((flags & ToolbarBackend::MATH) || (flags & ToolbarBackend::TABLE)
-                               || (flags & ToolbarBackend::REVIEW)) {
+ } else if ((flags & ToolbarInfo::MATH) || (flags & ToolbarInfo::TABLE)
+                               || (flags & ToolbarInfo::REVIEW)) {
                                // for math etc, toggle from on -> auto
                                TurnOffFlag(ON);
                                TurnOnFlag(AUTO);
@@ -214,7 +214,7 @@
                                TurnOffFlag(ON);
                                TurnOnFlag(OFF);
                        }
-                       cit->flags = 
static_cast<lyx::ToolbarBackend::Flags>(flags);
+                       cit->flags = 
static_cast<lyx::ToolbarInfo::Flags>(flags);
                        return;
                }
        }
@@ -234,15 +234,15 @@
        ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end();

        for (; cit != end; ++cit) {
-               if (cit->flags & ToolbarBackend::ON)
+               if (cit->flags & ToolbarInfo::ON)
                        displayToolbar(*cit, true);
-               else if (cit->flags & ToolbarBackend::OFF)
+               else if (cit->flags & ToolbarInfo::OFF)
                        displayToolbar(*cit, false);
- else if ((cit->flags & ToolbarBackend::AUTO) && (cit->flags & ToolbarBackend::MATH)) + else if ((cit->flags & ToolbarInfo::AUTO) && (cit->flags & ToolbarInfo::MATH))
                        displayToolbar(*cit, in_math);
- else if ((cit->flags & ToolbarBackend::AUTO) && (cit->flags & ToolbarBackend::TABLE)) + else if ((cit->flags & ToolbarInfo::AUTO) && (cit->flags & ToolbarInfo::TABLE))
                        displayToolbar(*cit, in_table);
- else if ((cit->flags & ToolbarBackend::AUTO) && (cit->flags & ToolbarBackend::REVIEW)) + else if ((cit->flags & ToolbarInfo::AUTO) && (cit->flags & ToolbarInfo::REVIEW))
                        displayToolbar(*cit, review);
        }
 }
@@ -258,23 +258,23 @@
                BOOST_ASSERT(it != toolbars_.end());
                // get toolbar info from session.
                ToolbarSection::ToolbarInfo & info = tb.load(cit->name);
-               if (cit->flags & ToolbarBackend::ON)
+               if (cit->flags & ToolbarInfo::ON)
                        info.state = ToolbarSection::ToolbarInfo::ON;
-               else if (cit->flags & ToolbarBackend::OFF)
+               else if (cit->flags & ToolbarInfo::OFF)
                        info.state = ToolbarSection::ToolbarInfo::OFF;
-               else if (cit->flags & ToolbarBackend::AUTO)
+               else if (cit->flags & ToolbarInfo::AUTO)
                        info.state = ToolbarSection::ToolbarInfo::AUTO;
                // save other information
                // if auto, frontend should *not* set on/off
                it->second->saveInfo(info);
// maybe it is useful to update flags with real status. I do not know
                /*
-               if (!(cit->flags & ToolbarBackend::AUTO)) {
+               if (!(cit->flags & ToolbarInfo::AUTO)) {
                        unsigned int flags = static_cast<unsigned 
int>(cit->flags);
- flags &= ~(info.state == ToolbarSection::ToolbarInfo::ON ? ToolbarBackend::OFF : ToolbarBackend::ON); - flags |= (info.state == ToolbarSection::ToolbarInfo::ON ? ToolbarBackend::ON : ToolbarBackend::OFF); + flags &= ~(info.state == ToolbarSection::ToolbarInfo::ON ? ToolbarInfo::OFF : ToolbarInfo::ON); + flags |= (info.state == ToolbarSection::ToolbarInfo::ON ? ToolbarInfo::ON : ToolbarInfo::OFF);
                        if (info.state == ToolbarSection::ToolbarInfo::ON)
-                       cit->flags = 
static_cast<lyx::ToolbarBackend::Flags>(flags);
+                       cit->flags = 
static_cast<lyx::ToolbarInfo::Flags>(flags);
                }
                */
        }
@@ -316,12 +316,12 @@
 }


-void Toolbars::add(ToolbarBackend::Toolbar const & tbb, bool newline)
+void Toolbars::add(ToolbarInfo const & tbb, bool newline)
 {
        ToolbarPtr tb_ptr = owner_.makeToolbar(tbb, newline);
        toolbars_[tbb.name] = tb_ptr;

-       if (tbb.flags & ToolbarBackend::ON)
+       if (tbb.flags & ToolbarInfo::ON)
                tb_ptr->show(false);
        else
                tb_ptr->hide(false);
@@ -331,7 +331,7 @@
 }


-void Toolbars::displayToolbar(ToolbarBackend::Toolbar const & tbb,
+void Toolbars::displayToolbar(ToolbarInfo const & tbb,
                              bool show_it)
 {
        ToolbarsMap::iterator it = toolbars_.find(tbb.name);
Index: src/frontends/Toolbars.h
===================================================================
--- src/frontends/Toolbars.h    (revision 17731)
+++ src/frontends/Toolbars.h    (working copy)
@@ -53,7 +53,7 @@
 public:
        virtual ~Toolbar() {}
        /// Add a button to the bar.
- virtual void add(FuncRequest const & func, docstring const & tooltip) = 0;
+       virtual void add(ToolbarItem const & item) = 0;

        /** Hide the bar.
         *  \param update_metrics is a hint to the layout engine that the
@@ -89,7 +89,7 @@
        void display(std::string const & name, bool show);

        /// get toolbar state (on/off/auto)
-       ToolbarBackend::Flags getToolbarState(std::string const & name);
+       ToolbarInfo::Flags getToolbarState(std::string const & name);
        
        /// toggle the state of toolbars (on/off/auto)
        void toggleToolbarState(std::string const & name);
@@ -118,9 +118,9 @@

 private:
        /// Add a new toolbar. if newline==true, start from a new line
-       void add(ToolbarBackend::Toolbar const & tb, bool newline);
+       void add(ToolbarInfo const & tb, bool newline);
        /// Show or hide a toolbar.
-       void displayToolbar(ToolbarBackend::Toolbar const & tb, bool show);
+       void displayToolbar(ToolbarInfo const & tb, bool show);
        /// Update the state of the icons
        void update();

@@ -144,7 +144,7 @@
        int last_textclass_;

        // load flags with saved values
-       void initFlags(ToolbarBackend::Toolbar & tbb);
+       void initFlags(ToolbarInfo & tbb);
 };

 /// Set the layout in the kernel when an entry has been selected
Index: src/lyx_main.C
===================================================================
--- src/lyx_main.C      (revision 17731)
+++ src/lyx_main.C      (working copy)
@@ -1128,8 +1128,8 @@
 {
        enum Uitags {
                ui_menuset = 1,
-               ui_toolbar,
                ui_toolbars,
+               ui_toolbarset,
                ui_include,
                ui_last
        };
@@ -1137,8 +1137,8 @@
        struct keyword_item uitags[ui_last - 1] = {
                { "include", ui_include },
                { "menuset", ui_menuset },
-               { "toolbar", ui_toolbar },
-               { "toolbars", ui_toolbars }
+               { "toolbars", ui_toolbars },
+               { "toolbarset", ui_toolbarset }
        };

        // Ensure that a file is read only once (prevents include loops)
@@ -1200,12 +1200,12 @@
                        menubackend.read(lex);
                        break;

-               case ui_toolbar:
-                       toolbarbackend.read(lex);
+               case ui_toolbarset:
+                       toolbarbackend.readToolbars(lex);
                        break;

                case ui_toolbars:
-                       toolbarbackend.readToolbars(lex);
+                       toolbarbackend.readToolbarSettings(lex);
                        break;

                default:
Index: src/lyxfunc.C
===================================================================
--- src/lyxfunc.C       (revision 17731)
+++ src/lyxfunc.C       (working copy)
@@ -608,9 +608,9 @@
                break;

        case LFUN_TOOLBAR_TOGGLE_STATE: {
- ToolbarBackend::Flags flags = lyx_view_->getToolbarState(to_utf8 (cmd.argument()));
-               if (!(flags & ToolbarBackend::AUTO))
-                       flag.setOnOff(flags & ToolbarBackend::ON);
+ ToolbarInfo::Flags flags = lyx_view_->getToolbarState(to_utf8 (cmd.argument()));
+               if (!(flags & ToolbarInfo::AUTO))
+                       flag.setOnOff(flags & ToolbarInfo::ON);
                break;
        }

Index: src/MenuBackend.C
===================================================================
--- src/MenuBackend.C   (revision 17731)
+++ src/MenuBackend.C   (working copy)
@@ -787,7 +787,7 @@
                // and
                //              review (auto)
                // in the case of auto.
-               if (cit->flags & ToolbarBackend::AUTO)
+               if (cit->flags & ToolbarInfo::AUTO)
                        label += _(" (auto)");
                tomenu.add(MenuItem(MenuItem::Command, label,
                                    FuncRequest(LFUN_TOOLBAR_TOGGLE_STATE, 
cit->name)));
Index: src/ToolbarBackend.C
===================================================================
--- src/ToolbarBackend.C        (revision 17731)
+++ src/ToolbarBackend.C        (working copy)
@@ -13,13 +13,11 @@

 #include "ToolbarBackend.h"
 #include "funcrequest.h"
-#include "LyXAction.h"
 #include "lyxlex.h"
 #include "debug.h"
 #include "gettext.h"
-
+#include "LyXAction.h"
 #include "support/lstrings.h"
-#include "support/filetools.h"

 #include "frontends/controllers/ControlMath.h"

@@ -28,8 +26,6 @@

 using support::compare_ascii_no_case;
 using support::getVectorFromString;
-using support::libFileSearch;
-using support::subst;

 using std::endl;
 using std::make_pair;
@@ -39,51 +35,67 @@

 ToolbarBackend toolbarbackend;

-namespace {

-enum tooltags {
-       TO_ADD = 1,
-       TO_ENDTOOLBAR,
-       TO_SEPARATOR,
-       TO_LAYOUTS,
-       TO_MINIBUFFER,
-       TO_LAST
-};
+ToolbarItem::ToolbarItem(Type type, FuncRequest const & func, docstring const & label)
+       : type_(type), func_(func), label_(label)
+{
+}

-struct keyword_item toolTags[TO_LAST - 1] = {
-       { "end", TO_ENDTOOLBAR },
-       { "item", TO_ADD },
-       { "layouts", TO_LAYOUTS },
-       { "minibuffer", TO_MINIBUFFER },
-       { "separator", TO_SEPARATOR }
-};

-} // namespace anon
+ToolbarItem::~ToolbarItem()
+{}


-ToolbarBackend::ToolbarBackend()
+ToolbarInfo::ToolbarInfo()
 {
 }


-void ToolbarBackend::read(LyXLex & lex)
+void ToolbarInfo::add(ToolbarItem const & item)
 {
+       items.push_back(item);
+       items.back().func_.origin = FuncRequest::TOOLBAR;
+}
+
+
+ToolbarInfo & ToolbarInfo::read(LyXLex & lex)
+{
+       enum tooltags {
+               TO_COMMAND = 1,
+               TO_ENDTOOLBAR,
+               TO_SEPARATOR,
+               TO_LAYOUTS,
+               TO_MINIBUFFER,
+               TO_TABLEINSERT,
+               TO_LAST
+       };
+       
+       struct keyword_item toolTags[TO_LAST - 1] = {
+               { "end", TO_ENDTOOLBAR },
+               { "item", TO_COMMAND },
+               { "layouts", TO_LAYOUTS },
+               { "minibuffer", TO_MINIBUFFER },
+               { "separator", TO_SEPARATOR },
+               { "tableinsert", TO_TABLEINSERT }
+       };
+
        //consistency check
        if (compare_ascii_no_case(lex.getString(), "toolbar")) {
-               lyxerr << "ToolbarBackend::read: ERROR wrong token:`"
+               lyxerr << "ToolbarInfo::read: ERROR wrong token:`"
                       << lex.getString() << '\'' << endl;
        }

        lex.next(true);
+       name = lex.getString();

-       Toolbar tb;
-       tb.name = lex.getString();
        lex.next(true);
-       tb.gui_name = lex.getString();
+       gui_name = lex.getString();
+
+       // FIXME what to do here?
        if (!lex) {
-               lyxerr << "ToolbarBackend::read: Malformed toolbar "
+               lyxerr << "ToolbarInfo::read: Malformed toolbar "
                        "description " <<  lex.getString() << endl;
-               return;
+               return *this;
        }

        bool quit = false;
@@ -95,54 +107,113 @@

        while (lex.isOK() && !quit) {
                switch (lex.lex()) {
-               case TO_ADD:
+               case TO_COMMAND:
                        if (lex.next(true)) {
docstring const tooltip = translateIfPossible(lex.getDocString ());
                                lex.next(true);
                                string const func_arg = lex.getString();
                                LYXERR(Debug::PARSER)
-                                       << "ToolbarBackend::read TO_ADD func: `"
+                                       << "ToolbarInfo::read TO_COMMAND func: 
`"
                                        << func_arg << '\'' << endl;

                                FuncRequest func =
                                        lyxaction.lookupFunc(func_arg);
-                               add(tb, func, tooltip);
+                               add(ToolbarItem(ToolbarItem::COMMAND, func, 
tooltip));
                        }
                        break;

                case TO_MINIBUFFER:
-                       add(tb, FuncRequest(kb_action(MINIBUFFER)));
+                       add(ToolbarItem(ToolbarItem::MINIBUFFER,
+                               
FuncRequest(kb_action(ToolbarItem::MINIBUFFER))));
                        break;

                case TO_SEPARATOR:
-                       add(tb, FuncRequest(kb_action(SEPARATOR)));
+                       add(ToolbarItem(ToolbarItem::SEPARATOR,
+                               
FuncRequest(kb_action(ToolbarItem::SEPARATOR))));
                        break;

                case TO_LAYOUTS:
-                       add(tb, FuncRequest(kb_action(LAYOUTS)));
+                       add(ToolbarItem(ToolbarItem::LAYOUTS,
+                               FuncRequest(kb_action(ToolbarItem::LAYOUTS))));
                        break;
-
+               case TO_TABLEINSERT:
+                       add(ToolbarItem(ToolbarItem::TABLEINSERT,
+                               
FuncRequest(kb_action(ToolbarItem::TABLEINSERT))));
+                       break;
                case TO_ENDTOOLBAR:
                        quit = true;
                        break;
                default:
-                       lex.printError("ToolbarBackend::read: "
+                       lex.printError("ToolbarInfo::read: "
                                       "Unknown toolbar tag: `$$Token'");
                        break;
                }
        }

-       toolbars.push_back(tb);
-
        lex.popTable();
+       return *this;
 }


+
+
+ToolbarBackend::ToolbarBackend()
+{
+}
+
+
 void ToolbarBackend::readToolbars(LyXLex & lex)
 {
+       enum tooltags {
+               TO_TOOLBAR = 1,
+               TO_ENDTOOLBARSET,
+               TO_LAST
+       };
+       
+       struct keyword_item toolTags[TO_LAST - 1] = {
+               { "end", TO_ENDTOOLBARSET },
+               { "toolbar", TO_TOOLBAR }
+       };
+
        //consistency check
+       if (compare_ascii_no_case(lex.getString(), "toolbarset")) {
+               lyxerr << "ToolbarBackend::readToolbars: ERROR wrong token:`"
+                      << lex.getString() << '\'' << endl;
+       }
+
+       lex.pushTable(toolTags, TO_LAST - 1);
+
+       if (lyxerr.debugging(Debug::PARSER))
+               lex.printTable(lyxerr);
+
+       bool quit = false;
+       while (lex.isOK() && !quit) {
+               switch (lex.lex()) {
+               case TO_TOOLBAR: {
+                       ToolbarInfo tb;
+                       tb.read(lex);
+                       toolbars.push_back(tb);
+                       break;
+                       }
+               case TO_ENDTOOLBARSET:
+                       quit = true;
+                       break;
+               default:
+                       lex.printError("ToolbarBackend::readToolbars: "
+                                      "Unknown toolbar tag: `$$Token'");
+                       break;
+               }
+       }
+
+       lex.popTable();
+}
+
+
+void ToolbarBackend::readToolbarSettings(LyXLex & lex)
+{
+       //consistency check
        if (compare_ascii_no_case(lex.getString(), "toolbars")) {
-               lyxerr << "ToolbarBackend::read: ERROR wrong token:`"
+ lyxerr << "ToolbarBackend::readToolbarSettings: ERROR wrong token:`"
                       << lex.getString() << '\'' << endl;
        }

@@ -168,7 +239,7 @@
                        return;
                }

-               tcit->flags = static_cast<Flags>(0);
+               tcit->flags = static_cast<ToolbarInfo::Flags>(0);
                string flagstr = lex.getString();
                lex.next(true);
                vector<string> flags = getVectorFromString(flagstr);
@@ -179,28 +250,28 @@
                for (; cit != end; ++cit) {
                        int flag = 0;
                        if (!compare_ascii_no_case(*cit, "off"))
-                               flag = OFF;
+                               flag = ToolbarInfo::OFF;
                        else if (!compare_ascii_no_case(*cit, "on"))
-                               flag = ON;
+                               flag = ToolbarInfo::ON;
                        else if (!compare_ascii_no_case(*cit, "math"))
-                               flag = MATH;
+                               flag = ToolbarInfo::MATH;
                        else if (!compare_ascii_no_case(*cit, "table"))
-                               flag = TABLE;
+                               flag = ToolbarInfo::TABLE;
                        else if (!compare_ascii_no_case(*cit, "review"))
-                               flag = REVIEW;
+                               flag = ToolbarInfo::REVIEW;
                        else if (!compare_ascii_no_case(*cit, "top"))
-                               flag = TOP;
+                               flag = ToolbarInfo::TOP;
                        else if (!compare_ascii_no_case(*cit, "bottom"))
-                               flag = BOTTOM;
+                               flag = ToolbarInfo::BOTTOM;
                        else if (!compare_ascii_no_case(*cit, "left"))
-                               flag = LEFT;
+                               flag = ToolbarInfo::LEFT;
                        else if (!compare_ascii_no_case(*cit, "right"))
-                               flag = RIGHT;
+                               flag = ToolbarInfo::RIGHT;
                        else {
-                               lyxerr << "ToolbarBackend::read: unrecognised 
token:`"
+ lyxerr << "ToolbarBackend::readToolbarSettings: unrecognised token:`"
                                       << *cit << '\'' << endl;
                        }
-                       tcit->flags = static_cast<Flags>(tcit->flags | flag);
+                       tcit->flags = 
static_cast<ToolbarInfo::Flags>(tcit->flags | flag);
                }

                usedtoolbars.push_back(*tcit);
@@ -208,55 +279,4 @@
 }


-void ToolbarBackend::add(Toolbar & tb,
-                        FuncRequest const & func, docstring const & tooltip)
-{
-       tb.items.push_back(make_pair(func, tooltip));
-       tb.items.back().first.origin = FuncRequest::TOOLBAR;
-}
-
-
-string const ToolbarBackend::getIcon(FuncRequest const & f)
-{
-       using frontend::find_xpm;
-
-       string fullname;
-
-       switch (f.action) {
-       case LFUN_MATH_INSERT:
-               if (!f.argument().empty())
-                       fullname = find_xpm(to_utf8(f.argument()).substr(1));
-               break;
-       case LFUN_MATH_DELIM:
-       case LFUN_MATH_BIGDELIM:
-               fullname = find_xpm(to_utf8(f.argument()));
-               break;
-       default:
-               string const name = lyxaction.getActionName(f.action);
-               string xpm_name(name);
-
-               if (!f.argument().empty())
-                       xpm_name = subst(name + ' ' + to_utf8(f.argument()), ' 
', '_');
-
-               fullname = libFileSearch("images", xpm_name, 
"xpm").absFilename();
-
-               if (fullname.empty()) {
-                       // try without the argument
-                       fullname = libFileSearch("images", name, 
"xpm").absFilename();
-               }
-       }
-
-       if (!fullname.empty()) {
-               LYXERR(Debug::GUI) << "Full icon name is `"
-                                  << fullname << '\'' << endl;
-               return fullname;
-       }
-
-       LYXERR(Debug::GUI) << "Cannot find icon for command \""
-                          << lyxaction.getActionName(f.action)
-                          << '(' << to_utf8(f.argument()) << ")\"" << endl;
-       return libFileSearch("images", "unknown", "xpm").absFilename();
-}
-
-
 } // namespace lyx
Index: src/ToolbarBackend.h
===================================================================
--- src/ToolbarBackend.h        (revision 17731)
+++ src/ToolbarBackend.h        (working copy)
@@ -23,56 +23,82 @@

 class LyXLex;

-
-///
-class ToolbarBackend {
+class ToolbarItem {
 public:
-       /// The special toolbar actions
-       enum ItemType {
+       enum Type {
+               /// command/action
+               COMMAND,
                /// the command buffer
-               MINIBUFFER = -3,
+               MINIBUFFER,
                /// adds space between buttons in the toolbar
-               SEPARATOR = -2,
+               SEPARATOR,
                /// a special combox insead of a button
-               LAYOUTS = -1,
+               LAYOUTS,
+               /// a special widget to insert tabulars
+               TABLEINSERT
        };

-       /// action, tooltip
-       typedef std::pair<FuncRequest, docstring> Item;
+       ToolbarItem(Type type,
+                FuncRequest const & func,
+                docstring const & label = docstring());

-       /// the toolbar items
-       typedef std::vector<Item> Items;
+       ~ToolbarItem();

+       /// item type
+       Type type_;
+       /// action
+       FuncRequest func_;
+       /// label/tooltip
+       docstring label_;
+};
+
+
+///
+class ToolbarInfo {
+public:
        /// toolbar flags
        enum Flags {
-               ON = 1, //< always shown
-               OFF = 2, //< never shown
-               MATH = 4, //< shown when in math
-               TABLE = 8, //< shown when in table
+               ON = 1, //< show
+               OFF = 2, //< do not show
+               MATH = 4, //< show when in math
+               TABLE = 8, //< show when in table
                TOP = 16, //< show at top
                BOTTOM = 32, //< show at bottom
                LEFT = 64, //< show at left
                RIGHT = 128, //< show at right
-               REVIEW = 256, //< shown when change tracking is enabled
- AUTO = 512 //< only if AUTO is set, will MATH, TABLE and REIVEW is used
+               REVIEW = 256, //< show when change tracking is enabled
+ AUTO = 512 //< only if AUTO is set, when MATH, TABLE and REVIEW is used
        };
+       /// the toolbar items
+       typedef std::vector<ToolbarItem> Items;

-       /// a toolbar
-       struct Toolbar {
-               /// toolbar name
-               std::string name;
-               /// toolbar GUI name
-               std::string gui_name;
-               /// toolbar contents
-               Items items;
-               /// flags
-               Flags flags;
-       };
+       typedef Items::const_iterator item_iterator;

-       typedef std::vector<Toolbar> Toolbars;
+       explicit ToolbarInfo();

-       typedef Items::const_iterator item_iterator;
+       /// toolbar name
+       std::string name;
+       /// toolbar GUI name
+       std::string gui_name;
+       /// toolbar contents
+       Items items;
+       /// flags
+       Flags flags;

+       /// read a toolbar from the file
+       ToolbarInfo & read(LyXLex &);
+
+private:
+       /// add toolbar item
+       void add(ToolbarItem const &);
+};
+
+
+///
+class ToolbarBackend {
+public:
+       typedef std::vector<ToolbarInfo> Toolbars;
+
        ToolbarBackend();

        /// iterator for all toolbars
@@ -84,20 +110,13 @@

        Toolbars::iterator end() { return usedtoolbars.end(); }

-       /// read a toolbar from the file
-       void read(LyXLex &);
-
-       /// read the used toolbars
+       /// read toolbars from the file
        void readToolbars(LyXLex &);

-       /// return a full path of an XPM for the given action
-       static std::string const getIcon(FuncRequest const &);
+       /// read ui toolbar settings
+       void readToolbarSettings(LyXLex &);

 private:
-       /// add the given lfun with tooltip if relevant
-       void add(Toolbar & tb, FuncRequest const &,
-                docstring const & tooltip = docstring());
-
        /// all the toolbars
        Toolbars toolbars;


Attachment: PGP.sig
Description: Signierter Teil der Nachricht

Reply via email to