File indexing completed on 2024-05-19 04:29:28
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_editable {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, bool createNew = true); 0057 ~WdgAddTagButton() override; 0058 0059 void setAvailableTagsList(QList<KoID> ¬Selected); 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 QAction* m_noTags {0}; 0094 bool m_createNew; 0095 0096 friend class TestKisTagSelectionWidget; 0097 0098 }; 0099 0100 class KRITAWIDGETS_EXPORT KisTagSelectionWidget : public QWidget 0101 { 0102 Q_OBJECT 0103 0104 public: 0105 explicit KisTagSelectionWidget(QWidget *parent = 0, bool createNew = true); 0106 ~KisTagSelectionWidget() override; 0107 0108 void setTagList(bool editable, QList<KoID> &selected, QList<KoID> ¬Selected); 0109 void setTagList(bool editable, QList<KoID> &selected, QList<KoID> ¬Selected, QList<KoID> &semiSelected); 0110 0111 0112 Q_SIGNALS: 0113 void sigAddTagToSelection(KoID tag); 0114 void sigRemoveTagFromSelection(KoID tag); 0115 void sigCreateNewTag(QString tag); 0116 0117 private Q_SLOTS: 0118 0119 void slotAddTagToSelection(QAction* action); 0120 void slotRemoveTagFromSelection(KoID tag); 0121 0122 private: 0123 QLayout* m_layout {nullptr}; 0124 QToolButton* m_addTagButton {nullptr}; 0125 bool m_editable {false}; 0126 bool m_createNew {true}; 0127 0128 friend class TestKisTagSelectionWidget; 0129 }; 0130 0131 #endif // KIS_TAG_SELECTION_WIDGET_H