1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2007 Andreas Hartmetz <ahartmetz@gmail.com>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7#ifndef KSHORTCUTWIDGET_H
8#define KSHORTCUTWIDGET_H
9
10#include <kxmlgui_export.h>
11
12#include <QKeySequence>
13#include <QList>
14#include <QWidget>
15#include <memory>
16
17class KActionCollection;
18class KShortcutWidgetPrivate;
19
20/*!
21 * \class KShortcutWidget
22 * \inmodule KXmlGui
23 *
24 * Provides a widget that lets the user assign a main shortcut
25 * and an alternate shortcut for a certain action.
26 *
27 * \image kshortcutwidget.png "KShortcutWidget"
28 */
29class KXMLGUI_EXPORT KShortcutWidget : public QWidget
30{
31 Q_OBJECT
32
33 /*!
34 * \property KShortcutWidget::modifierlessAllowed
35 */
36 Q_PROPERTY(bool modifierlessAllowed READ isModifierlessAllowed WRITE setModifierlessAllowed)
37public:
38 /*!
39 * \brief Creates a new shortcut widget as a child of \a parent.
40 */
41 explicit KShortcutWidget(QWidget *parent = nullptr);
42 /*!
43 * \brief Destructs the shortcut widget.
44 */
45 ~KShortcutWidget() override;
46
47 /*!
48 * \brief Sets whether to \a allow a shortcut
49 * that doesn't include a modifier key.
50 */
51 void setModifierlessAllowed(bool allow);
52
53 /*!
54 * \brief Returns whether the set widget shortcut
55 * can be set without including a modifier key.
56 */
57 bool isModifierlessAllowed();
58
59 /*!
60 * \brief Sets whether to \a show the clear buttons next to the
61 * main and alternate shortcuts of the widget.
62 */
63 void setClearButtonsShown(bool show);
64
65 /*!
66 * \brief Returns the set shortcut.
67 */
68 QList<QKeySequence> shortcut() const;
69
70 /*!
71 * \brief Sets a list of \a actionCollections to check against
72 * for a conflictuous shortcut.
73 *
74 * If there is a conflictuous shortcut with a QAction,
75 * and that this shortcut can be configured
76 * (that is, KActionCollection::isShortcutConfigurable() returns \c true)
77 * the user will be prompted to eventually steal the shortcut from this action.
78 *
79 * Global shortcuts are automatically checked for conflicts.
80 *
81 * Don't forget to call applyStealShortcut() to actually steal the shortcut.
82 *
83 * \since 4.1
84 */
85 void setCheckActionCollections(const QList<KActionCollection *> &actionCollections);
86
87Q_SIGNALS:
88 /*!
89 * \brief Emitted when the given shortcut \a cut has changed.
90 */
91 void shortcutChanged(const QList<QKeySequence> &cut);
92
93public Q_SLOTS:
94 /*!
95 * \brief Sets the given shortcut \a cut to the widget.
96 */
97 void setShortcut(const QList<QKeySequence> &cut);
98 /*!
99 * \brief Unassigns the widget's shortcut.
100 */
101 void clearShortcut();
102
103 /*!
104 * \brief Actually remove the shortcut that the user wanted to steal,
105 * from the action that was using it.
106 *
107 * To be called before you apply your changes.
108 * No shortcuts are stolen until this function is called.
109 */
110 void applyStealShortcut();
111
112private:
113 friend class KShortcutWidgetPrivate;
114 std::unique_ptr<KShortcutWidgetPrivate> const d;
115};
116
117#endif // KSHORTCUTWIDGET_H
118

source code of kxmlgui/src/kshortcutwidget.h