Warning, file /office/skrooge/skgbasegui/skgmenuitem.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2023 N. KRUPENKO krnekit@gmail.com 0003 * SPDX-License-Identifier: GPL-3.0-or-later 0004 ***************************************************************************/ 0005 /** @file 0006 * This file is a widget that could be used in QWidgetAction and looks like a menu item. 0007 * 0008 * @author Nikita KRUPENKO 0009 */ 0010 #include "skgmenuitem.h" 0011 0012 #include <qapplication.h> 0013 #include <qpainter.h> 0014 #include <qstyleoption.h> 0015 0016 #include "skgtraces.h" 0017 0018 SKGMenuitem::SKGMenuitem(QWidget* iParent) 0019 : QWidget(iParent) 0020 { 0021 SKGTRACEINFUNC(5); 0022 0023 setMouseTracking(true); 0024 } 0025 0026 SKGMenuitem::~SKGMenuitem() 0027 { 0028 SKGTRACEINFUNC(5) 0029 } 0030 0031 QString SKGMenuitem::getText() const 0032 { 0033 return m_text; 0034 } 0035 0036 void SKGMenuitem::setText(const QString& iText) 0037 { 0038 if (m_text == iText) { 0039 return; 0040 } 0041 0042 m_text = iText; 0043 0044 emit textChanged(iText); 0045 0046 update(); 0047 } 0048 0049 QIcon SKGMenuitem::getIcon() const 0050 { 0051 return m_icon; 0052 } 0053 0054 void SKGMenuitem::setIcon(const QIcon& iIcon) 0055 { 0056 m_icon = iIcon; 0057 0058 emit iconChanged(iIcon); 0059 0060 update(); 0061 } 0062 0063 QColor SKGMenuitem::getColor() const 0064 { 0065 return m_color; 0066 } 0067 0068 void SKGMenuitem::setColor(const QColor& iColor) 0069 { 0070 if (m_color == iColor) { 0071 return; 0072 } 0073 0074 m_color = iColor; 0075 0076 emit colorChanged(iColor); 0077 0078 update(); 0079 } 0080 0081 bool SKGMenuitem::getIsBold() const 0082 { 0083 return m_isBold; 0084 } 0085 0086 void SKGMenuitem::setIsBold(bool isBold) 0087 { 0088 if (m_isBold == isBold) { 0089 return; 0090 } 0091 0092 m_isBold = isBold; 0093 0094 emit isBoldChanged(isBold); 0095 0096 update(); 0097 } 0098 0099 QSize SKGMenuitem::minimumSizeHint() const 0100 { 0101 QStyleOptionMenuItem opt; 0102 initStyleOption(&opt); 0103 0104 QSize contentSize = fontMetrics().size(Qt::TextSingleLine/* | Qt::TextShowMnemonic*/, m_text); 0105 return style()->sizeFromContents(QStyle::CT_MenuItem, &opt, contentSize, this); 0106 } 0107 0108 void SKGMenuitem::paintEvent(QPaintEvent* /*e*/) 0109 { 0110 QPainter p(this); 0111 QStyleOptionMenuItem opt; 0112 initStyleOption(&opt); 0113 0114 style()->drawControl(QStyle::CE_MenuItem, &opt, &p, this); 0115 } 0116 0117 void SKGMenuitem::initStyleOption(QStyleOptionMenuItem* option) const 0118 { 0119 option->initFrom(this); 0120 option->text = m_text; 0121 option->menuHasCheckableItems = false; 0122 option->icon = m_icon; 0123 option->maxIconWidth = style()->pixelMetric(QStyle::PM_SmallIconSize, option, this) + 4; // Same as in QMenuPrivate 0124 option->menuItemType = QStyleOptionMenuItem::Normal; 0125 if (m_color.isValid()) { 0126 option->palette.setColor(QPalette::WindowText, m_color); 0127 } 0128 option->font.setBold(m_isBold); 0129 0130 if (underMouse()) { 0131 option->state |= QStyle::State_Selected; 0132 if (QApplication::mouseButtons() != Qt::NoButton) { 0133 option->state |= QStyle::State_Sunken; 0134 } 0135 } 0136 }