diff --git a/src/librssguard/gui/colortoolbutton.cpp b/src/librssguard/gui/colortoolbutton.cpp new file mode 100644 index 000000000..88f851ecd --- /dev/null +++ b/src/librssguard/gui/colortoolbutton.cpp @@ -0,0 +1,51 @@ +// For license of this file, see /LICENSE.md. + +#include "gui/colortoolbutton.h" + +#include +#include +#include + +ColorToolButton::ColorToolButton(QWidget* parent) : QToolButton(parent), m_color(Qt::GlobalColor::black) { + connect(this, &ColorToolButton::clicked, this, [this]() { + auto new_color = QColorDialog::getColor(m_color, parentWidget(), tr("Select new color"), + QColorDialog::ColorDialogOption::DontUseNativeDialog | + QColorDialog::ColorDialogOption::ShowAlphaChannel); + + if (new_color.isValid()) { + setColor(new_color); + emit colorChanged(new_color); + } + }); +} + +QColor ColorToolButton::color() const { + return m_color; +} + +void ColorToolButton::setColor(const QColor& color) { + m_color = color; + + repaint(); +} + +void ColorToolButton::paintEvent(QPaintEvent* e) { + Q_UNUSED(e) + QPainter p(this); + QRect rect(QPoint(0, 0), size()); + + if (isEnabled()) { + if (underMouse() || isChecked()) { + p.setOpacity(0.7); + } + } + else { + p.setOpacity(0.3); + } + + QPainterPath path; + + path.addRoundedRect(QRectF(rect), 3, 3); + + p.fillPath(path, m_color); +} diff --git a/src/librssguard/gui/colortoolbutton.h b/src/librssguard/gui/colortoolbutton.h new file mode 100644 index 000000000..7341f8e62 --- /dev/null +++ b/src/librssguard/gui/colortoolbutton.h @@ -0,0 +1,27 @@ +// For license of this file, see /LICENSE.md. + +#ifndef COLORTOOLBUTTON_H +#define COLORTOOLBUTTON_H + +#include + +class ColorToolButton : public QToolButton { + Q_OBJECT + + public: + explicit ColorToolButton(QWidget* parent = nullptr); + + QColor color() const; + void setColor(const QColor& color); + + signals: + void colorChanged(const QColor& new_color); + + protected: + virtual void paintEvent(QPaintEvent* e); + + private: + QColor m_color; +}; + +#endif // COLORTOOLBUTTON_H diff --git a/src/librssguard/gui/dialogs/formaddeditlabel.cpp b/src/librssguard/gui/dialogs/formaddeditlabel.cpp new file mode 100644 index 000000000..bd48593c1 --- /dev/null +++ b/src/librssguard/gui/dialogs/formaddeditlabel.cpp @@ -0,0 +1,19 @@ +// For license of this file, see /LICENSE.md. + +#include "gui/dialogs/formaddeditlabel.h" + +#include "services/abstract/label.h" + +FormAddEditLabel::FormAddEditLabel(QWidget* parent) : QDialog(parent), ui(new Ui::FormAddEditLabel) { + ui->setupUi(this); +} + +FormAddEditLabel::~FormAddEditLabel() { + delete ui; +} + +Label* FormAddEditLabel::execForAdd() { + auto exit_code = exec(); + + return nullptr; +} diff --git a/src/librssguard/gui/dialogs/formaddeditlabel.h b/src/librssguard/gui/dialogs/formaddeditlabel.h new file mode 100644 index 000000000..eabe4f034 --- /dev/null +++ b/src/librssguard/gui/dialogs/formaddeditlabel.h @@ -0,0 +1,30 @@ +// For license of this file, see /LICENSE.md. + +#ifndef FORMADDEDITLABEL_H +#define FORMADDEDITLABEL_H + +#include + +#include "ui_formaddeditlabel.h" + +namespace Ui { + class FormAddEditLabel; +} + +class Label; + +class FormAddEditLabel : public QDialog { + Q_OBJECT + + public: + explicit FormAddEditLabel(QWidget* parent = nullptr); + ~FormAddEditLabel(); + + public slots: + Label* execForAdd(); + + private: + Ui::FormAddEditLabel* ui; +}; + +#endif // FORMADDEDITLABEL_H diff --git a/src/librssguard/gui/dialogs/formaddeditlabel.ui b/src/librssguard/gui/dialogs/formaddeditlabel.ui new file mode 100644 index 000000000..1300f3a14 --- /dev/null +++ b/src/librssguard/gui/dialogs/formaddeditlabel.ui @@ -0,0 +1,114 @@ + + + FormAddEditLabel + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + Name + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Color + + + + + + + ... + + + + + + + + LineEditWithStatus + QWidget +
lineeditwithstatus.h
+ 1 +
+ + ColorToolButton + QToolButton +
colortoolbutton.h
+
+
+ + + + buttonBox + accepted() + FormAddEditLabel + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + FormAddEditLabel + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/librssguard/gui/plaintoolbutton.h b/src/librssguard/gui/plaintoolbutton.h index dca7e6cec..1819b244a 100644 --- a/src/librssguard/gui/plaintoolbutton.h +++ b/src/librssguard/gui/plaintoolbutton.h @@ -21,8 +21,6 @@ class PlainToolButton : public QToolButton { void reactOnSenderActionChange(); protected: - - // Custom look. void paintEvent(QPaintEvent* e); private: diff --git a/src/librssguard/librssguard.pro b/src/librssguard/librssguard.pro index d61c3ea8d..e8e80d8f3 100644 --- a/src/librssguard/librssguard.pro +++ b/src/librssguard/librssguard.pro @@ -47,9 +47,11 @@ HEADERS += core/feeddownloader.h \ exceptions/ioexception.h \ gui/baselineedit.h \ gui/basetoolbar.h \ + gui/colortoolbutton.h \ gui/comboboxwithstatus.h \ gui/dialogs/formabout.h \ gui/dialogs/formaddaccount.h \ + gui/dialogs/formaddeditlabel.h \ gui/dialogs/formbackupdatabasesettings.h \ gui/dialogs/formdatabasecleanup.h \ gui/dialogs/formmain.h \ @@ -195,9 +197,11 @@ SOURCES += core/feeddownloader.cpp \ exceptions/ioexception.cpp \ gui/baselineedit.cpp \ gui/basetoolbar.cpp \ + gui/colortoolbutton.cpp \ gui/comboboxwithstatus.cpp \ gui/dialogs/formabout.cpp \ gui/dialogs/formaddaccount.cpp \ + gui/dialogs/formaddeditlabel.cpp \ gui/dialogs/formbackupdatabasesettings.cpp \ gui/dialogs/formdatabasecleanup.cpp \ gui/dialogs/formmain.cpp \ @@ -325,6 +329,7 @@ mac { FORMS += gui/dialogs/formabout.ui \ gui/dialogs/formaddaccount.ui \ + gui/dialogs/formaddeditlabel.ui \ gui/dialogs/formbackupdatabasesettings.ui \ gui/dialogs/formdatabasecleanup.ui \ gui/dialogs/formmain.ui \ diff --git a/src/librssguard/services/abstract/labelsnode.cpp b/src/librssguard/services/abstract/labelsnode.cpp index 32376c7d3..46c1459bf 100755 --- a/src/librssguard/services/abstract/labelsnode.cpp +++ b/src/librssguard/services/abstract/labelsnode.cpp @@ -2,6 +2,7 @@ #include "services/abstract/labelsnode.h" +#include "gui/dialogs/formaddeditlabel.h" #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" #include "services/abstract/serviceroot.h" @@ -19,9 +20,17 @@ QList LabelsNode::contextMenuFeedsList() { if (m_actLabelNew == nullptr) { // Initialize it all. m_actLabelNew = new QAction(qApp->icons()->fromTheme("tag-new"), tr("New label"), this); + + connect(m_actLabelNew, &QAction::triggered, this, &LabelsNode::createLabel); } return QList { m_actLabelNew }; } + +void LabelsNode::createLabel() { + FormAddEditLabel frm(qApp->mainFormWidget()); + + frm.execForAdd(); +} diff --git a/src/librssguard/services/abstract/labelsnode.h b/src/librssguard/services/abstract/labelsnode.h index 8f8e399eb..c603fe59f 100755 --- a/src/librssguard/services/abstract/labelsnode.h +++ b/src/librssguard/services/abstract/labelsnode.h @@ -13,6 +13,9 @@ class LabelsNode : public RootItem { virtual QList contextMenuFeedsList(); + public slots: + void createLabel(); + private: QAction* m_actLabelNew; }; diff --git a/src/librssguard/services/gmail/gui/formeditgmailaccount.ui b/src/librssguard/services/gmail/gui/formeditgmailaccount.ui index ce8d5662f..8d1969769 100644 --- a/src/librssguard/services/gmail/gui/formeditgmailaccount.ui +++ b/src/librssguard/services/gmail/gui/formeditgmailaccount.ui @@ -153,18 +153,18 @@ - - LineEditWithStatus - QWidget -
lineeditwithstatus.h
- 1 -
LabelWithStatus QWidget
labelwithstatus.h
1
+ + LineEditWithStatus + QWidget +
lineeditwithstatus.h
+ 1 +
m_spinLimitMessages diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index a0a53de9a..47c6d5f46 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -142,6 +142,7 @@ void StandardServiceRoot::loadFromDatabase() { // As the last item, add recycle bin, which is needed. appendChild(recycleBin()); appendChild(importantNode()); + appendChild(new LabelsNode(this)); updateCounts(true); }