Customized keyboard shortcuts now accept up to 4 keys

This commit is contained in:
Simon Pasquet 2014-08-26 10:31:54 -03:00 committed by Yorik van Havre
parent d974d6897b
commit 55cf9ddeaa
2 changed files with 60 additions and 60 deletions

View File

@ -361,6 +361,7 @@ AccelLineEdit::AccelLineEdit ( QWidget * parent )
: QLineEdit(parent)
{
setText(tr("none"));
keyPressedCount = 0;
}
/**
@ -368,72 +369,68 @@ AccelLineEdit::AccelLineEdit ( QWidget * parent )
*/
void AccelLineEdit::keyPressEvent ( QKeyEvent * e)
{
QString txt;
setText(tr("none"));
QString txtLine = text();
int key = e->key();
Qt::KeyboardModifiers state = e->modifiers();
if (key == Qt::Key_Control)
return;
else if (key == Qt::Key_Shift)
return;
else if (key == Qt::Key_Alt)
return;
else if (state == Qt::NoModifier && key == Qt::Key_Backspace)
return; // clears the edit field
// Backspace clears the shortcut
// If a modifier is pressed without any other key, return.
// AltGr is not a modifier but doesn't have a QtSring representation.
switch(key) {
case Qt::Key_Backspace:
if (state == Qt::NoModifier){
keyPressedCount = 0;
setText(tr("none"));
}
case Qt::Key_Control:
case Qt::Key_Shift:
case Qt::Key_Alt:
case Qt::Key_Meta:
case Qt::Key_AltGr:
return;
switch(state)
{
case Qt::ControlModifier:
{
QKeySequence ks(Qt::CTRL+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::AltModifier:
{
QKeySequence ks(Qt::ALT+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::ShiftModifier:
{
QKeySequence ks(Qt::SHIFT+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::ControlModifier+Qt::AltModifier:
{
QKeySequence ks(Qt::CTRL+Qt::ALT+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::ControlModifier+Qt::ShiftModifier:
{
QKeySequence ks(Qt::CTRL+Qt::SHIFT+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::ShiftModifier+Qt::AltModifier:
{
QKeySequence ks(Qt::SHIFT+Qt::ALT+key);
txt += (QString)(ks);
setText(txt);
} break;
case Qt::ControlModifier+Qt::AltModifier+Qt::ShiftModifier:
{
QKeySequence ks(Qt::CTRL+Qt::ALT+Qt::SHIFT+key);
txt += (QString)(ks);
setText(txt);
} break;
default:
{
QKeySequence ks(key);
txt += (QString)(ks);
setText(txt);
} break;
default:
break;
}
// 4 keys are allowed for QShortcut
switch(keyPressedCount) {
case 4:
keyPressedCount = 0;
case 0:
txtLine.clear();
break;
default:
txtLine += QString::fromAscii(",");
break;
}
// Handles modifiers applying a mask.
if ((state & Qt::ControlModifier) == Qt::ControlModifier) {
QKeySequence ks(Qt::CTRL);
txtLine += ks.toString(QKeySequence::NativeText);
}
if (( state & Qt::AltModifier) == Qt::AltModifier) {
QKeySequence ks(Qt::ALT);
txtLine += ks.toString(QKeySequence::NativeText);
}
if (( state & Qt::ShiftModifier) == Qt::ShiftModifier) {
QKeySequence ks(Qt::SHIFT);
txtLine += ks.toString(QKeySequence::NativeText);
}
if (( state & Qt::MetaModifier) == Qt::MetaModifier) {
QKeySequence ks(Qt::META);
txtLine += ks.toString(QKeySequence::NativeText);
}
// Handles normal keys
QKeySequence ks(key);
txtLine += ks.toString(QKeySequence::NativeText);
setText(txtLine);
keyPressedCount ++ ;
}
// ------------------------------------------------------------------------------

View File

@ -126,6 +126,9 @@ public:
protected:
void keyPressEvent ( QKeyEvent * e);
private:
int keyPressedCount;
};
// ------------------------------------------------------------------------------