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> ¬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 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> ¬Selected); 0107 void setTagList(bool editable, QList<KoID> &selected, QList<KoID> ¬Selected, 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