try to fix #697 upstream

This commit is contained in:
Martin Rotter 2022-04-21 09:23:29 +02:00
parent 3ccce27dd5
commit ac1b88b481
6 changed files with 471 additions and 317 deletions

View File

@ -53,7 +53,8 @@
FormMain::FormMain(QWidget* parent, Qt::WindowFlags f)
: QMainWindow(parent, f), m_ui(new Ui::FormMain), m_trayMenu(nullptr), m_statusBar(nullptr) {
qDebugNN << LOGSEC_GUI << "Creating main application form in thread:" << QUOTE_W_SPACE_DOT(QThread::currentThreadId());
qDebugNN << LOGSEC_GUI
<< "Creating main application form in thread:" << QUOTE_W_SPACE_DOT(QThread::currentThreadId());
m_ui->setupUi(this);
qApp->setMainForm(this);
@ -148,10 +149,10 @@ void FormMain::showDbCleanupAssistant() {
qApp->feedReader()->feedsModel()->reloadCountsOfWholeModel();
}
else {
qApp->showGuiMessage(Notification::Event::GeneralEvent, {
tr("Cannot cleanup database"),
tr("Cannot cleanup database, because another critical action is running."),
QSystemTrayIcon::MessageIcon::Warning });
qApp->showGuiMessage(Notification::Event::GeneralEvent,
{tr("Cannot cleanup database"),
tr("Cannot cleanup database, because another critical action is running."),
QSystemTrayIcon::MessageIcon::Warning});
}
}
@ -298,25 +299,21 @@ void FormMain::updateAddItemMenu() {
QList<QAction*> specific_root_actions = activated_root->addItemMenu();
if (activated_root->supportsCategoryAdding()) {
QAction* action_new_category = new QAction(qApp->icons()->fromTheme(QSL("folder")),
tr("Add new category"),
m_ui->m_menuAddItem);
QAction* action_new_category =
new QAction(qApp->icons()->fromTheme(QSL("folder")), tr("Add new category"), m_ui->m_menuAddItem);
root_menu->addAction(action_new_category);
connect(action_new_category, &QAction::triggered,
activated_root, [activated_root]() {
connect(action_new_category, &QAction::triggered, activated_root, [activated_root]() {
activated_root->addNewCategory(activated_root);
});
}
if (activated_root->supportsFeedAdding()) {
QAction* action_new_feed = new QAction(qApp->icons()->fromTheme(QSL("application-rss+xml")),
tr("Add new feed"),
m_ui->m_menuAddItem);
QAction* action_new_feed =
new QAction(qApp->icons()->fromTheme(QSL("application-rss+xml")), tr("Add new feed"), m_ui->m_menuAddItem);
root_menu->addAction(action_new_feed);
connect(action_new_feed, &QAction::triggered,
activated_root, [activated_root]() {
connect(action_new_feed, &QAction::triggered, activated_root, [activated_root]() {
activated_root->addNewFeed(activated_root);
});
}
@ -356,17 +353,15 @@ void FormMain::updateRecycleBinMenu() {
QList<QAction*> context_menu;
if (bin == nullptr) {
QAction* no_action = new QAction(qApp->icons()->fromTheme(QSL("dialog-error")),
tr("No recycle bin"),
m_ui->m_menuRecycleBin);
QAction* no_action =
new QAction(qApp->icons()->fromTheme(QSL("dialog-error")), tr("No recycle bin"), m_ui->m_menuRecycleBin);
no_action->setEnabled(false);
root_menu->addAction(no_action);
}
else if ((context_menu = bin->contextMenuFeedsList()).isEmpty()) {
QAction* no_action = new QAction(qApp->icons()->fromTheme(QSL("dialog-error")),
tr("No actions possible"),
m_ui->m_menuRecycleBin);
QAction* no_action =
new QAction(qApp->icons()->fromTheme(QSL("dialog-error")), tr("No actions possible"), m_ui->m_menuRecycleBin);
no_action->setEnabled(false);
root_menu->addAction(no_action);
@ -399,9 +394,8 @@ void FormMain::updateAccountsMenu() {
QList<QAction*> root_actions = activated_root->serviceMenu();
if (root_actions.isEmpty()) {
QAction* no_action = new QAction(qApp->icons()->fromTheme(QSL("dialog-error")),
tr("No possible actions"),
m_ui->m_menuAccounts);
QAction* no_action =
new QAction(qApp->icons()->fromTheme(QSL("dialog-error")), tr("No possible actions"), m_ui->m_menuAccounts);
no_action->setEnabled(false);
root_menu->addAction(no_action);
@ -440,15 +434,17 @@ void FormMain::onFeedUpdatesStarted() {
}
void FormMain::onFeedUpdatesProgress(const Feed* feed, int current, int total) {
statusBar()->showProgressFeeds(int((current * 100.0) / total),
feed->sanitizedTitle());
statusBar()->showProgressFeeds(int((current * 100.0) / total), feed->sanitizedTitle());
}
void FormMain::updateMessageButtonsAvailability() {
const bool one_message_selected = tabWidget()->feedMessageViewer()->messagesView()->selectionModel()->selectedRows().size() == 1;
const bool atleast_one_message_selected = !tabWidget()->feedMessageViewer()->messagesView()->selectionModel()->selectedRows().isEmpty();
const bool bin_loaded = tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->loadedItem() != nullptr
&& tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->loadedItem()->kind() == RootItem::Kind::Bin;
const bool one_message_selected =
tabWidget()->feedMessageViewer()->messagesView()->selectionModel()->selectedRows().size() == 1;
const bool atleast_one_message_selected =
!tabWidget()->feedMessageViewer()->messagesView()->selectionModel()->selectedRows().isEmpty();
const bool bin_loaded =
tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->loadedItem() != nullptr &&
tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->loadedItem()->kind() == RootItem::Kind::Bin;
m_ui->m_actionDeleteSelectedMessages->setEnabled(atleast_one_message_selected);
m_ui->m_actionRestoreSelectedMessages->setEnabled(atleast_one_message_selected && bin_loaded);
@ -483,7 +479,8 @@ void FormMain::updateFeedButtonsAvailability() {
m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(anything_selected);
m_ui->m_actionUpdateAllItems->setEnabled(!critical_action_running);
m_ui->m_actionUpdateSelectedItemsWithCustomTimers->setEnabled(!critical_action_running);
m_ui->m_actionUpdateSelectedItems->setEnabled(!critical_action_running && (feed_selected || category_selected || service_selected));
m_ui->m_actionUpdateSelectedItems->setEnabled(!critical_action_running &&
(feed_selected || category_selected || service_selected));
m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(anything_selected);
m_ui->m_actionExpandCollapseItem->setEnabled(category_selected || service_selected);
m_ui->m_actionExpandCollapseItemRecursively->setEnabled(category_selected || service_selected);
@ -495,10 +492,11 @@ void FormMain::updateFeedButtonsAvailability() {
m_ui->m_menuAccounts->setEnabled(!critical_action_running);
m_ui->m_menuRecycleBin->setEnabled(!critical_action_running);
m_ui->m_actionFeedMoveUp->setEnabled(manual_feed_sort &&(feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveDown->setEnabled(manual_feed_sort &&(feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveTop->setEnabled(manual_feed_sort &&(feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveBottom->setEnabled(manual_feed_sort &&(feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveUp->setEnabled(manual_feed_sort && (feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveDown->setEnabled(manual_feed_sort && (feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveTop->setEnabled(manual_feed_sort && (feed_selected || category_selected || service_selected));
m_ui->m_actionFeedMoveBottom->setEnabled(manual_feed_sort &&
(feed_selected || category_selected || service_selected));
}
void FormMain::switchVisibility(bool force_hide) {
@ -506,10 +504,10 @@ void FormMain::switchVisibility(bool force_hide) {
if (SystemTrayIcon::isSystemTrayDesired() && SystemTrayIcon::isSystemTrayAreaAvailable()) {
if (QApplication::activeModalWidget() != nullptr) {
qApp->showGuiMessage(Notification::Event::GeneralEvent, {
tr("Close dialogs"),
tr("Close opened modal dialogs first."),
QSystemTrayIcon::MessageIcon::Warning });
qApp->showGuiMessage(Notification::Event::GeneralEvent,
{tr("Close dialogs"),
tr("Close opened modal dialogs first."),
QSystemTrayIcon::MessageIcon::Warning});
}
else {
hide();
@ -572,7 +570,8 @@ void FormMain::setupIcons() {
m_ui->m_actionStopRunningItemsUpdate->setIcon(icon_theme_factory->fromTheme(QSL("process-stop")));
m_ui->m_actionUpdateAllItems->setIcon(icon_theme_factory->fromTheme(QSL("download"), QSL("browser-download")));
m_ui->m_actionUpdateSelectedItems->setIcon(icon_theme_factory->fromTheme(QSL("download"), QSL("browser-download")));
m_ui->m_actionUpdateSelectedItemsWithCustomTimers->setIcon(icon_theme_factory->fromTheme(QSL("download"), QSL("browser-download")));
m_ui->m_actionUpdateSelectedItemsWithCustomTimers->setIcon(icon_theme_factory->fromTheme(QSL("download"),
QSL("browser-download")));
m_ui->m_actionClearSelectedItems->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-junk")));
m_ui->m_actionClearAllItems->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-junk")));
m_ui->m_actionDeleteSelectedItem->setIcon(icon_theme_factory->fromTheme(QSL("list-remove")));
@ -654,7 +653,8 @@ void FormMain::loadSize() {
qApp->processEvents();
}
m_ui->m_actionMessagePreviewEnabled->setChecked(settings->value(GROUP(Messages), SETTING(Messages::EnableMessagePreview)).toBool());
m_ui->m_actionMessagePreviewEnabled
->setChecked(settings->value(GROUP(Messages), SETTING(Messages::EnableMessagePreview)).toBool());
// If user exited the application while in fullsreen mode,
// then re-enable it now.
@ -669,20 +669,20 @@ void FormMain::loadSize() {
m_ui->m_tabWidget->feedMessageViewer()->loadSize();
m_ui->m_actionSwitchToolBars->setChecked(settings->value(GROUP(GUI), SETTING(GUI::ToolbarsVisible)).toBool());
m_ui->m_actionSwitchListHeaders->setChecked(settings->value(GROUP(GUI), SETTING(GUI::ListHeadersVisible)).toBool());
m_ui->m_actionSwitchMessageViewerToolbars->setChecked(settings->value(GROUP(GUI), SETTING(GUI::MessageViewerToolbarsVisible)).toBool());
m_ui->m_actionSwitchMessageViewerToolbars
->setChecked(settings->value(GROUP(GUI), SETTING(GUI::MessageViewerToolbarsVisible)).toBool());
m_ui->m_actionSwitchStatusBar->setChecked(settings->value(GROUP(GUI), SETTING(GUI::StatusBarVisible)).toBool());
// Other startup GUI-related settings.
m_ui->m_actionSortFeedsAlphabetically->setChecked(settings->value(GROUP(Feeds),
SETTING(Feeds::SortAlphabetically)).toBool());
m_ui->m_actionShowOnlyUnreadItems->setChecked(settings->value(GROUP(Feeds),
SETTING(Feeds::ShowOnlyUnreadFeeds)).toBool());
m_ui->m_actionShowTreeBranches->setChecked(settings->value(GROUP(Feeds),
SETTING(Feeds::ShowTreeBranches)).toBool());
m_ui->m_actionAutoExpandItemsWhenSelected->setChecked(settings->value(GROUP(Feeds),
SETTING(Feeds::AutoExpandOnSelection)).toBool());
m_ui->m_actionAlternateColorsInLists->setChecked(settings->value(GROUP(GUI),
SETTING(GUI::AlternateRowColorsInLists)).toBool());
m_ui->m_actionSortFeedsAlphabetically
->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::SortAlphabetically)).toBool());
m_ui->m_actionShowOnlyUnreadItems
->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::ShowOnlyUnreadFeeds)).toBool());
m_ui->m_actionShowTreeBranches->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::ShowTreeBranches)).toBool());
m_ui->m_actionAutoExpandItemsWhenSelected
->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::AutoExpandOnSelection)).toBool());
m_ui->m_actionAlternateColorsInLists
->setChecked(settings->value(GROUP(GUI), SETTING(GUI::AlternateRowColorsInLists)).toBool());
}
void FormMain::saveSize() {
@ -734,8 +734,10 @@ void FormMain::createConnections() {
connect(m_ui->m_actionRestart, &QAction::triggered, qApp, &Application::restart);
// Menu "View" connections.
connect(m_ui->m_actionSwitchFeedsList, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::switchFeedComponentVisibility);
connect(m_ui->m_actionSwitchFeedsList,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::switchFeedComponentVisibility);
connect(m_ui->m_actionFullscreen, &QAction::toggled, this, &FormMain::switchFullscreenMode);
connect(m_ui->m_actionSwitchMainMenu, &QAction::toggled, m_ui->m_menuBar, &QMenuBar::setVisible);
connect(m_ui->m_actionSwitchMainWindow, &QAction::triggered, this, &FormMain::switchVisibility);
@ -765,131 +767,228 @@ void FormMain::createConnections() {
// Tab widget connections.
connect(m_ui->m_actionTabsNext, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::gotoNextTab);
connect(m_ui->m_actionTabsPrevious, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::gotoPreviousTab);
connect(m_ui->m_actionTabsCloseAllExceptCurrent, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabsExceptCurrent);
connect(m_ui->m_actionTabsCloseAllExceptCurrent,
&QAction::triggered,
m_ui->m_tabWidget,
&TabWidget::closeAllTabsExceptCurrent);
connect(m_ui->m_actionTabsCloseAll, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabs);
connect(m_ui->m_actionTabsCloseCurrent, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeCurrentTab);
connect(m_ui->m_actionTabNewWebBrowser, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::addEmptyBrowser);
connect(tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::itemSelected, this, &FormMain::updateFeedButtonsAvailability);
connect(tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::itemSelected,
this,
&FormMain::updateFeedButtonsAvailability);
connect(qApp->feedUpdateLock(), &Mutex::locked, this, &FormMain::updateFeedButtonsAvailability);
connect(qApp->feedUpdateLock(), &Mutex::unlocked, this, &FormMain::updateFeedButtonsAvailability);
connect(tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::currentMessageRemoved,
this, &FormMain::updateMessageButtonsAvailability);
connect(tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::currentMessageChanged,
this, &FormMain::updateMessageButtonsAvailability);
connect(tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::currentMessageRemoved,
this,
&FormMain::updateMessageButtonsAvailability);
connect(tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::currentMessageChanged,
this,
&FormMain::updateMessageButtonsAvailability);
connect(tabWidget(), &TabWidget::currentChanged, this, &FormMain::updateTabsButtonsAvailability);
connect(qApp->feedReader(), &FeedReader::feedUpdatesStarted, this, &FormMain::onFeedUpdatesStarted);
connect(qApp->feedReader(), &FeedReader::feedUpdatesProgress, this, &FormMain::onFeedUpdatesProgress);
connect(qApp->feedReader(), &FeedReader::feedUpdatesFinished, this, &FormMain::onFeedUpdatesFinished);
// Toolbar forwardings.
connect(m_ui->m_actionAddFeedIntoSelectedItem, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::addFeedIntoSelectedAccount);
connect(m_ui->m_actionAddCategoryIntoSelectedItem, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::addCategoryIntoSelectedAccount);
connect(m_ui->m_actionAddFeedIntoSelectedItem,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::addFeedIntoSelectedAccount);
connect(m_ui->m_actionAddCategoryIntoSelectedItem,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::addCategoryIntoSelectedAccount);
connect(m_ui->m_actionSwitchImportanceOfSelectedMessages,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::switchSelectedMessagesImportance);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::switchSelectedMessagesImportance);
connect(m_ui->m_actionDeleteSelectedMessages,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::deleteSelectedMessages);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::deleteSelectedMessages);
connect(m_ui->m_actionMarkSelectedMessagesAsRead,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::markSelectedMessagesRead);
connect(m_ui->m_actionMarkSelectedMessagesAsUnread, &QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::markSelectedMessagesUnread);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::markSelectedMessagesRead);
connect(m_ui->m_actionMarkSelectedMessagesAsUnread,
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::markSelectedMessagesUnread);
connect(m_ui->m_actionOpenSelectedSourceArticlesExternally,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::openSelectedSourceMessagesExternally);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::openSelectedSourceMessagesExternally);
connect(m_ui->m_actionOpenSelectedMessagesInternally,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::openSelectedMessagesInternally);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::openSelectedMessagesInternally);
connect(m_ui->m_actionOpenSelectedMessagesInternallyNoTab,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::openSelectedMessageUrl);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::openSelectedMessageUrl);
connect(m_ui->m_actionSendMessageViaEmail,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::sendSelectedMessageViaEmail);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::sendSelectedMessageViaEmail);
connect(m_ui->m_actionMarkAllItemsRead,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::markAllItemsRead);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::markAllItemsRead);
connect(m_ui->m_actionMarkSelectedItemsAsRead,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::markSelectedItemRead);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::markSelectedItemRead);
connect(m_ui->m_actionExpandCollapseItem,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
[this]() {
tabWidget()->feedMessageViewer()->feedsView()->expandCollapseCurrentItem(false);
});
tabWidget()->feedMessageViewer()->feedsView()->expandCollapseCurrentItem(false);
});
connect(m_ui->m_actionExpandCollapseItemRecursively,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
[this]() {
tabWidget()->feedMessageViewer()->feedsView()->expandCollapseCurrentItem(true);
});
tabWidget()->feedMessageViewer()->feedsView()->expandCollapseCurrentItem(true);
});
connect(m_ui->m_actionMarkSelectedItemsAsUnread,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::markSelectedItemUnread);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::markSelectedItemUnread);
connect(m_ui->m_actionClearSelectedItems,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::clearSelectedFeeds);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::clearSelectedFeeds);
connect(m_ui->m_actionClearAllItems,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::clearAllFeeds);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::clearAllFeeds);
connect(m_ui->m_actionUpdateSelectedItems,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::updateSelectedItems);
connect(m_ui->m_actionUpdateAllItems,
&QAction::triggered, qApp->feedReader(), &FeedReader::updateAllFeeds);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::updateSelectedItems);
connect(m_ui->m_actionUpdateAllItems, &QAction::triggered, qApp->feedReader(), &FeedReader::updateAllFeeds);
connect(m_ui->m_actionUpdateSelectedItemsWithCustomTimers,
&QAction::triggered, qApp->feedReader(), &FeedReader::updateManuallyIntervaledFeeds);
&QAction::triggered,
qApp->feedReader(),
&FeedReader::updateManuallyIntervaledFeeds);
connect(m_ui->m_actionStopRunningItemsUpdate,
&QAction::triggered, qApp->feedReader(), &FeedReader::stopRunningFeedUpdate);
&QAction::triggered,
qApp->feedReader(),
&FeedReader::stopRunningFeedUpdate);
connect(m_ui->m_actionCopyUrlSelectedFeed,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::copyUrlOfSelectedFeeds);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::copyUrlOfSelectedFeeds);
connect(m_ui->m_actionCopyUrlSelectedArticles,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::copyUrlOfSelectedArticles);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::copyUrlOfSelectedArticles);
connect(m_ui->m_actionEditSelectedItem,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::editSelectedItem);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::editSelectedItem);
connect(m_ui->m_actionViewSelectedItemsNewspaperMode,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::openSelectedItemsInNewspaperMode);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::openSelectedItemsInNewspaperMode);
connect(m_ui->m_actionDeleteSelectedItem,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::deleteSelectedItem);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::deleteSelectedItem);
connect(m_ui->m_actionSelectNextItem,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::selectNextItem);
connect(m_ui->m_actionSwitchToolBars, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::setToolBarsEnabled);
connect(m_ui->m_actionSwitchListHeaders, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::setListHeadersEnabled);
connect(m_ui->m_actionSwitchMessageViewerToolbars, &QAction::toggled,
tabWidget()->feedMessageViewer()->messagesBrowser(), &MessagePreviewer::setToolbarsVisible);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::selectNextItem);
connect(m_ui->m_actionSwitchToolBars,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::setToolBarsEnabled);
connect(m_ui->m_actionSwitchListHeaders,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::setListHeadersEnabled);
connect(m_ui->m_actionSwitchMessageViewerToolbars,
&QAction::toggled,
tabWidget()->feedMessageViewer()->messagesBrowser(),
&MessagePreviewer::setToolbarsVisible);
connect(m_ui->m_actionSelectPreviousItem,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::selectPreviousItem);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::selectPreviousItem);
connect(m_ui->m_actionSelectNextMessage,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::selectNextItem);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::selectNextItem);
connect(m_ui->m_actionSelectNextUnreadMessage,
&QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::selectNextUnreadItem);
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::selectNextUnreadItem);
connect(m_ui->m_actionSelectPreviousMessage,
&QAction::triggered, tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::selectPreviousItem);
connect(m_ui->m_actionSwitchMessageListOrientation, &QAction::triggered,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::switchMessageSplitterOrientation);
connect(m_ui->m_actionShowOnlyUnreadItems, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowOnlyUnreadFeeds);
connect(m_ui->m_actionSortFeedsAlphabetically, &QAction::toggled,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::toggleFeedSortingMode);
connect(m_ui->m_actionShowTreeBranches, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowFeedTreeBranches);
connect(m_ui->m_actionAutoExpandItemsWhenSelected, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleItemsAutoExpandingOnSelection);
connect(m_ui->m_actionAlternateColorsInLists, &QAction::toggled,
tabWidget()->feedMessageViewer(), &FeedMessageViewer::alternateRowColorsInLists);
connect(m_ui->m_actionRestoreSelectedMessages, &QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::restoreSelectedMessages);
connect(m_ui->m_actionRestoreAllRecycleBins, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView()->sourceModel(), &FeedsModel::restoreAllBins);
connect(m_ui->m_actionEmptyAllRecycleBins, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView()->sourceModel(), &FeedsModel::emptyAllBins);
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::selectPreviousItem);
connect(m_ui->m_actionSwitchMessageListOrientation,
&QAction::triggered,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::switchMessageSplitterOrientation);
connect(m_ui->m_actionShowOnlyUnreadItems,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::toggleShowOnlyUnreadFeeds);
connect(m_ui->m_actionSortFeedsAlphabetically,
&QAction::toggled,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::toggleFeedSortingMode);
connect(m_ui->m_actionShowTreeBranches,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::toggleShowFeedTreeBranches);
connect(m_ui->m_actionAutoExpandItemsWhenSelected,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::toggleItemsAutoExpandingOnSelection);
connect(m_ui->m_actionAlternateColorsInLists,
&QAction::toggled,
tabWidget()->feedMessageViewer(),
&FeedMessageViewer::alternateRowColorsInLists);
connect(m_ui->m_actionRestoreSelectedMessages,
&QAction::triggered,
tabWidget()->feedMessageViewer()->messagesView(),
&MessagesView::restoreSelectedMessages);
connect(m_ui->m_actionRestoreAllRecycleBins,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView()->sourceModel(),
&FeedsModel::restoreAllBins);
connect(m_ui->m_actionEmptyAllRecycleBins,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView()->sourceModel(),
&FeedsModel::emptyAllBins);
connect(m_ui->m_actionMessageFilters, &QAction::triggered, this, [this]() {
qApp->feedReader()->showMessageFiltersManager();
tabWidget()->feedMessageViewer()->messagesView()->reloadSelections();
});
connect(m_ui->m_actionFeedMoveUp, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::moveSelectedItemUp);
connect(m_ui->m_actionFeedMoveDown, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::moveSelectedItemDown);
connect(m_ui->m_actionFeedMoveTop, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::moveSelectedItemTop);
connect(m_ui->m_actionFeedMoveBottom, &QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::moveSelectedItemBottom);
connect(m_ui->m_actionFeedMoveUp,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::moveSelectedItemUp);
connect(m_ui->m_actionFeedMoveDown,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::moveSelectedItemDown);
connect(m_ui->m_actionFeedMoveTop,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::moveSelectedItemTop);
connect(m_ui->m_actionFeedMoveBottom,
&QAction::triggered,
tabWidget()->feedMessageViewer()->feedsView(),
&FeedsView::moveSelectedItemBottom);
}
void FormMain::backupDatabaseSettings() {
@ -912,8 +1011,7 @@ void FormMain::changeEvent(QEvent* event) {
switch (event->type()) {
case QEvent::Type::WindowStateChange: {
if ((windowState() & Qt::WindowState::WindowMinimized) == Qt::WindowState::WindowMinimized &&
SystemTrayIcon::isSystemTrayDesired() &&
SystemTrayIcon::isSystemTrayAreaAvailable() &&
SystemTrayIcon::isSystemTrayDesired() && SystemTrayIcon::isSystemTrayAreaAvailable() &&
qApp->settings()->value(GROUP(GUI), SETTING(GUI::HideMainWindowWhenMinimized)).toBool()) {
event->ignore();
QTimer::singleShot(CHANGE_EVENT_DELAY, this, [this]() {

View File

@ -24,17 +24,20 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
initializeMessageDateFormats();
m_ui->m_helpCountsFeedsFormat->setHelpText(tr("Enter format for count of articles displayed next to each "
"feed/category in feed list. Use \"%all\" and \"%unread\" strings "
"which are placeholders for the actual count of all (or unread) articles."),
false);
m_ui->m_helpCountsFeedsFormat
->setHelpText(tr("Enter format for count of articles displayed next to each "
"feed/category in feed list. Use \"%all\" and \"%unread\" strings "
"which are placeholders for the actual count of all (or unread) articles."),
false);
m_ui->m_helpMultilineArticleList->setHelpText(tr("Note that enabling this might have drastic consequences on "
"performance of article list with big number of articles."),
true);
connect(m_ui->m_cbShowEnclosuresDirectly, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightImageAttachments, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightImageAttachments,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinRelativeArticleTime, QOverload<int>::of(&QSpinBox::valueChanged), this, [=](int value) {
if (value <= 0) {
@ -45,6 +48,15 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
}
});
connect(m_ui->m_spinHeightImageAttachments, QOverload<int>::of(&QSpinBox::valueChanged), this, [=](int value) {
if (value <= 0) {
m_ui->m_spinHeightImageAttachments->setSuffix(QSL(" px") + tr(" = unchanged size"));
}
else {
m_ui->m_spinHeightImageAttachments->setSuffix(QSL(" px"));
}
});
connect(m_ui->m_cbListsRestrictedShortcuts, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbIgnoreContentsChanges, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cbHideCountsIfNoUnread, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
@ -54,60 +66,96 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
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, 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_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_spinAutoUpdateInterval, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinStartupUpdateDelay, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinAutoUpdateInterval,
static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinStartupUpdateDelay,
static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinHeightRowsMessages,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsMessages,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinHeightRowsFeeds, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsFeeds, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinHeightRowsFeeds,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsFeeds,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinPaddingRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinPaddingRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinPaddingRowsMessages,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinPaddingRowsMessages,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinRelativeArticleTime, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinRelativeArticleTime,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkAutoUpdate, &QCheckBox::toggled, m_ui->m_spinAutoUpdateInterval, &TimeSpinBox::setEnabled);
connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, m_ui->m_spinStartupUpdateDelay, &TimeSpinBox::setEnabled);
connect(m_ui->m_spinFeedUpdateTimeout, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
connect(m_ui->m_checkUpdateAllFeedsOnStartup,
&QCheckBox::toggled,
m_ui->m_spinStartupUpdateDelay,
&TimeSpinBox::setEnabled);
connect(m_ui->m_spinFeedUpdateTimeout,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbMessagesDateTimeFormat, &QComboBox::currentTextChanged, this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbMessagesTimeFormat, &QComboBox::currentTextChanged, this,
connect(m_ui->m_cmbMessagesDateTimeFormat,
&QComboBox::currentTextChanged,
this,
&SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbMessagesTimeFormat, &QComboBox::currentTextChanged, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cbFixupArticleDatetime, &QCheckBox::toggled, 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);
connect(m_ui->m_checkShowTooltips, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkMultilineArticleList, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_checkMultilineArticleList, &QCheckBox::toggled, this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_cmbMessagesDateTimeFormat, &QComboBox::currentTextChanged,
this, &SettingsFeedsMessages::updateDateTimeTooltip);
connect(m_ui->m_cmbMessagesTimeFormat, &QComboBox::currentTextChanged,
this, &SettingsFeedsMessages::updateDateTimeTooltip);
connect(m_ui->m_cmbMessagesDateTimeFormat,
&QComboBox::currentTextChanged,
this,
&SettingsFeedsMessages::updateDateTimeTooltip);
connect(m_ui->m_cmbMessagesTimeFormat,
&QComboBox::currentTextChanged,
this,
&SettingsFeedsMessages::updateDateTimeTooltip);
emit m_ui->m_cmbMessagesDateTimeFormat->currentTextChanged({});
emit m_ui->m_cmbMessagesTimeFormat->currentTextChanged({});
@ -153,9 +201,7 @@ void SettingsFeedsMessages::initializeMessageDateFormats() {
void SettingsFeedsMessages::changeFont(QLabel& lbl) {
bool ok;
QFont new_font = QFontDialog::getFont(&ok, lbl.font(),
this, tr("Select new font"),
QFontDialog::DontUseNativeDialog);
QFont new_font = QFontDialog::getFont(&ok, lbl.font(), this, tr("Select new font"), QFontDialog::DontUseNativeDialog);
if (ok) {
lbl.setFont(new_font);
@ -166,70 +212,82 @@ void SettingsFeedsMessages::changeFont(QLabel& lbl) {
void SettingsFeedsMessages::loadSettings() {
onBeginLoadSettings();
m_ui->m_spinRelativeArticleTime->setValue(settings()->value(GROUP(Messages), SETTING(Messages::RelativeTimeForNewerArticles)).toInt());
m_ui->m_spinPaddingRowsMessages->setValue(settings()->value(GROUP(Messages), SETTING(Messages::ArticleListPadding)).toInt());
m_ui->m_spinRelativeArticleTime
->setValue(settings()->value(GROUP(Messages), SETTING(Messages::RelativeTimeForNewerArticles)).toInt());
m_ui->m_spinPaddingRowsMessages
->setValue(settings()->value(GROUP(Messages), SETTING(Messages::ArticleListPadding)).toInt());
m_ui->m_spinHeightRowsMessages->setValue(settings()->value(GROUP(GUI), SETTING(GUI::HeightRowMessages)).toInt());
m_ui->m_spinHeightRowsFeeds->setValue(settings()->value(GROUP(GUI), SETTING(GUI::HeightRowFeeds)).toInt());
m_ui->m_cbListsRestrictedShortcuts->setChecked(settings()->value(GROUP(Feeds),
SETTING(Feeds::OnlyBasicShortcutsInLists)).toBool());
m_ui->m_cbHideCountsIfNoUnread->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::HideCountsIfNoUnread)).toBool());
m_ui->m_checkDisplayFeedIcons->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::DisplayFeedIconsInList)).toBool());
m_ui->m_checkBringToForegroundAfterMsgOpened->setChecked(settings()->value(GROUP(Messages),
SETTING(Messages::BringAppToFrontAfterMessageOpenedExternally)).toBool());
m_ui->m_checkKeppMessagesInTheMiddle->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool());
m_ui->m_checkRemoveReadMessagesOnExit->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool());
m_ui->m_cbListsRestrictedShortcuts
->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::OnlyBasicShortcutsInLists)).toBool());
m_ui->m_cbHideCountsIfNoUnread
->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::HideCountsIfNoUnread)).toBool());
m_ui->m_checkDisplayFeedIcons
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::DisplayFeedIconsInList)).toBool());
m_ui->m_checkBringToForegroundAfterMsgOpened
->setChecked(settings()
->value(GROUP(Messages), SETTING(Messages::BringAppToFrontAfterMessageOpenedExternally))
.toBool());
m_ui->m_checkKeppMessagesInTheMiddle
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).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());
m_ui->m_checkAutoUpdateOnlyUnfocused->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateOnlyUnfocused)).toBool());
m_ui->m_checkAutoUpdateOnlyUnfocused
->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateOnlyUnfocused)).toBool());
m_ui->m_spinAutoUpdateInterval->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateInterval)).toInt());
m_ui->m_spinFeedUpdateTimeout->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt());
m_ui->m_checkUpdateAllFeedsOnStartup->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateOnStartup)).toBool());
m_ui->m_spinStartupUpdateDelay->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateStartupDelay)).toDouble());
m_ui->m_cmbCountsFeedList->addItems({ QSL("(%unread)"), QSL("[%unread]"), QSL("%unread/%all"),
QSL("%unread-%all"), QSL("[%unread|%all]") });
m_ui->m_checkUpdateAllFeedsOnStartup
->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateOnStartup)).toBool());
m_ui->m_spinStartupUpdateDelay
->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateStartupDelay)).toDouble());
m_ui->m_cmbCountsFeedList
->addItems({QSL("(%unread)"), QSL("[%unread]"), QSL("%unread/%all"), QSL("%unread-%all"), QSL("[%unread|%all]")});
m_ui->m_cmbCountsFeedList->setEditText(settings()->value(GROUP(Feeds), SETTING(Feeds::CountFormat)).toString());
m_ui->m_checkShowTooltips->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::EnableTooltipsFeedsMessages)).toBool());
m_ui->m_cmbIgnoreContentsChanges->setChecked(settings()->value(GROUP(Messages),
SETTING(Messages::IgnoreContentsChanges)).toBool());
m_ui->m_checkMultilineArticleList->setChecked(settings()->value(GROUP(Messages),
SETTING(Messages::MultilineArticleList)).toBool());
m_ui->m_checkShowTooltips
->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::EnableTooltipsFeedsMessages)).toBool());
m_ui->m_cmbIgnoreContentsChanges
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::IgnoreContentsChanges)).toBool());
m_ui->m_checkMultilineArticleList
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::MultilineArticleList)).toBool());
m_ui->m_spinHeightImageAttachments->setValue(settings()->value(GROUP(Messages),
SETTING(Messages::MessageHeadImageHeight)).toInt());
m_ui->m_cbShowEnclosuresDirectly->setChecked(settings()->value(GROUP(Messages),
SETTING(Messages::DisplayEnclosuresInMessage)).toBool());
m_ui->m_spinHeightImageAttachments
->setValue(settings()->value(GROUP(Messages), SETTING(Messages::MessageHeadImageHeight)).toInt());
m_ui->m_cbShowEnclosuresDirectly
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::DisplayEnclosuresInMessage)).toBool());
m_ui->m_cbFixupArticleDatetime->setChecked(settings()->value(GROUP(Messages),
SETTING(Messages::FixupFutureArticleDateTimes)).toBool());
m_ui->m_cbFixupArticleDatetime
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::FixupFutureArticleDateTimes)).toBool());
m_ui->m_checkMessagesDateTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool());
m_ui->m_cmbMessagesDateTimeFormat->setCurrentText(settings()->value(GROUP(Messages),
SETTING(Messages::CustomDateFormat)).toString());
m_ui->m_checkMessagesDateTimeFormat
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool());
m_ui->m_cmbMessagesDateTimeFormat
->setCurrentText(settings()->value(GROUP(Messages), SETTING(Messages::CustomDateFormat)).toString());
m_ui->m_checkMessagesTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool());
m_ui->m_cmbMessagesTimeFormat->setCurrentText(settings()->value(GROUP(Messages),
SETTING(Messages::CustomTimeFormat)).toString());
m_ui->m_checkMessagesTimeFormat
->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool());
m_ui->m_cmbMessagesTimeFormat
->setCurrentText(settings()->value(GROUP(Messages), SETTING(Messages::CustomTimeFormat)).toString());
QFont fon;
fon.fromString(settings()->value(GROUP(Messages),
SETTING(Messages::PreviewerFontStandard)).toString());
fon.fromString(settings()->value(GROUP(Messages), SETTING(Messages::PreviewerFontStandard)).toString());
m_ui->m_lblMessagesFont->setFont(fon);
QFont fon2;
// Keep in sync with void MessagesModel::setupFonts().
fon2.fromString(settings()->value(GROUP(Messages),
Messages::ListFont,
Application::font("MessagesView").toString()).toString());
fon2.fromString(settings()
->value(GROUP(Messages), Messages::ListFont, Application::font("MessagesView").toString())
.toString());
m_ui->m_lblMessageListFont->setFont(fon2);
QFont fon3;
// Keep in sync with void FeedsModel::setupFonts().
fon3.fromString(settings()->value(GROUP(Feeds),
Feeds::ListFont,
Application::font("FeedsView").toString()).toString());
fon3
.fromString(settings()->value(GROUP(Feeds), Feeds::ListFont, Application::font("FeedsView").toString()).toString());
m_ui->m_lblFeedListFont->setFont(fon3);
onEndLoadSettings();
@ -238,19 +296,23 @@ void SettingsFeedsMessages::loadSettings() {
void SettingsFeedsMessages::saveSettings() {
onBeginSaveSettings();
settings()->setValue(GROUP(Messages), Messages::RelativeTimeForNewerArticles, m_ui->m_spinRelativeArticleTime->value());
settings()->setValue(GROUP(Messages),
Messages::RelativeTimeForNewerArticles,
m_ui->m_spinRelativeArticleTime->value());
settings()->setValue(GROUP(Messages), Messages::ArticleListPadding, m_ui->m_spinPaddingRowsMessages->value());
settings()->setValue(GROUP(GUI), GUI::HeightRowMessages, m_ui->m_spinHeightRowsMessages->value());
settings()->setValue(GROUP(GUI), GUI::HeightRowFeeds, m_ui->m_spinHeightRowsFeeds->value());
settings()->setValue(GROUP(Feeds), Feeds::OnlyBasicShortcutsInLists,
m_ui->m_cbListsRestrictedShortcuts->isChecked());
settings()->setValue(GROUP(Feeds), Feeds::OnlyBasicShortcutsInLists, m_ui->m_cbListsRestrictedShortcuts->isChecked());
settings()->setValue(GROUP(Feeds), Feeds::HideCountsIfNoUnread, m_ui->m_cbHideCountsIfNoUnread->isChecked());
settings()->setValue(GROUP(Messages), Messages::DisplayFeedIconsInList, m_ui->m_checkDisplayFeedIcons->isChecked());
settings()->setValue(GROUP(Messages), Messages::BringAppToFrontAfterMessageOpenedExternally,
settings()->setValue(GROUP(Messages),
Messages::BringAppToFrontAfterMessageOpenedExternally,
m_ui->m_checkBringToForegroundAfterMsgOpened->isChecked());
settings()->setValue(GROUP(Messages), Messages::KeepCursorInCenter, m_ui->m_checkKeppMessagesInTheMiddle->isChecked());
settings()->setValue(GROUP(Messages),
Messages::KeepCursorInCenter,
m_ui->m_checkKeppMessagesInTheMiddle->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());
@ -267,7 +329,9 @@ void SettingsFeedsMessages::saveSettings() {
Messages::DisplayEnclosuresInMessage,
m_ui->m_cbShowEnclosuresDirectly->isChecked());
settings()->setValue(GROUP(Messages), Messages::FixupFutureArticleDateTimes, m_ui->m_cbFixupArticleDatetime->isChecked());
settings()->setValue(GROUP(Messages),
Messages::FixupFutureArticleDateTimes,
m_ui->m_cbFixupArticleDatetime->isChecked());
settings()->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked());
settings()->setValue(GROUP(Messages), Messages::UseCustomTime, m_ui->m_checkMessagesTimeFormat->isChecked());

View File

@ -330,14 +330,14 @@
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="m_spinHeightImageAttachments">
<property name="suffix">
<string notr="true"> px</string>
</property>
<property name="minimum">
<number>22</number>
<number>-1</number>
</property>
<property name="maximum">
<number>1000</number>
<number>4000</number>
</property>
<property name="value">
<number>-1</number>
</property>
</widget>
</item>

View File

@ -67,17 +67,14 @@ QPair<QString, QUrl> TextBrowserViewer::prepareHtmlForMessage(const QList<Messag
pictures_html += QString("<br/>[%1] <a href=\"%2\">%2</a>").arg(tr("image"), match.captured(1));
}
/*if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::DisplayImagePlaceholders)).toBool()) {
html += message.m_contents;
}
else {*/
QString cnts = message.m_contents;
html += cnts;
// html += cnts.replace(imgTagRegex, QString());
//}
auto forced_img_size = qApp->settings()->value(GROUP(Messages), SETTING(Messages::MessageHeadImageHeight)).toInt();
// Fixup all "img" tags.
html += cnts.replace(img_tag_rgx,
QSL("<a href=\"\\1\"><img width=\"%1\" src=\"\\1\" /></a>")
.arg(forced_img_size <= 0 ? QString() : QString::number(forced_img_size)));
html += pictures_html;
}
@ -347,13 +344,13 @@ void TextBrowserViewer::reloadWithImages() {
m_document.data()->m_reloadingWithResources = true;
m_document.data()->m_loadedResources.clear();
for (const QUrl& url : m_document.data()->m_resourcesForHtml) {
QEventLoop loop;
for (const QUrl& url : m_document.data()->m_neededResourcesForHtml) {
if (m_document.data()->m_loadedResources.contains(url)) {
continue;
}
QEventLoop loop;
connect(m_downloader.data(), &Downloader::completed, &loop, &QEventLoop::quit);
m_downloader->manipulateData(url.toString(), QNetworkAccessManager::Operation::GetOperation, {}, 5000);
@ -414,7 +411,7 @@ void TextBrowserViewer::onAnchorClicked(const QUrl& url) {
void TextBrowserViewer::setHtml(const QString& html, const QUrl& base_url) {
m_document.data()->m_reloadingWithResources = false;
m_document.data()->m_loadedResources.clear();
m_document.data()->m_resourcesForHtml.clear();
m_document.data()->m_neededResourcesForHtml.clear();
setHtmlPrivate(html, base_url);
@ -433,7 +430,7 @@ void TextBrowserViewer::setHtmlPrivate(const QString& html, const QUrl& base_url
m_currentUrl = base_url;
if (!m_document.data()->m_reloadingWithResources) {
m_document.data()->m_resourcesForHtml.clear();
m_document.data()->m_neededResourcesForHtml.clear();
}
QTextBrowser::setHtml(html);
@ -448,8 +445,8 @@ TextBrowserDocument::TextBrowserDocument(QObject* parent) : QTextDocument(parent
QVariant TextBrowserDocument::loadResource(int type, const QUrl& name) {
if (!m_reloadingWithResources) {
if (type == QTextDocument::ResourceType::ImageResource && !m_resourcesForHtml.contains(name)) {
m_resourcesForHtml.append(name);
if (type == QTextDocument::ResourceType::ImageResource && !m_neededResourcesForHtml.contains(name)) {
m_neededResourcesForHtml.append(name);
}
return {};

View File

@ -29,7 +29,7 @@ class TextBrowserDocument : public QTextDocument {
private:
bool m_reloadingWithResources;
QList<QUrl> m_resourcesForHtml;
QList<QUrl> m_neededResourcesForHtml;
QMap<QUrl, QByteArray> m_loadedResources;
};

View File

@ -19,7 +19,7 @@
SkinFactory::SkinFactory(QObject* parent) : QObject(parent), m_styleIsFrozen(false) {}
void SkinFactory::loadCurrentSkin() {
QList<QString> skin_names_to_try = { selectedSkinName(), QSL(APP_SKIN_DEFAULT) };
QList<QString> skin_names_to_try = {selectedSkinName(), QSL(APP_SKIN_DEFAULT)};
bool skin_parsed;
Skin skin_data;
QString skin_name;
@ -60,8 +60,7 @@ void SkinFactory::loadSkinFromData(const Skin& skin) {
m_styleIsFrozen = false;
if (!skin.m_forcedStyles.isEmpty()) {
qDebugNN << LOGSEC_GUI << "Forcing one of skin's declared styles:"
<< QUOTE_W_SPACE_DOT(skin.m_forcedStyles);
qDebugNN << LOGSEC_GUI << "Forcing one of skin's declared styles:" << QUOTE_W_SPACE_DOT(skin.m_forcedStyles);
for (const QString& skin_forced_style : skin.m_forcedStyles) {
if (qApp->setStyle(skin_forced_style) != nullptr) {
@ -86,12 +85,10 @@ void SkinFactory::loadSkinFromData(const Skin& skin) {
// they specifically set object name to style name.
m_currentStyle = qApp->style()->objectName();
const bool use_skin_colors = skin.m_forcedSkinColors ||
qApp->settings()->value(GROUP(GUI), SETTING(GUI::ForcedSkinColors)).toBool();
const bool use_skin_colors =
skin.m_forcedSkinColors || qApp->settings()->value(GROUP(GUI), SETTING(GUI::ForcedSkinColors)).toBool();
if (isStyleGoodForAlternativeStylePalette(m_currentStyle) &&
!skin.m_stylePalette.isEmpty() &&
use_skin_colors) {
if (isStyleGoodForAlternativeStylePalette(m_currentStyle) && !skin.m_stylePalette.isEmpty() && use_skin_colors) {
qDebugNN << LOGSEC_GUI << "Activating alternative palette.";
QPalette pal = skin.extractPalette();
@ -124,9 +121,9 @@ QString SkinFactory::selectedSkinName() const {
}
QString SkinFactory::adBlockedPage(const QString& url, const QString& filter) {
const QString& adblocked = currentSkin().m_adblocked.arg(tr("This page was blocked by AdBlock"),
tr(R"(Blocked URL: "%1"<br/>Used filter: "%2")").arg(url,
filter));
const QString& adblocked =
currentSkin().m_adblocked.arg(tr("This page was blocked by AdBlock"),
tr(R"(Blocked URL: "%1"<br/>Used filter: "%2")").arg(url, filter));
return currentSkin().m_layoutMarkupWrapper.arg(tr("This page was blocked by AdBlock"), adblocked);
}
@ -135,6 +132,8 @@ QPair<QString, QUrl> SkinFactory::generateHtmlOfArticles(const QList<Message>& m
Skin skin = currentSkin();
QString messages_layout;
QString single_message_layout = skin.m_layoutMarkup;
const auto forced_img_size =
qApp->settings()->value(GROUP(Messages), SETTING(Messages::MessageHeadImageHeight)).toInt();
for (const Message& message : messages) {
QString enclosures;
@ -143,46 +142,45 @@ QPair<QString, QUrl> SkinFactory::generateHtmlOfArticles(const QList<Message>& m
for (const Enclosure& enclosure : message.m_enclosures) {
QString enc_url = QUrl::fromPercentEncoding(enclosure.m_url.toUtf8());
enclosures += skin.m_enclosureMarkup.arg(enc_url,
QSL("&#129527;"),
enclosure.m_mimeType);
enclosures += skin.m_enclosureMarkup.arg(enc_url, QSL("&#129527;"), enclosure.m_mimeType);
if (enclosure.m_mimeType.startsWith(QSL("image/")) &&
qApp->settings()->value(GROUP(Messages), SETTING(Messages::DisplayEnclosuresInMessage)).toBool()) {
// Add thumbnail image.
enclosure_images += skin.m_enclosureImageMarkup.arg(
enclosure.m_url,
enclosure.m_mimeType,
qApp->settings()->value(GROUP(Messages), SETTING(Messages::MessageHeadImageHeight)).toString());
enclosure_images +=
skin.m_enclosureImageMarkup.arg(enclosure.m_url,
enclosure.m_mimeType,
forced_img_size <= 0 ? QString() : QString::number(forced_img_size));
}
}
QString msg_date = qApp->settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool()
? message.m_created.toLocalTime().toString(qApp->settings()->value(GROUP(Messages),
SETTING(Messages::CustomDateFormat)).toString())
: qApp->localization()->loadedLocale().toString(message.m_created.toLocalTime(),
QLocale::FormatType::ShortFormat);
QString msg_date =
qApp->settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool()
? message.m_created.toLocalTime()
.toString(qApp->settings()->value(GROUP(Messages), SETTING(Messages::CustomDateFormat)).toString())
: qApp->localization()->loadedLocale().toString(message.m_created.toLocalTime(),
QLocale::FormatType::ShortFormat);
messages_layout.append(single_message_layout
.arg(message.m_title,
tr("Written by ") + (message.m_author.isEmpty() ?
tr("unknown author") :
message.m_author),
message.m_url,
message.m_contents,
msg_date,
enclosures,
enclosure_images,
QString::number(message.m_id)));
messages_layout.append(single_message_layout.arg(message.m_title,
tr("Written by ") + (message.m_author.isEmpty()
? tr("unknown author")
: message.m_author),
message.m_url,
message.m_contents,
msg_date,
enclosures,
enclosure_images,
QString::number(message.m_id)));
}
QString msg_contents = skin.m_layoutMarkupWrapper.arg(messages.size() == 1
? messages.at(0).m_title
: tr("Newspaper view"),
messages_layout);
auto* feed = root->getParentServiceRoot()->getItemFromSubTree([messages](const RootItem* it) {
return it->kind() == RootItem::Kind::Feed && it->customId() == messages.at(0).m_feedId;
})->toFeed();
QString msg_contents =
skin.m_layoutMarkupWrapper.arg(messages.size() == 1 ? messages.at(0).m_title : tr("Newspaper view"),
messages_layout);
auto* feed = root->getParentServiceRoot()
->getItemFromSubTree([messages](const RootItem* it) {
return it->kind() == RootItem::Kind::Feed && it->customId() == messages.at(0).m_feedId;
})
->toFeed();
QString base_url;
if (feed != nullptr) {
@ -193,15 +191,12 @@ QPair<QString, QUrl> SkinFactory::generateHtmlOfArticles(const QList<Message>& m
}
}
return { msg_contents, base_url };
return {msg_contents, base_url};
}
Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
Skin skin;
const QStringList skins_root_folders = {
APP_SKIN_PATH,
customSkinBaseFolder()
};
const QStringList skins_root_folders = {APP_SKIN_PATH, customSkinBaseFolder()};
for (const QString& skins_root_folder : skins_root_folders) {
const QString skin_parent = QString(skins_root_folder).replace(QDir::separator(), QL1C('/')) + QL1C('/');
@ -223,7 +218,8 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
}
const QDomNode skin_node = document.namedItem(QSL("skin"));
const QString base_skin_name = skin_node.toElement().attribute(QSL("base"));;
const QString base_skin_name = skin_node.toElement().attribute(QSL("base"));
;
QString real_base_skin_folder;
if (!base_skin_name.isEmpty()) {
@ -279,17 +275,18 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
skin.m_colorPalette = palette;
// Obtain alternative style palette.
skin.m_forcedStyles = skin_node
.namedItem(QSL("forced-styles"))
.toElement().text().split(',',
skin.m_forcedStyles = skin_node.namedItem(QSL("forced-styles"))
.toElement()
.text()
.split(',',
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
Qt::SplitBehaviorFlags::SkipEmptyParts);
Qt::SplitBehaviorFlags::SkipEmptyParts);
#else
QString::SplitBehavior::SkipEmptyParts);
QString::SplitBehavior::SkipEmptyParts);
#endif
skin.m_forcedSkinColors = skin_node.namedItem(QSL("forced-skin-colors")).toElement().text() ==
QVariant(true).toString();
skin.m_forcedSkinColors =
skin_node.namedItem(QSL("forced-skin-colors")).toElement().text() == QVariant(true).toString();
QDomElement style_palette_root = skin_node.namedItem(QSL("style-palette")).toElement();
@ -306,7 +303,8 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
for (int i = 0; i < groups_of_palette.size(); i++) {
const QDomNode& group_root_nd = groups_of_palette.at(i);
QPalette::ColorGroup group = QPalette::ColorGroup(enumerp.keyToValue(group_root_nd.toElement().attribute(QSL("id")).toLatin1()));
QPalette::ColorGroup group =
QPalette::ColorGroup(enumerp.keyToValue(group_root_nd.toElement().attribute(QSL("id")).toLatin1()));
QDomNodeList colors_of_group = group_root_nd.toElement().elementsByTagName(QSL("color"));
@ -314,11 +312,12 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
const QDomNode& color_nd = colors_of_group.at(j);
QColor color(color_nd.toElement().text());
QPalette::ColorRole role = QPalette::ColorRole(enumerx.keyToValue(color_nd.toElement().attribute(QSL("role")).toLatin1()));
Qt::BrushStyle brush = Qt::BrushStyle(enumery.keyToValue(color_nd.toElement().attribute(QSL("brush")).toLatin1()));
QPalette::ColorRole role =
QPalette::ColorRole(enumerx.keyToValue(color_nd.toElement().attribute(QSL("role")).toLatin1()));
Qt::BrushStyle brush =
Qt::BrushStyle(enumery.keyToValue(color_nd.toElement().attribute(QSL("brush")).toLatin1()));
groups.insert(group, QPair<QPalette::ColorRole, QPair<QColor, Qt::BrushStyle>>(role,
{ color, brush }));
groups.insert(group, QPair<QPalette::ColorRole, QPair<QColor, Qt::BrushStyle>>(role, {color, brush}));
}
}
@ -347,21 +346,19 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
skin.m_layoutMarkupWrapper = skin.m_layoutMarkupWrapper.replace(QSL(SKIN_STYLE_PLACEHOLDER), custom_css);
}
catch (...) {
qWarningNN << "Skin"
<< QUOTE_W_SPACE(skin_name)
<< "does not support separated custom CSS.";
qWarningNN << "Skin" << QUOTE_W_SPACE(skin_name) << "does not support separated custom CSS.";
}
skin.m_enclosureImageMarkup = loadSkinFile(skin_folder_no_sep, QSL("html_enclosure_image.html"), real_base_skin_folder);
skin.m_enclosureImageMarkup =
loadSkinFile(skin_folder_no_sep, QSL("html_enclosure_image.html"), real_base_skin_folder);
skin.m_layoutMarkup = loadSkinFile(skin_folder_no_sep, QSL("html_single_message.html"), real_base_skin_folder);
skin.m_enclosureMarkup = loadSkinFile(skin_folder_no_sep, QSL("html_enclosure_every.html"), real_base_skin_folder);
skin.m_enclosureMarkup =
loadSkinFile(skin_folder_no_sep, QSL("html_enclosure_every.html"), real_base_skin_folder);
skin.m_rawData = loadSkinFile(skin_folder_no_sep, QSL("qt_style.qss"), real_base_skin_folder);
skin.m_adblocked = loadSkinFile(skin_folder_no_sep, QSL("html_adblocked.html"), real_base_skin_folder);
if (ok != nullptr) {
*ok = !skin.m_author.isEmpty() &&
!skin.m_version.isEmpty() &&
!skin.m_baseName.isEmpty() &&
*ok = !skin.m_author.isEmpty() && !skin.m_version.isEmpty() && !skin.m_baseName.isEmpty() &&
!skin.m_layoutMarkup.isEmpty();
}
@ -376,7 +373,9 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
return skin;
}
QString SkinFactory::loadSkinFile(const QString& skin_folder, const QString& file_name, const QString& base_folder) const {
QString SkinFactory::loadSkinFile(const QString& skin_folder,
const QString& file_name,
const QString& base_folder) const {
QString local_file = QDir::toNativeSeparators(skin_folder + QDir::separator() + file_name);
QString base_file = QDir::toNativeSeparators(base_folder + QDir::separator() + file_name);
QString data;
@ -404,13 +403,11 @@ bool SkinFactory::styleIsFrozen() const {
QList<Skin> SkinFactory::installedSkins() const {
QList<Skin> skins;
bool skin_load_ok;
QStringList skin_directories = QDir(APP_SKIN_PATH).entryList(QDir::Filter::Dirs |
QDir::Filter::NoDotAndDotDot |
QDir::Filter::Readable);
QStringList skin_directories =
QDir(APP_SKIN_PATH).entryList(QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot | QDir::Filter::Readable);
skin_directories.append(QDir(customSkinBaseFolder()).entryList(QDir::Filter::Dirs |
QDir::Filter::NoDotAndDotDot |
QDir::Filter::Readable));
skin_directories.append(QDir(customSkinBaseFolder())
.entryList(QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot | QDir::Filter::Readable));
for (const QString& base_directory : skin_directories) {
const Skin skin_info = skinInfo(base_directory, &skin_load_ok);
@ -429,8 +426,7 @@ uint qHash(const SkinEnums::PaletteColors& key) {
QVariant Skin::colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_colors) const {
if (!ignore_custom_colors) {
bool enabled = qApp->settings()->value(GROUP(CustomSkinColors),
SETTING(CustomSkinColors::Enabled)).toBool();
bool enabled = qApp->settings()->value(GROUP(CustomSkinColors), SETTING(CustomSkinColors::Enabled)).toBool();
if (enabled) {
const QMetaObject& mo = SkinEnums::staticMetaObject;
@ -443,9 +439,7 @@ QVariant Skin::colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_c
}
}
return m_colorPalette.contains(type)
? m_colorPalette[type]
: QVariant();
return m_colorPalette.contains(type) ? m_colorPalette[type] : QVariant();
}
QPalette Skin::extractPalette() const {
@ -480,7 +474,8 @@ QString SkinEnums::palleteColorText(PaletteColors col) {
return QObject::tr("interesting stuff");
case SkinEnums::PaletteColors::FgSelectedInteresting:
return QObject::tr("interesting stuff (highlighted)");;
return QObject::tr("interesting stuff (highlighted)");
;
case SkinEnums::PaletteColors::FgError:
return QObject::tr("errored items");