From a57a6ab63f64d07a81eb978af9443c78b3d632be Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 8 Oct 2024 14:12:43 +0200 Subject: [PATCH] effectivelly implemented #1371 - added a switch to switch entire article list if all selected items are RTL --- src/librssguard/gui/messagesview.cpp | 18 ++++--- .../gui/settings/settingsfeedsmessages.cpp | 4 ++ .../gui/settings/settingsfeedsmessages.ui | 50 ++++++++++++------- .../qtextbrowser/textbrowserviewer.cpp | 9 +++- src/librssguard/miscellaneous/settings.cpp | 3 ++ src/librssguard/miscellaneous/settings.h | 3 ++ 6 files changed, 62 insertions(+), 25 deletions(-) diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index fe7fac94f..d85a2e23f 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -582,19 +582,25 @@ void MessagesView::loadItem(RootItem* item) { sort(col, ord, false, true, false, true); m_sourceModel->loadMessages(item); - /* - if (item->kind() == RootItem::Kind::Feed) { - if (item->toFeed()->isRtl()) { - setLayoutDirection(Qt::LayoutDirection::RightToLeft); + bool switch_entire_rtl_list = + qApp->settings()->value(GROUP(Messages), SETTING(Messages::SwitchArticleListRtl)).toBool(); + + if (switch_entire_rtl_list && item != nullptr) { + if (item->kind() == RootItem::Kind::Feed) { + setLayoutDirection(item->toFeed()->isRtl() ? Qt::LayoutDirection::RightToLeft : Qt::LayoutDirection::LeftToRight); } else { - setLayoutDirection(Qt::LayoutDirection::LeftToRight); + auto fds = item->getSubTreeFeeds(); + bool all_feeds_rtl = !fds.isEmpty() && std::all_of(fds.begin(), fds.end(), [](Feed* fd) { + return fd->isRtl(); + }); + + setLayoutDirection(all_feeds_rtl ? Qt::LayoutDirection::RightToLeft : Qt::LayoutDirection::LeftToRight); } } else { setLayoutDirection(Qt::LayoutDirection::LeftToRight); } - */ // Messages are loaded, make sure that previously // active message is not shown in browser. diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.cpp b/src/librssguard/gui/settings/settingsfeedsmessages.cpp index 24f85ad59..8a07e85bc 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.cpp +++ b/src/librssguard/gui/settings/settingsfeedsmessages.cpp @@ -96,6 +96,7 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent connect(m_ui->m_cmbIgnoreContentsChanges, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cbHideCountsIfNoUnread, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkAutoUpdate, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_checkSwitchArticleListRtl, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cbUpdateFeedListDuringFetching, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkAutoUpdateOnlyUnfocused, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbUnreadIconType, @@ -322,6 +323,8 @@ void SettingsFeedsMessages::loadSettings() { .toBool()); m_ui->m_checkKeppMessagesInTheMiddle ->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()); + m_ui->m_checkSwitchArticleListRtl + ->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::SwitchArticleListRtl)).toBool()); m_ui->m_checkRemoveReadMessagesOnExit ->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool()); m_ui->m_checkAutoUpdate->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateEnabled)).toBool()); @@ -457,6 +460,7 @@ void SettingsFeedsMessages::saveSettings() { settings()->setValue(GROUP(Messages), Messages::KeepCursorInCenter, m_ui->m_checkKeppMessagesInTheMiddle->isChecked()); + settings()->setValue(GROUP(Messages), Messages::SwitchArticleListRtl, m_ui->m_checkSwitchArticleListRtl->isChecked()); settings()->setValue(GROUP(Messages), Messages::ClearReadOnExit, m_ui->m_checkRemoveReadMessagesOnExit->isChecked()); settings()->setValue(GROUP(Feeds), Feeds::AutoUpdateEnabled, m_ui->m_checkAutoUpdate->isChecked()); settings()->setValue(GROUP(Feeds), Feeds::AutoUpdateOnlyUnfocused, m_ui->m_checkAutoUpdateOnlyUnfocused->isChecked()); diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.ui b/src/librssguard/gui/settings/settingsfeedsmessages.ui index a707b8078..65a04b0e0 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.ui +++ b/src/librssguard/gui/settings/settingsfeedsmessages.ui @@ -204,7 +204,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -349,7 +349,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -392,7 +392,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -448,14 +448,14 @@ - + Enable multiline items - + @@ -465,7 +465,7 @@ - + Row height @@ -475,7 +475,7 @@ - + @@ -494,7 +494,7 @@ - + Top/bottom row padding @@ -504,7 +504,7 @@ - + @@ -523,7 +523,7 @@ - + Use custom date/time format @@ -536,7 +536,7 @@ - + @@ -549,7 +549,7 @@ - + Use custom date/time format for dates-only @@ -562,7 +562,7 @@ - + @@ -575,7 +575,7 @@ - + Custom date/time format for today's articles @@ -588,7 +588,7 @@ - + @@ -601,14 +601,14 @@ - + Show relative time for articles not older than - + -1 @@ -618,7 +618,7 @@ - + Article list font @@ -680,6 +680,13 @@ + + + + Switch article list to RTL layout if all selected feeds are RTL + + + @@ -730,6 +737,7 @@ m_btnChangeMessagesFont m_cmbUnreadIconType m_checkKeppMessagesInTheMiddle + m_checkSwitchArticleListRtl m_checkMultilineArticleList m_spinHeightRowsMessages m_spinPaddingRowsMessages @@ -741,6 +749,12 @@ m_btnChangeMessageListFont m_gbFeedListFont m_gbArticleListFont + m_tabFeedsMessages + m_cbLegacyArticleFormatting + m_checkMessagesDateTimeFormatForDatesOnly + m_cmbMessagesDateTimeFormatForDatesOnly + m_cmbArticleMarkingPolicy + m_spinArticleMarkingPolicy diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp index 0f6ddf63a..c1dd9a97a 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp @@ -126,8 +126,15 @@ QVariant TextBrowserViewer::loadOneResource(int type, const QUrl& name) { QByteArray save_arr; QBuffer save_buf(&save_arr, this); - if (img.save(&save_buf, "PNG", 100)) { + if (img.save(&save_buf, "JPG", 100)) { save_buf.close(); + + IOFactory::writeFile(QSL("%1%2.jpg") + .arg(name.toString(QUrl::ComponentFormattingOption::FullyEncoded), + QString::number(acceptable_width)) + .remove(QRegularExpression(":|\\/")), + save_arr); + resource_data_all_sizes.insert(acceptable_width, save_arr); } else { diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index 58d5f2141..a5d271687 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -217,6 +217,9 @@ DVALUE(int) Messages::ArticleListPaddingDef = -1; DKEY Messages::MultilineArticleList = "multiline_article_list"; DVALUE(bool) Messages::MultilineArticleListDef = false; +DKEY Messages::SwitchArticleListRtl = "switch_article_list_rtl"; +DVALUE(bool) Messages::SwitchArticleListRtlDef = true; + DKEY Messages::UseCustomTime = "use_custom_time"; DVALUE(bool) Messages::UseCustomTimeDef = false; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 147c19119..77b748ee4 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -218,6 +218,9 @@ namespace Messages { KEY MultilineArticleList; VALUE(bool) MultilineArticleListDef; + KEY SwitchArticleListRtl; + VALUE(bool) SwitchArticleListRtlDef; + KEY CustomTimeFormat; VALUE(QString) CustomTimeFormatDef;