summaryrefslogtreecommitdiffstats
path: root/juk/keydialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'juk/keydialog.cpp')
-rw-r--r--juk/keydialog.cpp204
1 files changed, 204 insertions, 0 deletions
diff --git a/juk/keydialog.cpp b/juk/keydialog.cpp
new file mode 100644
index 00000000..2fe429c1
--- /dev/null
+++ b/juk/keydialog.cpp
@@ -0,0 +1,204 @@
+/***************************************************************************
+ begin : Tue Mar 11 19:00:00 CET 2003
+ copyright : (C) 2003 by Stefan Asserhall
+ email : stefan.asserhall@telia.com
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "keydialog.h"
+
+#include <kconfig.h>
+#include <klocale.h>
+
+#include <qradiobutton.h>
+#include <qvbox.h>
+#include <qwhatsthis.h>
+
+
+// Table of shortcut keys for each action, key group and three or four button modifier
+
+const KeyDialog::KeyInfo KeyDialog::keyInfo[] = {
+ { "PlayPause",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_P, KKey::QtWIN+Qt::ALT+Qt::Key_P },
+ { Qt::Key_MediaPlay, Qt::Key_MediaPlay } } },
+ { "Stop",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_S, KKey::QtWIN+Qt::ALT+Qt::Key_S },
+ { Qt::Key_MediaStop, Qt::Key_MediaStop } } },
+ { "Back",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_Left, KKey::QtWIN+Qt::ALT+Qt::Key_Left },
+ { Qt::Key_MediaPrev, Qt::Key_MediaPrev } } },
+ { "Forward",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_Right, KKey::QtWIN+Qt::ALT+Qt::Key_Right },
+ { Qt::Key_MediaNext, Qt::Key_MediaNext } } },
+ { "ForwardAlbum",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_Up, KKey::QtWIN+Qt::ALT+Qt::Key_Up },
+ { Qt::CTRL+Qt::Key_MediaNext, Qt::CTRL+Qt::Key_MediaNext } } },
+ { "SeekBack",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::SHIFT+Qt::ALT+Qt::Key_Left, KKey::QtWIN+Qt::SHIFT+Qt::ALT+Qt::Key_Left },
+ { Qt::SHIFT+Qt::Key_MediaPrev, Qt::SHIFT+Qt::Key_MediaPrev } } },
+ { "SeekForward",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::SHIFT+Qt::ALT+Qt::Key_Right, KKey::QtWIN+Qt::SHIFT+Qt::ALT+Qt::Key_Right },
+ { Qt::SHIFT+Qt::Key_MediaNext, Qt::SHIFT+Qt::Key_MediaNext } } },
+ { "VolumeUp",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::SHIFT+Qt::Key_Up, KKey::QtWIN+Qt::ALT+Qt::SHIFT+Qt::Key_Up },
+ { Qt::Key_VolumeUp, Qt::Key_VolumeUp } } },
+ { "VolumeDown",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::SHIFT+Qt::Key_Down, KKey::QtWIN+Qt::ALT+Qt::SHIFT+Qt::Key_Down },
+ { Qt::Key_VolumeDown, Qt::Key_VolumeDown } } },
+ { "Mute",
+ { { KShortcut::null(), KShortcut::null() },
+ { Qt::CTRL+Qt::ALT+Qt::Key_M, KKey::QtWIN+Qt::ALT+Qt::Key_M },
+ { Qt::Key_VolumeMute, Qt::Key_VolumeMute } } },
+ { "ShowHide",
+ { { KShortcut::null(), KShortcut::null() },
+ { KShortcut::null(), KShortcut::null() },
+ { KShortcut::null(), KShortcut::null() } } }
+};
+
+const uint KeyDialog::keyInfoCount = sizeof(KeyDialog::keyInfo) / sizeof(KeyDialog::keyInfo[0]);
+
+KeyDialog::KeyDialog(KGlobalAccel *keys, KActionCollection *actionCollection,
+ QWidget *parent, const char *name)
+ : KDialogBase(parent, name, true, i18n("Configure Shortcuts"), Default | Ok | Cancel, Ok)
+{
+ // Read key group from configuration
+
+ int selectedButton;
+
+ KConfigGroup config(KGlobal::config(), "Shortcuts");
+ selectedButton = config.readNumEntry("GlobalKeys", StandardKeys);
+
+ // Create widgets for key chooser - widget stack used to replace key chooser
+
+ QVBox *vbox = new QVBox(this);
+ vbox->setSpacing(KDialog::spacingHint());
+ m_widgetStack = new QWidgetStack(vbox);
+
+ vbox->setStretchFactor(m_widgetStack, 1);
+
+ // Create buttons to select key group
+
+ m_group = new QHButtonGroup(i18n("Global Shortcuts"), vbox);
+ new QRadioButton(i18n("&No keys"), m_group);
+ new QRadioButton(i18n("&Standard keys"), m_group);
+ new QRadioButton(i18n("&Multimedia keys"), m_group);
+ connect(m_group, SIGNAL(clicked(int)), this, SLOT(slotKeys(int)));
+ QWhatsThis::add(m_group,
+ i18n("Here you can select the keys used as global shortcuts to control the player"));
+
+ // Create the key chooser
+
+ setMainWidget(vbox);
+ newDialog(keys, actionCollection, selectedButton);
+}
+
+KeyDialog::~KeyDialog()
+{
+
+}
+
+void KeyDialog::newDialog(KGlobalAccel *keys, KActionCollection *actionCollection,
+ int selectedButton)
+{
+ m_keys = keys;
+ m_actionCollection = actionCollection;
+
+ // Create key chooser and show it in the widget stack
+ m_pKeyChooser = new KKeyChooser(keys, this);
+ m_pKeyChooser->insert(actionCollection);
+ m_widgetStack->addWidget(m_pKeyChooser);
+ m_widgetStack->raiseWidget(m_pKeyChooser);
+ m_group->setButton(selectedButton);
+
+ connect(this, SIGNAL(defaultClicked()), this, SLOT(slotDefault()));
+}
+
+int KeyDialog::configure()
+{
+ // Show the dialog and save configuration if accepted
+
+ int retcode = exec();
+ if(retcode == Accepted) {
+
+ KConfigGroup config(KGlobal::config(), "Shortcuts");
+ config.writeEntry("GlobalKeys", m_group->id(m_group->selected()));
+ KGlobal::config()->sync();
+
+ m_pKeyChooser->save();
+ }
+ return retcode;
+}
+
+void KeyDialog::slotKeys(int group)
+{
+ bool fourModKeys = KGlobalAccel::useFourModifierKeys();
+
+ // Set modifier keys according to key group and modifier keys
+
+ for(uint i = 0; i < keyInfoCount; i++)
+ m_keys->setShortcut(keyInfo[i].action, keyInfo[i].shortcut[group][fourModKeys]);
+
+ // Create a new key chooser to show the keys, and delete the old one
+
+ QWidget *w = m_widgetStack->visibleWidget();
+ newDialog(m_keys, m_actionCollection, group);
+ m_widgetStack->removeWidget(w);
+ delete w;
+}
+
+void KeyDialog::slotDefault()
+{
+ // Select default keys - standard key group
+
+ m_group->setButton(StandardKeys);
+ m_pKeyChooser->allDefault();
+}
+
+int KeyDialog::configure(KGlobalAccel *keys, KActionCollection *actionCollection,
+ QWidget *parent)
+{
+ // Create and show dialog - update connections if accepted
+
+ int retcode = KeyDialog(keys, actionCollection, parent).configure();
+
+ if(retcode == Accepted)
+ keys->updateConnections();
+ return retcode;
+}
+
+void KeyDialog::insert(KGlobalAccel *keys, const QString &action, const QString &label,
+ const QObject *objSlot, const char *methodSlot)
+{
+ KShortcut def3 = KShortcut::null();
+ KShortcut def4 = KShortcut::null();
+
+ // Find and insert a standard key
+
+ for(uint i = 0; i < keyInfoCount; i++) {
+ if(keyInfo[i].action == action) {
+ def3 = keyInfo[i].shortcut[StandardKeys][0];
+ def4 = keyInfo[i].shortcut[StandardKeys][1];
+ break;
+ }
+ }
+ keys->insert(action, label, QString::null, def3, def4, objSlot, methodSlot);
+}
+
+#include "keydialog.moc"