Added option for alternate mouse shortcuts with defaults that match LDD.

This commit is contained in:
Leonardo Zide 2017-07-11 14:25:06 -07:00
parent 42e63cace2
commit f5f98994bb
4 changed files with 128 additions and 49 deletions

View file

@ -131,14 +131,24 @@ bool lcKeyboardShortcuts::Load(QTextStream& Stream)
void lcMouseShortcuts::Reset()
{
memset(mShortcuts, 0, sizeof(mShortcuts));
mShortcuts[LC_TOOL_ROTATE_VIEW].Modifiers = Qt::AltModifier;
mShortcuts[LC_TOOL_ROTATE_VIEW].Button = Qt::LeftButton;
mShortcuts[LC_TOOL_ROTATE_VIEW].Modifiers1 = Qt::AltModifier;
mShortcuts[LC_TOOL_ROTATE_VIEW].Button1 = Qt::LeftButton;
mShortcuts[LC_TOOL_ROTATE_VIEW].Modifiers2 = Qt::NoModifier;
mShortcuts[LC_TOOL_ROTATE_VIEW].Button2 = Qt::RightButton;
#if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 0))
mShortcuts[LC_TOOL_PAN].Modifiers = Qt::AltModifier;
mShortcuts[LC_TOOL_PAN].Button = Qt::MiddleButton;
mShortcuts[LC_TOOL_PAN].Modifiers1 = Qt::AltModifier;
mShortcuts[LC_TOOL_PAN].Button1 = Qt::MiddleButton;
mShortcuts[LC_TOOL_PAN].Modifiers2 = Qt::ShiftModifier;
mShortcuts[LC_TOOL_PAN].Button2 = Qt::RightButton;
#else
mShortcuts[LC_TOOL_PAN].Modifiers1 = Qt::ShiftModifier;
mShortcuts[LC_TOOL_PAN].Button1 = Qt::RightButton;
#endif
mShortcuts[LC_TOOL_ZOOM].Modifiers = Qt::AltModifier;
mShortcuts[LC_TOOL_ZOOM].Button = Qt::RightButton;
mShortcuts[LC_TOOL_ZOOM].Modifiers1 = Qt::AltModifier;
mShortcuts[LC_TOOL_ZOOM].Button1 = Qt::RightButton;
}
bool lcMouseShortcuts::Save(QStringList& Shortcuts)
@ -147,14 +157,22 @@ bool lcMouseShortcuts::Save(QStringList& Shortcuts)
for (int ToolIdx = 0; ToolIdx < LC_NUM_TOOLS; ToolIdx++)
{
int ButtonIndex = 0;
for (int Button = mShortcuts[ToolIdx].Button; Button; Button >>= 1)
ButtonIndex++;
int ButtonIndex1 = 0;
for (int Button1 = mShortcuts[ToolIdx].Button1; Button1; Button1 >>= 1)
ButtonIndex1++;
if (!ButtonIndex)
if (!ButtonIndex1)
continue;
QString Shortcut = QKeySequence(mShortcuts[ToolIdx].Modifiers | (Qt::Key_0 + ButtonIndex)).toString(QKeySequence::PortableText);
QString Shortcut = QKeySequence(mShortcuts[ToolIdx].Modifiers1 | (Qt::Key_0 + ButtonIndex1)).toString(QKeySequence::PortableText);
int ButtonIndex2 = 0;
for (int Button2 = mShortcuts[ToolIdx].Button2; Button2; Button2 >>= 1)
ButtonIndex2++;
if (ButtonIndex2)
Shortcut += ',' + QKeySequence(mShortcuts[ToolIdx].Modifiers2 | (Qt::Key_0 + ButtonIndex2)).toString(QKeySequence::PortableText);
Shortcuts << QString::fromLatin1(gToolNames[ToolIdx]) + QLatin1String("=") + Shortcut;
}
@ -182,14 +200,32 @@ bool lcMouseShortcuts::Load(const QStringList& Shortcuts)
if (ToolIdx == LC_NUM_TOOLS)
continue;
QKeySequence KeySequence(Shortcut.mid(Equals + 1));
QStringList Shortcuts = Shortcut.mid(Equals + 1).split(',');
bool AddedShortcut = false;
if (KeySequence.isEmpty())
continue;
for (const QString& Shortcut : Shortcuts)
{
QKeySequence KeySequence(Shortcut.mid(Equals + 1));
int ShortcutKey = KeySequence[0];
mShortcuts[ToolIdx].Modifiers = (Qt::KeyboardModifier)(ShortcutKey & Qt::KeyboardModifierMask);
mShortcuts[ToolIdx].Button = (Qt::MouseButton)(1 << ((ShortcutKey & ~Qt::KeyboardModifierMask) - Qt::Key_0 - 1));
if (KeySequence.isEmpty())
continue;
int ShortcutKey = KeySequence[0];
Qt::KeyboardModifiers Modifiers = (Qt::KeyboardModifier)(ShortcutKey & Qt::KeyboardModifierMask);
Qt::MouseButton Button = (Qt::MouseButton)(1 << ((ShortcutKey & ~Qt::KeyboardModifierMask) - Qt::Key_0 - 1));
if (!AddedShortcut)
{
mShortcuts[ToolIdx].Modifiers1 = Modifiers;
mShortcuts[ToolIdx].Button1 = Button;
AddedShortcut = true;
}
else
{
mShortcuts[ToolIdx].Modifiers2 = Modifiers;
mShortcuts[ToolIdx].Button2 = Button;
}
}
}
return true;
@ -198,7 +234,7 @@ bool lcMouseShortcuts::Load(const QStringList& Shortcuts)
lcTool lcMouseShortcuts::GetTool(Qt::MouseButton Button, Qt::KeyboardModifiers Modifiers) const
{
for (int ToolIdx = 0; ToolIdx < LC_NUM_TOOLS; ToolIdx++)
if (mShortcuts[ToolIdx].Button == Button && mShortcuts[ToolIdx].Modifiers == Modifiers)
if ((mShortcuts[ToolIdx].Button1 == Button && mShortcuts[ToolIdx].Modifiers1 == Modifiers) || (mShortcuts[ToolIdx].Button2 == Button && mShortcuts[ToolIdx].Modifiers2 == Modifiers))
return (lcTool)ToolIdx;
return LC_NUM_TOOLS;

View file

@ -31,8 +31,10 @@ public:
struct
{
Qt::KeyboardModifiers Modifiers;
Qt::MouseButton Button;
Qt::KeyboardModifiers Modifiers1;
Qt::MouseButton Button1;
Qt::KeyboardModifiers Modifiers2;
Qt::MouseButton Button2;
}
mShortcuts[LC_NUM_TOOLS];
};

View file

@ -71,7 +71,15 @@ lcQPreferencesDialog::lcQPreferencesDialog(QWidget *parent, void *data) :
commandChanged(nullptr);
UpdateMouseTree();
new lcQTreeWidgetColumnStretcher(ui->mouseTree, 0);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
ui->mouseTree->header()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->mouseTree->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
ui->mouseTree->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
#else
ui->mouseTree->header()->setResizeMode(0, QHeaderView::Stretch);
ui->mouseTree->header()->setResizeMode(1, QHeaderView::ResizeToContents);
ui->mouseTree->header()->setResizeMode(2, QHeaderView::ResizeToContents);
#endif
MouseTreeItemChanged(nullptr);
}
@ -605,35 +613,44 @@ void lcQPreferencesDialog::UpdateMouseTree()
void lcQPreferencesDialog::UpdateMouseTreeItem(int ItemIndex)
{
Qt::MouseButton Button = options->MouseShortcuts.mShortcuts[ItemIndex].Button;
QString Shortcut = QKeySequence(options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers).toString(QKeySequence::NativeText);
switch (Button)
auto GetShortcutText = [](Qt::MouseButton Button, Qt::KeyboardModifiers Modifiers)
{
case Qt::LeftButton:
Shortcut += tr("Left Button");
break;
QString Shortcut = QKeySequence(Modifiers).toString(QKeySequence::NativeText);
switch (Button)
{
case Qt::LeftButton:
Shortcut += tr("Left Button");
break;
#if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 0))
case Qt::MiddleButton:
Shortcut += tr("Middle Button");
break;
case Qt::MiddleButton:
Shortcut += tr("Middle Button");
break;
#endif
case Qt::RightButton:
Shortcut += tr("Right Button");
break;
case Qt::RightButton:
Shortcut += tr("Right Button");
break;
default:
Shortcut.clear();
}
default:
Shortcut.clear();
}
return Shortcut;
};
QString Shortcut1 = GetShortcutText(options->MouseShortcuts.mShortcuts[ItemIndex].Button1, options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers1);
QString Shortcut2 = GetShortcutText(options->MouseShortcuts.mShortcuts[ItemIndex].Button2, options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers2);
QTreeWidgetItem* Item = ui->mouseTree->topLevelItem(ItemIndex);
if (Item)
Item->setText(1, Shortcut);
{
Item->setText(1, Shortcut1);
Item->setText(2, Shortcut2);
}
else
new QTreeWidgetItem(ui->mouseTree, QStringList() << tr(gToolNames[ItemIndex]) << Shortcut);
new QTreeWidgetItem(ui->mouseTree, QStringList() << tr(gToolNames[ItemIndex]) << Shortcut1 << Shortcut2);
}
void lcQPreferencesDialog::on_mouseAssign_clicked()
@ -677,20 +694,36 @@ void lcQPreferencesDialog::on_mouseAssign_clicked()
for (int ToolIdx = 0; ToolIdx < LC_NUM_TOOLS; ToolIdx++)
{
if (ToolIdx != ButtonIndex && options->MouseShortcuts.mShortcuts[ToolIdx].Button == Button && options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers == Modifiers)
if (ToolIdx == ButtonIndex)
continue;
if (options->MouseShortcuts.mShortcuts[ToolIdx].Button2 == Button && options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers2 == Modifiers)
{
if (QMessageBox::question(this, tr("Override Shortcut"), tr("This shortcut is already assigned to '%1', do you want to replace it?").arg(tr(gToolNames[ToolIdx])), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
return;
options->MouseShortcuts.mShortcuts[ToolIdx].Button = Qt::NoButton;
options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers = Qt::NoModifier;
options->MouseShortcuts.mShortcuts[ToolIdx].Button2 = Qt::NoButton;
options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers2 = Qt::NoModifier;
}
if (options->MouseShortcuts.mShortcuts[ToolIdx].Button1 == Button && options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers1 == Modifiers)
{
if (QMessageBox::question(this, tr("Override Shortcut"), tr("This shortcut is already assigned to '%1', do you want to replace it?").arg(tr(gToolNames[ToolIdx])), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
return;
options->MouseShortcuts.mShortcuts[ToolIdx].Button1 = options->MouseShortcuts.mShortcuts[ToolIdx].Button2;
options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers1 = options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers2;
options->MouseShortcuts.mShortcuts[ToolIdx].Button2 = Qt::NoButton;
options->MouseShortcuts.mShortcuts[ToolIdx].Modifiers2 = Qt::NoModifier;
}
}
}
int ItemIndex = ui->mouseTree->indexOfTopLevelItem(Current);
options->MouseShortcuts.mShortcuts[ItemIndex].Button = Button;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers = Modifiers;
options->MouseShortcuts.mShortcuts[ItemIndex].Button2 = options->MouseShortcuts.mShortcuts[ItemIndex].Button1;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers2 = options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers1;
options->MouseShortcuts.mShortcuts[ItemIndex].Button1 = Button;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers1 = Modifiers;
options->MouseShortcutsModified = true;
options->MouseShortcutsDefault = false;
@ -706,13 +739,16 @@ void lcQPreferencesDialog::on_mouseRemove_clicked()
return;
int ItemIndex = ui->mouseTree->indexOfTopLevelItem(Current);
options->MouseShortcuts.mShortcuts[ItemIndex].Button = Qt::NoButton;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers = Qt::NoModifier;
options->MouseShortcuts.mShortcuts[ItemIndex].Button1 = options->MouseShortcuts.mShortcuts[ItemIndex].Button2;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers1 = options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers2;
options->MouseShortcuts.mShortcuts[ItemIndex].Button2 = Qt::NoButton;
options->MouseShortcuts.mShortcuts[ItemIndex].Modifiers2 = Qt::NoModifier;
options->MouseShortcutsModified = true;
options->MouseShortcutsDefault = false;
UpdateMouseTreeItem(ItemIndex);
MouseTreeItemChanged(Current);
}
void lcQPreferencesDialog::on_mouseReset_clicked()
@ -739,7 +775,7 @@ void lcQPreferencesDialog::MouseTreeItemChanged(QTreeWidgetItem* Current)
int ToolIndex = ui->mouseTree->indexOfTopLevelItem(Current);
Qt::MouseButton Button = options->MouseShortcuts.mShortcuts[ToolIndex].Button;
Qt::MouseButton Button = options->MouseShortcuts.mShortcuts[ToolIndex].Button1;
switch (Button)
{
@ -762,7 +798,7 @@ void lcQPreferencesDialog::MouseTreeItemChanged(QTreeWidgetItem* Current)
break;
}
Qt::KeyboardModifiers Modifiers = options->MouseShortcuts.mShortcuts[ToolIndex].Modifiers;
Qt::KeyboardModifiers Modifiers = options->MouseShortcuts.mShortcuts[ToolIndex].Modifiers1;
ui->mouseControl->setChecked((Modifiers & Qt::ControlModifier) != 0);
ui->mouseShift->setChecked((Modifiers & Qt::ShiftModifier) != 0);
ui->mouseAlt->setChecked((Modifiers & Qt::AltModifier) != 0);

View file

@ -652,7 +652,12 @@
</column>
<column>
<property name="text">
<string>Shortcut</string>
<string>Shortcut 1</string>
</property>
</column>
<column>
<property name="text">
<string>Shortcut 2</string>
</property>
</column>
</widget>