This commit is contained in:
Martin Rotter 2021-11-03 09:25:01 +01:00
parent 344f8cfe8b
commit 7e1dd31810
6 changed files with 131 additions and 53 deletions

View file

@ -22,7 +22,7 @@
MessagesModel::MessagesModel(QObject* parent) MessagesModel::MessagesModel(QObject* parent)
: QSqlQueryModel(parent), m_cache(new MessagesModelCache(this)), m_messageHighlighter(MessageHighlighter::NoHighlighting), : QSqlQueryModel(parent), m_cache(new MessagesModelCache(this)), m_messageHighlighter(MessageHighlighter::NoHighlighting),
m_customDateFormat(QString()), m_selectedItem(nullptr), m_displayFeedIcons(false) { m_customDateFormat(QString()), m_customTimeFormat(QString()), m_selectedItem(nullptr), m_displayFeedIcons(false) {
setupFonts(); setupFonts();
setupIcons(); setupIcons();
setupHeaderData(); setupHeaderData();
@ -186,6 +186,13 @@ void MessagesModel::updateDateFormat() {
else { else {
m_customDateFormat = QString(); m_customDateFormat = QString();
} }
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool()) {
m_customTimeFormat = qApp->settings()->value(GROUP(Messages), SETTING(Messages::CustomTimeFormat)).toString();
}
else {
m_customTimeFormat = QString();
}
} }
void MessagesModel::updateFeedIconsDisplay() { void MessagesModel::updateFeedIconsDisplay() {
@ -290,7 +297,10 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
if (index_column == MSG_DB_DCREATED_INDEX) { if (index_column == MSG_DB_DCREATED_INDEX) {
QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx, role).value<qint64>()).toLocalTime(); QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx, role).value<qint64>()).toLocalTime();
if (m_customDateFormat.isEmpty()) { if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) {
return dt.toString(m_customTimeFormat);
}
else if (m_customDateFormat.isEmpty()) {
return QLocale().toString(dt, QLocale::FormatType::ShortFormat); return QLocale().toString(dt, QLocale::FormatType::ShortFormat);
} }
else { else {

View file

@ -91,6 +91,7 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer {
MessagesModelCache* m_cache; MessagesModelCache* m_cache;
MessageHighlighter m_messageHighlighter; MessageHighlighter m_messageHighlighter;
QString m_customDateFormat; QString m_customDateFormat;
QString m_customTimeFormat;
RootItem* m_selectedItem; RootItem* m_selectedItem;
QList<QString> m_headerData; QList<QString> m_headerData;
QList<QString> m_tooltipData; QList<QString> m_tooltipData;

View file

@ -49,8 +49,13 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
connect(m_ui->m_checkAutoUpdateOnlyUnfocused, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkAutoUpdateOnlyUnfocused, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkDisplayFeedIcons, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkDisplayFeedIcons, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkKeppMessagesInTheMiddle, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkKeppMessagesInTheMiddle, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, m_ui->m_cmbMessagesDateTimeFormat, &QComboBox::setEnabled); connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, m_ui->m_cmbMessagesDateTimeFormat, &QComboBox::setEnabled);
connect(m_ui->m_checkMessagesTimeFormat, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkMessagesTimeFormat, &QCheckBox::toggled, m_ui->m_cmbMessagesTimeFormat, &QComboBox::setEnabled);
connect(m_ui->m_checkRemoveReadMessagesOnExit, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkRemoveReadMessagesOnExit, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkBringToForegroundAfterMsgOpened, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkBringToForegroundAfterMsgOpened, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
@ -68,6 +73,8 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
&SettingsFeedsMessages::dirtifySettings); &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbMessagesDateTimeFormat, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, connect(m_ui->m_cmbMessagesDateTimeFormat, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&SettingsFeedsMessages::dirtifySettings); &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbMessagesTimeFormat, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbCountsFeedList, &QComboBox::currentTextChanged, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbCountsFeedList, &QComboBox::currentTextChanged, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbCountsFeedList, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, connect(m_ui->m_cmbCountsFeedList, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&SettingsFeedsMessages::dirtifySettings); &SettingsFeedsMessages::dirtifySettings);
@ -95,7 +102,7 @@ SettingsFeedsMessages::~SettingsFeedsMessages() {
} }
void SettingsFeedsMessages::initializeMessageDateFormats() { void SettingsFeedsMessages::initializeMessageDateFormats() {
QStringList best_formats; QStringList datetime_formats, time_formats;
const QDateTime current_dt = QDateTime::currentDateTime(); const QDateTime current_dt = QDateTime::currentDateTime();
const QLocale current_locale = qApp->localization()->loadedLocale(); const QLocale current_locale = qApp->localization()->loadedLocale();
auto installed_languages = qApp->localization()->installedLanguages(); auto installed_languages = qApp->localization()->installedLanguages();
@ -103,16 +110,24 @@ void SettingsFeedsMessages::initializeMessageDateFormats() {
for (const Language& lang : qAsConst(installed_languages)) { for (const Language& lang : qAsConst(installed_languages)) {
QLocale locale(lang.m_code); QLocale locale(lang.m_code);
best_formats << locale.dateTimeFormat(QLocale::FormatType::LongFormat) datetime_formats << locale.dateTimeFormat(QLocale::FormatType::LongFormat)
<< locale.dateTimeFormat(QLocale::FormatType::ShortFormat) << locale.dateTimeFormat(QLocale::FormatType::ShortFormat)
<< locale.dateTimeFormat(QLocale::FormatType::NarrowFormat); << locale.dateTimeFormat(QLocale::FormatType::NarrowFormat);
time_formats << locale.timeFormat(QLocale::FormatType::LongFormat)
<< locale.timeFormat(QLocale::FormatType::ShortFormat)
<< locale.timeFormat(QLocale::FormatType::NarrowFormat);
} }
best_formats.removeDuplicates(); datetime_formats.removeDuplicates();
time_formats.removeDuplicates();
for (const QString& format : qAsConst(best_formats)) { for (const QString& format : qAsConst(datetime_formats)) {
m_ui->m_cmbMessagesDateTimeFormat->addItem(current_locale.toString(current_dt, format), format); m_ui->m_cmbMessagesDateTimeFormat->addItem(current_locale.toString(current_dt, format), format);
} }
for (const QString& format : qAsConst(time_formats)) {
m_ui->m_cmbMessagesTimeFormat->addItem(current_locale.toString(current_dt, format), format);
}
} }
void SettingsFeedsMessages::changeFont(QLabel& lbl) { void SettingsFeedsMessages::changeFont(QLabel& lbl) {
@ -164,13 +179,23 @@ void SettingsFeedsMessages::loadSettings() {
#endif #endif
m_ui->m_checkMessagesDateTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool()); m_ui->m_checkMessagesDateTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool());
const int index_format = m_ui->m_cmbMessagesDateTimeFormat->findData(settings()->value(GROUP(Messages),
SETTING(Messages::CustomDateFormat)).toString()); int index_format = m_ui->m_cmbMessagesDateTimeFormat->findData(settings()->value(GROUP(Messages),
SETTING(Messages::CustomDateFormat)).toString());
if (index_format >= 0) { if (index_format >= 0) {
m_ui->m_cmbMessagesDateTimeFormat->setCurrentIndex(index_format); m_ui->m_cmbMessagesDateTimeFormat->setCurrentIndex(index_format);
} }
m_ui->m_checkMessagesTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool());
index_format = m_ui->m_cmbMessagesTimeFormat->findData(settings()->value(GROUP(Messages),
SETTING(Messages::CustomTimeFormat)).toString());
if (index_format >= 0) {
m_ui->m_cmbMessagesTimeFormat->setCurrentIndex(index_format);
}
QFont fon; QFont fon;
fon.fromString(settings()->value(GROUP(Messages), fon.fromString(settings()->value(GROUP(Messages),
@ -218,7 +243,6 @@ void SettingsFeedsMessages::saveSettings() {
settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateOnStartup, m_ui->m_checkUpdateAllFeedsOnStartup->isChecked()); settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateOnStartup, m_ui->m_checkUpdateAllFeedsOnStartup->isChecked());
settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateStartupDelay, m_ui->m_spinStartupUpdateDelay->value()); settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateStartupDelay, m_ui->m_spinStartupUpdateDelay->value());
settings()->setValue(GROUP(Feeds), Feeds::CountFormat, m_ui->m_cmbCountsFeedList->currentText()); settings()->setValue(GROUP(Feeds), Feeds::CountFormat, m_ui->m_cmbCountsFeedList->currentText());
settings()->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked());
settings()->setValue(GROUP(Feeds), Feeds::EnableTooltipsFeedsMessages, m_ui->m_checkShowTooltips->isChecked()); settings()->setValue(GROUP(Feeds), Feeds::EnableTooltipsFeedsMessages, m_ui->m_checkShowTooltips->isChecked());
settings()->setValue(GROUP(Messages), Messages::IgnoreContentsChanges, m_ui->m_cmbIgnoreContentsChanges->isChecked()); settings()->setValue(GROUP(Messages), Messages::IgnoreContentsChanges, m_ui->m_cmbIgnoreContentsChanges->isChecked());
@ -231,9 +255,15 @@ void SettingsFeedsMessages::saveSettings() {
m_ui->m_cbShowEnclosuresDirectly->isChecked()); m_ui->m_cbShowEnclosuresDirectly->isChecked());
#endif #endif
settings()->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked());
settings()->setValue(GROUP(Messages), Messages::UseCustomTime, m_ui->m_checkMessagesTimeFormat->isChecked());
settings()->setValue(GROUP(Messages), Messages::CustomDateFormat, settings()->setValue(GROUP(Messages), Messages::CustomDateFormat,
m_ui->m_cmbMessagesDateTimeFormat->itemData(m_ui->m_cmbMessagesDateTimeFormat->currentIndex()).toString()); m_ui->m_cmbMessagesDateTimeFormat->itemData(m_ui->m_cmbMessagesDateTimeFormat->currentIndex()).toString());
settings()->setValue(GROUP(Messages), Messages::CustomTimeFormat,
m_ui->m_cmbMessagesTimeFormat->itemData(m_ui->m_cmbMessagesTimeFormat->currentIndex()).toString());
// Save fonts. // Save fonts.
settings()->setValue(GROUP(Messages), Messages::PreviewerFontStandard, m_ui->m_lblMessagesFont->font().toString()); settings()->setValue(GROUP(Messages), Messages::PreviewerFontStandard, m_ui->m_lblMessagesFont->font().toString());
settings()->setValue(GROUP(Messages), Messages::ListFont, m_ui->m_lblMessageListFont->font().toString()); settings()->setValue(GROUP(Messages), Messages::ListFont, m_ui->m_lblMessageListFont->font().toString());

View file

@ -80,38 +80,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0">
<widget class="QGroupBox" name="groupBox_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Feed list font</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="m_lblFeedListFont">
<property name="text">
<string>Font preview</string>
</property>
<property name="buddy">
<cstring>m_btnChangeFeedListFont</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="m_btnChangeFeedListFont">
<property name="text">
<string>&amp;Change font</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
@ -173,7 +141,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
<string>Article count format in feed list</string> <string>Article count format in feed list</string>
@ -183,7 +151,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="7" column="1">
<widget class="QComboBox" name="m_cmbCountsFeedList"> <widget class="QComboBox" name="m_cmbCountsFeedList">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -199,7 +167,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0" colspan="2"> <item row="8" column="0" colspan="2">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="font"> <property name="font">
<font> <font>
@ -217,21 +185,21 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0" colspan="2"> <item row="9" column="0" colspan="2">
<widget class="QCheckBox" name="m_cbHideCountsIfNoUnread"> <widget class="QCheckBox" name="m_cbHideCountsIfNoUnread">
<property name="text"> <property name="text">
<string>Hide article counts if there are no unread articles</string> <string>Hide article counts if there are no unread articles</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0" colspan="2"> <item row="11" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkShowTooltips"> <widget class="QCheckBox" name="m_checkShowTooltips">
<property name="text"> <property name="text">
<string>Display tooltips for feeds and articles</string> <string>Display tooltips for feeds and articles</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="0" colspan="2"> <item row="12" column="0" colspan="2">
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -244,13 +212,45 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="9" column="0" colspan="2"> <item row="10" column="0" colspan="2">
<widget class="QCheckBox" name="m_cbListsRestrictedShortcuts"> <widget class="QCheckBox" name="m_cbListsRestrictedShortcuts">
<property name="text"> <property name="text">
<string>Allow only basic keyboard shortcuts for feed/article list</string> <string>Allow only basic keyboard shortcuts for feed/article list</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0">
<widget class="QGroupBox" name="groupBox_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Feed list font</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="m_lblFeedListFont">
<property name="text">
<string>Font preview</string>
</property>
<property name="buddy">
<cstring>m_btnChangeFeedListFont</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="m_btnChangeFeedListFont">
<property name="text">
<string>&amp;Change font</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="m_tabMessages"> <widget class="QWidget" name="m_tabMessages">
@ -375,7 +375,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0" colspan="2"> <item row="11" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QGroupBox" name="groupBox_5"> <widget class="QGroupBox" name="groupBox_5">
@ -444,7 +444,7 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="12" column="0" colspan="2"> <item row="13" column="0" colspan="2">
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -464,6 +464,29 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="1">
<widget class="QComboBox" name="m_cmbMessagesTimeFormat">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="m_checkMessagesTimeFormat">
<property name="text">
<string>Show only time for today articles</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@ -484,9 +507,9 @@
<tabstop>m_checkAutoUpdate</tabstop> <tabstop>m_checkAutoUpdate</tabstop>
<tabstop>m_spinAutoUpdateInterval</tabstop> <tabstop>m_spinAutoUpdateInterval</tabstop>
<tabstop>m_checkAutoUpdateOnlyUnfocused</tabstop> <tabstop>m_checkAutoUpdateOnlyUnfocused</tabstop>
<tabstop>m_btnChangeFeedListFont</tabstop>
<tabstop>m_spinFeedUpdateTimeout</tabstop> <tabstop>m_spinFeedUpdateTimeout</tabstop>
<tabstop>m_spinHeightRowsFeeds</tabstop> <tabstop>m_spinHeightRowsFeeds</tabstop>
<tabstop>m_btnChangeFeedListFont</tabstop>
<tabstop>m_cmbCountsFeedList</tabstop> <tabstop>m_cmbCountsFeedList</tabstop>
<tabstop>m_cbHideCountsIfNoUnread</tabstop> <tabstop>m_cbHideCountsIfNoUnread</tabstop>
<tabstop>m_cbListsRestrictedShortcuts</tabstop> <tabstop>m_cbListsRestrictedShortcuts</tabstop>
@ -502,6 +525,8 @@
<tabstop>m_spinHeightImageAttachments</tabstop> <tabstop>m_spinHeightImageAttachments</tabstop>
<tabstop>m_checkMessagesDateTimeFormat</tabstop> <tabstop>m_checkMessagesDateTimeFormat</tabstop>
<tabstop>m_cmbMessagesDateTimeFormat</tabstop> <tabstop>m_cmbMessagesDateTimeFormat</tabstop>
<tabstop>m_checkMessagesTimeFormat</tabstop>
<tabstop>m_cmbMessagesTimeFormat</tabstop>
<tabstop>m_btnChangeMessageListFont</tabstop> <tabstop>m_btnChangeMessageListFont</tabstop>
<tabstop>m_btnChangeMessagesFont</tabstop> <tabstop>m_btnChangeMessagesFont</tabstop>
</tabstops> </tabstops>

View file

@ -105,6 +105,12 @@ DVALUE(bool) Messages::UseCustomDateDef = false;
DKEY Messages::CustomDateFormat = "custom_date_format"; DKEY Messages::CustomDateFormat = "custom_date_format";
DVALUE(char*) Messages::CustomDateFormatDef = ""; DVALUE(char*) Messages::CustomDateFormatDef = "";
DKEY Messages::UseCustomTime = "use_custom_time";
DVALUE(bool) Messages::UseCustomTimeDef = false;
DKEY Messages::CustomTimeFormat = "custom_time_format";
DVALUE(QString) Messages::CustomTimeFormatDef = {};
DKEY Messages::ClearReadOnExit = "clear_read_on_exit"; DKEY Messages::ClearReadOnExit = "clear_read_on_exit";
DVALUE(bool) Messages::ClearReadOnExitDef = false; DVALUE(bool) Messages::ClearReadOnExitDef = false;

View file

@ -122,6 +122,12 @@ namespace Messages {
KEY CustomDateFormat; KEY CustomDateFormat;
VALUE(char*) CustomDateFormatDef; VALUE(char*) CustomDateFormatDef;
KEY UseCustomTime;
VALUE(bool) UseCustomTimeDef;
KEY CustomTimeFormat;
VALUE(QString) CustomTimeFormatDef;
KEY ClearReadOnExit; KEY ClearReadOnExit;
VALUE(bool) ClearReadOnExitDef; VALUE(bool) ClearReadOnExitDef;