File indexing completed on 2024-05-12 16:02:04

0001 /*
0002  *  Author 2021 Agata Cacko cacko.azh@gmail.com
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #ifndef KIS_TAG_SELECTION_WIDGET_H
0007 #define KIS_TAG_SELECTION_WIDGET_H
0008 
0009 #include <QWidget>
0010 #include <QLabel>
0011 #include <QString>
0012 #include <QToolButton>
0013 #include <QHBoxLayout>
0014 #include <QVariant>
0015 
0016 #include <KoID.h>
0017 
0018 #include <kritawidgets_export.h>
0019 #include <TagActions.h>
0020 #include <kis_signal_compressor.h>
0021 
0022 
0023 class KRITAWIDGETS_EXPORT WdgCloseableLabel : public QWidget
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     explicit WdgCloseableLabel(KoID tag, bool editable, bool semiSelected = false, QWidget *parent = 0);
0029     ~WdgCloseableLabel() override;
0030 
0031 Q_SIGNALS:
0032     void sigRemoveTagFromSelection(KoID tag);
0033 
0034 protected:
0035     void paintEvent(QPaintEvent *event) override;
0036 
0037 private:
0038     QLabel* m_textLabel {nullptr};
0039     QPushButton* m_closeIconLabel {nullptr};
0040 
0041     int m_size{18};
0042     bool m_editble {false};
0043     bool m_semiSelected {false};
0044     KoID m_tag;
0045 
0046     friend class TestKisTagSelectionWidget;
0047 };
0048 
0049 
0050 class WdgAddTagButton : public QToolButton
0051 {
0052 
0053     Q_OBJECT
0054 
0055 public:
0056     explicit WdgAddTagButton(QWidget* parent);
0057     ~WdgAddTagButton() override;
0058 
0059     void setAvailableTagsList(QList<KoID> &notSelected);
0060     void setAddNewTagAvailable(bool addNewTagAvailable);
0061 
0062 Q_SIGNALS:
0063     void sigCreateNewTag(QString tagName);
0064     void sigAddNewTag(KoID tag);
0065 
0066 public Q_SLOTS:
0067     void slotFinishLastAction();
0068 
0069 
0070 
0071 private Q_SLOTS:
0072     void slotAddNewTag(QAction* action);
0073     void slotCreateNewTag(QString tagName);
0074 
0075 protected:
0076     void paintEvent(QPaintEvent *event) override;
0077 
0078     enum LastAction {
0079         AddNewTag,
0080         CreateNewTag,
0081     };
0082 
0083 
0084 private:
0085     int m_size { 18 };
0086     bool m_addNewTagAvailable { true };
0087 
0088     LastAction m_lastAction { CreateNewTag };
0089     KoID m_lastTagToAdd;
0090     QString m_lastTagToCreate {""};
0091 
0092     UserInputTagAction* m_createNewTagAction {0};
0093 
0094     friend class TestKisTagSelectionWidget;
0095 
0096 };
0097 
0098 class KRITAWIDGETS_EXPORT KisTagSelectionWidget : public QWidget
0099 {
0100     Q_OBJECT
0101 
0102 public:
0103     explicit KisTagSelectionWidget(QWidget *parent = 0);
0104     ~KisTagSelectionWidget() override;
0105 
0106     void setTagList(bool editable, QList<KoID> &selected, QList<KoID> &notSelected);
0107     void setTagList(bool editable, QList<KoID> &selected, QList<KoID> &notSelected, QList<KoID> &semitSelected);
0108 
0109 
0110 Q_SIGNALS:
0111     void sigAddTagToSelection(KoID tag);
0112     void sigRemoveTagFromSelection(KoID tag);
0113     void sigCreateNewTag(QString tag);
0114 
0115 private Q_SLOTS:
0116 
0117     void slotAddTagToSelection(QAction* action);
0118     void slotRemoveTagFromSelection(KoID tag);
0119 
0120 private:
0121     QLayout* m_layout {nullptr};
0122     QToolButton* m_addTagButton {nullptr};
0123     bool m_editable {false};
0124 
0125     friend class TestKisTagSelectionWidget;
0126 };
0127 
0128 #endif // KIS_TAG_SELECTION_WIDGET_H