Gui : susbtitute dot with local decimal separator for spin boxes

Main goal is to improve user-friendlyness for several locales
 Substitution of dot is performed :
 * Always if dot is neither decimal nor group/thousand separator of current locale
 * Only on NUMPAD dot if dot is not decimal but is group separator of current locale
This commit is contained in:
0penBrain
2020-06-13 16:19:32 +02:00
parent 68fbf89e38
commit 510cbf523a
3 changed files with 41 additions and 0 deletions

View File

@@ -2080,6 +2080,12 @@ void Application::runApplication(void)
WheelEventFilter* filter = new WheelEventFilter(&mainApp);
mainApp.installEventFilter(filter);
}
//filter keyboard events to substitute decimal separator
if (hGrp->GetBool("SubstituteDecimalSeparator", false)) {
KeyboardFilter* filter = new KeyboardFilter(&mainApp);
mainApp.installEventFilter(filter);
}
#if defined(HAVE_QT5_OPENGL)
{

View File

@@ -26,12 +26,14 @@
#ifndef _PreComp_
# include <sstream>
# include <stdexcept>
# include <QAbstractSpinBox>
# include <QByteArray>
# include <QComboBox>
# include <QDataStream>
# include <QDebug>
# include <QFileInfo>
# include <QFileOpenEvent>
# include <QKeyEvent>
# include <QSessionManager>
# include <QTimer>
#endif
@@ -323,5 +325,29 @@ bool WheelEventFilter::eventFilter(QObject* obj, QEvent* ev)
return false;
}
KeyboardFilter::KeyboardFilter(QObject* parent)
: QObject(parent)
{
}
bool KeyboardFilter::eventFilter(QObject* obj, QEvent* ev)
{
if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::KeyRelease) {
QKeyEvent *kev = static_cast<QKeyEvent *>(ev);
QAbstractSpinBox *target = dynamic_cast<QAbstractSpinBox *>(obj);
if (kev->key() == Qt::Key_Period && target)
{
QChar decimalPoint = QLocale().decimalPoint();
QChar groupSeparator = QLocale().groupSeparator();
if (decimalPoint != Qt::Key_Period && (groupSeparator != Qt::Key_Period || (kev->modifiers() & Qt::KeypadModifier))) {
QKeyEvent modifiedKeyEvent(kev->type(), decimalPoint.digitValue(), kev->modifiers(), QString(decimalPoint), kev->isAutoRepeat(), kev->count());
qApp->sendEvent(obj, &modifiedKeyEvent);
return true;
}
}
}
return false;
}
#include "moc_GuiApplication.cpp"

View File

@@ -92,6 +92,15 @@ public:
bool eventFilter(QObject* obj, QEvent* ev);
};
class KeyboardFilter : public QObject
{
Q_OBJECT
public:
KeyboardFilter(QObject* parent);
bool eventFilter(QObject* obj, QEvent* ev);
};
}
#endif // GUI_APPLICATION_H