summaryrefslogtreecommitdiffstats
path: root/kdeui/kkeydialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kkeydialog.h')
-rw-r--r--kdeui/kkeydialog.h407
1 files changed, 407 insertions, 0 deletions
diff --git a/kdeui/kkeydialog.h b/kdeui/kkeydialog.h
new file mode 100644
index 000000000..c7bfc36dc
--- /dev/null
+++ b/kdeui/kkeydialog.h
@@ -0,0 +1,407 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 1997 Nicolas Hadacek <hadacek@kde.org>
+ Copyright (C) 2001,2001 Ellis Whitehead <ellis@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KKEYDIALOG_H__
+#define __KKEYDIALOG_H__
+
+#include <qdict.h>
+#include <kdialogbase.h>
+#include <klistview.h>
+
+class QButtonGroup;
+class QCheckBox;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QRadioButton;
+class KAccel;
+class KAccelActions;
+class KActionCollection;
+class KConfigBase;
+class KGlobalAccel;
+class KKeySequence;
+class KShortcut;
+class KShortcutList;
+class KKeyChooserItem;
+
+/**
+ * @short Widget for configuration of KAccel and KGlobalAccel.
+ *
+ * Configure dictionaries of key/action associations for KAccel and
+ * KGlobalAccel.
+ *
+ * The class takes care of all aspects of configuration, including
+ * handling key conflicts internally. Connect to the allDefault()
+ * slot if you want to set all configurable shortcuts to their
+ * default values.
+ *
+ * @see KKeyDialog
+ * @author Nicolas Hadacek <hadacek@via.ecp.fr>
+ */
+class KDEUI_EXPORT KKeyChooser : public QWidget
+{
+ Q_OBJECT
+ public:
+ enum ActionType { Application, ApplicationGlobal, Standard, Global };
+
+ /**
+ * Constructor.
+ *
+ * @param parent the parent widget for this widget
+ * @param type the ActionType for this KKeyChooser
+ * @param bAllowLetterShortcuts Set to false if unmodified alphanumeric
+ * keys ('A', '1', etc.) are not permissible shortcuts.
+ **/
+ KKeyChooser( QWidget* parent, ActionType type = Application, bool bAllowLetterShortcuts = true );
+ /**
+ * \overload
+ * @param parent parent widget
+ * @param coll the KActionCollection to configure
+ * @param bAllowLetterShortcuts Set to false if unmodified alphanumeric
+ * keys ('A', '1', etc.) are not permissible shortcuts.
+ */
+ KKeyChooser( KActionCollection* coll, QWidget* parent, bool bAllowLetterShortcuts = true );
+
+ KKeyChooser( KAccel* actions, QWidget* parent, bool bAllowLetterShortcuts = true );
+ KKeyChooser( KGlobalAccel* actions, QWidget* parent );
+ KKeyChooser( KShortcutList*, QWidget* parent, ActionType type = Application, bool bAllowLetterShortcuts = true );
+
+ virtual ~KKeyChooser();
+
+ /**
+ * Insert an action collection, i.e. add all its actions to the ones
+ * already associated with the KKeyChooser object.
+ */
+ bool insert( KActionCollection* ); // #### KDE4 : remove me
+ /**
+ * Insert an action collection, i.e. add all its actions to the ones
+ * already associated with the KKeyChooser object.
+ * @param title subtree title of this collection of shortcut.
+ * @since 3.1
+ */
+ bool insert( KActionCollection *, const QString &title);
+
+ void syncToConfig( const QString& sConfigGroup, KConfigBase* pConfig, bool bClearUnset );
+
+ /**
+ * This function writes any shortcut changes back to the original
+ * action set(s).
+ */
+ void commitChanges();
+
+ /**
+ * This commits and then saves the actions to disk.
+ * Any KActionCollection objects with the xmlFile() value set
+ * will be written to an XML file. All other will be written
+ * to the application's rc file.
+ */
+ void save();
+
+ /**
+ * Checks whether the given shortcut conflicts with global keyboard shortcuts.
+ * If yes, and the warnUser argument is true, warns the user and gives them a chance
+ * to reassign the shortcut from the global shortcut.
+ *
+ * @return true if there was conflict (and the user didn't reassign the shortcut)
+ * @param cut the shortcut that will be checked for conflicts
+ * @param warnUser if true, the user will be warned about a conflict and given a chance
+ * to reassign the shortcut
+ * @param parent parent widget for the warning dialog
+ *
+ * @since 3.2
+ */
+ static bool checkGlobalShortcutsConflict( const KShortcut& cut, bool warnUser, QWidget* parent );
+
+ /**
+ * Checks whether the given shortcut conflicts with standard keyboard shortcuts.
+ * If yes, and the warnUser argument is true, warns the user and gives them a chance
+ * to reassign the shortcut from the standard shortcut.
+ *
+ * @return true if there was conflict (and the user didn't reassign the shortcut)
+ * @param cut the shortcut that will be checked for conflicts
+ * @param warnUser if true, the user will be warned about a conflict and given a chance
+ * to reassign the shortcut
+ * @param parent parent widget for the warning dialog
+ *
+ * @since 3.2
+ */
+ static bool checkStandardShortcutsConflict( const KShortcut& cut, bool warnUser, QWidget* parent );
+
+ signals:
+ /**
+ * Emitted when an action's shortcut has been changed.
+ **/
+ void keyChange();
+
+ public slots:
+ /**
+ * Set all keys to their default values (bindings).
+ **/
+ void allDefault();
+
+ /**
+ * Specifies whether to use the 3 or 4 modifier key scheme.
+ * This determines which default is used when the 'Default' button is
+ * clicked.
+ */
+ void setPreferFourModifierKeys( bool preferFourModifierKeys );
+
+ // KDE4 a lot of stuff in this class should be probably private:
+ protected:
+ enum { NoKey = 1, DefaultKey, CustomKey };
+
+ void initGUI( ActionType type, bool bAllowLetterShortcuts );
+ bool insert( KAccel* );
+ bool insert( KGlobalAccel* );
+ bool insert( KShortcutList* );
+ /// @since 3.1
+ void buildListView( uint iList, const QString &title = QString::null );
+
+ void readGlobalKeys();
+
+ void updateButtons();
+ void fontChange( const QFont& _font );
+ void setShortcut( const KShortcut& cut );
+ bool isKeyPresent( const KShortcut& cut, bool warnuser = true );
+ bool isKeyPresentLocally( const KShortcut& cut, KKeyChooserItem* ignoreItem, const QString& warnText );
+ void _warning( const KKeySequence& seq, QString sAction, QString sTitle );
+
+ protected slots:
+ void slotNoKey();
+ void slotDefaultKey();
+ void slotCustomKey();
+ void slotListItemSelected( QListViewItem *item );
+ void capturedShortcut( const KShortcut& cut );
+ void slotSettingsChanged( int );
+ void slotListItemDoubleClicked ( QListViewItem * ipoQListViewItem, const QPoint & ipoQPoint, int c );
+
+ protected:
+ ActionType m_type;
+ bool m_bAllowLetterShortcuts;
+ bool m_bAllowWinKey; // unused KDE4 remove
+ // When set, pressing the 'Default' button will select the aDefaultKeycode4,
+ // otherwise aDefaultKeycode.
+ bool m_bPreferFourModifierKeys;
+
+ QRadioButton* m_prbNone;
+ QRadioButton* m_prbDef;
+ QRadioButton* m_prbCustom;
+
+ private:
+ bool isKeyPresentLocally( const KShortcut& cut, KKeyChooserItem* ignoreItem, bool bWarnUser );
+ static bool promptForReassign( const KKeySequence& cut, const QString& sAction, ActionType action, QWidget* parent );
+ // Remove the key sequences contained in cut from the standard shortcut @p name
+ // which currently has @p origCut as shortcut.
+ static void removeStandardShortcut( const QString& name, KKeyChooser* chooser, const KShortcut &origCut, const KShortcut &cut );
+ // Remove the key sequences contained in cut from the global shortcut @p name
+ // which currently has @p origCut as shortcut.
+ static void removeGlobalShortcut( const QString& name, KKeyChooser* chooser, const KShortcut &origCut, const KShortcut &cut );
+ static void readGlobalKeys( QMap< QString, KShortcut >& map );
+ static bool checkGlobalShortcutsConflict( const KShortcut& cut, bool bWarnUser, QWidget* parent,
+ const QMap< QString, KShortcut >& map, const QString& ignoreAction );
+ // Remove the key sequences contained in cut from this item
+ bool removeShortcut( const QString& name, const KShortcut &cut );
+
+private slots:
+ void captureCurrentItem();
+
+#ifndef KDE_NO_COMPAT
+ public:
+ /**
+ * @obsolete
+ */
+ KKeyChooser( KAccel* actions, QWidget* parent,
+ bool bCheckAgainstStdKeys,
+ bool bAllowLetterShortcuts,
+ bool bAllowWinKey = false );
+ /**
+ * @obsolete
+ */
+ KKeyChooser( KGlobalAccel* actions, QWidget* parent,
+ bool bCheckAgainstStdKeys,
+ bool bAllowLetterShortcuts,
+ bool bAllowWinKey = false );
+
+ public slots:
+ /**
+ * Rebuild list entries based on underlying map.
+ * Use this if you changed the underlying map.
+ */
+ void listSync();
+
+#endif
+ protected:
+ virtual void virtual_hook( int id, void* data );
+ private:
+ class KKeyChooserPrivate *d;
+ friend class KKeyDialog;
+};
+typedef KKeyChooser KKeyChooser;
+
+/**
+ * @short Dialog for configuration of KActionCollection, KAccel, and KGlobalAccel.
+ *
+ * The KKeyDialog class is used for configuring dictionaries of key/action
+ * associations for KActionCollection, KAccel, and KGlobalAccel. It uses the KKeyChooser widget
+ * and offers buttons to set all keys to defaults and invoke on-line help.
+ *
+ * Several static methods are supplied which provide the most convenient interface
+ * to the dialog. The most common and most encouraged use is with KActionCollection.
+ *
+ * \code
+ * KKeyDialog::configure( actionCollection() );
+ * \endcode
+ *
+ * @author Nicolas Hadacek <hadacek@via.ecp.fr>
+ */
+class KDEUI_EXPORT KKeyDialog : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a KKeyDialog called @p name as a child of @p parent.
+ * Set @p bAllowLetterShortcuts to false if unmodified alphanumeric
+ * keys ('A', '1', etc.) are not permissible shortcuts.
+ */
+ KKeyDialog( bool bAllowLetterShortcuts = true, QWidget* parent = 0, const char* name = 0 );
+
+ /**
+ * Destructor. Deletes all resources used by a KKeyDialog object.
+ */
+ virtual ~KKeyDialog();
+
+ /**
+ * Insert an action collection, i.e. add all its actions to the ones
+ * displayed by the dialog.
+ * This method can be useful in applications following the document/view
+ * design, with actions in both the document and the view.
+ * Simply call insert with the action collections of each one in turn.
+ * @return true :)
+ */
+ bool insert( KActionCollection* ); // #### KDE4: remove me
+
+ /**
+ * Insert an action collection, i.e. add all its actions to the ones
+ * displayed by the dialog.
+ * This method can be useful in applications following the document/view
+ * design, with actions in both the document and the view.
+ * Simply call insert with the action collections of each one in turn.
+ *
+ * @param title the title associated with the collection (if null, the
+ * KAboutData::progName() of the collection's instance is used)
+ * @return true :)
+ * @since 3.1
+ */
+ bool insert(KActionCollection *, const QString &title);
+
+ /**
+ * Run the dialog and call commitChanges() if @p bSaveSettings
+ * is true.
+ */
+ bool configure( bool bSaveSettings = true );
+
+ /**
+ * Commit key setting changes so that changed settings actually become active.
+ * This method is implicitly called from configure(bool) if
+ * @p bSaveSettings is true.
+ */
+ void commitChanges();
+
+ /**
+ * Pops up a modal dialog for configuring key settings. The new
+ * shortcut settings will be active if the user presses OK. If
+ * @p bSaveSettings if true, the settings will also be saved back to
+ * the *uirc file which they were intially read from.
+ * @return Accept if the dialog was closed with OK, Reject otherwise.
+ */
+ static int configure( KActionCollection* coll, QWidget* parent = 0, bool bSaveSettings = true );
+
+ /**
+ * This is an overloaded member function, provided for convenience.
+ * It behaves essentially like the above function, except that settings
+ * are saved to a *.rc file using KConfig.
+ */
+ static int configure( KAccel* keys, QWidget* parent = 0, bool bSaveSettings = true );
+
+ /**
+ * This is an overloaded member function, provided for convenience.
+ * It behaves essentially like the above function.
+ */
+ static int configure( KGlobalAccel* keys, QWidget* parent = 0, bool bSaveSettings = true );
+
+
+ /**
+ * This is an overloaded member function, provided for convenience.
+ * It behaves essentially like the above function.
+ *
+ * @param coll the KActionCollection to configure
+ * @param bAllowLetterShortcuts Set to false if unmodified alphanumeric
+ * keys ('A', '1', etc.) are not permissible shortcuts.
+ * @param parent the parent widget to attach to
+ * @param bSaveSettings if true, the settings will also be saved back to
+ * the *uirc file which they were intially read from.
+ */
+ static int configure( KActionCollection* coll, bool bAllowLetterShortcuts, QWidget* parent = 0, bool bSaveSettings = true ); // BCI: merge with bAllowLetterShortcuts = true
+
+ /**
+ * This is an overloaded member function, provided for convenience.
+ * It behaves essentially like the above function.
+ **/
+ static int configure( KAccel* keys, bool bAllowLetterShortcuts, QWidget* parent = 0, bool bSaveSettings = true ); // BCI: merge with bAllowLetterShortcuts = true
+
+ /**
+ * This is an overloaded member function, provided for convenience.
+ * It behaves essentially like the above function.
+ **/
+ static int configure( KGlobalAccel* keys, bool bAllowLetterShortcuts, QWidget* parent = 0, bool bSaveSettings = true ); // BCI: merge with bAllowLetterShortcuts = true
+
+ /**
+ * @deprecated Obsolete.
+ * Please use KKeyDialog::configure instead
+ */
+ static KDE_DEPRECATED int configureKeys( KAccel* keys, bool save_settings = true, QWidget* parent = 0 )
+ { return configure( keys, parent, save_settings ); }
+ /**
+ * @deprecated Obsolete.
+ * Please use KKeyDialog::configure instead
+ */
+ static KDE_DEPRECATED int configureKeys( KGlobalAccel* keys, bool save_settings = true, QWidget* parent = 0 )
+ { return configure( keys, parent, save_settings ); }
+ /**
+ * @deprecated Obsolete.
+ * Please use KKeyDialog::configure instead
+ */
+ static KDE_DEPRECATED int configureKeys( KActionCollection* coll, const QString& /*xmlfile*/,
+ bool save_settings = true, QWidget* parent = 0 )
+ { return configure( coll, parent, save_settings ); }
+
+private:
+ KKeyDialog( KKeyChooser::ActionType, bool bAllowLetterShortcuts = true, QWidget* parent = 0, const char* name = 0 );
+
+ protected:
+ virtual void virtual_hook( int id, void* data );
+
+ private:
+ class KKeyDialogPrivate* d;
+ KKeyChooser* m_pKeyChooser;
+};
+
+#endif // __KKEYDIALOG_H__