1 /* ============================================================
2 * QuiteRSS is a open-source cross-platform RSS/Atom news feeds reader
3 * Copyright (C) 2011-2020 QuiteRSS Team <quiterssteam@gmail.com>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 * ============================================================ */
18 #include "notificationsnewsitem.h"
19
NewsItem(int idFeed,int idNews,int width,QWidget * parent)20 NewsItem::NewsItem(int idFeed, int idNews, int width, QWidget * parent)
21 : QWidget(parent)
22 , feedId_(idFeed)
23 , newsId_(idNews)
24 , read_(false)
25 {
26 setCursor(Qt::PointingHandCursor);
27
28 iconLabel_ = new QLabel(this);
29 iconLabel_->setFixedWidth(19);
30
31 textLabel_ = new QLabel(this);
32 textLabel_->setFixedWidth(width);
33 textLabel_->setStyleSheet("QLabel:hover {color: #1155CC;}");
34
35 readButton_ = new ToolButton(this);
36 readButton_->setIcon(QIcon(":/images/bulletUnread"));
37 readButton_->setToolTip(tr("Mark Read/Unread"));
38 readButton_->setAutoRaise(true);
39
40 openExternalBrowserButton_ = new ToolButton(this);
41 openExternalBrowserButton_->setIcon(QIcon(":/images/openBrowser"));
42 openExternalBrowserButton_->setAutoRaise(true);
43
44 deleteButton_ = new ToolButton(this);
45 deleteButton_->setIcon(QIcon(":/images/editClear"));
46 deleteButton_->setToolTip(tr("Delete News"));
47 deleteButton_->setAutoRaise(true);
48
49 QHBoxLayout *mainLayout = new QHBoxLayout();
50 mainLayout->setMargin(0);
51 mainLayout->setSpacing(1);
52 mainLayout->addWidget(readButton_);
53 mainLayout->addWidget(iconLabel_);
54 mainLayout->addWidget(textLabel_, 1);
55 mainLayout->addStretch(0);
56 mainLayout->addWidget(openExternalBrowserButton_);
57 mainLayout->addWidget(deleteButton_);
58 setLayout(mainLayout);
59
60 connect(readButton_, SIGNAL(clicked()), this, SLOT(markRead()));
61 connect(openExternalBrowserButton_, SIGNAL(clicked()), this, SLOT(openExternalBrowser()));
62 connect(deleteButton_, SIGNAL(clicked()), this, SLOT(deleteNews()));
63
64 installEventFilter(this);
65 }
66
~NewsItem()67 NewsItem::~NewsItem()
68 {
69
70 }
71
setText(const QString & text)72 void NewsItem::setText(const QString &text)
73 {
74 QString titleStr = textLabel_->fontMetrics().elidedText(
75 text, Qt::ElideRight, textLabel_->sizeHint().width());
76 textLabel_->setText(titleStr);
77 textLabel_->setToolTip(text);
78 }
79
setFontText(const QFont & font)80 void NewsItem::setFontText(const QFont & font)
81 {
82 textLabel_->setFont(font);
83 }
84
setColorText(const QString & color,const QString & linkColor)85 void NewsItem::setColorText(const QString &color, const QString &linkColor)
86 {
87 textLabel_->setStyleSheet(QString(
88 "QLabel {color: %1;}"
89 "QLabel:hover {color: %2;}").
90 arg(color).arg(linkColor));
91 }
92
eventFilter(QObject * obj,QEvent * event)93 bool NewsItem::eventFilter(QObject *obj, QEvent *event)
94 {
95 if ((event->type() == QEvent::MouseButtonPress) && isEnabled()) {
96 read_ = 1;
97 readButton_->setIcon(QIcon(":/images/bulletRead"));
98 QFont font = textLabel_->font();
99 font.setBold(false);
100 textLabel_->setFont(font);
101 emit signalTitleClicked(feedId_, newsId_);
102 return true;
103 }
104 return QObject::eventFilter(obj, event);
105 }
106
openExternalBrowser()107 void NewsItem::openExternalBrowser()
108 {
109 read_ = 1;
110 readButton_->setIcon(QIcon(":/images/bulletRead"));
111 QFont font = textLabel_->font();
112 font.setBold(false);
113 textLabel_->setFont(font);
114 emit signalMarkRead(feedId_, newsId_, read_);
115
116 QString linkString;
117 QSqlQuery q;
118 q.exec(QString("SELECT link_href, link_alternate FROM news WHERE id=='%1'").arg(newsId_));
119 if (q.next()) {
120 linkString = q.value(0).toString();
121 if (linkString.isEmpty()) {
122 linkString = q.value(1).toString();
123 }
124 }
125 emit signalOpenExternalBrowser(linkString.simplified());
126 }
127
markRead()128 void NewsItem::markRead()
129 {
130 QFont font = textLabel_->font();
131 read_ = !read_;
132 if (read_) {
133 readButton_->setIcon(QIcon(":/images/bulletRead"));
134 font.setBold(false);
135 }
136 else {
137 readButton_->setIcon(QIcon(":/images/bulletUnread"));
138 font.setBold(true);
139 }
140 textLabel_->setFont(font);
141 emit signalMarkRead(feedId_, newsId_, read_);
142 }
143
deleteNews()144 void NewsItem::deleteNews()
145 {
146 QFont font = textLabel_->font();
147 font.setBold(false);
148 textLabel_->setFont(font);
149 setDisabled(true);
150 emit signalDeleteNews(feedId_, newsId_);
151 }
152