1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org>
4 SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
5 SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org>
6 SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org>
7 SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org>
8 SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org>
9 SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org>
10 SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
11 SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org>
12 SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
13
14 SPDX-License-Identifier: LGPL-2.0-only
15*/
16
17#include "kactionmenu.h"
18
19#include <QMenu>
20#include <QToolBar>
21
22class KActionMenuPrivate
23{
24public:
25 KActionMenuPrivate()
26 {
27 }
28 ~KActionMenuPrivate()
29 {
30 }
31 QToolButton::ToolButtonPopupMode m_popupMode = QToolButton::DelayedPopup;
32 std::unique_ptr<QMenu> m_defaultMenu;
33};
34
35KActionMenu::KActionMenu(QObject *parent)
36 : QWidgetAction(parent)
37 , d(new KActionMenuPrivate)
38{
39 d->m_defaultMenu = std::make_unique<QMenu>();
40 setMenu(d->m_defaultMenu.get());
41 setProperty(name: "isShortcutConfigurable", value: false);
42}
43
44KActionMenu::KActionMenu(const QString &text, QObject *parent)
45 : KActionMenu(parent)
46{
47 setText(text);
48}
49
50KActionMenu::KActionMenu(const QIcon &icon, const QString &text, QObject *parent)
51 : KActionMenu(text, parent)
52{
53 setIcon(icon);
54}
55
56KActionMenu::~KActionMenu() = default;
57
58QWidget *KActionMenu::createWidget(QWidget *_parent)
59{
60 QToolBar *parent = qobject_cast<QToolBar *>(object: _parent);
61 if (!parent) {
62 return QWidgetAction::createWidget(parent: _parent);
63 }
64 QToolButton *button = new QToolButton(parent);
65 button->setAutoRaise(true);
66 button->setFocusPolicy(Qt::NoFocus);
67 button->setIconSize(parent->iconSize());
68 button->setToolButtonStyle(parent->toolButtonStyle());
69 QObject::connect(sender: parent, signal: &QToolBar::iconSizeChanged, context: button, slot: &QAbstractButton::setIconSize);
70 QObject::connect(sender: parent, signal: &QToolBar::toolButtonStyleChanged, context: button, slot: &QToolButton::setToolButtonStyle);
71 button->setDefaultAction(this);
72 button->setPopupMode(popupMode());
73 QObject::connect(sender: button, signal: &QToolButton::triggered, context: parent, slot: &QToolBar::actionTriggered);
74
75 return button;
76}
77
78void KActionMenu::addAction(QAction *action)
79{
80 menu()->addAction(action);
81}
82
83QAction *KActionMenu::addSeparator()
84{
85 QAction *separator = new QAction(this);
86 separator->setSeparator(true);
87 addAction(action: separator);
88 return separator;
89}
90
91QAction *KActionMenu::insertSeparator(QAction *before)
92{
93 QAction *separator = new QAction(this);
94 separator->setSeparator(true);
95 insertAction(before, action: separator);
96 return separator;
97}
98
99void KActionMenu::insertAction(QAction *before, QAction *action)
100{
101 menu()->insertAction(before, action);
102}
103
104void KActionMenu::removeAction(QAction *action)
105{
106 menu()->removeAction(action);
107}
108
109QToolButton::ToolButtonPopupMode KActionMenu::popupMode() const
110{
111 return d->m_popupMode;
112}
113
114void KActionMenu::setPopupMode(QToolButton::ToolButtonPopupMode popupMode)
115{
116 d->m_popupMode = popupMode;
117
118 const auto widgets = createdWidgets();
119 for (QWidget *widget : widgets) {
120 if (auto *button = qobject_cast<QToolButton *>(object: widget)) {
121 button->setPopupMode(d->m_popupMode);
122 }
123 }
124}
125
126#include "moc_kactionmenu.cpp"
127

source code of kwidgetsaddons/src/kactionmenu.cpp