diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index b4cad0e99..8bba3a8fd 100644 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -207,6 +207,8 @@ QList FormMain::allActions() const { actions << m_ui->m_actionUpdateSelectedItemsWithCustomTimers; actions << m_ui->m_actionStopRunningItemsUpdate; actions << m_ui->m_actionEditSelectedItem; + actions << m_ui->m_actionEditChildFeeds; + actions << m_ui->m_actionEditChildFeedsRecursive; actions << m_ui->m_actionCopyUrlSelectedFeed; actions << m_ui->m_actionCopyUrlSelectedArticles; actions << m_ui->m_actionFocusSearchFeeds; @@ -489,6 +491,9 @@ void FormMain::updateFeedButtonsAvailability() { m_ui->m_actionClearSelectedItems->setEnabled(anything_selected); m_ui->m_actionDeleteSelectedItem->setEnabled(!critical_action_running && anything_selected); m_ui->m_actionEditSelectedItem->setEnabled(!critical_action_running && anything_selected); + m_ui->m_actionEditChildFeeds->setEnabled(!critical_action_running && (service_selected || category_selected)); + m_ui->m_actionEditChildFeedsRecursive->setEnabled(!critical_action_running && + (service_selected || category_selected)); m_ui->m_actionCopyUrlSelectedFeed->setEnabled(service_selected || feed_selected || category_selected); m_ui->m_actionMarkSelectedItemsAsRead->setEnabled(anything_selected); m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(anything_selected); @@ -593,6 +598,8 @@ void FormMain::setupIcons() { m_ui->m_actionDeleteSelectedItem->setIcon(icon_theme_factory->fromTheme(QSL("list-remove"))); m_ui->m_actionDeleteSelectedMessages->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-junk"))); m_ui->m_actionEditSelectedItem->setIcon(icon_theme_factory->fromTheme(QSL("document-edit"))); + m_ui->m_actionEditChildFeeds->setIcon(icon_theme_factory->fromTheme(QSL("document-edit"))); + m_ui->m_actionEditChildFeedsRecursive->setIcon(icon_theme_factory->fromTheme(QSL("document-edit"))); m_ui->m_actionCopyUrlSelectedFeed->setIcon(icon_theme_factory->fromTheme(QSL("edit-copy"))); m_ui->m_actionCopyUrlSelectedArticles->setIcon(icon_theme_factory->fromTheme(QSL("edit-copy"))); m_ui->m_actionMarkAllItemsRead->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-read"))); @@ -931,7 +938,15 @@ void FormMain::createConnections() { connect(m_ui->m_actionEditSelectedItem, &QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), - &FeedsView::editSelectedItem); + &FeedsView::editSelectedItems); + connect(m_ui->m_actionEditChildFeeds, + &QAction::triggered, + tabWidget()->feedMessageViewer()->feedsView(), + &FeedsView::editChildFeeds); + connect(m_ui->m_actionEditChildFeedsRecursive, + &QAction::triggered, + tabWidget()->feedMessageViewer()->feedsView(), + &FeedsView::editRecursiveFeeds); connect(m_ui->m_actionViewSelectedItemsNewspaperMode, &QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui index 9ddea550c..3bca5f44e 100644 --- a/src/librssguard/gui/dialogs/formmain.ui +++ b/src/librssguard/gui/dialogs/formmain.ui @@ -126,6 +126,8 @@ + + @@ -297,10 +299,7 @@ - &Edit selected item - - - + &Edit selected items @@ -948,6 +947,16 @@ You must add new account first. + + + Edit &child feeds + + + + + Edit child feeds (&recursive) + + diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp index a2e8de708..fc3c04daf 100644 --- a/src/librssguard/gui/feedsview.cpp +++ b/src/librssguard/gui/feedsview.cpp @@ -238,7 +238,7 @@ void FeedsView::clearAllFeeds() { m_sourceModel->markItemCleared(m_sourceModel->rootItem(), false, true); } -void FeedsView::editSelectedItem() { +void FeedsView::editItems(const QList& items) { if (!qApp->feedUpdateLock()->tryLock()) { // Lock was not obtained because // it is used probably by feed updater or application @@ -252,14 +252,12 @@ void FeedsView::editSelectedItem() { return; } - auto selected_items = selectedItems(); - - if (selected_items.isEmpty()) { + if (items.isEmpty()) { qApp->feedUpdateLock()->unlock(); return; } - auto std_editable_items = boolinq::from(selected_items) + auto std_editable_items = boolinq::from(items) .where([](RootItem* it) { return it->canBeEdited(); }) @@ -320,7 +318,7 @@ void FeedsView::editSelectedItem() { return; } - if (qsizetype(std_editable_items.size()) < selected_items.size()) { + if (qsizetype(std_editable_items.size()) < items.size()) { // Some items are not editable. qApp->showGuiMessage(Notification::Event::GeneralEvent, {tr("Cannot edit some items"), @@ -332,10 +330,33 @@ void FeedsView::editSelectedItem() { // Changes are done, unlock the update master lock. qApp->feedUpdateLock()->unlock(); +} - // TODO: NOTE: Make sure to refresh article list if RTL is changed? - // RootItem* selected_item = selectedItem(); - // emit itemSelected(selected_item); +void FeedsView::editChildFeeds() { + auto* item = selectedItem(); + + if (item != nullptr) { + auto children = item->childItems(); + auto std_feeds = boolinq::from(children) + .where([](RootItem* ch) { + return ch->kind() == RootItem::Kind::Feed; + }) + .toStdList(); + + editItems(FROM_STD_LIST(QList, std_feeds)); + } +} + +void FeedsView::editRecursiveFeeds() { + auto* item = selectedItem(); + + if (item != nullptr) { + editItems(item->getSubTree(RootItem::Kind::Feed)); + } +} + +void FeedsView::editSelectedItems() { + editItems(selectedItems()); } void FeedsView::deleteSelectedItem() { @@ -579,6 +600,8 @@ QMenu* FeedsView::initializeContextMenuService(RootItem* clicked_item) { m_contextMenuService->addActions({qApp->mainForm()->m_ui->m_actionUpdateSelectedItems, qApp->mainForm()->m_ui->m_actionEditSelectedItem, + qApp->mainForm()->m_ui->m_actionEditChildFeeds, + qApp->mainForm()->m_ui->m_actionEditChildFeedsRecursive, qApp->mainForm()->m_ui->m_actionCopyUrlSelectedFeed, qApp->mainForm()->m_ui->m_actionViewSelectedItemsNewspaperMode, qApp->mainForm()->m_ui->m_actionExpandCollapseItem, @@ -803,6 +826,8 @@ QMenu* FeedsView::initializeContextMenuCategories(RootItem* clicked_item) { m_contextMenuCategories->addActions({qApp->mainForm()->m_ui->m_actionUpdateSelectedItems, qApp->mainForm()->m_ui->m_actionEditSelectedItem, + qApp->mainForm()->m_ui->m_actionEditChildFeeds, + qApp->mainForm()->m_ui->m_actionEditChildFeedsRecursive, qApp->mainForm()->m_ui->m_actionCopyUrlSelectedFeed, qApp->mainForm()->m_ui->m_actionViewSelectedItemsNewspaperMode, qApp->mainForm()->m_ui->m_actionExpandCollapseItem, diff --git a/src/librssguard/gui/feedsview.h b/src/librssguard/gui/feedsview.h index 403e79a48..fe1d16591 100644 --- a/src/librssguard/gui/feedsview.h +++ b/src/librssguard/gui/feedsview.h @@ -66,7 +66,10 @@ class RSSGUARD_DLLSPEC FeedsView : public BaseTreeView { void clearAllFeeds(); // Base manipulators. - void editSelectedItem(); + void editItems(const QList& items); + void editSelectedItems(); + void editChildFeeds(); + void editRecursiveFeeds(); void deleteSelectedItem(); // Sort order manipulations.