Krita Source Code Documentation
Loading...
Searching...
No Matches
KisNewsWidget Class Reference

The KisNewsWidget class shows the latest news from Krita.org. More...

#include <KisNewsWidget.h>

+ Inheritance diagram for KisNewsWidget:

Signals

void newsDataChanged ()
 

Public Member Functions

 KisNewsWidget (QWidget *parent=nullptr)
 
void setAnalyticsTracking (QString text)
 
void toggleNewsLanguage (QString langCode, bool enabled)
 

Protected Member Functions

bool eventFilter (QObject *watched, QEvent *event) override
 

Private Slots

void itemSelected (const QModelIndex &idx)
 
void rssDataChanged ()
 
void slotScrollerStateChanged (QScroller::State state)
 
void toggleNews (bool toggle)
 

Private Attributes

QString m_analyticsTrackingParameters
 
QSet< QString > m_enabledFeeds
 
bool m_getNews {false}
 
MultiFeedRssModelm_rssModel {0}
 

Detailed Description

The KisNewsWidget class shows the latest news from Krita.org.

Definition at line 31 of file KisNewsWidget.h.

Constructor & Destructor Documentation

◆ KisNewsWidget()

KisNewsWidget::KisNewsWidget ( QWidget * parent = nullptr)
explicit

Definition at line 77 of file KisNewsWidget.cpp.

78 : QWidget(parent)
79 , m_getNews(false)
80 , m_rssModel(0)
81{
82 setupUi(this);
83 listNews->viewport()->setAutoFillBackground(false);
84 listNews->installEventFilter(this);
85 listNews->setVerticalScrollMode(QListView::ScrollPerPixel);
86 listNews->verticalScrollBar()->setSingleStep(50);
87 {
88 QScroller* scroller = KisKineticScroller::createPreconfiguredScroller(listNews);
89 if (scroller) {
90 connect(scroller, SIGNAL(stateChanged(QScroller::State)), this, SLOT(slotScrollerStateChanged(QScroller::State)));
91 }
92 }
93
94 m_rssModel = new MultiFeedRssModel(this);
95 connect(m_rssModel, SIGNAL(feedDataChanged()), this, SLOT(rssDataChanged()), Qt::UniqueConnection);
96
97 listNews->setModel(m_rssModel);
98 listNews->setItemDelegate(new KisNewsDelegate(listNews));
99 connect(listNews, SIGNAL(clicked(QModelIndex)), this, SLOT(itemSelected(QModelIndex)));
100}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void itemSelected(const QModelIndex &idx)
void slotScrollerStateChanged(QScroller::State state)
MultiFeedRssModel * m_rssModel
KRITAWIDGETUTILS_EXPORT QScroller * createPreconfiguredScroller(QAbstractScrollArea *target)

References connect(), KisKineticScroller::createPreconfiguredScroller(), itemSelected(), m_rssModel, rssDataChanged(), and slotScrollerStateChanged().

Member Function Documentation

◆ eventFilter()

bool KisNewsWidget::eventFilter ( QObject * watched,
QEvent * event )
overrideprotected

Definition at line 107 of file KisNewsWidget.cpp.

108{
109 if (watched == listNews && event->type() == QEvent::Leave) {
110 listNews->clearSelection();
111 listNews->setCurrentIndex(QModelIndex());
112 }
113 return QWidget::eventFilter(watched, event);
114}

◆ itemSelected

void KisNewsWidget::itemSelected ( const QModelIndex & idx)
privateslot

Definition at line 158 of file KisNewsWidget.cpp.

159{
160 if (idx.isValid()) {
161 QString link = idx.data(KisRssReader::RssRoles::LinkRole).toString();
162
163 // append query string for analytics tracking if we set it
165
166 // use title in analytics query string
167 QString linkTitle = idx.data(KisRssReader::RssRoles::TitleRole).toString();
168 linkTitle = linkTitle.simplified(); // trims and makes 1 white space
169 linkTitle = linkTitle.replace(" ", "");
170
172 QDesktopServices::openUrl(QUrl(link.append(m_analyticsTrackingParameters)));
173
174 } else {
175 QDesktopServices::openUrl(QUrl(link));
176 }
177
178
179 }
180}
QString m_analyticsTrackingParameters

References KisRssReader::LinkRole, m_analyticsTrackingParameters, and KisRssReader::TitleRole.

◆ newsDataChanged

void KisNewsWidget::newsDataChanged ( )
signal

◆ rssDataChanged

void KisNewsWidget::rssDataChanged ( )
privateslot

Definition at line 182 of file KisNewsWidget.cpp.

183{
184 Q_EMIT newsDataChanged();
185}
void newsDataChanged()

References newsDataChanged().

◆ setAnalyticsTracking()

void KisNewsWidget::setAnalyticsTracking ( QString text)

Definition at line 102 of file KisNewsWidget.cpp.

103{
105}

References m_analyticsTrackingParameters.

◆ slotScrollerStateChanged

void KisNewsWidget::slotScrollerStateChanged ( QScroller::State state)
inlineprivateslot

Definition at line 50 of file KisNewsWidget.h.

KRITAWIDGETUTILS_EXPORT void updateCursor(QWidget *source, QScroller::State state)

References KisKineticScroller::updateCursor().

◆ toggleNews

void KisNewsWidget::toggleNews ( bool toggle)
privateslot

Definition at line 142 of file KisNewsWidget.cpp.

143{
144 m_getNews = toggle;
145
146 KisConfig cfg(false);
147 cfg.writeEntry<bool>("FetchNews", toggle);
148
149 Q_FOREACH(const QString &feed, m_enabledFeeds) {
150 if (toggle) {
151 m_rssModel->addFeed(feed);
152 } else {
153 m_rssModel->removeFeed(feed);
154 }
155 }
156}
QSet< QString > m_enabledFeeds
virtual void addFeed(const QString &feed)
void removeFeed(const QString &feed)

References MultiFeedRssModel::addFeed(), m_enabledFeeds, m_getNews, m_rssModel, MultiFeedRssModel::removeFeed(), and KisConfig::writeEntry().

◆ toggleNewsLanguage()

void KisNewsWidget::toggleNewsLanguage ( QString langCode,
bool enabled )

Definition at line 116 of file KisNewsWidget.cpp.

117{
118 // Sanity check: Since the code is adding the language code directly into
119 // the URL, this prevents any nasty surprises with malformed URLs.
120 Q_FOREACH(const char &ch, langCode.toLatin1()) {
121 bool isValidChar = ((ch >= 'a' && ch <= 'z') || ch == '-' || ch == '@');
122 if (!isValidChar) {
123 warnUI << "Ignoring attempt to toggle malformed news lang:" << langCode;
124 return;
125 }
126 }
127
128 QString feed = QStringLiteral("https://krita.org/%1/index.xml").arg(langCode);
129 if (enabled) {
130 m_enabledFeeds.insert(feed);
131 if (m_getNews) {
132 m_rssModel->addFeed(feed);
133 }
134 } else {
135 m_enabledFeeds.remove(feed);
136 if (m_getNews) {
137 m_rssModel->removeFeed(feed);
138 }
139 }
140}
#define warnUI
Definition kis_debug.h:94

References MultiFeedRssModel::addFeed(), m_enabledFeeds, m_getNews, m_rssModel, MultiFeedRssModel::removeFeed(), and warnUI.

Member Data Documentation

◆ m_analyticsTrackingParameters

QString KisNewsWidget::m_analyticsTrackingParameters
private

Definition at line 55 of file KisNewsWidget.h.

◆ m_enabledFeeds

QSet<QString> KisNewsWidget::m_enabledFeeds
private

Definition at line 56 of file KisNewsWidget.h.

◆ m_getNews

bool KisNewsWidget::m_getNews {false}
private

Definition at line 53 of file KisNewsWidget.h.

53{false};

◆ m_rssModel

MultiFeedRssModel* KisNewsWidget::m_rssModel {0}
private

Definition at line 54 of file KisNewsWidget.h.

54{0};

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