From: Abdelrazak Younes Date: Thu, 17 Jan 2008 08:20:22 +0000 (+0000) Subject: Introduce class MenuButton in order to delay the math menu button initialisation... X-Git-Tag: 1.6.10~6568 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=0aead96461997aa289311096ecf0507ae8950d6d;p=features.git Introduce class MenuButton in order to delay the math menu button initialisation up until it is first shown. This improve the inital loading time by half a second on windows. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22608 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index a6cb4d4972..e27fee2696 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -444,6 +444,56 @@ public: } }; +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); + } +}; + } void GuiToolbar::add(ToolbarItem const & item) @@ -481,31 +531,7 @@ void GuiToolbar::add(ToolbarItem const & item) break; case ToolbarItem::POPUPMENU: { - QToolButton * tb = new QToolButton; - tb->setPopupMode(QToolButton::InstantPopup); - tb->setToolTip(qt_(to_ascii(item.label_))); - tb->setStatusTip(qt_(to_ascii(item.label_))); - tb->setText(qt_(to_ascii(item.label_))); - tb->setIcon(QPixmap(":images/math/" + toqstr(item.name_) + ".png")); - connect(this, SIGNAL(iconSizeChanged(QSize)), - tb, SLOT(setIconSize(QSize))); - - ButtonMenu * m = new ButtonMenu(qt_(to_ascii(item.label_)), tb); - m->setWindowTitle(qt_(to_ascii(item.label_))); - m->setTearOffEnabled(true); - connect(this, SIGNAL(updated()), m, SLOT(updateParent())); - ToolbarInfo const * tbinfo = toolbarbackend.getDefinedToolbarInfo(item.name_); - if (!tbinfo) { - lyxerr << "Unknown toolbar " << item.name_ << endl; - break; - } - 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(addItem(*it)); - tb->setMenu(m); - addWidget(tb); + addWidget(new MenuButton(this, item)); break; } case ToolbarItem::COMMAND: {