+class MenuButton : public QToolButton
+{
+private:
+ GuiToolbar * bar_;
+ ToolbarItem const & tbitem_;
+ IconPalette * panel_;
+ bool initialized_;
+public:
+ MenuButton(GuiToolbar * bar, ToolbarItem const & item)
+ : QToolButton(bar), bar_(bar), tbitem_(item), initialized_(false)
+ {
+ setPopupMode(QToolButton::InstantPopup);
+ setToolTip(qt_(to_ascii(tbitem_.label_)));
+ setStatusTip(qt_(to_ascii(tbitem_.label_)));
+ setText(qt_(to_ascii(tbitem_.label_)));
+ setIcon(QPixmap(":images/math/" + toqstr(tbitem_.name_) + ".png"));
+ connect(bar, SIGNAL(iconSizeChanged(QSize)),
+ this, SLOT(setIconSize(QSize)));
+ }
+
+ void mousePressEvent(QMouseEvent * e)
+ {
+ if (initialized_) {
+ QToolButton::mousePressEvent(e);
+ return;
+ }
+
+ initialized_ = true;
+
+ ButtonMenu * m = new ButtonMenu(qt_(to_ascii(tbitem_.label_)), this);
+ m->setWindowTitle(qt_(to_ascii(tbitem_.label_)));
+ m->setTearOffEnabled(true);
+ connect(bar_, SIGNAL(updated()), m, SLOT(updateParent()));
+ ToolbarInfo const * tbinfo =
+ toolbarbackend.getDefinedToolbarInfo(tbitem_.name_);
+ if (!tbinfo) {
+ lyxerr << "Unknown toolbar " << tbitem_.name_ << endl;
+ return;
+ }
+ ToolbarInfo::item_iterator it = tbinfo->items.begin();
+ ToolbarInfo::item_iterator const end = tbinfo->items.end();
+ for (; it != end; ++it)
+ if (!getStatus(it->func_).unknown())
+ m->add(bar_->addItem(*it));
+ setMenu(m);
+
+ QToolButton::mousePressEvent(e);
+ }
+};
+