- remove upstreamed patches * remove 0569-scale-mirror-pixmap.patch * remove 0961-use-cpp20.patch * remove 0962-fix-cpp20-compatibility.patch * remove 1010-fix-qapp-cast.patch * remove 1017-ffmpeg7.patch - adjust patches to new version * adjust 0955-shortcut-configuration.patch * adjust 9117-disable-software-update.patch - add patch to circumvent some problems on wayland * add 1165-fix-some-wayland-problems.patch - switch from Qt5 to Qt6 OBS-URL: https://build.opensuse.org/package/show/Education/OpenBoard?expand=0&rev=41
746 lines
28 KiB
Diff
746 lines
28 KiB
Diff
From 07141652f2bcd3eba16fb5291532b52e8b530fc0 Mon Sep 17 00:00:00 2001
|
|
From: letsfindaway <me@letsfindaway.de>
|
|
Date: Sun, 25 Aug 2024 15:34:04 +0200
|
|
Subject: [PATCH 1/2] feat: add preferences dialog for shortcut configuration
|
|
|
|
- recording of key sequences amd mouse/stylus buttons
|
|
- collect actions, filtering, collision detection
|
|
- persist shortcut settings
|
|
---
|
|
resources/forms/preferences.ui | 169 ++++++++++++++++++
|
|
src/core/UBApplication.cpp | 28 +++
|
|
src/core/UBPreferencesController.cpp | 252 ++++++++++++++++++++++++++-
|
|
src/core/UBPreferencesController.h | 12 ++
|
|
4 files changed, 459 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/resources/forms/preferences.ui b/resources/forms/preferences.ui
|
|
index 45a2fc180..9b73f8d65 100644
|
|
--- a/resources/forms/preferences.ui
|
|
+++ b/resources/forms/preferences.ui
|
|
@@ -1095,6 +1095,175 @@
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
+ <widget class="QWidget" name="shortcutTab">
|
|
+ <attribute name="title">
|
|
+ <string>Shortcut</string>
|
|
+ </attribute>
|
|
+ <layout class="QVBoxLayout" name="verticalLayout_4">
|
|
+ <item>
|
|
+ <widget class="QLineEdit" name="filter">
|
|
+ <property name="placeholderText">
|
|
+ <string>Filter</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item>
|
|
+ <widget class="QScrollArea" name="shortcutScrollArea">
|
|
+ <property name="widgetResizable">
|
|
+ <bool>true</bool>
|
|
+ </property>
|
|
+ <widget class="QWidget" name="scrollAreaWidgetContents">
|
|
+ <property name="geometry">
|
|
+ <rect>
|
|
+ <x>0</x>
|
|
+ <y>0</y>
|
|
+ <width>789</width>
|
|
+ <height>447</height>
|
|
+ </rect>
|
|
+ </property>
|
|
+ <layout class="QVBoxLayout" name="verticalLayout_41">
|
|
+ <item>
|
|
+ <widget class="QTableView" name="shortcutTableView">
|
|
+ <property name="editTriggers">
|
|
+ <set>QAbstractItemView::NoEditTriggers</set>
|
|
+ </property>
|
|
+ <property name="showDropIndicator" stdset="0">
|
|
+ <bool>false</bool>
|
|
+ </property>
|
|
+ <property name="selectionMode">
|
|
+ <enum>QAbstractItemView::SingleSelection</enum>
|
|
+ </property>
|
|
+ <property name="selectionBehavior">
|
|
+ <enum>QAbstractItemView::SelectRows</enum>
|
|
+ </property>
|
|
+ <property name="showGrid">
|
|
+ <bool>false</bool>
|
|
+ </property>
|
|
+ <property name="wordWrap">
|
|
+ <bool>false</bool>
|
|
+ </property>
|
|
+ <attribute name="horizontalHeaderCascadingSectionResizes">
|
|
+ <bool>true</bool>
|
|
+ </attribute>
|
|
+ <attribute name="verticalHeaderVisible">
|
|
+ <bool>false</bool>
|
|
+ </attribute>
|
|
+ <attribute name="verticalHeaderMinimumSectionSize">
|
|
+ <number>25</number>
|
|
+ </attribute>
|
|
+ <attribute name="verticalHeaderDefaultSectionSize">
|
|
+ <number>25</number>
|
|
+ </attribute>
|
|
+ </widget>
|
|
+ </item>
|
|
+ </layout>
|
|
+ </widget>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item>
|
|
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
|
|
+ <item>
|
|
+ <widget class="QCheckBox" name="noCtrl">
|
|
+ <property name="text">
|
|
+ <string>Active keyboard shortcuts without pressing Ctrl key</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ </layout>
|
|
+ </item>
|
|
+ <item>
|
|
+ <widget class="QGroupBox" name="shortcutsGroupBox">
|
|
+ <property name="enabled">
|
|
+ <bool>false</bool>
|
|
+ </property>
|
|
+ <property name="title">
|
|
+ <string>Shortcuts</string>
|
|
+ </property>
|
|
+ <property name="alignment">
|
|
+ <set>Qt::AlignCenter</set>
|
|
+ </property>
|
|
+ <layout class="QGridLayout" name="gridLayout_20">
|
|
+ <item row="3" column="0" colspan="2">
|
|
+ <widget class="QLabel" name="report">
|
|
+ <property name="styleSheet">
|
|
+ <string notr="true">color: red;</string>
|
|
+ </property>
|
|
+ <property name="textFormat">
|
|
+ <enum>Qt::PlainText</enum>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="2" column="1">
|
|
+ <widget class="QLineEdit" name="stylusButton">
|
|
+ <property name="readOnly">
|
|
+ <bool>true</bool>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="1" column="2">
|
|
+ <widget class="QPushButton" name="abortButton">
|
|
+ <property name="text">
|
|
+ <string>Abort</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="0" column="2">
|
|
+ <widget class="QPushButton" name="recordButton">
|
|
+ <property name="text">
|
|
+ <string>Record</string>
|
|
+ </property>
|
|
+ <property name="checkable">
|
|
+ <bool>true</bool>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="2" column="0">
|
|
+ <widget class="QLabel" name="label_5">
|
|
+ <property name="text">
|
|
+ <string>Stylus Button</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="1" column="0">
|
|
+ <widget class="QLabel" name="label_2">
|
|
+ <property name="text">
|
|
+ <string>Mouse Button</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="1" column="1">
|
|
+ <widget class="QLineEdit" name="mouseButton">
|
|
+ <property name="readOnly">
|
|
+ <bool>true</bool>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="0" column="1">
|
|
+ <widget class="QLineEdit" name="keySequence">
|
|
+ <property name="readOnly">
|
|
+ <bool>true</bool>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="2" column="2">
|
|
+ <widget class="QPushButton" name="resetButton">
|
|
+ <property name="text">
|
|
+ <string>Reset</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ <item row="0" column="0">
|
|
+ <widget class="QLabel" name="label_4">
|
|
+ <property name="text">
|
|
+ <string>Key Sequence</string>
|
|
+ </property>
|
|
+ </widget>
|
|
+ </item>
|
|
+ </layout>
|
|
+ </widget>
|
|
+ </item>
|
|
+ </layout>
|
|
+ </widget>
|
|
<widget class="QWidget" name="thirdPartyLicence">
|
|
<property name="enabled">
|
|
<bool>true</bool>
|
|
diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp
|
|
index 9e74e09a3..44017610b 100644
|
|
--- a/src/core/UBApplication.cpp
|
|
+++ b/src/core/UBApplication.cpp
|
|
@@ -704,6 +704,34 @@ bool UBApplication::eventFilter(QObject *obj, QEvent *event)
|
|
|| result;
|
|
}
|
|
|
|
+ else if (event->type() == QEvent::MouseButtonPress)
|
|
+ {
|
|
+ // intercept special mouse buttons for shortcut handler
|
|
+ QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
|
+ Qt::MouseButton button = mouseEvent->button();
|
|
+
|
|
+ if (button != Qt::LeftButton && button != Qt::RightButton)
|
|
+ {
|
|
+ return mPreferencesController->handleMouseEvent(mouseEvent)
|
|
+ || UBShortcutManager::shortcutManager()->handleMouseEvent(mouseEvent)
|
|
+ || result;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ else if (event->type() == QEvent::TabletPress)
|
|
+ {
|
|
+ // intercept special tablet buttons for shortcut handler
|
|
+ QTabletEvent *tabletEvent = static_cast<QTabletEvent *>(event);
|
|
+ Qt::MouseButton button = tabletEvent->button();
|
|
+
|
|
+ if (button != Qt::LeftButton)
|
|
+ {
|
|
+ return mPreferencesController->handleTabletEvent(tabletEvent)
|
|
+ || UBShortcutManager::shortcutManager()->handleTabletEvent(tabletEvent)
|
|
+ || result;
|
|
+ }
|
|
+ }
|
|
+
|
|
return result;
|
|
}
|
|
|
|
diff --git a/src/core/UBPreferencesController.cpp b/src/core/UBPreferencesController.cpp
|
|
index ed0e393d8..145323385 100644
|
|
--- a/src/core/UBPreferencesController.cpp
|
|
+++ b/src/core/UBPreferencesController.cpp
|
|
@@ -37,6 +37,7 @@
|
|
#include "core/UBSetting.h"
|
|
#include "core/UBApplicationController.h"
|
|
#include "core/UBDisplayManager.h"
|
|
+#include "core/UBShortcutManager.h"
|
|
|
|
#include "frameworks/UBStringUtils.h"
|
|
|
|
@@ -72,7 +73,6 @@ void UBPreferencesDialog::closeEvent(QCloseEvent* e)
|
|
}
|
|
|
|
|
|
-
|
|
UBPreferencesController::UBPreferencesController(QWidget *parent)
|
|
: QObject(parent)
|
|
, mPreferencesWindow(0)
|
|
@@ -88,6 +88,8 @@ UBPreferencesController::UBPreferencesController(QWidget *parent)
|
|
adjustScreensPreferences();
|
|
|
|
connect(UBApplication::displayManager, &UBDisplayManager::availableScreenCountChanged, this, &UBPreferencesController::adjustScreensPreferences);
|
|
+ mPreferencesUI->shortcutTab->installEventFilter(this);
|
|
+
|
|
wire();
|
|
}
|
|
|
|
@@ -103,6 +105,90 @@ UBPreferencesController::~UBPreferencesController()
|
|
delete mMarkerProperties;
|
|
}
|
|
|
|
+bool UBPreferencesController::handleKeyEvent(QKeyEvent *event)
|
|
+{
|
|
+ if (!mPreferencesUI->recordButton->isChecked()
|
|
+ || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab)
|
|
+ {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ int key = event->key();
|
|
+ Qt::KeyboardModifiers mods = event->modifiers();
|
|
+ QString text = event->text();
|
|
+
|
|
+ int keys = mods;
|
|
+
|
|
+ if (key < Qt::Key_Shift || key > Qt::Key_ScrollLock)
|
|
+ {
|
|
+ keys += key;
|
|
+ }
|
|
+
|
|
+ // compose key sequence from active modifiers and key
|
|
+ QKeySequence keySequence(keys);
|
|
+ QString keyString = keySequence.toString();
|
|
+ mPreferencesUI->keySequence->setText(keyString);
|
|
+
|
|
+ if (currentIndex.isValid())
|
|
+ {
|
|
+ bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(2), keyString);
|
|
+ applyShortcutFilter(ok ? mPreferencesUI->filter->text() : keyString, ok ? -1 : 2);
|
|
+ mPreferencesUI->recordButton->setEnabled(ok);
|
|
+ mPreferencesUI->report->setText(ok ? "" : tr("Key sequence already in use"));
|
|
+ mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts(keySequence));
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+}
|
|
+
|
|
+bool UBPreferencesController::handleMouseEvent(QMouseEvent *event)
|
|
+{
|
|
+ if (!mPreferencesUI->recordButton->isChecked()
|
|
+ || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab)
|
|
+ {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ Qt::MouseButton button = event->button();
|
|
+
|
|
+ if (currentIndex.isValid())
|
|
+ {
|
|
+ QString buttonName = UBShortcutManager::buttonName(button);
|
|
+ mPreferencesUI->mouseButton->setText(buttonName);
|
|
+ bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(3), buttonName);
|
|
+ applyShortcutFilter(ok ? mPreferencesUI->filter->text() : buttonName, ok ? -1 : 3);
|
|
+ mPreferencesUI->recordButton->setEnabled(ok);
|
|
+ mPreferencesUI->report->setText(ok ? "" : tr("Mouse button already in use"));
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+}
|
|
+
|
|
+bool UBPreferencesController::handleTabletEvent(QTabletEvent *event)
|
|
+{
|
|
+ if (!mPreferencesUI->recordButton->isChecked()
|
|
+ || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab)
|
|
+ {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ Qt::MouseButton button = event->button();
|
|
+
|
|
+ if (currentIndex.isValid())
|
|
+ {
|
|
+ QString buttonName = UBShortcutManager::buttonName(button);
|
|
+ mPreferencesUI->stylusButton->setText(buttonName);
|
|
+ bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(4), buttonName);
|
|
+ applyShortcutFilter(ok ? mPreferencesUI->filter->text() : buttonName, ok ? -1 : 4);
|
|
+ mPreferencesUI->recordButton->setEnabled(ok);
|
|
+ mPreferencesUI->report->setText(ok ? "" : tr("Stylus button already in use"));
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+}
|
|
+
|
|
void UBPreferencesController::adjustScreensPreferences()
|
|
{
|
|
bool enabled = UBApplication::displayManager->numScreens() > 1;
|
|
@@ -139,6 +225,50 @@ void UBPreferencesController::adjustScreensPreferences()
|
|
}
|
|
}
|
|
|
|
+void UBPreferencesController::applyShortcutFilter(const QString &filter, int filterCol)
|
|
+{
|
|
+ // go throug rows in reverse direction
|
|
+ QAbstractItemModel* model = mPreferencesUI->shortcutTableView->model();
|
|
+ QModelIndex index = model->index(0, 0);
|
|
+ bool groupVisible = false;
|
|
+ int minCol = filterCol < 0 ? 0 : filterCol;
|
|
+ int maxCol = filterCol < 0 ? model->columnCount() : filterCol + 1;
|
|
+
|
|
+ for (int row = model->rowCount() - 1; row >= 0; --row)
|
|
+ {
|
|
+ QModelIndex rowIndex = index.siblingAtRow(row);
|
|
+ bool match = false;
|
|
+ bool header = model->data(rowIndex, UBShortcutManager::GroupHeaderRole).toBool();
|
|
+
|
|
+ if (header)
|
|
+ {
|
|
+ match = groupVisible;
|
|
+ groupVisible = false;
|
|
+ }
|
|
+ else if (currentIndex.isValid() && currentIndex.row() == row)
|
|
+ {
|
|
+ match = true;
|
|
+ groupVisible = true;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ for (int col = minCol; col < maxCol; ++col)
|
|
+ {
|
|
+ QModelIndex colIndex = rowIndex.siblingAtColumn(col);
|
|
+
|
|
+ if (model->data(colIndex).toString().contains(filter, Qt::CaseInsensitive))
|
|
+ {
|
|
+ match = true;
|
|
+ groupVisible = true;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ mPreferencesUI->shortcutTableView->setRowHidden(row, !match);
|
|
+ }
|
|
+}
|
|
+
|
|
void UBPreferencesController::show()
|
|
{
|
|
init();
|
|
@@ -293,6 +423,21 @@ void UBPreferencesController::wire()
|
|
|
|
// about tab
|
|
connect(mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox, SIGNAL(clicked(bool)), settings->appEnableAutomaticSoftwareUpdates, SLOT(setBool(bool)));
|
|
+
|
|
+ // shortcut tab
|
|
+ connect(mPreferencesUI->shortcutTableView, SIGNAL(activated(const QModelIndex&)), this, SLOT(actionSelected(const QModelIndex&)));
|
|
+ connect(mPreferencesUI->filter, SIGNAL(textChanged(const QString&)), this, SLOT(applyShortcutFilter(const QString&)));
|
|
+ connect(mPreferencesUI->recordButton, SIGNAL(clicked(bool)), this, SLOT(recordingClicked(bool)));
|
|
+ connect(mPreferencesUI->abortButton, SIGNAL(clicked()), this, SLOT(abortClicked()));
|
|
+ connect(mPreferencesUI->resetButton, SIGNAL(clicked()), this, SLOT(resetClicked()));
|
|
+ connect(mPreferencesUI->noCtrl, &QCheckBox::toggled, UBShortcutManager::shortcutManager(), &UBShortcutManager::ignoreCtrl);
|
|
+ connect(mPreferencesUI->mainTabWidget, &QTabWidget::currentChanged, [this](int tab){
|
|
+ auto shortcutTab = mPreferencesUI->mainTabWidget->indexOf(mPreferencesUI->shortcutTab);
|
|
+
|
|
+ if (tab != shortcutTab) {
|
|
+ abortClicked();
|
|
+ }
|
|
+ });
|
|
}
|
|
|
|
void UBPreferencesController::init()
|
|
@@ -351,6 +496,27 @@ void UBPreferencesController::init()
|
|
|
|
mMarkerProperties->opacitySlider->setValue(settings->boardMarkerAlpha->get().toDouble() * 100);
|
|
|
|
+ // shortcut tab
|
|
+ mPreferencesUI->shortcutTableView->setModel(UBShortcutManager::shortcutManager());
|
|
+ mPreferencesUI->shortcutTableView->horizontalHeader()->setModel(UBShortcutManager::shortcutManager());
|
|
+ mPreferencesUI->shortcutTableView->horizontalHeader()->resizeSection(0, 150);
|
|
+ mPreferencesUI->shortcutTableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
|
|
+ mPreferencesUI->noCtrl->setChecked(settings->value("Shortcut/IgnoreCtrl").toBool());
|
|
+ mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts());
|
|
+}
|
|
+
|
|
+bool UBPreferencesController::eventFilter(QObject *obj, QEvent *event)
|
|
+{
|
|
+ if (event->type() == QEvent::KeyPress)
|
|
+ {
|
|
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
|
|
+ return handleKeyEvent(keyEvent);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ // standard event processing
|
|
+ return QObject::eventFilter(obj, event);
|
|
+ }
|
|
}
|
|
|
|
void UBPreferencesController::close()
|
|
@@ -445,7 +611,8 @@ void UBPreferencesController::defaultSettings()
|
|
mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox->setChecked(defaultValue);
|
|
|
|
}
|
|
- else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->networkTab){
|
|
+ else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->networkTab)
|
|
+ {
|
|
bool defaultValue = settings->webUseExternalBrowser->reset().toBool();
|
|
mPreferencesUI->useExternalBrowserCheckBox->setChecked(defaultValue);
|
|
defaultValue = settings->webShowPageImmediatelyOnMirroredScreen->reset().toBool();
|
|
@@ -480,6 +647,23 @@ void UBPreferencesController::defaultSettings()
|
|
lightBackgroundCrossOpacityValueChanged(lightBackgroundOpacity);
|
|
|
|
}
|
|
+ else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->shortcutTab)
|
|
+ {
|
|
+ if (mPreferencesUI->recordButton->isChecked())
|
|
+ {
|
|
+ abortClicked();
|
|
+ }
|
|
+
|
|
+ UBShortcutManager* sm = UBShortcutManager::shortcutManager();
|
|
+
|
|
+ for (int row = 0; row < sm->rowCount(); ++row)
|
|
+ {
|
|
+ QModelIndex rowIndex = sm->index(row, 0);
|
|
+ sm->resetData(rowIndex);
|
|
+ }
|
|
+
|
|
+ resetClicked();
|
|
+ }
|
|
}
|
|
|
|
void UBPreferencesController::darkBackgroundCrossOpacityValueChanged(int value)
|
|
@@ -690,6 +874,70 @@ void UBPreferencesController::systemOSKCheckBoxToggled(bool checked)
|
|
mPreferencesUI->keyboardPaletteKeyButtonSize_Label->setVisible(!checked);
|
|
}
|
|
|
|
+void UBPreferencesController::actionSelected(const QModelIndex &index)
|
|
+{
|
|
+ currentIndex = index;
|
|
+ UBShortcutManager* sm = UBShortcutManager::shortcutManager();
|
|
+ mPreferencesUI->keySequence->setText(sm->data(index.siblingAtColumn(2), UBShortcutManager::PrimaryShortcutRole).toString());
|
|
+ mPreferencesUI->mouseButton->setText(sm->data(index.siblingAtColumn(3)).toString());
|
|
+ mPreferencesUI->stylusButton->setText(sm->data(index.siblingAtColumn(4)).toString());
|
|
+
|
|
+ bool isAction = sm->data(index, UBShortcutManager::ActionRole).toBool();
|
|
+ mPreferencesUI->recordButton->setEnabled(true);
|
|
+ mPreferencesUI->shortcutsGroupBox->setEnabled(isAction);
|
|
+}
|
|
+
|
|
+void UBPreferencesController::recordingClicked(bool checked)
|
|
+{
|
|
+ if (!checked && currentIndex.isValid())
|
|
+ {
|
|
+ UBShortcutManager* sm = UBShortcutManager::shortcutManager();
|
|
+ sm->setData(currentIndex.siblingAtColumn(2), mPreferencesUI->keySequence->text());
|
|
+ sm->setData(currentIndex.siblingAtColumn(3), sm->buttonIndex(mPreferencesUI->mouseButton->text()));
|
|
+ sm->setData(currentIndex.siblingAtColumn(4), sm->buttonIndex(mPreferencesUI->stylusButton->text()));
|
|
+ }
|
|
+
|
|
+ mPreferencesUI->shortcutTableView->setSelectionMode(checked ? QTableView::NoSelection : QTableView::SingleSelection);
|
|
+ mPreferencesUI->recordButton->setText(checked ? tr("Accept", "preferencesDialog") : tr("Record", "preferencesDialog"));
|
|
+}
|
|
+
|
|
+void UBPreferencesController::abortClicked()
|
|
+{
|
|
+ applyShortcutFilter(mPreferencesUI->filter->text());
|
|
+
|
|
+ mPreferencesUI->recordButton->setEnabled(true);
|
|
+ mPreferencesUI->recordButton->setChecked(false);
|
|
+ mPreferencesUI->recordButton->setText(tr("Record", "preferencesDialog"));
|
|
+ mPreferencesUI->shortcutTableView->setSelectionMode(QTableView::SingleSelection);
|
|
+ mPreferencesUI->shortcutTableView->clearSelection();
|
|
+ mPreferencesUI->report->setText("");
|
|
+ mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts());
|
|
+ actionSelected(mPreferencesUI->shortcutTableView->model()->index(0, 0));
|
|
+}
|
|
+
|
|
+void UBPreferencesController::resetClicked()
|
|
+{
|
|
+ if (mPreferencesUI->recordButton->isChecked())
|
|
+ {
|
|
+ abortClicked();
|
|
+ }
|
|
+
|
|
+ if (currentIndex.isValid())
|
|
+ {
|
|
+ UBShortcutManager* sm = UBShortcutManager::shortcutManager();
|
|
+
|
|
+ sm->resetData(currentIndex);
|
|
+ applyShortcutFilter(mPreferencesUI->filter->text());
|
|
+
|
|
+ mPreferencesUI->keySequence->setText(sm->data(currentIndex.siblingAtColumn(2)).toString());
|
|
+ mPreferencesUI->mouseButton->setText(sm->data(currentIndex.siblingAtColumn(3)).toString());
|
|
+ mPreferencesUI->stylusButton->setText(sm->data(currentIndex.siblingAtColumn(4)).toString());
|
|
+ }
|
|
+
|
|
+ mPreferencesUI->report->setText("");
|
|
+ mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts());
|
|
+}
|
|
+
|
|
UBBrushPropertiesFrame::UBBrushPropertiesFrame(QFrame* owner, const QList<QColor>& lightBackgroundColors,
|
|
const QList<QColor>& darkBackgroundColors, const QList<QColor>& lightBackgroundSelectedColors,
|
|
const QList<QColor>& darkBackgroundSelectedColors, UBPreferencesController* controller)
|
|
diff --git a/src/core/UBPreferencesController.h b/src/core/UBPreferencesController.h
|
|
index d89b4c181..25413762c 100644
|
|
--- a/src/core/UBPreferencesController.h
|
|
+++ b/src/core/UBPreferencesController.h
|
|
@@ -70,6 +70,9 @@ class UBPreferencesController : public QObject
|
|
UBPreferencesController(QWidget *parent);
|
|
virtual ~UBPreferencesController();
|
|
|
|
+ bool handleKeyEvent(QKeyEvent *event);
|
|
+ bool handleMouseEvent(QMouseEvent *event);
|
|
+ bool handleTabletEvent(QTabletEvent *event);
|
|
|
|
public slots:
|
|
|
|
@@ -80,6 +83,8 @@ class UBPreferencesController : public QObject
|
|
void wire();
|
|
void init();
|
|
|
|
+ virtual bool eventFilter(QObject* obj, QEvent* event) Q_DECL_OVERRIDE;
|
|
+
|
|
UBPreferencesDialog* mPreferencesWindow;
|
|
Ui::preferencesDialog* mPreferencesUI;
|
|
UBBrushPropertiesFrame* mPenProperties;
|
|
@@ -104,14 +109,21 @@ class UBPreferencesController : public QObject
|
|
void toolbarOrientationVertical(bool checked);
|
|
void toolbarOrientationHorizontal(bool checked);
|
|
void systemOSKCheckBoxToggled(bool checked);
|
|
+ void actionSelected(const QModelIndex& index);
|
|
+ void recordingClicked(bool checked);
|
|
+ void abortClicked();
|
|
+ void resetClicked();
|
|
|
|
private slots:
|
|
void adjustScreensPreferences();
|
|
+ void applyShortcutFilter(const QString& filter, int filterCol = -1);
|
|
+
|
|
|
|
private:
|
|
static qreal sSliderRatio;
|
|
static qreal sMinPenWidth;
|
|
static qreal sMaxPenWidth;
|
|
+ QModelIndex currentIndex;
|
|
};
|
|
|
|
class UBBrushPropertiesFrame : public Ui::brushProperties
|
|
|
|
From 414b6d55e67c0612a6318fd3acfa495432e44b73 Mon Sep 17 00:00:00 2001
|
|
From: letsfindaway <me@letsfindaway.de>
|
|
Date: Mon, 30 Sep 2024 16:21:21 +0200
|
|
Subject: [PATCH 2/2] i18n: update German translation
|
|
|
|
- change ownership of a translation string in UBShortcutManager
|
|
- add new translation strings
|
|
- update a few translations
|
|
---
|
|
resources/i18n/OpenBoard_de.ts | 70 ++++++++++++++++++++++++++++++++--
|
|
src/core/UBShortcutManager.cpp | 2 +-
|
|
2 files changed, 67 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/resources/i18n/OpenBoard_de.ts b/resources/i18n/OpenBoard_de.ts
|
|
index 275332271..b4e278c81 100644
|
|
--- a/resources/i18n/OpenBoard_de.ts
|
|
+++ b/resources/i18n/OpenBoard_de.ts
|
|
@@ -3008,6 +3008,28 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation>
|
|
<source>Use all available displays</source>
|
|
<translation>Alle verfügbaren Bildschirme nutzen</translation>
|
|
</message>
|
|
+ <message>
|
|
+ <source>Key sequence already in use</source>
|
|
+ <translation>Tastenkombination wird bereits benutzt</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Mouse button already in use</source>
|
|
+ <translation>Maustaste wird bereits benutzt</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Stylus button already in use</source>
|
|
+ <translation>Stifttaste wird bereits benutzt</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Accept</source>
|
|
+ <comment>preferencesDialog</comment>
|
|
+ <translation>Übernehmen</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Record</source>
|
|
+ <comment>preferencesDialog</comment>
|
|
+ <translation>Aufnehmen</translation>
|
|
+ </message>
|
|
</context>
|
|
<context>
|
|
<name>UBSettings</name>
|
|
@@ -3079,7 +3101,7 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="260"/>
|
|
<source>Reset zoom factor</source>
|
|
- <translation>Zoom zurücksetzen</translation>
|
|
+ <translation>Zoom-Faktor zurücksetzen</translation>
|
|
</message>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="266"/>
|
|
@@ -3129,7 +3151,7 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="466"/>
|
|
<source>Command</source>
|
|
- <translation>Kommando</translation>
|
|
+ <translation>Befehl</translation>
|
|
</message>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="469"/>
|
|
@@ -3144,12 +3166,12 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="475"/>
|
|
<source>Mouse Button</source>
|
|
- <translation>Mausknopf</translation>
|
|
+ <translation>Maustaste</translation>
|
|
</message>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="478"/>
|
|
<source>Tablet Button</source>
|
|
- <translation>Tablet Stiftknopf</translation>
|
|
+ <translation>Stifttaste</translation>
|
|
</message>
|
|
<message>
|
|
<location filename="../../src/core/UBShortcutManager.cpp" line="629"/>
|
|
@@ -4076,6 +4098,46 @@ p, li { white-space: pre-wrap; }
|
|
<source>List of screens used for Control, Display and Previous pages</source>
|
|
<translation>Liste der Bildschirme, die für die Hauptansicht, Erweiterte Ansicht und Vorherige Seiten verwendet werden</translation>
|
|
</message>
|
|
+ <message>
|
|
+ <source>Shortcut</source>
|
|
+ <translation>Kurzbefehl</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Filter</source>
|
|
+ <translation>Filter</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Active keyboard shortcuts without pressing Ctrl key</source>
|
|
+ <translation>Aktiviere Kurzbefehle auch ohne Strg Taste</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Shortcuts</source>
|
|
+ <translation>Kurzbefehle</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Abort</source>
|
|
+ <translation>Abbrechen</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Record</source>
|
|
+ <translation>Aufnehmen</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Stylus Button</source>
|
|
+ <translation>Stifttaste</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Mouse Button</source>
|
|
+ <translation>Maustaste</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Reset</source>
|
|
+ <translation>Zurücksetzen</translation>
|
|
+ </message>
|
|
+ <message>
|
|
+ <source>Key Sequence</source>
|
|
+ <translation>Tasten</translation>
|
|
+ </message>
|
|
</context>
|
|
<context>
|
|
<name>trapFlashDialog</name>
|
|
diff --git a/src/core/UBShortcutManager.cpp b/src/core/UBShortcutManager.cpp
|
|
index dfe8c8239..56a66a870 100644
|
|
--- a/src/core/UBShortcutManager.cpp
|
|
+++ b/src/core/UBShortcutManager.cpp
|
|
@@ -43,7 +43,7 @@ UBShortcutManager* UBShortcutManager::sShortcutManager = nullptr;
|
|
|
|
UBShortcutManager::UBShortcutManager() : mIgnoreCtrl(false)
|
|
{
|
|
- actionsOfGroup(QObject::tr("Common"));
|
|
+ actionsOfGroup(tr("Common"));
|
|
}
|
|
|
|
UBShortcutManager *UBShortcutManager::shortcutManager()
|