qBittorrent
ArticleListWidget Class Reference

#include <articlelistwidget.h>

Inheritance diagram for ArticleListWidget:
Collaboration diagram for ArticleListWidget:

Public Member Functions

 ArticleListWidget (QWidget *parent)
 
RSS::ArticlegetRSSArticle (QListWidgetItem *item) const
 
QListWidgetItem * mapRSSArticle (RSS::Article *rssArticle) const
 
void setRSSItem (RSS::Item *rssItem, bool unreadOnly=false)
 

Private Slots

void handleArticleAdded (RSS::Article *rssArticle)
 
void handleArticleRead (RSS::Article *rssArticle)
 
void handleArticleAboutToBeRemoved (RSS::Article *rssArticle)
 

Private Member Functions

void checkInvariant () const
 
QListWidgetItem * createItem (RSS::Article *article) const
 

Private Attributes

RSS::Itemm_rssItem = nullptr
 
bool m_unreadOnly = false
 
QHash< RSS::Article *, QListWidgetItem * > m_rssArticleToListItemMapping
 

Detailed Description

Definition at line 40 of file articlelistwidget.h.

Constructor & Destructor Documentation

◆ ArticleListWidget()

ArticleListWidget::ArticleListWidget ( QWidget *  parent)
explicit

Definition at line 38 of file articlelistwidget.cpp.

39  : QListWidget(parent)
40 {
41  setContextMenuPolicy(Qt::CustomContextMenu);
42  setSelectionMode(QAbstractItemView::ExtendedSelection);
43 
45 }
void checkInvariant() const

References checkInvariant().

Here is the call graph for this function:

Member Function Documentation

◆ checkInvariant()

void ArticleListWidget::checkInvariant ( ) const
private

Definition at line 119 of file articlelistwidget.cpp.

120 {
121  Q_ASSERT(count() == m_rssArticleToListItemMapping.count());
122 }
QHash< RSS::Article *, QListWidgetItem * > m_rssArticleToListItemMapping

References m_rssArticleToListItemMapping.

Referenced by ArticleListWidget(), handleArticleAboutToBeRemoved(), handleArticleAdded(), handleArticleRead(), and setRSSItem().

Here is the caller graph for this function:

◆ createItem()

QListWidgetItem * ArticleListWidget::createItem ( RSS::Article article) const
private

Definition at line 124 of file articlelistwidget.cpp.

125 {
126  Q_ASSERT(article);
127  auto *item = new QListWidgetItem;
128 
129  item->setData(Qt::DisplayRole, article->title());
130  item->setData(Qt::UserRole, reinterpret_cast<quintptr>(article));
131  if (article->isRead())
132  {
133  const QColor defaultColor {palette().color(QPalette::Inactive, QPalette::WindowText)};
134  const QBrush foregroundBrush {UIThemeManager::instance()->getColor("RSS.ReadArticle", defaultColor)};
135  item->setData(Qt::ForegroundRole, foregroundBrush);
136  item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere")));
137  }
138  else
139  {
140  const QColor defaultColor {palette().color(QPalette::Active, QPalette::Link)};
141  const QBrush foregroundBrush {UIThemeManager::instance()->getColor("RSS.UnreadArticle", defaultColor)};
142  item->setData(Qt::ForegroundRole, foregroundBrush);
143  item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere")));
144  }
145 
146  return item;
147 }
QString title() const
Definition: rss_article.cpp:92
bool isRead() const
static UIThemeManager * instance()
QColor getColor(const QString &id, const QColor &defaultColor) const

References UIThemeManager::getColor(), UIThemeManager::instance(), RSS::Article::isRead(), and RSS::Article::title().

Referenced by handleArticleAdded(), and setRSSItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getRSSArticle()

RSS::Article * ArticleListWidget::getRSSArticle ( QListWidgetItem *  item) const

Definition at line 47 of file articlelistwidget.cpp.

48 {
49  Q_ASSERT(item);
50  return reinterpret_cast<RSS::Article *>(item->data(Qt::UserRole).value<quintptr>());
51 }
Definition: rss_article.h:43

Referenced by RSSWidget::handleCurrentArticleItemChanged().

Here is the caller graph for this function:

◆ handleArticleAboutToBeRemoved

void ArticleListWidget::handleArticleAboutToBeRemoved ( RSS::Article rssArticle)
privateslot

Definition at line 113 of file articlelistwidget.cpp.

114 {
115  delete m_rssArticleToListItemMapping.take(rssArticle);
116  checkInvariant();
117 }

References checkInvariant(), and m_rssArticleToListItemMapping.

Referenced by setRSSItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ handleArticleAdded

void ArticleListWidget::handleArticleAdded ( RSS::Article rssArticle)
privateslot

Definition at line 88 of file articlelistwidget.cpp.

89 {
90  if (!(m_unreadOnly && rssArticle->isRead()))
91  {
92  auto item = createItem(rssArticle);
93  insertItem(0, item);
94  m_rssArticleToListItemMapping.insert(rssArticle, item);
95  }
96 
98 }
bool m_unreadOnly
QListWidgetItem * createItem(RSS::Article *article) const

References checkInvariant(), createItem(), RSS::Article::isRead(), m_rssArticleToListItemMapping, and m_unreadOnly.

Referenced by setRSSItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ handleArticleRead

void ArticleListWidget::handleArticleRead ( RSS::Article rssArticle)
privateslot

Definition at line 100 of file articlelistwidget.cpp.

101 {
102  auto item = mapRSSArticle(rssArticle);
103  if (!item) return;
104 
105  const QColor defaultColor {palette().color(QPalette::Inactive, QPalette::WindowText)};
106  const QBrush foregroundBrush {UIThemeManager::instance()->getColor("RSS.ReadArticle", defaultColor)};
107  item->setData(Qt::ForegroundRole, foregroundBrush);
108  item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere")));
109 
110  checkInvariant();
111 }
QListWidgetItem * mapRSSArticle(RSS::Article *rssArticle) const

References checkInvariant(), UIThemeManager::getColor(), UIThemeManager::instance(), and mapRSSArticle().

Referenced by setRSSItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mapRSSArticle()

QListWidgetItem * ArticleListWidget::mapRSSArticle ( RSS::Article rssArticle) const

Definition at line 53 of file articlelistwidget.cpp.

54 {
55  return m_rssArticleToListItemMapping.value(rssArticle);
56 }

References m_rssArticleToListItemMapping.

Referenced by handleArticleRead().

Here is the caller graph for this function:

◆ setRSSItem()

void ArticleListWidget::setRSSItem ( RSS::Item rssItem,
bool  unreadOnly = false 
)

Definition at line 58 of file articlelistwidget.cpp.

59 {
60  // Clear the list first
61  clear();
63  if (m_rssItem)
64  m_rssItem->disconnect(this);
65 
66  m_unreadOnly = unreadOnly;
67  m_rssItem = rssItem;
68  if (m_rssItem)
69  {
73 
74  for (const auto article : asConst(rssItem->articles()))
75  {
76  if (!(m_unreadOnly && article->isRead()))
77  {
78  auto item = createItem(article);
79  addItem(item);
80  m_rssArticleToListItemMapping.insert(article, item);
81  }
82  }
83  }
84 
86 }
void handleArticleAdded(RSS::Article *rssArticle)
RSS::Item * m_rssItem
void handleArticleRead(RSS::Article *rssArticle)
void handleArticleAboutToBeRemoved(RSS::Article *rssArticle)
void newArticle(Article *article)
void articleAboutToBeRemoved(Article *article)
virtual QList< Article * > articles() const =0
void articleRead(Article *article)
constexpr std::add_const_t< T > & asConst(T &t) noexcept
Definition: global.h:42

References RSS::Item::articleAboutToBeRemoved(), RSS::Item::articleRead(), RSS::Item::articles(), asConst(), checkInvariant(), createItem(), handleArticleAboutToBeRemoved(), handleArticleAdded(), handleArticleRead(), m_rssArticleToListItemMapping, m_rssItem, m_unreadOnly, and RSS::Item::newArticle().

Referenced by RSSWidget::handleCurrentFeedItemChanged().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_rssArticleToListItemMapping

QHash<RSS::Article *, QListWidgetItem *> ArticleListWidget::m_rssArticleToListItemMapping
private

◆ m_rssItem

RSS::Item* ArticleListWidget::m_rssItem = nullptr
private

Definition at line 61 of file articlelistwidget.h.

Referenced by setRSSItem().

◆ m_unreadOnly

bool ArticleListWidget::m_unreadOnly = false
private

Definition at line 62 of file articlelistwidget.h.

Referenced by handleArticleAdded(), and setRSSItem().


The documentation for this class was generated from the following files: