102 if (
RibbonGroup *group = qobject_cast<RibbonGroup *>(q->parent())) {
104 s.setHeight(group->largeHeight());
110 QFontMetrics fm = q->fontMetrics();
111 QRect textRange(0, 0, s.width(), s.height());
115 const int maxTryCount = 3;
117 int alignment = Qt::TextShowMnemonic | Qt::TextWordWrap;
120 textRange.setWidth(s.width() / 2 + (s.width() / 2) * (
float(tryCount) / maxTryCount));
121 textRange = fm.boundingRect(textRange, alignment, opt.text);
125 if (textRange.height() <= (fm.lineSpacing() * 2)) {
127 if (textRange.height() <= (fm.lineSpacing() * 2.5)) {
134 }
while (tryCount < maxTryCount);
137 s.setWidth(textRange.width() +
m_spacing * 2);
139 if ((opt.features & QStyleOptionToolButton::MenuButtonPopup) ||
140 (opt.features & QStyleOptionToolButton::HasMenu)) {
147 if ((opt.features & QStyleOptionToolButton::MenuButtonPopup) ||
148 (opt.features & QStyleOptionToolButton::HasMenu)) {
156 if (s.width() > s.height() * 2) {
158 s.rwidth() = s.height() * 2;
160 if ((opt.features & QStyleOptionToolButton::MenuButtonPopup) ||
161 (opt.features & QStyleOptionToolButton::HasMenu)) {
166 if (s.width() < s.height()) {
168 int textHeight = q->fontMetrics().lineSpacing();
172 int iconHeight = s.height() - textHeight -
m_spacing;
173 if (iconHeight > s.width()) {
174 s.rwidth() = iconHeight;
182 if (Qt::ToolButtonIconOnly == opt.toolButtonStyle) {
186 if (opt.features & QStyleOptionToolButton::MenuButtonPopup ||
187 opt.features & QStyleOptionToolButton::HasMenu) {
210 bool isArrow = opt.features & QStyleOptionToolButton::Arrow;
211 if (((!isArrow && opt.icon.isNull()) && !opt.text.isEmpty()) ||
212 (opt.toolButtonStyle == Qt::ToolButtonTextOnly)) {
214 int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextWordWrap;
215 if (!
style()->styleHint(QStyle::SH_UnderlineShortcut, &opt, w)) {
216 alignment |= Qt::TextHideMnemonic;
219 style()->drawItemText(&p, textRect, alignment, opt.palette, opt.state & QStyle::State_Enabled, opt.text,
220 QPalette::ButtonText);
223 if (opt.toolButtonStyle != Qt::ToolButtonIconOnly) {
226 int alignment = Qt::TextShowMnemonic | Qt::TextWordWrap;
227 if (!
style()->styleHint(QStyle::SH_UnderlineShortcut, &opt, w)) {
228 alignment |= Qt::TextHideMnemonic;
233#ifdef QX_RIBBON_DEBUG_HELP_DRAW
241#ifdef QX_RIBBON_DEBUG_HELP_DRAW
245 alignment |= Qt::AlignCenter;
247 alignment |= Qt::AlignHCenter | Qt::AlignTop;
250 QString
text = opt.text;
255 text = w->fontMetrics().elidedText(
text, Qt::ElideRight, textRect.width(), Qt::TextShowMnemonic);
257 style()->drawItemText(&p, QStyle::visualRect(opt.direction, opt.rect, textRect), alignment, opt.palette,
258 opt.state & QStyle::State_Enabled,
text, QPalette::ButtonText);
269 if (opt.features & QStyleOptionToolButton::MenuButtonPopup ||
270 opt.features & QStyleOptionToolButton::HasMenu) {
272#ifdef QX_RIBBON_DEBUG_HELP_DRAW
275 style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, &p, w);
280 if (!opt.icon.isNull() && opt.toolButtonStyle != Qt::ToolButtonTextOnly) {
283 if (opt.toolButtonStyle != Qt::ToolButtonIconOnly) {
288 QRect tr = opt.rect.adjusted(pr.width() + 2 *
m_spacing, 0, -1, 0);
290#ifdef QX_RIBBON_DEBUG_HELP_DRAW
295 int alignment = Qt::TextShowMnemonic;
297 if (!
style()->styleHint(QStyle::SH_UnderlineShortcut, &opt, w)) {
298 alignment |= Qt::TextHideMnemonic;
300 if (opt.toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
303 style()->drawItemPixmap(&p, QStyle::visualRect(opt.direction, opt.rect, pr), Qt::AlignCenter, pm);
304 alignment |= Qt::AlignLeft | Qt::AlignVCenter;
306 style()->drawItemText(&p, QStyle::visualRect(opt.direction, opt.rect, tr), alignment, opt.palette,
307 opt.state & QStyle::State_Enabled, opt.text, QPalette::ButtonText);
313 int alignment = Qt::TextShowMnemonic;
315 if (!
style()->styleHint(QStyle::SH_UnderlineShortcut, &opt, w)) {
316 alignment |= Qt::TextHideMnemonic;
318 style()->drawItemText(&p, QStyle::visualRect(opt.direction, opt.rect, opt.rect.adjusted(2, 1, -2, -1)),
319 alignment, opt.palette, opt.state & QStyle::State_Enabled, opt.text,
320 QPalette::ButtonText);
324 if (opt.features & QStyleOptionToolButton::MenuButtonPopup || opt.features & QStyleOptionToolButton::HasMenu) {
325 QStyleOptionToolButton tool = opt;
327#ifdef QX_RIBBON_DEBUG_HELP_DRAW
330 style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &tool, &p, w);
336 QPainter *painter,
const QWidget *widget)
338 QStyle::PrimitiveElement pe;
340 switch (toolbutton->arrowType) {
342 pe = QStyle::PE_IndicatorArrowLeft;
345 pe = QStyle::PE_IndicatorArrowRight;
348 pe = QStyle::PE_IndicatorArrowUp;
351 pe = QStyle::PE_IndicatorArrowDown;
357 QStyleOption arrowOpt = *toolbutton;
358 arrowOpt.rect = rect;
359 style->drawPrimitive(pe, &arrowOpt, painter, widget);
371 if (opt.toolButtonStyle != Qt::ToolButtonIconOnly) {
374 QFontMetrics fm = q->fontMetrics();
378 maxheight = opt.rect.height() - (fm.lineSpacing() * 2) - 3 *
m_spacing;
380 maxheight = opt.rect.height() - (fm.lineSpacing() * 1.2) - 3 *
m_spacing;
389 if ((opt.features & QStyleOptionToolButton::MenuButtonPopup) ||
390 (opt.features & QStyleOptionToolButton::HasMenu)) {
404 if (opt.toolButtonStyle == Qt::ToolButtonIconOnly) {
408 if (opt.features & QStyleOptionToolButton::MenuButtonPopup ||
409 opt.features & QStyleOptionToolButton::HasMenu) {
421 if ((opt.features & QStyleOptionToolButton::MenuButtonPopup) ||
422 (opt.features & QStyleOptionToolButton::HasMenu)) {
430 bool isArrow = opt.features & QStyleOptionToolButton::Arrow;
431 if ((Qt::ToolButtonTextOnly == opt.toolButtonStyle) || (opt.icon.isNull() && !isArrow)) {
545 if (opt.features & QStyleOptionToolButton::MenuButtonPopup || opt.features & QStyleOptionToolButton::HasMenu) {
546 if (!w->rect().contains(w->mapFromGlobal(QCursor::pos()))) {
547 opt.state &= ~QStyle::State_MouseOver;
550 bool autoRaise = opt.state & QStyle::State_AutoRaise;
551 QStyle::State bflags = opt.state & ~QStyle::State_Sunken;
554 if (!(bflags & QStyle::State_MouseOver) || !(bflags & QStyle::State_Enabled)) {
555 bflags &= ~QStyle::State_Raised;
558 if (opt.state & QStyle::State_Sunken) {
559 if (opt.activeSubControls & QStyle::SC_ToolButton) {
560 bflags |= QStyle::State_Sunken;
561 }
else if (opt.activeSubControls & QStyle::SC_ToolButtonMenu) {
562 bflags |= QStyle::State_MouseOver;
566 QStyleOption tool(0);
567 tool.palette = opt.palette;
568 QStyle::PrimitiveElement pe = autoRaise ? QStyle::PE_PanelButtonTool : QStyle::PE_PanelButtonBevel;
569 if ((opt.subControls & QStyle::SC_ToolButton) && (opt.features & QStyleOptionToolButton::MenuButtonPopup)) {
570 tool.rect = opt.rect;
572 if (opt.activeSubControls & QStyle::SC_ToolButtonMenu) {
574 style()->drawPrimitive(QStyle::PE_PanelButtonTool, &tool, &p, w);
577 style()->drawPrimitive(QStyle::PE_PanelButtonTool, &tool, &p, w);
578 if (tool.state & QStyle::State_MouseOver) {
580 if (opt.toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
586 if (opt.toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
592 tool.state = QStyle::State_Raised;
593 style()->drawPrimitive(pe, &tool, &p, w);
596 }
else if ((opt.subControls & QStyle::SC_ToolButton) && (opt.features & QStyleOptionToolButton::HasMenu)) {
597 tool.rect = opt.rect;
599 style()->drawPrimitive(pe, &tool, &p, w);
600 }
else if (opt.subControls & QStyle::SC_ToolButton) {
601 tool.rect = opt.rect;
603 if (opt.state & QStyle::State_Sunken) {
604 tool.state &= ~QStyle::State_MouseOver;
606 style()->drawPrimitive(pe, &tool, &p, w);