diff --git a/libs/ui/KisMultiFeedRSSModel.cpp b/libs/ui/KisMultiFeedRSSModel.cpp
--- a/libs/ui/KisMultiFeedRSSModel.cpp
+++ b/libs/ui/KisMultiFeedRSSModel.cpp
@@ -197,7 +197,12 @@
RssItem item = m_aggregatedFeed.at(index.row());
switch (role) {
- case Qt::DisplayRole: // fall through
+ case Qt::DisplayRole:
+ {
+ return QString("" + item.title + ""
+ "
" + item.pubDate.toString("dd-MM-yyyy hh:mm") + "
"
+ "" + item.description + "
");
+ }
case TitleRole:
return item.title;
case DescriptionRole:
diff --git a/libs/ui/widgets/KisNewsWidget.h b/libs/ui/widgets/KisNewsWidget.h
--- a/libs/ui/widgets/KisNewsWidget.h
+++ b/libs/ui/widgets/KisNewsWidget.h
@@ -20,11 +20,21 @@
#include
#include
+#include
#include
class MultiFeedRssModel;
+class KisNewsDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+public:
+ KisNewsDelegate(QObject *parent = 0);
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+};
+
/**
* @brief The KisNewsWidget class shows the latest news from Krita.org
*/
diff --git a/libs/ui/widgets/KisNewsWidget.cpp b/libs/ui/widgets/KisNewsWidget.cpp
--- a/libs/ui/widgets/KisNewsWidget.cpp
+++ b/libs/ui/widgets/KisNewsWidget.cpp
@@ -19,10 +19,63 @@
#include
#include
+#include
+#include
+#include
+#include
+#include
#include "kis_config.h"
#include "KisMultiFeedRSSModel.h"
+
+KisNewsDelegate::KisNewsDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+ qDebug() << "Delegate created";
+}
+
+void KisNewsDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ painter->save();
+
+ QStyleOptionViewItem optionCopy = option;
+ initStyleOption(&optionCopy, index);
+
+ QStyle *style = optionCopy.widget? optionCopy.widget->style() : QApplication::style();
+
+ QTextDocument doc;
+ doc.setHtml(optionCopy.text);
+
+ /// Painting item without text
+ optionCopy.text = QString();
+ style->drawControl(QStyle::CE_ItemViewItem, &optionCopy, painter);
+
+ QAbstractTextDocumentLayout::PaintContext ctx;
+
+ // Highlighting text if item is selected
+ if (optionCopy.state & QStyle::State_Selected) {
+ ctx.palette.setColor(QPalette::Text, optionCopy.palette.color(QPalette::Active, QPalette::HighlightedText));
+ }
+
+ painter->translate(optionCopy.rect.left(), optionCopy.rect.top());
+ QRect clip(0, 0, optionCopy.rect.width(), optionCopy.rect.height());
+ doc.setPageSize(clip.size());
+ doc.drawContents(painter, clip);
+ painter->restore();
+}
+
+QSize KisNewsDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ QStyleOptionViewItem optionCopy = option;
+ initStyleOption(&optionCopy, index);
+
+ QTextDocument doc;
+ doc.setHtml(optionCopy.text);
+ doc.setTextWidth(optionCopy.rect.width());
+ return QSize(doc.idealWidth(), doc.size().height());
+}
+
KisNewsWidget::KisNewsWidget(QWidget *parent)
: QWidget(parent)
{
@@ -39,7 +92,9 @@
else {
m_rssModel->removeFeed(QLatin1String("https://krita.org/en/feed/"));
}
+
listNews->setModel(m_rssModel);
+ listNews->setItemDelegate(new KisNewsDelegate(listNews));
connect(listNews, SIGNAL(clicked(const QModelIndex&)), this, SLOT(itemSelected(const QModelIndex&)));
}