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));
54 auto toleranceInfo = properties.getInfo(BucketToolProperties::COLORTOLERANCE_VALUE);
55 auto expandInfo = properties.getInfo(BucketToolProperties::FILLEXPAND_VALUE);
56 auto thicknessInfo = properties.getInfo(BucketToolProperties::FILLTHICKNESS_VALUE);
58 ui->colorToleranceSlider->init(
tr(
"Color tolerance"), SpinSlider::GROWTH_TYPE::LINEAR, toleranceInfo.minInt(), toleranceInfo.maxInt());
59 ui->expandSlider->init(
tr(
"Expand fill"), SpinSlider::GROWTH_TYPE::LINEAR, expandInfo.minInt(), expandInfo.maxInt());
60 ui->strokeThicknessSlider->init(
tr(
"Stroke thickness"), SpinSlider::GROWTH_TYPE::LOG, thicknessInfo.minReal(), thicknessInfo.maxReal());
62 ui->expandSpinBox->setMaximum(expandInfo.maxInt());
63 ui->strokeThicknessSpinBox->setMaximum(thicknessInfo.maxReal());
64 ui->strokeThicknessSpinBox->setMinimum(thicknessInfo.minReal());
65 ui->colorToleranceSpinbox->setMaximum(toleranceInfo.maxInt());
67 ui->referenceLayerComboBox->addItem(
tr(
"Current layer",
"Reference Layer Options"), 0);
68 ui->referenceLayerComboBox->addItem(
tr(
"All layers",
"Reference Layer Options"), 1);
69 ui->referenceLayerComboBox->setToolTip(
tr(
"Refers to the layer that used to flood fill from"));
71 ui->blendModeComboBox->addItem(
tr(
"Overlay",
"Blend Mode dropdown option"), 0);
72 ui->blendModeComboBox->addItem(
tr(
"Replace",
"Blend Mode dropdown option"), 1);
73 ui->blendModeComboBox->addItem(
tr(
"Behind",
"Blend Mode dropdown option"), 2);
74 ui->blendModeComboBox->setToolTip(
tr(
"Defines how the fill will behave when the new color is not opaque"));
76 makeConnectionsFromUIToModel();
77 makeConnectionsFromModelToUI();
79 clearFocusOnFinished(ui->colorToleranceSpinbox);
80 clearFocusOnFinished(ui->expandSpinBox);
82 updatePropertyVisibility();
85void BucketOptionsWidget::updateUI()
87 updatePropertyVisibility();
91 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE)) {
92 mBucketTool->setStrokeThickness(properties.fillThickness());
95 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_ENABLED)) {
96 mBucketTool->setFillExpandEnabled(properties.fillExpandEnabled());
99 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE)) {
100 mBucketTool->setFillExpand(properties.fillExpandAmount());
103 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE)) {
104 mBucketTool->setFillReferenceMode(properties.fillReferenceMode());
107 if (mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE)) {
108 mBucketTool->setFillMode(properties.fillMode());
111 if (mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE)) {
112 mBucketTool->setColorTolerance(properties.tolerance());
115 if (mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_ENABLED)) {
116 mBucketTool->setColorToleranceEnabled(properties.colorToleranceEnabled());
120void BucketOptionsWidget::makeConnectionsFromModelToUI()
122 connect(mBucketTool, &BucketTool::toleranceChanged,
this, [=](
int value) {
123 setColorTolerance(value);
126 connect(mBucketTool, &BucketTool::toleranceEnabledChanged,
this, [=](
bool enabled) {
127 setColorToleranceEnabled(
enabled);
130 connect(mBucketTool, &BucketTool::fillExpandChanged,
this, [=](
int value) {
131 setFillExpand(value);
134 connect(mBucketTool, &BucketTool::fillExpandEnabledChanged,
this, [=](
bool enabled) {
138 connect(mBucketTool, &BucketTool::fillReferenceModeChanged,
this, [=](
int value) {
139 setFillReferenceMode(value);
142 connect(mBucketTool, &BucketTool::fillModeChanged,
this, [=](
int value) {
146 connect(mBucketTool, &BucketTool::strokeThicknessChanged,
this, [=](qreal value) {
147 setStrokeWidth(value);
151void BucketOptionsWidget::makeConnectionsFromUIToModel()
153 connect(ui->colorToleranceSlider, &SpinSlider::valueChanged, [=](
int value) {
154 mBucketTool->setColorTolerance(value);
157 mBucketTool->setColorTolerance(value);
161 mBucketTool->setColorToleranceEnabled(enabled);
164 connect(ui->expandSlider, &SpinSlider::valueChanged, [=](
int value) {
165 mBucketTool->setFillExpand(value);
169 mBucketTool->setFillExpand(value);
173 mBucketTool->setFillExpandEnabled(enabled);
177 mBucketTool->setFillReferenceMode(value);
181 mBucketTool->setFillMode(value);
184 connect(ui->strokeThicknessSlider, &SpinSlider::valueChanged, [=](qreal value) {
185 mBucketTool->setStrokeThickness(value);
189 mBucketTool->setStrokeThickness(value);
193void BucketOptionsWidget::updatePropertyVisibility()
195 ui->strokeThicknessSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE));
196 ui->strokeThicknessSpinBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLTHICKNESS_VALUE));
197 ui->colorToleranceCheckbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_ENABLED));
198 ui->colorToleranceSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE));
199 ui->colorToleranceSpinbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::COLORTOLERANCE_VALUE));
200 ui->expandCheckbox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_ENABLED));
201 ui->expandSlider->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE));
202 ui->expandSpinBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLEXPAND_VALUE));
203 ui->referenceLayerComboBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE));
204 ui->referenceLayerDescLabel->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLLAYERREFERENCEMODE_VALUE));
205 ui->blendModeComboBox->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE));
206 ui->blendModeLabel->setVisible(mBucketTool->isPropertyEnabled(BucketToolProperties::FILLMODE_VALUE));
209void BucketOptionsWidget::onLayerChanged(
int)
211 updatePropertyVisibility();
214void BucketOptionsWidget::setColorTolerance(
int tolerance)
217 ui->colorToleranceSlider->setValue(tolerance);
220 ui->colorToleranceSpinbox->setValue(tolerance);
223void BucketOptionsWidget::setColorToleranceEnabled(
bool enabled)
226 ui->colorToleranceCheckbox->setChecked(
enabled);
229void BucketOptionsWidget::setFillMode(
int mode)
232 ui->blendModeComboBox->setCurrentIndex(mode);
235void BucketOptionsWidget::setFillExpandEnabled(
bool enabled)
238 ui->expandCheckbox->setChecked(
enabled);
241void BucketOptionsWidget::setFillExpand(
int value)
244 ui->expandSlider->setValue(value);
247 ui->expandSpinBox->setValue(value);
250void BucketOptionsWidget::setFillReferenceMode(
int referenceMode)
253 ui->referenceLayerComboBox->setCurrentIndex(referenceMode);
256void BucketOptionsWidget::setStrokeWidth(qreal value)
259 ui->strokeThicknessSlider->setValue(value);
262 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)