Desktop: Rework Setting of Custom Date / Time Formats.

Rework the setting of custom date / time format preferences:
- fix bug causing case changes if custom format case insensitively
  matches a drop down entry;
- fix invalid format examples in tooltip;
- update URL for the format documentation;
- add support for quoted literals to the format validity warning.
From discussion in
https://github.com/subsurface/subsurface/issues/3849#issuecomment-1481239270.

Signed-off-by: Michael Keller <github@ike.ch>
This commit is contained in:
Michael Keller 2023-05-23 18:45:32 +12:00 committed by bstoeger
parent 6002387d7b
commit 5d7f294407
2 changed files with 13 additions and 10 deletions

View file

@ -7,6 +7,7 @@
#include <QDir>
#include <QMessageBox>
#include <QSortFilterProxyModel>
#include <QCompleter>
#include "qt-models/models.h"
@ -28,12 +29,14 @@ PreferencesLanguage::PreferencesLanguage() : AbstractPreferencesWidget(tr("Langu
dateFormatShortMap.insert("yyyy-MM-dd", "yy-M-d");
foreach (QString format, dateFormatShortMap.keys())
ui->dateFormatEntry->addItem(format);
ui->dateFormatEntry->completer()->setCaseSensitivity(Qt::CaseSensitive);
connect(ui->dateFormatEntry, SIGNAL(currentIndexChanged(const QString&)),
this, SLOT(dateFormatChanged(const QString&)));
ui->timeFormatEntry->addItem("hh:mm");
ui->timeFormatEntry->addItem("h:mm AP");
ui->timeFormatEntry->addItem("hh:mm AP");
ui->timeFormatEntry->completer()->setCaseSensitivity(Qt::CaseSensitive);
}
PreferencesLanguage::~PreferencesLanguage()
@ -94,15 +97,15 @@ void PreferencesLanguage::syncSettings()
// Therefore, refresh the UI fields to give the user a visual feedback of the new formats.
refreshSettings();
QString qDateTimeWeb = tr("These will be used as is. This might not be what you intended.\nSee http://doc.qt.io/qt-5/qdatetime.html#toString");
QRegularExpression tfillegalchars("[^hHmszaApPt\\s:;\\.,]");
if (tfillegalchars.match(ui->timeFormatEntry->currentText()).hasMatch())
QString qDateTimeWeb = tr("These will be used as is. This might not be what you intended. To avoid this warning wrap the literal parts in quotes (').\nSee https://doc.qt.io/archives/qt-4.8/qdatetime.html#fromString");
QRegularExpression timeStandardFormat("^([hHmszaApP\\s:\\.]|'[^']*')*$");
if (!timeStandardFormat.match(ui->timeFormatEntry->currentText()).hasMatch())
QMessageBox::warning(this, tr("Literal characters"),
tr("Non-special character(s) in time format.\n") + qDateTimeWeb);
tr("Non-standard character(s) in time format.\n") + qDateTimeWeb);
QRegularExpression dfillegalchars("[^dMy/\\s:;\\.,\\-]");
if (dfillegalchars.match(ui->dateFormatEntry->currentText()).hasMatch() ||
dfillegalchars.match(ui->shortDateFormatEntry->text()).hasMatch())
QRegularExpression dateStandardFormat("^([dMy\\s/\\.,\\-]|'[^']*')*$");
if (!dateStandardFormat.match(ui->dateFormatEntry->currentText()).hasMatch() ||
!dateStandardFormat.match(ui->shortDateFormatEntry->text()).hasMatch())
QMessageBox::warning(this, tr("Literal characters"),
tr("Non-special character(s) in date format.\n") + qDateTimeWeb);
tr("Non-standard character(s) in date format.\n") + qDateTimeWeb);
}

View file

@ -110,7 +110,7 @@
<item row="0" column="1">
<widget class="QComboBox" name="dateFormatEntry">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Preferred date format. Commonly used fields are&lt;/p&gt;&lt;p&gt;d (day of month)&lt;/p&gt;&lt;p&gt;ddd (abbr. day name)&lt;/p&gt;&lt;p&gt;M (month number)&lt;/p&gt;&lt;p&gt;MMM (abbr. month name)&lt;/p&gt;&lt;p&gt;yy/yyyy (2/4 digit year)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Preferred date format. Commonly used fields are&lt;/p&gt;&lt;p&gt;d (day of month)&lt;/p&gt;&lt;p&gt;ddd (abbreviated day name)&lt;/p&gt;&lt;p&gt;M (month number)&lt;/p&gt;&lt;p&gt;MMM (abbreviated month name)&lt;/p&gt;&lt;p&gt;yy/yyyy (2/4 digit year)&lt;/p&gt;&lt;p&gt;See https://doc.qt.io/archives/qt-4.8/qdatetime.html#fromString for full list.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
@ -148,7 +148,7 @@
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Preferred time format&lt;/p&gt;&lt;p&gt;Commonly used format specifiers are&lt;/p&gt;&lt;p&gt;h (hours in 12h format)&lt;/p&gt;&lt;p&gt;H (hours in 24h format)&lt;/p&gt;&lt;p&gt;mm (2 digit minutes)&lt;/p&gt;&lt;p&gt;ss (2 digit seconds)&lt;/p&gt;&lt;p&gt;t/tt (a/p or am/pm)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Preferred time format&lt;/p&gt;&lt;p&gt;Commonly used format specifiers are&lt;/p&gt;&lt;p&gt;h (hours)&lt;/p&gt;&lt;p&gt;hh (2 digit hours)&lt;/p&gt;&lt;p&gt;mm (2 digit minutes)&lt;/p&gt;&lt;p&gt;ss (2 digit seconds)&lt;/p&gt;&lt;p&gt;AP or ap (AM/PM or am/pm)&lt;/p&gt;&lt;p&gt;See https://doc.qt.io/archives/qt-4.8/qdatetime.html#fromString for full list.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>