File indexing completed on 2024-03-03 04:08:07

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2007 Andreas Hartmetz <ahartmetz@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 #ifndef KSHORTCUTWIDGET_H
0008 #define KSHORTCUTWIDGET_H
0009 
0010 #include <kxmlgui_export.h>
0011 
0012 #include <QKeySequence>
0013 #include <QList>
0014 #include <QWidget>
0015 #include <memory>
0016 
0017 class KActionCollection;
0018 class KShortcutWidgetPrivate;
0019 
0020 /**
0021  * @class KShortcutWidget kshortcutwidget.h KShortcutWidget
0022  *
0023  * \image html kshortcutwidget.png "KShortcutWidget"
0024  */
0025 class KXMLGUI_EXPORT KShortcutWidget : public QWidget
0026 {
0027     Q_OBJECT
0028     Q_PROPERTY(bool modifierlessAllowed READ isModifierlessAllowed WRITE setModifierlessAllowed)
0029 public:
0030     explicit KShortcutWidget(QWidget *parent = nullptr);
0031     ~KShortcutWidget() override;
0032 
0033     void setModifierlessAllowed(bool allow);
0034     bool isModifierlessAllowed();
0035 
0036     void setClearButtonsShown(bool show);
0037 
0038     QList<QKeySequence> shortcut() const;
0039 
0040     /**
0041      * Set a list of action collections to check against for conflictuous shortcut.
0042      *
0043      * If there is a conflictuous shortcut with a QAction, and that his shortcut can be configured
0044      * (KActionCollection::isShortcutConfigurable() returns true) the user will be prompted for eventually steal
0045      * the shortcut from this action
0046      *
0047      * Global shortcuts are automatically checked for conflicts
0048      *
0049      * Don't forget to call applyStealShortcut to actually steal the shortcut.
0050      *
0051      * @since 4.1
0052      */
0053     void setCheckActionCollections(const QList<KActionCollection *> &actionCollections);
0054 
0055 Q_SIGNALS:
0056     void shortcutChanged(const QList<QKeySequence> &cut);
0057 
0058 public Q_SLOTS:
0059     void setShortcut(const QList<QKeySequence> &cut);
0060     void clearShortcut();
0061 
0062     /**
0063      * Actually remove the shortcut that the user wanted to steal, from the
0064      * action that was using it.
0065      *
0066      * To be called before you apply your changes.
0067      * No shortcuts are stolen until this function is called.
0068      */
0069     void applyStealShortcut();
0070 
0071 private:
0072     friend class KShortcutWidgetPrivate;
0073     std::unique_ptr<KShortcutWidgetPrivate> const d;
0074 };
0075 
0076 #endif // KSHORTCUTWIDGET_H