/* This file is part of the KDE libraries SPDX-FileCopyrightText: 1999 Reginald Stadlbauer SPDX-FileCopyrightText: 1999 Simon Hausmann SPDX-FileCopyrightText: 2000 Nicolas Hadacek SPDX-FileCopyrightText: 2000 Kurt Granroth SPDX-FileCopyrightText: 2000 Michael Koch SPDX-FileCopyrightText: 2001 Holger Freyther SPDX-FileCopyrightText: 2002 Ellis Whitehead SPDX-FileCopyrightText: 2003 Andras Mantia SPDX-FileCopyrightText: 2005-2006 Hamish Rodda SPDX-FileCopyrightText: 2023 Kai Uwe Broulik SPDX-License-Identifier: LGPL-2.0-only */ #ifndef KTOOLBARPOPUPACTION_H #define KTOOLBARPOPUPACTION_H #include #include #include #include class QMenu; /** * @class KToolBarPopupAction ktoolbarpopupaction.h KToolBarPopupAction * * This action is a normal action everywhere, except in a toolbar * where it also has a popupmenu (optionally delayed). This action is designed * for history actions (back/forward, undo/redo) and for any other action * that has more detail in a toolbar than in a menu (e.g. tool chooser * with "Other" leading to a dialog...). * * In contrast to KActionMenu, this action is a \e simple menuitem when plugged * into a menu, and has a popup only in a toolbar. * * Use cases include Back/Forward, and Undo/Redo. Simple click is what's most commonly * used, and enough for menus, but in toolbars there is \e also an optional popup * to go back N steps or undo N steps. * * @note Add actions to the popupMenu(), don't use setMenu(). */ class KWIDGETSADDONS_EXPORT KToolBarPopupAction : public QWidgetAction { Q_OBJECT Q_PROPERTY(PopupMode popupMode READ popupMode WRITE setPopupMode) public: /** * The menu popup mode. * * Default is MenuButtonPopup. * * @sa QToolButton::ToolButtonPopupMode * * @since 6.0 */ enum PopupMode { NoPopup = -1, ///< Behave as if the button had no menu. DelayedPopup = QToolButton::DelayedPopup, ///< Clicking anywhere on the toolbar button triggers the default action. ///< Clicking and holding the toolbar button opens the popup menu instead. MenuButtonPopup = QToolButton::MenuButtonPopup, ///< The toolbar button is split in a main button (triggers default action) ///< and an arrow button (opens the popup menu). InstantPopup = QToolButton::InstantPopup, ///< Clicking anywhere on the toolbar button opens the popup menu. }; Q_ENUM(PopupMode) // Not all constructors - because we need an icon, since this action only makes // sense when being plugged at least in a toolbar. /** * Create a KToolBarPopupAction, with a text, an icon, a * parent and a name. * * @param icon The icon to display. * @param text The text that will be displayed. * @param parent This action's parent. */ KToolBarPopupAction(const QIcon &icon, const QString &text, QObject *parent); /** * Destroys the toolbar popup action. */ ~KToolBarPopupAction() override; /** * The popup menu that is shown when clicking (some time) on the toolbar * button. You may want to plug items into it on creation, or connect to * aboutToShow for a more dynamic menu. * * @note menu() is null on this action by default and using setMenu() * will effectively turn this action into a regular action with a submenu. * * @since 6.0 */ QMenu *popupMenu() const; /** * The popup mode of the toolbar button. * * @see setPopupMode() * * @since 6.0 */ PopupMode popupMode() const; /** * Determines the popup mode of the toolbar button. * @see PopupMode * * @since 6.0 */ void setPopupMode(PopupMode popupMode); /** * Reimplemented from QWidgetAction. */ QWidget *createWidget(QWidget *parent) override; private: std::unique_ptr const d; }; #endif