Subversion Repositories Scribus

Rev

Rev 17864 | Rev 18446 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13761 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
 
14610 cbradney 8
#include <QDomDocument>
9
#include <QFileDialog>
10
#include <QInputDialog>
11
#include <QMessageBox>
13761 cbradney 12
 
14610 cbradney 13
#include "ui/prefs_keyboardshortcuts.h"
14
#include "actionmanager.h"
15
#include "commonstrings.h"
16
#include "pluginmanager.h"
17
#include "prefsmanager.h"
18
#include "prefsstructs.h"
19
#include "prefsfile.h"
20
#include "prefscontext.h"
21
#include "scpaths.h"
22
#include "scplugin.h"
23
#include "scraction.h"
24
#include "util.h"
25
#include "util_icon.h"
26
 
15021 cbradney 27
Prefs_KeyboardShortcuts::Prefs_KeyboardShortcuts(QWidget* parent, ScribusDoc* doc)
14610 cbradney 28
        : Prefs_Pane(parent)
13761 cbradney 29
{
30
        setupUi(this);
14610 cbradney 31
        languageChange();
13761 cbradney 32
 
14610 cbradney 33
        defMenus=ActionManager::defaultMenus();
34
        defNonMenuActions=ActionManager::defaultNonMenuActions();
35
 
36
        QVector< QPair<QString, QStringList> >::Iterator itnmenua = defNonMenuActions->begin();
37
        PluginManager& pluginManager(PluginManager::instance());
38
        QStringList pluginNames(pluginManager.pluginNames(false));
39
        ScPlugin* plugin;
40
        ScActionPlugin* ixplug;
41
        QString pName;
42
        for (int i = 0; i < pluginNames.count(); ++i)
43
        {
44
                pName = pluginNames.at(i);
45
                plugin = pluginManager.getPlugin(pName, true);
46
                Q_ASSERT(plugin); // all the returned names should represent loaded plugins
47
                if (plugin->inherits("ScActionPlugin"))
48
                {
49
                        ixplug = dynamic_cast<ScActionPlugin*>(plugin);
50
                        Q_ASSERT(ixplug);
51
                        ScActionPlugin::ActionInfo ai(ixplug->actionInfo());
52
                        itnmenua->second << ai.name;
53
                }
54
        }
55
 
56
        Q_CHECK_PTR(defMenus);
57
        lviToActionMap.clear();
58
        lviToMenuMap.clear();
59
        keyTable->clear();
60
        keyMap.clear();
61
        //keyMap = oldKeyMap;
62
        Part0 = "";
63
        Part1 = "";
64
        Part2 = "";
65
        Part3 = "";
66
        Part4 = "";
67
        keyCode = 0;
68
        keyDisplay->setMinimumWidth(fontMetrics().width("CTRL+ALT+SHIFT+W"));
69
        keyDisplay->setText("");
70
 
71
        clearSearchButton->setIcon(loadIcon("clear_right.png"));
72
        // signals and slots connections
73
        connect( keyTable, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
74
                         this, SLOT(dispKey(QTreeWidgetItem *, QTreeWidgetItem *)));
75
        connect( noKey, SIGNAL(clicked()), this, SLOT(setNoKey()));
76
        connect( setKeyButton, SIGNAL(clicked()), this, SLOT(setKeyText()));
77
        connect( loadSetButton, SIGNAL(clicked()), this, SLOT(loadKeySetFile()));
78
        connect( importSetButton, SIGNAL(clicked()), this, SLOT(importKeySetFile()));
79
        connect( exportSetButton, SIGNAL(clicked()), this, SLOT(exportKeySetFile()));
80
        connect( resetSetButton, SIGNAL(clicked()), this, SLOT(resetKeySet()));
81
        connect( clearSearchButton, SIGNAL(clicked()), this, SLOT(clearSearchString()));
82
        connect( searchTextLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(applySearch(const QString&)));
83
 
13761 cbradney 84
}
85
 
86
Prefs_KeyboardShortcuts::~Prefs_KeyboardShortcuts()
87
{
88
}
89
 
14610 cbradney 90
void Prefs_KeyboardShortcuts::languageChange()
91
{
92
}
93
 
94
void Prefs_KeyboardShortcuts::restoreDefaults(struct ApplicationPrefs *prefsData)
95
{
96
        keyMap=prefsData->keyShortcutPrefs.KeyActions;
97
        loadableSets->clear();
98
        loadableSets->addItems(scanForSets());
99
        insertActions();
100
        dispKey(0);
101
}
102
 
103
void Prefs_KeyboardShortcuts::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
104
{
105
        prefsData->keyShortcutPrefs.KeyActions=keyMap;
106
}
107
 
108
void Prefs_KeyboardShortcuts::setNoKey()
109
{
110
        if (noKey->isChecked())
111
        {
112
                if (selectedLVI!=0)
113
                {
114
                        selectedLVI->setText(1,"");
115
                        keyMap[lviToActionMap[selectedLVI]].keySequence=QKeySequence();
116
                }
117
                keyDisplay->setText("");
118
                noKey->setChecked(true);
119
        }
120
}
121
 
122
void Prefs_KeyboardShortcuts::loadKeySetFile()
123
{
124
        if (keySetList.contains(loadableSets->currentText()))
125
                importKeySet(keySetList[loadableSets->currentText()]);
126
}
127
 
128
void Prefs_KeyboardShortcuts::importKeySetFile()
129
{
130
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
131
        QString currentPath = dirs->get("keymapprefs_import", ScPaths::instance().shareDir() + "keysets/");
132
        QString s = QFileDialog::getOpenFileName(this, tr("Select a Key set file to read"), currentPath, tr("Key Set XML Files (*.xml)"));
133
        if (!s.isEmpty())
134
                importKeySet(s);
135
}
136
void Prefs_KeyboardShortcuts::exportKeySetFile()
137
{
138
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
139
        QString currentPath= dirs->get("keymapprefs_export", ".");
140
        QString s = QFileDialog::getSaveFileName(this, tr("Select a Key set file to save to"), currentPath, tr("Key Set XML Files (*.xml)") );
141
        if (!s.isEmpty())
142
                exportKeySet(s);
143
}
144
 
145
void Prefs_KeyboardShortcuts::importKeySet(QString filename)
146
{
147
        searchTextLineEdit->clear();
148
        QFileInfo fi = QFileInfo(filename);
149
        if (fi.exists())
150
        {
151
                //import the file into qdomdoc
152
                QDomDocument doc( "keymapentries" );
153
                QFile file1( filename );
154
                if ( !file1.open( QIODevice::ReadOnly ) )
155
                        return;
156
                QTextStream ts(&file1);
157
                ts.setCodec("UTF-8");
158
                QString errorMsg;
159
                int eline;
160
                int ecol;
161
                if ( !doc.setContent( ts.readAll(), &errorMsg, &eline, &ecol ))
162
                {
18194 fschmid 163
                        qDebug("%s", QString("Could not open key set file: %1\nError:%2 at line: %3, row: %4").arg(filename).arg(errorMsg).arg(eline).arg(ecol).toLatin1().constData());
14610 cbradney 164
                        file1.close();
165
                        return;
166
                }
167
                file1.close();
168
                //load the file now
169
                QDomElement docElem = doc.documentElement();
170
                if (docElem.tagName()=="shortcutset" && docElem.hasAttribute("name"))
171
                {
172
                        QDomAttr keysetAttr = docElem.attributeNode( "name" );
173
 
174
                        //clear current menu entries
175
                        for (QMap<QString,Keys>::Iterator it=keyMap.begin(); it!=keyMap.end(); ++it)
176
                                it.value().keySequence = QKeySequence();
177
 
178
                        //load in new set
179
                        QDomNode n = docElem.firstChild();
180
                        while( !n.isNull() )
181
                        {
182
                                QDomElement e = n.toElement(); // try to convert the node to an element.
183
                                if( !e.isNull() )
184
                                {
185
                                        if (e.hasAttribute("name")  && e.hasAttribute( "shortcut" ))
186
                                        {
187
                                                QDomAttr nameAttr = e.attributeNode( "name" );
188
                                                QDomAttr shortcutAttr = e.attributeNode( "shortcut" );
189
                                                if (keyMap.contains(nameAttr.value()))
190
                                                        keyMap[nameAttr.value()].keySequence=QKeySequence(shortcutAttr.value());
191
                                        }
192
                                }
193
                                n = n.nextSibling();
194
                        }
195
                }
196
        }
197
        insertActions();
198
}
199
 
200
bool Prefs_KeyboardShortcuts::exportKeySet(QString filename)
201
{
202
        QFileInfo fi = QFileInfo(filename);
203
        QString exportFileName;
204
        if (filename.endsWith(".xml"))
205
                exportFileName = filename;
206
        else
207
                exportFileName = filename+".xml";
208
        if (overwrite(this, exportFileName))
209
        {
210
                bool ok;
211
                QString setName = QInputDialog::getText(this, tr("Export Keyboard Shortcuts to File"), tr("Enter the name of the shortcut set:"), QLineEdit::Normal, QString::null, &ok);
212
                if (!( ok && !setName.isEmpty()) )
213
                        return false;
214
 
215
                QDomDocument doc( "keymapentries" );
216
                QString keyset=QString("<shortcutset name=\"%1\"></shortcutset>").arg(setName);
217
                doc.setContent(keyset);
218
                QDomElement keySetElement=doc.documentElement();
219
                QMap<QString,Keys>::Iterator itEnd=keyMap.end();
220
                for (QMap<QString,Keys>::Iterator it=keyMap.begin(); it!=itEnd; ++it)
221
                {
222
                        if (it.value().keySequence.isEmpty() && it.key().isEmpty())
223
                                continue;
17864 jghali 224
                        QDomElement function_shortcut = doc.createElement("function");
225
                        function_shortcut.setAttribute("name", it.key());
226
                        function_shortcut.setAttribute("shortcut", getKeyText(it.value().keySequence));
14610 cbradney 227
                        keySetElement.appendChild(function_shortcut);
228
                }
229
                QFile f(filename);
230
                if(!f.open(QIODevice::WriteOnly))
231
                        return false;
232
                QDataStream s(&f);
233
                QByteArray xmltag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
234
                s.writeRawData(xmltag.data(), xmltag.length());
235
                QByteArray xmldoc = doc.toByteArray(4);
236
                s.writeRawData(xmldoc, xmldoc.length());
237
                f.close();
238
        }
239
        return true;
240
}
241
 
242
void Prefs_KeyboardShortcuts::resetKeySet()
243
{
244
        QString location=ScPaths::instance().shareDir();
16577 craig 245
        QString defaultKeySetFileName=QDir::toNativeSeparators(location+"keysets/scribus15.xml");
14610 cbradney 246
        importKeySet(defaultKeySetFileName);
247
}
248
 
249
QStringList Prefs_KeyboardShortcuts::scanForSets()
250
{
251
        keySetList.clear();
252
        QString location=ScPaths::instance().shareDir();
16577 craig 253
        QString keySetLocation=QDir::toNativeSeparators(location+"keysets/");
14610 cbradney 254
        QDir keySetsDir(keySetLocation, "*.xml", QDir::Name, QDir::Files | QDir::NoSymLinks);
255
        if ((keySetsDir.exists()) && (keySetsDir.count() != 0))
256
        {
257
                QStringList appNames;
258
                for (uint fileCounter = 0; fileCounter < keySetsDir.count(); ++fileCounter)
259
                {
16577 craig 260
                        QString filename=QDir::toNativeSeparators(location+"keysets/"+keySetsDir[fileCounter]);
14610 cbradney 261
 
262
                        QDomDocument doc( "keymapentries" );
263
                        QFile file( filename );
264
                        if ( !file.open( QIODevice::ReadOnly ) )
265
                                continue;
266
                        QString errorMsg;
267
                        int eline;
268
                        int ecol;
269
 
270
                        if ( !doc.setContent( &file, &errorMsg, &eline, &ecol ))
271
                        {
18194 fschmid 272
                                qDebug("%s", QString("Could not open key set file: %1\nError:%2 at line: %3, row: %4").arg(keySetsDir[fileCounter]).arg(errorMsg).arg(eline).arg(ecol).toLatin1().constData());
14610 cbradney 273
                                file.close();
274
                                continue;
275
                        }
276
                        file.close();
277
 
278
                        QDomElement docElem = doc.documentElement();
279
                        if (docElem.tagName()=="shortcutset" && docElem.hasAttribute("name"))
280
                        {
281
                                QDomAttr nameAttr = docElem.attributeNode( "name" );
282
                                appNames.append(nameAttr.value());
283
                                keySetList.insert(nameAttr.value(), filename);
284
                        }
285
                }
286
                return QStringList(appNames);
287
        }
288
        return QStringList();
289
}
290
 
18194 fschmid 291
QString Prefs_KeyboardShortcuts::getKeyText(QKeySequence KeyC)
14610 cbradney 292
{
18194 fschmid 293
#ifdef USE_QT5
294
        return KeyC.toString();
295
#else
14610 cbradney 296
        if ((KeyC & ~(Qt::META | Qt::CTRL | Qt::ALT | Qt::SHIFT)) == 0)
297
                return "";
298
        // on OSX Qt translates modifiers to forsaken symbols, arrows and the like
299
        // we prefer plain English
300
        QString res;
301
        if ((KeyC & Qt::META) != 0)
17864 jghali 302
                res += "Meta+";
303
        if ((KeyC & Qt::CTRL) != 0)
304
                res += "Ctrl+";
305
        if ((KeyC & Qt::ALT) != 0)
306
                res += "Alt+";
307
        if ((KeyC & Qt::SHIFT) != 0)
308
                res += "Shift+";
309
        return res + QString(QKeySequence(KeyC & ~(Qt::META | Qt::CTRL | Qt::ALT | Qt::SHIFT)));
18194 fschmid 310
#endif
17864 jghali 311
}
312
 
18194 fschmid 313
QString Prefs_KeyboardShortcuts::getTrKeyText(QKeySequence KeyC)
17864 jghali 314
{
18194 fschmid 315
#ifdef USE_QT5
316
        return KeyC.toString();
317
#else
17864 jghali 318
        if ((KeyC & ~(Qt::META | Qt::CTRL | Qt::ALT | Qt::SHIFT)) == 0)
319
                return "";
320
        // on OSX Qt translates modifiers to forsaken symbols, arrows and the like
321
        // we prefer plain English
322
        QString res;
323
        if ((KeyC & Qt::META) != 0)
17663 craig 324
                res += CommonStrings::metaModifier + "+";
14610 cbradney 325
        if ((KeyC & Qt::CTRL) != 0)
17663 craig 326
                res += CommonStrings::controlModifier + "+";
14610 cbradney 327
        if ((KeyC & Qt::ALT) != 0)
17663 craig 328
                res += CommonStrings::altModifier + "+";
14610 cbradney 329
        if ((KeyC & Qt::SHIFT) != 0)
17663 craig 330
                res += CommonStrings::shiftModifier + "+";
14610 cbradney 331
        return res + QString(QKeySequence(KeyC & ~(Qt::META | Qt::CTRL | Qt::ALT | Qt::SHIFT)));
18194 fschmid 332
#endif
14610 cbradney 333
}
334
 
335
void Prefs_KeyboardShortcuts::setKeyText()
336
{
337
        if (keyTable->currentItem()==0)
338
        {
339
                setKeyButton->setChecked(false);
340
                return;
341
        }
342
        if (setKeyButton->isChecked())
343
        {
344
                keyCode = 0;
345
                Part0 = "";
346
                Part1 = "";
347
                Part2 = "";
348
                Part3 = "";
349
                Part4 = "";
350
                grabKeyboard();
351
        }
352
        else
353
                releaseKeyboard();
354
}
355
 
356
void Prefs_KeyboardShortcuts::insertActions()
357
{
358
        lviToActionMap.clear();
359
        lviToMenuMap.clear();
360
        keyTable->clear();
361
        bool first, firstMenu=true;
362
        QTreeWidgetItem *currLVI = NULL;
363
        QTreeWidgetItem *currMenuLVI = NULL;
364
        QTreeWidgetItem *prevLVI = NULL;
365
        QTreeWidgetItem *prevMenuLVI = NULL;
366
        for (QVector< QPair<QString, QStringList> >::Iterator itmenu = defMenus->begin(); itmenu != defMenus->end(); ++itmenu )
367
        {
368
                if (firstMenu)
369
                {
370
                        currMenuLVI = new QTreeWidgetItem(keyTable);
371
                        firstMenu = false;
372
                }
373
                else
374
                        currMenuLVI = new QTreeWidgetItem(keyTable, prevMenuLVI);
375
                Q_CHECK_PTR(currMenuLVI);
376
                lviToMenuMap.append(currMenuLVI);
377
                currMenuLVI->setText(0, itmenu->first);
378
                currMenuLVI->setExpanded(true);
379
                prevMenuLVI=currMenuLVI;
380
                first=true;
381
                currLVI=0;
382
                prevLVI=0;
383
                for ( QStringList::Iterator it = itmenu->second.begin(); it != itmenu->second.end(); ++it )
384
                {
385
                        if (first)
386
                        {
387
                                currLVI = new QTreeWidgetItem(currMenuLVI);
388
                                first = false;
389
                        }
390
                        else
391
                                currLVI = new QTreeWidgetItem(currMenuLVI, prevLVI);
392
                        Q_CHECK_PTR(currLVI);
393
                        lviToActionMap.insert(currLVI, *it);
394
                        currLVI->setText(0, keyMap[*it].cleanMenuText);
18194 fschmid 395
#ifdef USE_QT5
396
                        currLVI->setText(1, keyMap[*it].keySequence.toString());
397
#else
14610 cbradney 398
                        currLVI->setText(1, keyMap[*it].keySequence);
18194 fschmid 399
#endif
14610 cbradney 400
                        prevLVI=currLVI;
401
                }
402
        }
403
        //Non menu actions
404
        for (QVector< QPair<QString, QStringList> >::Iterator itmenu = defNonMenuActions->begin(); itmenu != defNonMenuActions->end(); ++itmenu )
405
        {
406
                if (firstMenu)
407
                {
408
                        currMenuLVI = new QTreeWidgetItem(keyTable);
409
                        firstMenu = false;
410
                }
411
                else
412
                        currMenuLVI = new QTreeWidgetItem(keyTable, prevMenuLVI);
413
                Q_CHECK_PTR(currMenuLVI);
414
                lviToMenuMap.append(currMenuLVI);
415
                currMenuLVI->setText(0, itmenu->first);
416
                currMenuLVI->setExpanded(true);
417
                prevMenuLVI=currMenuLVI;
418
                first=true;
419
                currLVI=0;
420
                prevLVI=0;
421
                for ( QStringList::Iterator it = itmenu->second.begin(); it != itmenu->second.end(); ++it )
422
                {
423
                        if (first)
424
                        {
425
                                currLVI=new QTreeWidgetItem(currMenuLVI);
426
                                first=false;
427
                        }
428
                        else
429
                                currLVI=new QTreeWidgetItem(currMenuLVI, prevLVI);
430
                        Q_CHECK_PTR(currLVI);
431
                        lviToActionMap.insert(currLVI, *it);
432
                        currLVI->setText(0, keyMap[*it].cleanMenuText);
18194 fschmid 433
#ifdef USE_QT5
434
                        currLVI->setText(1, keyMap[*it].keySequence.toString());
435
#else
14610 cbradney 436
                        currLVI->setText(1, keyMap[*it].keySequence);
18194 fschmid 437
#endif
14610 cbradney 438
                        prevLVI=currLVI;
439
                }
440
        }
441
        keyTable->resizeColumnToContents(0);
442
}
443
 
444
void Prefs_KeyboardShortcuts::applySearch( const QString & newss )
445
{
446
        //Must run this as if newss is not empty and we go to the next for loop, the set visible doesnt work
447
        for (QList<QTreeWidgetItem*>::iterator it=lviToMenuMap.begin(); it!=lviToMenuMap.end(); ++it)
448
                (*it)->setHidden(false);
449
        if (newss.isEmpty())
450
        {
451
                for (QMap<QTreeWidgetItem*, QString>::iterator it=lviToActionMap.begin(); it!=lviToActionMap.end(); ++it)
452
                        it.key()->setHidden(false);
453
                return;
454
        }
455
        //Seem to need to do this.. isOpen doesnt seem to do what it says
456
        for (QMap<QTreeWidgetItem*, QString>::iterator it=lviToActionMap.begin(); it!=lviToActionMap.end(); ++it)
457
        {
458
                if (it.key()->text(0).contains(newss, Qt::CaseInsensitive))
459
                        it.key()->setHidden(false);
460
                else
461
                        it.key()->setHidden(true);
462
        }
463
}
464
 
465
void Prefs_KeyboardShortcuts::dispKey(QTreeWidgetItem* qlvi, QTreeWidgetItem*)
466
{
467
        if (qlvi!=0 && lviToActionMap.contains(qlvi))
468
        {
469
                selectedLVI=qlvi;
470
                QString actionName=lviToActionMap[qlvi];
471
                if (actionName.isEmpty())
472
                        return;
18194 fschmid 473
#ifdef USE_QT5
474
                keyDisplay->setText(keyMap[actionName].keySequence.toString());
475
#else
14610 cbradney 476
                keyDisplay->setText(keyMap[actionName].keySequence);
18194 fschmid 477
#endif
14610 cbradney 478
                if (keyMap[actionName].keySequence.isEmpty())
479
                        noKey->setChecked(true);
480
                else
481
                        userDef->setChecked(true);
482
        }
483
        else
484
        {
485
                noKey->setChecked(true);
486
                keyDisplay->setText("");
487
                selectedLVI=0;
488
        }
489
}
490
 
491
bool Prefs_KeyboardShortcuts::event( QEvent* ev )
492
{
493
        bool ret = QWidget::event( ev );
494
        if ( ev->type() == QEvent::KeyPress )
495
                keyPressEvent((QKeyEvent*)ev);
496
        if ( ev->type() == QEvent::KeyRelease )
497
                keyReleaseEvent((QKeyEvent*)ev);
498
        return ret;
499
}
500
 
501
void Prefs_KeyboardShortcuts::keyPressEvent(QKeyEvent *k)
502
{
503
        if (setKeyButton->isChecked())
504
        {
505
                QStringList tl;
506
                Part4 = "";
507
                if (!keyDisplay->text().isEmpty())
508
                {
509
                        tl = keyDisplay->text().split("+", QString::SkipEmptyParts);
510
                        if (tl.count() > 0)
511
                        {
17295 jghali 512
                                Part4 = tl.last();
17663 craig 513
                                if (Part4 == CommonStrings::altModifier ||
17664 craig 514
                                                Part4 == CommonStrings::controlModifier ||
17663 craig 515
                                                Part4 == CommonStrings::shiftModifier ||
516
                                                Part4 == CommonStrings::metaModifier
517
                                                )
14610 cbradney 518
                                        Part4 = "";
519
                        }
520
                }
521
                switch (k->key())
522
                {
523
                        case Qt::Key_Meta:
17663 craig 524
                                Part0 = CommonStrings::metaModifier+"+";
14610 cbradney 525
                                keyCode |= Qt::META;
526
                                break;
527
                        case Qt::Key_Shift:
17663 craig 528
                                Part3 = CommonStrings::shiftModifier+"+";
14610 cbradney 529
                                keyCode |= Qt::SHIFT;
530
                                break;
531
                        case Qt::Key_Alt:
17663 craig 532
                                Part2 = CommonStrings::altModifier+"+";
14610 cbradney 533
                                keyCode |= Qt::ALT;
534
                                break;
535
                        case Qt::Key_Control:
17663 craig 536
                                Part1 = CommonStrings::controlModifier+"+";
14610 cbradney 537
                                keyCode |= Qt::CTRL;
538
                                break;
539
                        default:
540
                                keyCode |= k->key();
17864 jghali 541
                                keyDisplay->setText(getTrKeyText(keyCode));
14610 cbradney 542
                                releaseKeyboard();
543
                                if (checkKey(keyCode))
544
                                {
545
                                        QMessageBox::information(this, CommonStrings::trWarning,
17663 craig 546
                                                                                        tr("The %1 key sequence is already in use by \"%2\"")
17864 jghali 547
                                                                                                .arg(getTrKeyText(keyCode))
17663 craig 548
                                                                                                .arg(getAction(keyCode)),
14610 cbradney 549
                                                                                        CommonStrings::tr_OK);
18194 fschmid 550
#ifdef USE_QT5
551
                                        selectedLVI->setText(1,keyMap[lviToActionMap[selectedLVI]].keySequence.toString());
552
                                        keyDisplay->setText(keyMap[lviToActionMap[selectedLVI]].keySequence.toString());
553
#else
14610 cbradney 554
                                        selectedLVI->setText(1,keyMap[lviToActionMap[selectedLVI]].keySequence);
555
                                        keyDisplay->setText(keyMap[lviToActionMap[selectedLVI]].keySequence);
18194 fschmid 556
#endif
14610 cbradney 557
                                }
558
                                else
559
                                {
560
                                        QKeySequence newKeySequence(keyCode);
18194 fschmid 561
#ifdef USE_QT5
562
                                        selectedLVI->setText(1, newKeySequence.toString());
563
#else
14610 cbradney 564
                                        selectedLVI->setText(1, QString(newKeySequence));
18194 fschmid 565
#endif
14610 cbradney 566
                                        keyMap[lviToActionMap[selectedLVI]].keySequence=newKeySequence;
567
                                        userDef->setChecked(true);
568
                                }
569
                                setKeyButton->setChecked(false);
570
                }
571
        }
572
        if (setKeyButton->isChecked())
573
                keyDisplay->setText(Part0+Part1+Part2+Part3+Part4);
574
}
575
 
576
void Prefs_KeyboardShortcuts::keyReleaseEvent(QKeyEvent *k)
577
{
578
        if (setKeyButton->isChecked())
579
        {
580
                Part4 = "";
581
                if (!keyDisplay->text().isEmpty())
582
                {
583
                        QStringList tl;
584
                        tl = keyDisplay->text().split("+", QString::SkipEmptyParts);
585
                        if (tl.count() > 0)
586
                        {
17295 jghali 587
                                Part4 = tl.last();
17663 craig 588
                                if (Part4 == CommonStrings::altModifier ||
17664 craig 589
                                                Part4 == CommonStrings::controlModifier ||
17663 craig 590
                                                Part4 == CommonStrings::shiftModifier ||
591
                                                Part4 == CommonStrings::metaModifier
592
                                                )
14610 cbradney 593
                                        Part4 = "";
594
                        }
595
                }
596
                if (k->key() == Qt::Key_Meta)
597
                {
598
                        Part0 = "";
599
                        keyCode &= ~Qt::META;
600
                }
601
                if (k->key() == Qt::Key_Shift)
602
                {
603
                        Part3 = "";
604
                        keyCode &= ~Qt::SHIFT;
605
                }
606
                if (k->key() == Qt::Key_Alt)
607
                {
608
                        Part2 = "";
609
                        keyCode &= ~Qt::ALT;
610
                }
611
                if (k->key() == Qt::Key_Control)
612
                {
613
                        Part1 = "";
614
                        keyCode &= ~Qt::CTRL;
615
                }
616
                keyDisplay->setText(Part0+Part1+Part2+Part3+Part4);
617
        }
618
}
619
 
17663 craig 620
QString Prefs_KeyboardShortcuts::getAction(int code)
621
{
622
        QString ret = "";
623
        QKeySequence key = QKeySequence(code);
624
        for (QMap<QString,Keys>::Iterator it=keyMap.begin(); it!=keyMap.end(); ++it)
625
        {
626
                if (key.matches(it.value().keySequence) != QKeySequence::NoMatch)
627
                {
628
                        ret = it->cleanMenuText;
629
                        break;
630
                }
631
        }
632
        return ret;
633
}
634
 
14610 cbradney 635
bool Prefs_KeyboardShortcuts::checkKey(int code)
636
{
637
        bool ret = false;
638
        QKeySequence key = QKeySequence(code);
639
        for (QMap<QString,Keys>::Iterator it=keyMap.begin(); it!=keyMap.end(); ++it)
640
        {
641
                if (key.matches(it.value().keySequence) != QKeySequence::NoMatch)
642
                {
643
                        ret = true;
644
                        break;
645
                }
646
        }
647
        return ret;
648
}
649
 
650
void Prefs_KeyboardShortcuts::clearSearchString( )
651
{
652
        searchTextLineEdit->clear();
653
}
654