Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBrushSelectionWidget Class Reference

#include <kis_brush_selection_widget.h>

+ Inheritance diagram for KisBrushSelectionWidget:

Classes

struct  Private
 

Signals

void sigBrushChanged ()
 
void sigPrecisionChanged ()
 

Public Member Functions

KisBrushSP brush () const
 
void hideOptions (const QStringList &options)
 
 KisBrushSelectionWidget (int maxBrushSize, KisAutoBrushModel *autoBrushModel, KisPredefinedBrushModel *predefinedBrushModel, KisTextBrushModel *textBrushModel, lager::cursor< KisBrushModel::BrushType > brushType, lager::cursor< KisBrushModel::PrecisionData > precisionData, KisBrushOptionWidgetFlags flags, QWidget *parent=0)
 
lager::reader< bool > lightnessModeEnabled () const
 
void setImage (KisImageWSP image)
 
 ~KisBrushSelectionWidget () override
 

Private Types

enum  Type { AUTOBRUSH , PREDEFINEDBRUSH , TEXTBRUSH }
 

Private Member Functions

void addChooser (const QString &text, QWidget *widget, int id, KoGroupButton::GroupPosition pos)
 
void setCurrentWidget (QWidget *widget)
 

Private Attributes

KisAutoBrushWidgetm_autoBrushWidget {0}
 
QButtonGroup * m_buttonGroup {0}
 
QHash< int, QWidget * > m_chooserMap
 
QWidget * m_currentBrushWidget {0}
 
const QScopedPointer< Privatem_d
 
QGridLayout * m_layout {0}
 
QSize m_minimumSize
 
KisPredefinedBrushChooserm_predefinedBrushWidget {0}
 
QStackedWidget * m_stackedWidget {0}
 
KisTextBrushChooserm_textBrushWidget {0}
 
Ui_WdgBrushChooser uiWdgBrushChooser
 

Detailed Description

Compound widget that collects all the various brush selection widgets.

Definition at line 38 of file kis_brush_selection_widget.h.

Member Enumeration Documentation

◆ Type

Enumerator
AUTOBRUSH 
PREDEFINEDBRUSH 
TEXTBRUSH 

Definition at line 71 of file kis_brush_selection_widget.h.

Constructor & Destructor Documentation

◆ KisBrushSelectionWidget()

KisBrushSelectionWidget::KisBrushSelectionWidget ( int maxBrushSize,
KisAutoBrushModel * autoBrushModel,
KisPredefinedBrushModel * predefinedBrushModel,
KisTextBrushModel * textBrushModel,
lager::cursor< KisBrushModel::BrushType > brushType,
lager::cursor< KisBrushModel::PrecisionData > precisionData,
KisBrushOptionWidgetFlags flags,
QWidget * parent = 0 )

Definition at line 119 of file kis_brush_selection_widget.cpp.

127 : QWidget(parent)
129 , m_d(new Private(precisionData))
130{
131 uiWdgBrushChooser.setupUi(this);
132
133 m_buttonGroup = new QButtonGroup(this);
134 m_buttonGroup->setExclusive(true);
135 m_layout = new QGridLayout(uiWdgBrushChooser.settingsFrame);
136
137 m_stackedWidget = new QStackedWidget(this);
138 m_layout->addWidget(m_stackedWidget);
139
140 m_autoBrushWidget = new KisAutoBrushWidget(maxBrushSize, autoBrushModel, this, "autobrush");
141 addChooser(i18nc("Autobrush Brush tip mode", "Auto"), m_autoBrushWidget, AUTOBRUSH, KoGroupButton::GroupLeft);
142 m_predefinedBrushWidget = new KisPredefinedBrushChooser(maxBrushSize, predefinedBrushModel, this);
143 addChooser(i18nc("Predefined Brush tip mode", "Predefined"), m_predefinedBrushWidget, PREDEFINEDBRUSH, KoGroupButton::GroupCenter);
144
145 m_textBrushWidget = new KisTextBrushChooser(textBrushModel, this);
146 addChooser(i18nc("Text Brush tip mode", "Text"), m_textBrushWidget, TEXTBRUSH, KoGroupButton::GroupRight);
147
148 m_d->brushType = brushType.zoom(kislager::lenses::do_static_cast<BrushType, int>);
149
150 m_d->brushType.bind([this](int value) {m_stackedWidget->setCurrentIndex(value); });
151 m_d->brushType.bind([this](int value) {m_buttonGroup->button(value)->setChecked(true); });
152 connect(m_buttonGroup, &QButtonGroup::idClicked, [this] (int id) {m_d->brushType.set(id);});
153
154
155 Q_FOREACH (QWidget *widget, m_chooserMap.values()) {
156 m_minimumSize = m_minimumSize.expandedTo(widget->sizeHint());
157 }
158
159
161
162 uiWdgBrushChooser.sliderPrecision->setRange(1, 5);
163 uiWdgBrushChooser.sliderPrecision->setSingleStep(1);
164 uiWdgBrushChooser.sliderPrecision->setPageStep(1);
165
166
168 connectControl(uiWdgBrushChooser.sliderPrecision, &m_d->model, "precisionLevel");
169 connectControl(uiWdgBrushChooser.autoPrecisionCheckBox, &m_d->model, "useAutoPrecision");
170 connect(&m_d->model, &PrecisionModel::precisionToolTipChanged,
171 uiWdgBrushChooser.sliderPrecision, &KisSliderSpinBox::setToolTip);
172
173 connect(&m_d->model, &PrecisionModel::useAutoPrecisionChanged,
174 uiWdgBrushChooser.sliderPrecision, &KisSliderSpinBox::setDisabled);
175 connect(&m_d->model, &PrecisionModel::useAutoPrecisionChanged,
176 uiWdgBrushChooser.lblPrecision, &KisSliderSpinBox::setDisabled);
177 } else {
178 uiWdgBrushChooser.sliderPrecision->setVisible(false);
179 uiWdgBrushChooser.autoPrecisionCheckBox->setVisible(false);
180 uiWdgBrushChooser.lblPrecision->setVisible(false);
181 }
182}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisTextBrushChooser * m_textBrushWidget
const QScopedPointer< Private > m_d
QHash< int, QWidget * > m_chooserMap
void addChooser(const QString &text, QWidget *widget, int id, KoGroupButton::GroupPosition pos)
KisAutoBrushWidget * m_autoBrushWidget
KisPredefinedBrushChooser * m_predefinedBrushWidget
@ GroupLeft
The button is at the left of the group, so it would have rounded the left part.
@ GroupRight
The button is at the right of the group, so it would have rounded the right part.
@ GroupCenter
The button is on the center of the group, so it would have separators on both sides.
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)

References addChooser(), AUTOBRUSH, connect(), KisWidgetConnectionUtils::connectControl(), KoGroupButton::GroupCenter, KoGroupButton::GroupLeft, KoGroupButton::GroupRight, m_autoBrushWidget, m_buttonGroup, m_chooserMap, m_d, m_layout, m_minimumSize, m_predefinedBrushWidget, m_stackedWidget, m_textBrushWidget, PREDEFINEDBRUSH, setCurrentWidget(), SupportsPrecision, TEXTBRUSH, uiWdgBrushChooser, and value().

◆ ~KisBrushSelectionWidget()

KisBrushSelectionWidget::~KisBrushSelectionWidget ( )
override

Definition at line 185 of file kis_brush_selection_widget.cpp.

186{
187}

Member Function Documentation

◆ addChooser()

void KisBrushSelectionWidget::addChooser ( const QString & text,
QWidget * widget,
int id,
KoGroupButton::GroupPosition pos )
private

Definition at line 264 of file kis_brush_selection_widget.cpp.

265{
267 button->setGroupPosition(pos);
268 button->setText(text);
269 button->setAutoRaise(false);
270 button->setCheckable(true);
271 uiWdgBrushChooser.brushChooserButtonLayout->addWidget(button);
272 m_buttonGroup->addButton(button, id);
273
274 m_stackedWidget->insertWidget(id, widget);
275}
QString button(const QWheelEvent &ev)

References button(), m_buttonGroup, m_stackedWidget, and uiWdgBrushChooser.

◆ brush()

KisBrushSP KisBrushSelectionWidget::brush ( ) const

Definition at line 189 of file kis_brush_selection_widget.cpp.

190{
191 KisBrushSP theBrush;
192
193 // Fallback to auto brush if no brush selected
194 // Can happen if there is no predefined brush found
195 if (!theBrush)
196 theBrush = m_autoBrushWidget->brush();
197
198 return theBrush;
199
200}

References KisAutoBrushWidget::brush(), and m_autoBrushWidget.

◆ hideOptions()

void KisBrushSelectionWidget::hideOptions ( const QStringList & options)

Definition at line 206 of file kis_brush_selection_widget.cpp.

207{
208 Q_FOREACH(const QString &option, options) {
209 QStringList l = option.split("/");
210 if (l.count() != 2) {
211 continue;
212 }
213 QObject *o = 0;
214 if (l[0] == "KisAutoBrushWidget") {
215 o = m_autoBrushWidget->findChild<QObject*>(l[1]);
216 }
217 else if (l[0] == "KisBrushChooser") {
218 o = m_predefinedBrushWidget->findChild<QObject*>(l[1]);
219 }
220 else if (l[0] == "KisTextBrushChooser") {
221 o = m_textBrushWidget->findChild<QObject*>(l[1]);
222 }
223 else {
224 qWarning() << "KisBrushSelectionWidget: Invalid option given to disable:" << option;
225 }
226
227 if (o) {
228 QWidget *w = qobject_cast<QWidget*>(o);
229 if (w) {
230 w->setVisible(false);
231 }
232 o = 0;
233 }
234 }
235}

References m_autoBrushWidget, m_predefinedBrushWidget, and m_textBrushWidget.

◆ lightnessModeEnabled()

lager::reader< bool > KisBrushSelectionWidget::lightnessModeEnabled ( ) const

Definition at line 237 of file kis_brush_selection_widget.cpp.

238{
239 return lager::with(m_d->brushType.xform(kiszug::map_equal<int>(Predefined)),
241 .map(std::logical_and{});
242}
lager::reader< bool > lightnessModeEnabled() const

References KisPredefinedBrushChooser::lightnessModeEnabled(), m_d, m_predefinedBrushWidget, and KisBrushModel::Predefined.

◆ setCurrentWidget()

void KisBrushSelectionWidget::setCurrentWidget ( QWidget * widget)
private

Definition at line 244 of file kis_brush_selection_widget.cpp.

245{
246 return;
247
248 if (widget == m_currentBrushWidget) return;
249
251 m_layout->removeWidget(m_currentBrushWidget);
252 m_currentBrushWidget->setParent(this);
253 m_currentBrushWidget->hide();
254 }
255 widget->setMinimumSize(m_minimumSize);
256
257 m_currentBrushWidget = widget;
258 m_layout->addWidget(widget);
259
260 m_currentBrushWidget->show();
261 m_buttonGroup->button(m_chooserMap.key(widget))->setChecked(true);
262}

References m_buttonGroup, m_chooserMap, m_currentBrushWidget, m_layout, and m_minimumSize.

◆ setImage()

void KisBrushSelectionWidget::setImage ( KisImageWSP image)

◆ sigBrushChanged

void KisBrushSelectionWidget::sigBrushChanged ( )
signal

◆ sigPrecisionChanged

void KisBrushSelectionWidget::sigPrecisionChanged ( )
signal

Member Data Documentation

◆ m_autoBrushWidget

KisAutoBrushWidget* KisBrushSelectionWidget::m_autoBrushWidget {0}
private

Definition at line 85 of file kis_brush_selection_widget.h.

85{0};

◆ m_buttonGroup

QButtonGroup* KisBrushSelectionWidget::m_buttonGroup {0}
private

Definition at line 81 of file kis_brush_selection_widget.h.

81{0};

◆ m_chooserMap

QHash<int, QWidget*> KisBrushSelectionWidget::m_chooserMap
private

Definition at line 80 of file kis_brush_selection_widget.h.

◆ m_currentBrushWidget

QWidget* KisBrushSelectionWidget::m_currentBrushWidget {0}
private

Definition at line 79 of file kis_brush_selection_widget.h.

79{0};

◆ m_d

const QScopedPointer<Private> KisBrushSelectionWidget::m_d
private

Definition at line 90 of file kis_brush_selection_widget.h.

◆ m_layout

QGridLayout* KisBrushSelectionWidget::m_layout {0}
private

Definition at line 78 of file kis_brush_selection_widget.h.

78{0};

◆ m_minimumSize

QSize KisBrushSelectionWidget::m_minimumSize
private

Definition at line 82 of file kis_brush_selection_widget.h.

◆ m_predefinedBrushWidget

KisPredefinedBrushChooser* KisBrushSelectionWidget::m_predefinedBrushWidget {0}
private

Definition at line 86 of file kis_brush_selection_widget.h.

86{0};

◆ m_stackedWidget

QStackedWidget* KisBrushSelectionWidget::m_stackedWidget {0}
private

Definition at line 83 of file kis_brush_selection_widget.h.

83{0};

◆ m_textBrushWidget

KisTextBrushChooser* KisBrushSelectionWidget::m_textBrushWidget {0}
private

Definition at line 87 of file kis_brush_selection_widget.h.

87{0};

◆ uiWdgBrushChooser

Ui_WdgBrushChooser KisBrushSelectionWidget::uiWdgBrushChooser
private

Definition at line 77 of file kis_brush_selection_widget.h.


The documentation for this class was generated from the following files: