File indexing completed on 2025-02-02 14:19:55
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org> 0004 SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org> 0005 SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org> 0006 SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org> 0007 SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org> 0008 SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org> 0009 SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org> 0010 SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org> 0011 SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org> 0012 SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org> 0013 0014 SPDX-License-Identifier: LGPL-2.0-only 0015 */ 0016 0017 #include "kactionmenu.h" 0018 0019 #include <QMenu> 0020 #include <QToolBar> 0021 0022 class KActionMenuPrivate 0023 { 0024 public: 0025 KActionMenuPrivate() 0026 { 0027 } 0028 ~KActionMenuPrivate() 0029 { 0030 } 0031 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 77) 0032 bool m_stickyMenu = true; 0033 #endif 0034 QToolButton::ToolButtonPopupMode m_popupMode = QToolButton::DelayedPopup; 0035 }; 0036 0037 KActionMenu::KActionMenu(QObject *parent) 0038 : QWidgetAction(parent) 0039 , d(new KActionMenuPrivate) 0040 { 0041 setMenu(new QMenu); 0042 setProperty("isShortcutConfigurable", false); 0043 } 0044 0045 KActionMenu::KActionMenu(const QString &text, QObject *parent) 0046 : QWidgetAction(parent) 0047 , d(new KActionMenuPrivate) 0048 { 0049 setMenu(new QMenu); 0050 setProperty("isShortcutConfigurable", false); 0051 setText(text); 0052 } 0053 0054 KActionMenu::KActionMenu(const QIcon &icon, const QString &text, QObject *parent) 0055 : QWidgetAction(parent) 0056 , d(new KActionMenuPrivate) 0057 { 0058 setMenu(new QMenu); 0059 setProperty("isShortcutConfigurable", false); 0060 setIcon(icon); 0061 setText(text); 0062 } 0063 0064 KActionMenu::~KActionMenu() 0065 { 0066 delete menu(); 0067 } 0068 0069 QWidget *KActionMenu::createWidget(QWidget *_parent) 0070 { 0071 QToolBar *parent = qobject_cast<QToolBar *>(_parent); 0072 if (!parent) { 0073 return QWidgetAction::createWidget(_parent); 0074 } 0075 QToolButton *button = new QToolButton(parent); 0076 button->setAutoRaise(true); 0077 button->setFocusPolicy(Qt::NoFocus); 0078 button->setIconSize(parent->iconSize()); 0079 button->setToolButtonStyle(parent->toolButtonStyle()); 0080 QObject::connect(parent, &QToolBar::iconSizeChanged, button, &QAbstractButton::setIconSize); 0081 QObject::connect(parent, &QToolBar::toolButtonStyleChanged, button, &QToolButton::setToolButtonStyle); 0082 button->setDefaultAction(this); 0083 button->setPopupMode(popupMode()); 0084 QObject::connect(button, &QToolButton::triggered, parent, &QToolBar::actionTriggered); 0085 0086 return button; 0087 } 0088 0089 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 0) 0090 void KActionMenu::remove(QAction *cmd) 0091 { 0092 if (cmd) { 0093 menu()->removeAction(cmd); 0094 } 0095 } 0096 #endif 0097 0098 void KActionMenu::addAction(QAction *action) 0099 { 0100 menu()->addAction(action); 0101 } 0102 0103 QAction *KActionMenu::addSeparator() 0104 { 0105 QAction *separator = new QAction(this); 0106 separator->setSeparator(true); 0107 addAction(separator); 0108 return separator; 0109 } 0110 0111 QAction *KActionMenu::insertSeparator(QAction *before) 0112 { 0113 QAction *separator = new QAction(this); 0114 separator->setSeparator(true); 0115 insertAction(before, separator); 0116 return separator; 0117 } 0118 0119 void KActionMenu::insertAction(QAction *before, QAction *action) 0120 { 0121 menu()->insertAction(before, action); 0122 } 0123 0124 void KActionMenu::removeAction(QAction *action) 0125 { 0126 menu()->removeAction(action); 0127 } 0128 0129 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 77) 0130 bool KActionMenu::delayed() const 0131 { 0132 return popupMode() == QToolButton::DelayedPopup; 0133 } 0134 #endif 0135 0136 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 77) 0137 void KActionMenu::setDelayed(bool _delayed) 0138 { 0139 if (_delayed) { 0140 setPopupMode(QToolButton::DelayedPopup); 0141 } else { 0142 if (d->m_stickyMenu) { 0143 setPopupMode(QToolButton::InstantPopup); 0144 } else { 0145 setPopupMode(QToolButton::MenuButtonPopup); 0146 } 0147 } 0148 } 0149 #endif 0150 0151 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 77) 0152 bool KActionMenu::stickyMenu() const 0153 { 0154 if (popupMode() == QToolButton::DelayedPopup) { 0155 return d->m_stickyMenu; 0156 } else if (popupMode() == QToolButton::InstantPopup) { 0157 return true; 0158 } else { // MenuButtonPopup 0159 return false; 0160 } 0161 } 0162 #endif 0163 0164 #if KWIDGETSADDONS_BUILD_DEPRECATED_SINCE(5, 77) 0165 void KActionMenu::setStickyMenu(bool sticky) 0166 { 0167 if (popupMode() != QToolButton::DelayedPopup) { 0168 if (sticky) { 0169 setPopupMode(QToolButton::InstantPopup); 0170 } else { 0171 setPopupMode(QToolButton::MenuButtonPopup); 0172 } 0173 } 0174 0175 d->m_stickyMenu = sticky; 0176 } 0177 #endif 0178 0179 QToolButton::ToolButtonPopupMode KActionMenu::popupMode() const 0180 { 0181 return d->m_popupMode; 0182 } 0183 0184 void KActionMenu::setPopupMode(QToolButton::ToolButtonPopupMode popupMode) 0185 { 0186 d->m_popupMode = popupMode; 0187 } 0188 0189 #include "moc_kactionmenu.cpp"