Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_widget_chooser.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef H_KIS_WIDGET_CHOOSER_H_
8#define H_KIS_WIDGET_CHOOSER_H_
9
10#include <kritaui_export.h>
11#include <QList>
12#include <QIcon>
13#include <QFrame>
14
15class QToolButton;
16class QLabel;
17class QButtonGroup;
18
19class KRITAUI_EXPORT KisWidgetChooser: public QFrame
20{
21 Q_OBJECT
22
23 struct Data
24 {
25 Data(const QString& ID):
26 id(ID), widget(0), label(0), chosen(false) { }
27 Data(const Data& d):
28 id(d.id), widget(d.widget), label(d.label), chosen(d.chosen) { }
29 Data(const QString& ID, QWidget* w, QLabel* l):
30 id(ID), widget(w), label(l), chosen(false) { }
31
32 friend bool operator == (const Data& a, const Data& b) {
33 return a.id == b.id;
34 }
35
36 QString id;
37 QWidget* widget;
38 QLabel* label;
39 bool chosen;
40 };
41
44
45public:
46 KisWidgetChooser(int id, QWidget* parent=0);
47 ~KisWidgetChooser() override;
48
49 QWidget* chooseWidget(const QString& id);
50 void addLabelWidget(const QString& id, const QString& label, QWidget* widget);
51 QWidget* getWidget(const QString& id) const;
52
53 template<class TWidget>
54 TWidget* addWidget(const QString& id, const QString& label = "") {
55 if (id.isEmpty()) {
56 return 0;
57 }
58
59 TWidget* widget = new TWidget();
60 addLabelWidget(id, label, widget);
61 return widget;
62 }
63
64 template<class TWidget>
65 TWidget* getWidget(const QString& id) const {
66 return dynamic_cast<TWidget*>(getWidget(id));
67 }
68public Q_SLOTS:
69
70 void showPopupWidget();
71 void updateThemedIcons();
72
73private:
74 void removeWidget(const QString& id);
75 QLayout* createPopupLayout();
76 QLayout* createLayout();
77 void updateArrowIcon();
78
79protected Q_SLOTS:
80 void slotButtonPressed();
81 void slotWidgetChosen(int index);
82
83 // QWidget interface
84protected:
85 void changeEvent(QEvent *e) override;
86
87private:
90 QToolButton* m_arrowButton;
91 QButtonGroup* m_buttons;
92 QFrame* m_popup;
93 QString m_chosenID;
95};
96
97#endif // H_KIS_WIDGET_CHOOSER_H_
98
bool operator==(const KisRegion &lhs, const KisRegion &rhs)
QList< Data >::const_iterator ConstIterator
QButtonGroup * m_buttons
TWidget * getWidget(const QString &id) const
TWidget * addWidget(const QString &id, const QString &label="")
QList< Data >::iterator Iterator
QToolButton * m_arrowButton
QList< Data > m_widgets
Data(const QString &ID)
Data(const QString &ID, QWidget *w, QLabel *l)