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
 
 ~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

KisAutoBrushWidget * m_autoBrushWidget {0}
 
QButtonGroup * m_buttonGroup {0}
 
QHash< int, QWidget * > m_chooserMap
 
QWidget * m_currentBrushWidget {0}
 
const QScopedPointer< Private > m_d
 
QGridLayout * m_layout {0}
 
QSize m_minimumSize
 
KisPredefinedBrushChooser * m_predefinedBrushWidget {0}
 
QStackedWidget * m_stackedWidget {0}
 
KisTextBrushChooser * m_textBrushWidget {0}
 
Ui_WdgBrushChooser uiWdgBrushChooser
 

Detailed Description

Compound widget that collects all the various brush selection widgets.

Definition at line 36 of file kis_brush_selection_widget.h.

Member Enumeration Documentation

◆ Type

Enumerator
AUTOBRUSH 
PREDEFINEDBRUSH 
TEXTBRUSH 

Definition at line 68 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 117 of file kis_brush_selection_widget.cpp.

125 : QWidget(parent)
127 , m_d(new Private(precisionData))
128{
129 uiWdgBrushChooser.setupUi(this);
130
131 m_buttonGroup = new QButtonGroup(this);
132 m_buttonGroup->setExclusive(true);
133 m_layout = new QGridLayout(uiWdgBrushChooser.settingsFrame);
134
135 m_stackedWidget = new QStackedWidget(this);
136 m_layout->addWidget(m_stackedWidget);
137
138 m_autoBrushWidget = new KisAutoBrushWidget(maxBrushSize, autoBrushModel, this, "autobrush");
139 addChooser(i18nc("Autobrush Brush tip mode", "Auto"), m_autoBrushWidget, AUTOBRUSH, KoGroupButton::GroupLeft);
140 m_predefinedBrushWidget = new KisPredefinedBrushChooser(maxBrushSize, predefinedBrushModel, this);
141 addChooser(i18nc("Predefined Brush tip mode", "Predefined"), m_predefinedBrushWidget, PREDEFINEDBRUSH, KoGroupButton::GroupCenter);
142
143 m_textBrushWidget = new KisTextBrushChooser(textBrushModel, this);
144 addChooser(i18nc("Text Brush tip mode", "Text"), m_textBrushWidget, TEXTBRUSH, KoGroupButton::GroupRight);
145
146 m_d->brushType = brushType.zoom(kislager::lenses::do_static_cast<BrushType, int>);
147
148 m_d->brushType.bind([this](int value) {m_stackedWidget->setCurrentIndex(value); });
149 m_d->brushType.bind([this](int value) {m_buttonGroup->button(value)->setChecked(true); });
150 connect(m_buttonGroup, &QButtonGroup::idClicked, [this] (int id) {m_d->brushType.set(id);});
151
152
153 Q_FOREACH (QWidget *widget, m_chooserMap.values()) {
154 m_minimumSize = m_minimumSize.expandedTo(widget->sizeHint());
155 }
156
157
159
160 uiWdgBrushChooser.sliderPrecision->setRange(1, 5);
161 uiWdgBrushChooser.sliderPrecision->setSingleStep(1);
162 uiWdgBrushChooser.sliderPrecision->setPageStep(1);
163
164
166 connectControl(uiWdgBrushChooser.sliderPrecision, &m_d->model, "precisionLevel");
167 connectControl(uiWdgBrushChooser.autoPrecisionCheckBox, &m_d->model, "useAutoPrecision");
168 connect(&m_d->model, &PrecisionModel::precisionToolTipChanged,
169 uiWdgBrushChooser.sliderPrecision, &KisSliderSpinBox::setToolTip);
170
171 connect(&m_d->model, &PrecisionModel::useAutoPrecisionChanged,
172 uiWdgBrushChooser.sliderPrecision, &KisSliderSpinBox::setDisabled);
173 connect(&m_d->model, &PrecisionModel::useAutoPrecisionChanged,
174 uiWdgBrushChooser.lblPrecision, &KisSliderSpinBox::setDisabled);
175 } else {
176 uiWdgBrushChooser.sliderPrecision->setVisible(false);
177 uiWdgBrushChooser.autoPrecisionCheckBox->setVisible(false);
178 uiWdgBrushChooser.lblPrecision->setVisible(false);
179 }
180}
float value(const T *src, size_t ch)
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, 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 183 of file kis_brush_selection_widget.cpp.

184{
185}

Member Function Documentation

◆ addChooser()

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

Definition at line 258 of file kis_brush_selection_widget.cpp.

259{
261 button->setGroupPosition(pos);
262 button->setText(text);
263 button->setAutoRaise(false);
264 button->setCheckable(true);
265 uiWdgBrushChooser.brushChooserButtonLayout->addWidget(button);
266 m_buttonGroup->addButton(button, id);
267
268 m_stackedWidget->insertWidget(id, widget);
269}
QString button(const QWheelEvent &ev)

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

◆ brush()

KisBrushSP KisBrushSelectionWidget::brush ( ) const

Definition at line 187 of file kis_brush_selection_widget.cpp.

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

References KisAutoBrushWidget::brush(), and m_autoBrushWidget.

◆ hideOptions()

void KisBrushSelectionWidget::hideOptions ( const QStringList & options)

Definition at line 200 of file kis_brush_selection_widget.cpp.

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

References m_autoBrushWidget, m_predefinedBrushWidget, and m_textBrushWidget.

◆ lightnessModeEnabled()

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

Definition at line 231 of file kis_brush_selection_widget.cpp.

232{
233 return lager::with(m_d->brushType.xform(kiszug::map_equal<int>(Predefined)),
235 .map(std::logical_and{});
236}
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 238 of file kis_brush_selection_widget.cpp.

239{
240 return;
241
242 if (widget == m_currentBrushWidget) return;
243
245 m_layout->removeWidget(m_currentBrushWidget);
246 m_currentBrushWidget->setParent(this);
247 m_currentBrushWidget->hide();
248 }
249 widget->setMinimumSize(m_minimumSize);
250
251 m_currentBrushWidget = widget;
252 m_layout->addWidget(widget);
253
254 m_currentBrushWidget->show();
255 m_buttonGroup->button(m_chooserMap.key(widget))->setChecked(true);
256}

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

◆ sigBrushChanged

void KisBrushSelectionWidget::sigBrushChanged ( )
signal

◆ sigPrecisionChanged

void KisBrushSelectionWidget::sigPrecisionChanged ( )
signal

Member Data Documentation

◆ m_autoBrushWidget

KisAutoBrushWidget* KisBrushSelectionWidget::m_autoBrushWidget {0}
private

Definition at line 82 of file kis_brush_selection_widget.h.

82{0};

◆ m_buttonGroup

QButtonGroup* KisBrushSelectionWidget::m_buttonGroup {0}
private

Definition at line 78 of file kis_brush_selection_widget.h.

78{0};

◆ m_chooserMap

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

Definition at line 77 of file kis_brush_selection_widget.h.

◆ m_currentBrushWidget

QWidget* KisBrushSelectionWidget::m_currentBrushWidget {0}
private

Definition at line 76 of file kis_brush_selection_widget.h.

76{0};

◆ m_d

const QScopedPointer<Private> KisBrushSelectionWidget::m_d
private

Definition at line 87 of file kis_brush_selection_widget.h.

◆ m_layout

QGridLayout* KisBrushSelectionWidget::m_layout {0}
private

Definition at line 75 of file kis_brush_selection_widget.h.

75{0};

◆ m_minimumSize

QSize KisBrushSelectionWidget::m_minimumSize
private

Definition at line 79 of file kis_brush_selection_widget.h.

◆ m_predefinedBrushWidget

KisPredefinedBrushChooser* KisBrushSelectionWidget::m_predefinedBrushWidget {0}
private

Definition at line 83 of file kis_brush_selection_widget.h.

83{0};

◆ m_stackedWidget

QStackedWidget* KisBrushSelectionWidget::m_stackedWidget {0}
private

Definition at line 80 of file kis_brush_selection_widget.h.

80{0};

◆ m_textBrushWidget

KisTextBrushChooser* KisBrushSelectionWidget::m_textBrushWidget {0}
private

Definition at line 84 of file kis_brush_selection_widget.h.

84{0};

◆ uiWdgBrushChooser

Ui_WdgBrushChooser KisBrushSelectionWidget::uiWdgBrushChooser
private

Definition at line 74 of file kis_brush_selection_widget.h.


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