24#include <QApplication>
25#include <QStyleOptionToolButton>
33 QStyleOptionToolButton opt;
34 initStyleOption(&opt);
36 m_pressTimer.setSingleShot(
true);
37 m_pressTimer.setInterval(QApplication::style()->styleHint(QStyle::SH_ToolButton_PopupDelay, &opt,
this));
38 connect(&m_pressTimer, SIGNAL(timeout()),
this, SLOT(showMenu()));
48 m_options |= MultiIconOption;
50 setFixedSize(m_multiIcon.width(), m_multiIcon.height() / 4);
62 const QIcon ic = QIcon::fromTheme(
icon);
65 setIcon(QIcon::fromTheme(m_themeIcon));
82 return QToolButton::icon();
87 if (m_options & MultiIconOption)
88 setFixedSize(sizeHint());
90 m_options &= ~MultiIconOption;
91 QToolButton::setIcon(
icon);
104 disconnect(m_menu, &QMenu::aboutToHide,
this, &ToolButton::menuAboutToHide);
107 connect(m_menu, &QMenu::aboutToHide,
this, &ToolButton::menuAboutToHide);
112 return m_options & ShowMenuInsideOption;
118 m_options |= ShowMenuInsideOption;
120 m_options &= ~ShowMenuInsideOption;
125 return m_options & ShowMenuOnRightClick;
130 m_options.setFlag(ShowMenuOnRightClick, enable);
135 return m_options & ToolBarLookOption;
141 m_options |= ToolBarLookOption;
145 int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize, &opt,
this);
146 setIconSize(QSize(size, size));
149 m_options &= ~ToolBarLookOption;
152 setProperty(
"toolbar-look", QVariant(enable));
153 style()->unpolish(
this);
154 style()->polish(
this);
157void ToolButton::menuAboutToHide()
163void ToolButton::showMenu()
165 if (!m_menu || m_menu->isVisible())
172 if (m_options & ShowMenuInsideOption) {
173 pos = mapToGlobal(rect().bottomRight());
174 if (QApplication::layoutDirection() == Qt::RightToLeft)
175 pos.setX(pos.x() - rect().width());
177 pos.setX(pos.x() - m_menu->sizeHint().width());
180 pos = mapToGlobal(rect().bottomLeft());
188 if (e->buttons() == Qt::LeftButton && popupMode() == QToolButton::DelayedPopup)
189 m_pressTimer.start();
191 if (e->buttons() == Qt::LeftButton &&
menu() && popupMode() == QToolButton::InstantPopup) {
195 else if (e->buttons() == Qt::RightButton &&
menu() && m_options & ShowMenuOnRightClick) {
199 QToolButton::mousePressEvent(e);
207 if (e->button() == Qt::MiddleButton && rect().contains(e->pos())) {
211 else if (e->button() == Qt::LeftButton && rect().contains(e->pos()) && e->modifiers() == Qt::ControlModifier) {
215 QToolButton::mouseReleaseEvent(e);
221 QToolButton::mouseDoubleClickEvent(e);
225 if (e->buttons() == Qt::LeftButton) {
233 if (
menu() && m_options & ShowMenuOnRightClick)
236 QToolButton::contextMenuEvent(e);
241 if (!(m_options & MultiIconOption)) {
242 QToolButton::paintEvent(e);
248 const int w = m_multiIcon.width();
249 const int h4 = m_multiIcon.height() / 4;
252 p.drawImage(0, 0, m_multiIcon, 0, h4 * 3, w, h4);
254 p.drawImage(0, 0, m_multiIcon, 0, h4 * 2, w, h4);
255 else if (underMouse())
256 p.drawImage(0, 0, m_multiIcon, 0, h4 * 1, w, h4);
258 p.drawImage(0, 0, m_multiIcon, 0, h4 * 0, w, h4);