File indexing completed on 2024-04-28 03:58:58
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 QToolButton::ToolButtonPopupMode m_popupMode = QToolButton::DelayedPopup; 0032 }; 0033 0034 KActionMenu::KActionMenu(QObject *parent) 0035 : QWidgetAction(parent) 0036 , d(new KActionMenuPrivate) 0037 { 0038 setMenu(new QMenu); 0039 setProperty("isShortcutConfigurable", false); 0040 } 0041 0042 KActionMenu::KActionMenu(const QString &text, QObject *parent) 0043 : QWidgetAction(parent) 0044 , d(new KActionMenuPrivate) 0045 { 0046 setMenu(new QMenu); 0047 setProperty("isShortcutConfigurable", false); 0048 setText(text); 0049 } 0050 0051 KActionMenu::KActionMenu(const QIcon &icon, const QString &text, QObject *parent) 0052 : QWidgetAction(parent) 0053 , d(new KActionMenuPrivate) 0054 { 0055 setMenu(new QMenu); 0056 setProperty("isShortcutConfigurable", false); 0057 setIcon(icon); 0058 setText(text); 0059 } 0060 0061 KActionMenu::~KActionMenu() 0062 { 0063 delete menu(); 0064 } 0065 0066 QWidget *KActionMenu::createWidget(QWidget *_parent) 0067 { 0068 QToolBar *parent = qobject_cast<QToolBar *>(_parent); 0069 if (!parent) { 0070 return QWidgetAction::createWidget(_parent); 0071 } 0072 QToolButton *button = new QToolButton(parent); 0073 button->setAutoRaise(true); 0074 button->setFocusPolicy(Qt::NoFocus); 0075 button->setIconSize(parent->iconSize()); 0076 button->setToolButtonStyle(parent->toolButtonStyle()); 0077 QObject::connect(parent, &QToolBar::iconSizeChanged, button, &QAbstractButton::setIconSize); 0078 QObject::connect(parent, &QToolBar::toolButtonStyleChanged, button, &QToolButton::setToolButtonStyle); 0079 button->setDefaultAction(this); 0080 button->setPopupMode(popupMode()); 0081 QObject::connect(button, &QToolButton::triggered, parent, &QToolBar::actionTriggered); 0082 0083 return button; 0084 } 0085 0086 void KActionMenu::addAction(QAction *action) 0087 { 0088 menu()->addAction(action); 0089 } 0090 0091 QAction *KActionMenu::addSeparator() 0092 { 0093 QAction *separator = new QAction(this); 0094 separator->setSeparator(true); 0095 addAction(separator); 0096 return separator; 0097 } 0098 0099 QAction *KActionMenu::insertSeparator(QAction *before) 0100 { 0101 QAction *separator = new QAction(this); 0102 separator->setSeparator(true); 0103 insertAction(before, separator); 0104 return separator; 0105 } 0106 0107 void KActionMenu::insertAction(QAction *before, QAction *action) 0108 { 0109 menu()->insertAction(before, action); 0110 } 0111 0112 void KActionMenu::removeAction(QAction *action) 0113 { 0114 menu()->removeAction(action); 0115 } 0116 0117 QToolButton::ToolButtonPopupMode KActionMenu::popupMode() const 0118 { 0119 return d->m_popupMode; 0120 } 0121 0122 void KActionMenu::setPopupMode(QToolButton::ToolButtonPopupMode popupMode) 0123 { 0124 d->m_popupMode = popupMode; 0125 } 0126 0127 #include "moc_kactionmenu.cpp"