17#include "bucketoptionswidget.h"
18#include "ui_bucketoptionswidget.h"
22#include "spinslider.h"
26#include "layermanager.h"
27#include "toolmanager.h"
30#include "stroketool.h"
31#include "buckettool.h"
33BucketOptionsWidget::BucketOptionsWidget(
Editor* editor,
QWidget* parent) :
43BucketOptionsWidget::~BucketOptionsWidget()
48void BucketOptionsWidget::initUI()
50 mBucketTool =
static_cast<BucketTool*
>(mEditor->tools()->getTool(BUCKET));
51 mSettings = mBucketTool->settings();
53 auto toleranceInfo = mSettings.getInfo(BucketToolProperties::COLORTOLERANCE_VALUE);
54 auto expandInfo = mSettings.getInfo(BucketToolProperties::FILLEXPAND_VALUE);
55 auto thicknessInfo = mSettings.getInfo(BucketToolProperties::FILLTHICKNESS_VALUE);
57 ui->colorToleranceSlider->init(
tr(
"Color tolerance"), SpinSlider::GROWTH_TYPE::LINEAR, toleranceInfo.minInt(), toleranceInfo.maxInt());
58 ui->expandSlider->init(
tr(
"Expand fill"), SpinSlider::GROWTH_TYPE::LINEAR, expandInfo.minInt(), expandInfo.maxInt());
59 ui->strokeThicknessSlider->init(
tr(
"Stroke thickness"), SpinSlider::GROWTH_TYPE::LOG, thicknessInfo.minReal(), thicknessInfo.maxReal());
61 ui->expandSpinBox->setMaximum(expandInfo.maxInt());
62 ui->strokeThicknessSpinBox->setMaximum(thicknessInfo.maxReal());
63 ui->strokeThicknessSpinBox->setMinimum(thicknessInfo.minReal());
64 ui->colorToleranceSpinbox->setMaximum(toleranceInfo.maxInt());
66 ui->referenceLayerComboBox->addItem(
tr(
"Current layer",
"Reference Layer Options"), 0);
67 ui->referenceLayerComboBox->addItem(
tr(
"All layers",
"Reference Layer Options"), 1);
68 ui->referenceLayerComboBox->setToolTip(
tr(
"Refers to the layer that used to flood fill from"));
70 ui->blendModeComboBox->addItem(
tr(
"Overlay",
"Blend Mode dropdown option"), 0);
71 ui->blendModeComboBox->addItem(
tr(
"Replace",
"Blend Mode dropdown option"), 1);
72 ui->blendModeComboBox->addItem(
tr(
"Behind",
"Blend Mode dropdown option"), 2);
73 ui->blendModeComboBox->setToolTip(
tr(
"Defines how the fill will behave when the new color is not opaque"));
75 makeConnectionsFromUIToModel();
76 makeConnectionsFromModelToUI();
78 clearFocusOnFinished(ui->colorToleranceSpinbox);
79 clearFocusOnFinished(ui->expandSpinBox);
81 updatePropertyVisibility();
84void BucketOptionsWidget::updateUI()
86 updatePropertyVisibility();
88 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE)) {
89 mBucketTool->setStrokeThickness(mSettings.fillThickness());
92 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_ENABLED)) {
93 mBucketTool->setFillExpandEnabled(mSettings.fillExpandEnabled());
96 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE)) {
97 mBucketTool->setFillExpand(mSettings.fillExpandAmount());
100 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE)) {
101 mBucketTool->setFillReferenceMode(mSettings.fillReferenceMode());
104 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE)) {
105 mBucketTool->setFillMode(mSettings.fillMode());
108 if (mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE)) {
109 mBucketTool->setColorTolerance(mSettings.tolerance());
112 if (mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_ENABLED)) {
113 mBucketTool->setColorToleranceEnabled(mSettings.colorToleranceEnabled());
117void BucketOptionsWidget::makeConnectionsFromModelToUI()
119 connect(mBucketTool, &BucketTool::toleranceChanged,
this, [=](
int value) {
120 setColorTolerance(value);
123 connect(mBucketTool, &BucketTool::toleranceEnabledChanged,
this, [=](
bool enabled) {
124 setColorToleranceEnabled(
enabled);
127 connect(mBucketTool, &BucketTool::fillExpandChanged,
this, [=](
int value) {
128 setFillExpand(value);
131 connect(mBucketTool, &BucketTool::fillExpandEnabledChanged,
this, [=](
bool enabled) {
135 connect(mBucketTool, &BucketTool::fillReferenceModeChanged,
this, [=](
int value) {
136 setFillReferenceMode(value);
139 connect(mBucketTool, &BucketTool::fillModeChanged,
this, [=](
int value) {
143 connect(mBucketTool, &BucketTool::strokeThicknessChanged,
this, [=](qreal value) {
144 setStrokeWidth(value);
148void BucketOptionsWidget::makeConnectionsFromUIToModel()
150 connect(ui->colorToleranceSlider, &SpinSlider::valueChanged, [=](
int value) {
151 mBucketTool->setColorTolerance(value);
154 mBucketTool->setColorTolerance(value);
158 mBucketTool->setColorToleranceEnabled(enabled);
161 connect(ui->expandSlider, &SpinSlider::valueChanged, [=](
int value) {
162 mBucketTool->setFillExpand(value);
166 mBucketTool->setFillExpand(value);
170 mBucketTool->setFillExpandEnabled(enabled);
174 mBucketTool->setFillReferenceMode(value);
178 mBucketTool->setFillMode(value);
181 connect(ui->strokeThicknessSlider, &SpinSlider::valueChanged, [=](qreal value) {
182 mBucketTool->setStrokeThickness(value);
186 mBucketTool->setStrokeThickness(value);
190void BucketOptionsWidget::updatePropertyVisibility()
192 ui->strokeThicknessSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE));
193 ui->strokeThicknessSpinBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE));
194 ui->colorToleranceCheckbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_ENABLED));
195 ui->colorToleranceSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE));
196 ui->colorToleranceSpinbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE));
197 ui->expandCheckbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_ENABLED));
198 ui->expandSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE));
199 ui->expandSpinBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE));
200 ui->referenceLayerComboBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE));
201 ui->referenceLayerDescLabel->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE));
202 ui->blendModeComboBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE));
203 ui->blendModeLabel->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE));
206void BucketOptionsWidget::onLayerChanged(
int)
208 updatePropertyVisibility();
211void BucketOptionsWidget::setColorTolerance(
int tolerance)
214 ui->colorToleranceSlider->setValue(tolerance);
217 ui->colorToleranceSpinbox->setValue(tolerance);
220void BucketOptionsWidget::setColorToleranceEnabled(
bool enabled)
223 ui->colorToleranceCheckbox->setChecked(
enabled);
226void BucketOptionsWidget::setFillMode(
int mode)
229 ui->blendModeComboBox->setCurrentIndex(mode);
232void BucketOptionsWidget::setFillExpandEnabled(
bool enabled)
235 ui->expandCheckbox->setChecked(
enabled);
238void BucketOptionsWidget::setFillExpand(
int value)
241 ui->expandSlider->setValue(value);
244 ui->expandSpinBox->setValue(value);
247void BucketOptionsWidget::setFillReferenceMode(
int referenceMode)
250 ui->referenceLayerComboBox->setCurrentIndex(referenceMode);
253void BucketOptionsWidget::setStrokeWidth(qreal value)
256 ui->strokeThicknessSlider->setValue(value);
259 ui->strokeThicknessSpinBox->setValue(value);
void currentIndexChanged(int index)
void valueChanged(double d)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString tr(const char *sourceText, const char *disambiguation, int n)