1
/***************************************************************************
2
begin : Tue Mar 11 19:00:00 CET 2003
3
copyright : (C) 2003 by Stefan Asserhall
4
email : stefan.asserhall@telia.com
5
***************************************************************************/
7
/***************************************************************************
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
14
***************************************************************************/
16
#include "keydialog.h"
21
#include <qradiobutton.h>
23
#include <qwhatsthis.h>
26
// Table of shortcut keys for each action, key group and three or four button modifier
28
const KeyDialog::KeyInfo KeyDialog::keyInfo[] = {
30
{ { KShortcut::null(), KShortcut::null() },
31
{ Qt::CTRL+Qt::ALT+Qt::Key_P, KKey::QtWIN+Qt::ALT+Qt::Key_P },
32
{ Qt::Key_MediaPlay, Qt::Key_MediaPlay } } },
34
{ { KShortcut::null(), KShortcut::null() },
35
{ Qt::CTRL+Qt::ALT+Qt::Key_S, KKey::QtWIN+Qt::ALT+Qt::Key_S },
36
{ Qt::Key_MediaStop, Qt::Key_MediaStop } } },
38
{ { KShortcut::null(), KShortcut::null() },
39
{ Qt::CTRL+Qt::ALT+Qt::Key_Left, KKey::QtWIN+Qt::ALT+Qt::Key_Left },
40
{ Qt::Key_MediaPrev, Qt::Key_MediaPrev } } },
42
{ { KShortcut::null(), KShortcut::null() },
43
{ Qt::CTRL+Qt::ALT+Qt::Key_Right, KKey::QtWIN+Qt::ALT+Qt::Key_Right },
44
{ Qt::Key_MediaNext, Qt::Key_MediaNext } } },
46
{ { KShortcut::null(), KShortcut::null() },
47
{ Qt::CTRL+Qt::ALT+Qt::Key_Up, KKey::QtWIN+Qt::ALT+Qt::Key_Up },
48
{ Qt::CTRL+Qt::Key_MediaNext, Qt::CTRL+Qt::Key_MediaNext } } },
50
{ { KShortcut::null(), KShortcut::null() },
51
{ Qt::CTRL+Qt::SHIFT+Qt::ALT+Qt::Key_Left, KKey::QtWIN+Qt::SHIFT+Qt::ALT+Qt::Key_Left },
52
{ Qt::SHIFT+Qt::Key_MediaPrev, Qt::SHIFT+Qt::Key_MediaPrev } } },
54
{ { KShortcut::null(), KShortcut::null() },
55
{ Qt::CTRL+Qt::SHIFT+Qt::ALT+Qt::Key_Right, KKey::QtWIN+Qt::SHIFT+Qt::ALT+Qt::Key_Right },
56
{ Qt::SHIFT+Qt::Key_MediaNext, Qt::SHIFT+Qt::Key_MediaNext } } },
58
{ { KShortcut::null(), KShortcut::null() },
59
{ Qt::CTRL+Qt::ALT+Qt::SHIFT+Qt::Key_Up, KKey::QtWIN+Qt::ALT+Qt::SHIFT+Qt::Key_Up },
60
{ Qt::Key_VolumeUp, Qt::Key_VolumeUp } } },
62
{ { KShortcut::null(), KShortcut::null() },
63
{ Qt::CTRL+Qt::ALT+Qt::SHIFT+Qt::Key_Down, KKey::QtWIN+Qt::ALT+Qt::SHIFT+Qt::Key_Down },
64
{ Qt::Key_VolumeDown, Qt::Key_VolumeDown } } },
66
{ { KShortcut::null(), KShortcut::null() },
67
{ Qt::CTRL+Qt::ALT+Qt::Key_M, KKey::QtWIN+Qt::ALT+Qt::Key_M },
68
{ Qt::Key_VolumeMute, Qt::Key_VolumeMute } } },
70
{ { KShortcut::null(), KShortcut::null() },
71
{ KShortcut::null(), KShortcut::null() },
72
{ KShortcut::null(), KShortcut::null() } } }
75
const uint KeyDialog::keyInfoCount = sizeof(KeyDialog::keyInfo) / sizeof(KeyDialog::keyInfo[0]);
77
KeyDialog::KeyDialog(KGlobalAccel *keys, KActionCollection *actionCollection,
78
QWidget *parent, const char *name)
79
: KDialogBase(parent, name, true, i18n("Configure Shortcuts"), Default | Ok | Cancel, Ok)
81
// Read key group from configuration
85
KConfigGroup config(KGlobal::config(), "Shortcuts");
86
selectedButton = config.readNumEntry("GlobalKeys", StandardKeys);
88
// Create widgets for key chooser - widget stack used to replace key chooser
90
QVBox *vbox = new QVBox(this);
91
vbox->setSpacing(KDialog::spacingHint());
92
m_widgetStack = new QWidgetStack(vbox);
94
vbox->setStretchFactor(m_widgetStack, 1);
96
// Create buttons to select key group
98
m_group = new QHButtonGroup(i18n("Global Shortcuts"), vbox);
99
new QRadioButton(i18n("&No keys"), m_group);
100
new QRadioButton(i18n("&Standard keys"), m_group);
101
new QRadioButton(i18n("&Multimedia keys"), m_group);
102
connect(m_group, SIGNAL(clicked(int)), this, SLOT(slotKeys(int)));
103
QWhatsThis::add(m_group,
104
i18n("Here you can select the keys used as global shortcuts to control the player"));
106
// Create the key chooser
109
newDialog(keys, actionCollection, selectedButton);
112
KeyDialog::~KeyDialog()
117
void KeyDialog::newDialog(KGlobalAccel *keys, KActionCollection *actionCollection,
121
m_actionCollection = actionCollection;
123
// Create key chooser and show it in the widget stack
124
m_pKeyChooser = new KKeyChooser(keys, this);
125
m_pKeyChooser->insert(actionCollection);
126
m_widgetStack->addWidget(m_pKeyChooser);
127
m_widgetStack->raiseWidget(m_pKeyChooser);
128
m_group->setButton(selectedButton);
130
connect(this, SIGNAL(defaultClicked()), this, SLOT(slotDefault()));
133
int KeyDialog::configure()
135
// Show the dialog and save configuration if accepted
137
int retcode = exec();
138
if(retcode == Accepted) {
140
KConfigGroup config(KGlobal::config(), "Shortcuts");
141
config.writeEntry("GlobalKeys", m_group->id(m_group->selected()));
142
KGlobal::config()->sync();
144
m_pKeyChooser->save();
149
void KeyDialog::slotKeys(int group)
151
bool fourModKeys = KGlobalAccel::useFourModifierKeys();
153
// Set modifier keys according to key group and modifier keys
155
for(uint i = 0; i < keyInfoCount; i++)
156
m_keys->setShortcut(keyInfo[i].action, keyInfo[i].shortcut[group][fourModKeys]);
158
// Create a new key chooser to show the keys, and delete the old one
160
QWidget *w = m_widgetStack->visibleWidget();
161
newDialog(m_keys, m_actionCollection, group);
162
m_widgetStack->removeWidget(w);
166
void KeyDialog::slotDefault()
168
// Select default keys - standard key group
170
m_group->setButton(StandardKeys);
171
m_pKeyChooser->allDefault();
174
int KeyDialog::configure(KGlobalAccel *keys, KActionCollection *actionCollection,
177
// Create and show dialog - update connections if accepted
179
int retcode = KeyDialog(keys, actionCollection, parent).configure();
181
if(retcode == Accepted)
182
keys->updateConnections();
186
void KeyDialog::insert(KGlobalAccel *keys, const QString &action, const QString &label,
187
const QObject *objSlot, const char *methodSlot)
189
KShortcut def3 = KShortcut::null();
190
KShortcut def4 = KShortcut::null();
192
// Find and insert a standard key
194
for(uint i = 0; i < keyInfoCount; i++) {
195
if(keyInfo[i].action == action) {
196
def3 = keyInfo[i].shortcut[StandardKeys][0];
197
def4 = keyInfo[i].shortcut[StandardKeys][1];
201
keys->insert(action, label, QString::null, def3, def4, objSlot, methodSlot);
204
#include "keydialog.moc"