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) : QLineEdit(parent)
{ {
setText(tr("none")); setText(tr("none"));
keyPressedCount = 0;
} }
/** /**
@ -368,72 +369,68 @@ AccelLineEdit::AccelLineEdit ( QWidget * parent )
*/ */
void AccelLineEdit::keyPressEvent ( QKeyEvent * e) void AccelLineEdit::keyPressEvent ( QKeyEvent * e)
{ {
QString txt; QString txtLine = text();
setText(tr("none"));
int key = e->key(); int key = e->key();
Qt::KeyboardModifiers state = e->modifiers(); Qt::KeyboardModifiers state = e->modifiers();
if (key == Qt::Key_Control) // Backspace clears the shortcut
return; // If a modifier is pressed without any other key, return.
else if (key == Qt::Key_Shift) // AltGr is not a modifier but doesn't have a QtSring representation.
return; switch(key) {
else if (key == Qt::Key_Alt) case Qt::Key_Backspace:
return; if (state == Qt::NoModifier){
else if (state == Qt::NoModifier && key == Qt::Key_Backspace) keyPressedCount = 0;
return; // clears the edit field setText(tr("none"));
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;
} }
case Qt::Key_Control:
case Qt::Key_Shift:
case Qt::Key_Alt:
case Qt::Key_Meta:
case Qt::Key_AltGr:
return;
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: protected:
void keyPressEvent ( QKeyEvent * e); void keyPressEvent ( QKeyEvent * e);
private:
int keyPressedCount;
}; };
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------