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"