diff --git a/src/librssguard/gui/messagepreviewer.cpp b/src/librssguard/gui/messagepreviewer.cpp index cc9fbcc1f..02516b97f 100755 --- a/src/librssguard/gui/messagepreviewer.cpp +++ b/src/librssguard/gui/messagepreviewer.cpp @@ -47,7 +47,7 @@ void MessagePreviewer::createConnections() { MessagePreviewer::MessagePreviewer(QWidget* parent) : QWidget(parent), m_layout(new QGridLayout(this)), m_toolBar(new QToolBar(this)), m_verticalScrollBarPosition(0.0), - m_separator(nullptr), m_btnLabels(QList>()) { + m_separator(nullptr), m_btnLabels(QList>()) { #if defined (USE_WEBENGINE) m_txtMessage = new WebBrowser(this); #else @@ -115,6 +115,21 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) { } } +void MessagePreviewer::switchLabel(bool assign) { + auto lbl = qobject_cast(sender())->label(); + + if (lbl == nullptr) { + return; + } + + if (assign) { + lbl->assignToMessage(m_message); + } + else { + lbl->deassignFromMessage(m_message); + } +} + void MessagePreviewer::markMessageAsRead() { markMessageAsReadUnread(RootItem::ReadStatus::Read); } @@ -192,23 +207,34 @@ void MessagePreviewer::updateLabels(bool only_clear) { if (m_root.data() != nullptr) { m_separator = m_toolBar->addSeparator(); + QSqlDatabase database = qApp->database()->connection(metaObject()->className()); for (auto* label : m_root.data()->getParentServiceRoot()->labelsNode()->labels()) { - QToolButton* btn_label = new QToolButton(this); + LabelButton* btn_label = new LabelButton(this); + btn_label->setLabel(label); btn_label->setCheckable(true); btn_label->setIcon(Label::generateIcon(label->color())); btn_label->setAutoRaise(false); btn_label->setText(label->title()); btn_label->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon); + btn_label->setChecked(DatabaseQueries::isLabelAssignedToMessage(database, label, m_message)); QAction* act_label = m_toolBar->addWidget(btn_label); - connect(act_label, &QAction::triggered, this, []() { - int a = 5; - }); + connect(btn_label, &QToolButton::toggled, this, &MessagePreviewer::switchLabel); - m_btnLabels.append(QPair(btn_label, act_label)); + m_btnLabels.append({ btn_label, act_label }); } } } + +LabelButton::LabelButton(QWidget* parent) : QToolButton(parent), m_label(nullptr) {} + +Label* LabelButton::label() const { + return m_label.data(); +} + +void LabelButton::setLabel(Label* label) { + m_label = label; +} diff --git a/src/librssguard/gui/messagepreviewer.h b/src/librssguard/gui/messagepreviewer.h index 2856a706e..54a422300 100644 --- a/src/librssguard/gui/messagepreviewer.h +++ b/src/librssguard/gui/messagepreviewer.h @@ -3,14 +3,14 @@ #ifndef MESSAGEPREVIEWER_H #define MESSAGEPREVIEWER_H -#include +#include #include "core/message.h" +#include "services/abstract/label.h" #include "services/abstract/rootitem.h" #include -class QToolButton; class QGridLayout; class QToolBar; @@ -20,6 +20,19 @@ class WebBrowser; class MessageBrowser; #endif +class LabelButton : public QToolButton { + Q_OBJECT + + public: + explicit LabelButton(QWidget* parent = nullptr); + + Label* label() const; + void setLabel(Label* label); + + private: + QPointer