diff --git a/resources/graphics/icons/mini-kfaenza/expand-collapse.png b/resources/graphics/icons/mini-kfaenza/expand-collapse.png
new file mode 100644
index 000000000..7e257e4bc
Binary files /dev/null and b/resources/graphics/icons/mini-kfaenza/expand-collapse.png differ
diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG
index e13676290..7fdc87c42 100644
--- a/resources/text/CHANGELOG
+++ b/resources/text/CHANGELOG
@@ -24,6 +24,7 @@
Fixed:
- Categories are now not expanded when selected using "Go to next/previous item" in feeds list. (bug #122)
+ - Added action to expand/collapse currently selected item in feeds list. (enhancement #121)
diff --git a/src/gui/dialogs/formmain.cpp b/src/gui/dialogs/formmain.cpp
index 5a19130f3..00a30fe3d 100755
--- a/src/gui/dialogs/formmain.cpp
+++ b/src/gui/dialogs/formmain.cpp
@@ -278,6 +278,7 @@ void FormMain::setupIcons() {
m_ui->m_actionSelectPreviousMessage->setIcon(icon_theme_factory->fromTheme(QSL("go-up")));
m_ui->m_actionShowOnlyUnreadFeeds->setIcon(icon_theme_factory->fromTheme(QSL("mail-mark-unread")));
m_ui->m_actionFetchFeedMetadata->setIcon(icon_theme_factory->fromTheme(QSL("download-manager")));
+ m_ui->m_actionExpandCollapseFeedCategory->setIcon(icon_theme_factory->fromTheme(QSL("expand-collapse")));
// Setup icons for underlying components: opened web browsers...
foreach (WebBrowser *browser, WebBrowser::runningWebBrowsers()) {
diff --git a/src/gui/dialogs/formmain.ui b/src/gui/dialogs/formmain.ui
index 297fd1763..9aeaa3567 100755
--- a/src/gui/dialogs/formmain.ui
+++ b/src/gui/dialogs/formmain.ui
@@ -146,6 +146,7 @@
+
@@ -671,6 +672,14 @@
Ctrl+Shift+F
+
+
+ &Expand/collapse selected feed/category
+
+
+ E
+
+
diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp
index 0f52c7ac5..5f460b12c 100755
--- a/src/gui/feedmessageviewer.cpp
+++ b/src/gui/feedmessageviewer.cpp
@@ -317,6 +317,7 @@ void FeedMessageViewer::updateFeedButtonsAvailability() {
form_main->m_ui->m_actionUpdateSelectedFeeds->setEnabled(!critical_action_running && feed_selected);
form_main->m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(feed_selected);
form_main->m_ui->m_actionFetchFeedMetadata->setEnabled(feed_selected);
+ form_main->m_ui->m_actionExpandCollapseFeedCategory->setEnabled(feed_selected);
form_main->m_ui->m_menuAddItem->setEnabled(!critical_action_running);
}
@@ -388,6 +389,8 @@ void FeedMessageViewer::createConnections() {
SIGNAL(triggered()), m_feedsView, SLOT(markAllFeedsRead()));
connect(form_main->m_ui->m_actionMarkSelectedFeedsAsRead,
SIGNAL(triggered()), m_feedsView, SLOT(markSelectedFeedsRead()));
+ connect(form_main->m_ui->m_actionExpandCollapseFeedCategory,
+ SIGNAL(triggered()), m_feedsView, SLOT(expandCollapseCurrentItem()));
connect(form_main->m_ui->m_actionFetchFeedMetadata, SIGNAL(triggered()),
m_feedsView, SLOT(fetchMetadataForSelectedFeed()));
connect(form_main->m_ui->m_actionMarkSelectedFeedsAsUnread,
diff --git a/src/gui/feedsview.cpp b/src/gui/feedsview.cpp
index 70d4022f7..89f634c06 100755
--- a/src/gui/feedsview.cpp
+++ b/src/gui/feedsview.cpp
@@ -143,6 +143,19 @@ void FeedsView::invalidateReadFeedsFilter(bool set_new_value, bool show_unread_o
QTimer::singleShot(0, m_proxyModel, SLOT(invalidateFilter()));
}
+void FeedsView::expandCollapseCurrentItem() {
+ if (selectionModel()->selectedRows().size() == 1) {
+ QModelIndex index = selectionModel()->selectedRows().at(0);
+
+ if (!index.child(0, 0).isValid() && index.parent().isValid()) {
+ setCurrentIndex(index.parent());
+ index = index.parent();
+ }
+
+ isExpanded(index) ? collapse(index) : expand(index);
+ }
+}
+
void FeedsView::updateAllFeeds() {
emit feedsUpdateRequested(allFeeds());
}
@@ -480,7 +493,6 @@ void FeedsView::selectNextItem() {
if (index_next.isValid()) {
setCurrentIndex(index_next);
- selectionModel()->select(index_next, QItemSelectionModel::Select | QItemSelectionModel::Rows);
setFocus();
}
}
@@ -498,7 +510,6 @@ void FeedsView::selectPreviousItem() {
if (index_previous.isValid()) {
setCurrentIndex(index_previous);
- selectionModel()->select(index_previous, QItemSelectionModel::Select | QItemSelectionModel::Rows);
setFocus();
}
}
@@ -651,7 +662,7 @@ void FeedsView::validateItemAfterDragDrop(const QModelIndex &source_index) {
QModelIndex mapped = m_proxyModel->mapFromSource(source_index);
if (mapped.isValid()) {
- setExpanded(mapped, true);
+ expand(mapped);
setCurrentIndex(mapped);
}
}
diff --git a/src/gui/feedsview.h b/src/gui/feedsview.h
index c295644fc..61c249175 100755
--- a/src/gui/feedsview.h
+++ b/src/gui/feedsview.h
@@ -69,6 +69,8 @@ class FeedsView : public QTreeView {
public slots:
void invalidateReadFeedsFilter(bool set_new_value = false, bool show_unread_only = false);
+ void expandCollapseCurrentItem();
+ void fetchMetadataForSelectedFeed();
// Feed updating.
void updateAllFeeds();
@@ -82,8 +84,6 @@ class FeedsView : public QTreeView {
void markAllFeedsReadStatus(int read);
void markAllFeedsRead();
- void fetchMetadataForSelectedFeed();
-
// Newspaper accessors.
void openSelectedFeedsInNewspaperMode();