File indexing completed on 2024-05-19 04:29:25
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_spacing_selection_widget.h" 0008 0009 #include <QCheckBox> 0010 #include <QHBoxLayout> 0011 0012 #include "klocalizedstring.h" 0013 0014 #include "kis_signals_blocker.h" 0015 #include "kis_slider_spin_box.h" 0016 0017 0018 0019 struct KisSpacingSelectionWidget::Private 0020 { 0021 Private(KisSpacingSelectionWidget *_q) 0022 : q(_q) 0023 { 0024 } 0025 0026 KisSpacingSelectionWidget *q; 0027 0028 KisDoubleSliderSpinBox *slider {0}; 0029 QCheckBox *autoButton {0}; 0030 0031 qreal oldSliderValue {0.1}; 0032 0033 void slotSpacingChanged(qreal value); 0034 void slotAutoSpacing(bool value); 0035 }; 0036 0037 0038 KisSpacingSelectionWidget::KisSpacingSelectionWidget(QWidget *parent) 0039 : QWidget(parent), 0040 m_d(new Private(this)) 0041 { 0042 m_d->slider = new KisDoubleSliderSpinBox(this); 0043 m_d->slider->setRange(0.02, 10.0, 2); 0044 m_d->slider->setExponentRatio(3); 0045 m_d->slider->setSingleStep(0.01); 0046 m_d->slider->setValue(0.1); 0047 m_d->slider->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); 0048 0049 0050 m_d->autoButton = new QCheckBox(this); 0051 m_d->autoButton->setText(i18nc("@action:button", "Auto")); 0052 m_d->autoButton->setToolTip(i18nc("@info:tooltip", "In auto mode the spacing of the brush will be calculated automatically depending on its size")); 0053 m_d->autoButton->setCheckable(true); 0054 m_d->autoButton->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); 0055 0056 QHBoxLayout *layout = new QHBoxLayout(this); 0057 layout->addWidget(m_d->autoButton); 0058 layout->addWidget(m_d->slider); 0059 layout->setMargin(0); 0060 0061 connect(m_d->slider, SIGNAL(valueChanged(qreal)), SLOT(slotSpacingChanged(qreal))); 0062 connect(m_d->autoButton, SIGNAL(toggled(bool)), SLOT(slotAutoSpacing(bool))); 0063 } 0064 0065 KisSpacingSelectionWidget::~KisSpacingSelectionWidget() 0066 { 0067 } 0068 0069 qreal KisSpacingSelectionWidget::spacing() const 0070 { 0071 return autoSpacingActive() ? 0.1 : m_d->slider->value(); 0072 } 0073 0074 bool KisSpacingSelectionWidget::autoSpacingActive() const 0075 { 0076 return m_d->autoButton->isChecked(); 0077 } 0078 0079 qreal KisSpacingSelectionWidget::autoSpacingCoeff() const 0080 { 0081 return autoSpacingActive() ? m_d->slider->value() : 1.0; 0082 } 0083 0084 void KisSpacingSelectionWidget::setSpacing(bool isAuto, qreal spacing) 0085 { 0086 KisSignalsBlocker b1(m_d->autoButton); 0087 KisSignalsBlocker b2(m_d->slider); 0088 0089 m_d->autoButton->setChecked(isAuto); 0090 m_d->slider->setValue(spacing); 0091 } 0092 0093 void KisSpacingSelectionWidget::Private::slotSpacingChanged(qreal value) 0094 { 0095 Q_UNUSED(value); 0096 emit q->sigSpacingChanged(); 0097 } 0098 0099 void KisSpacingSelectionWidget::Private::slotAutoSpacing(bool value) 0100 { 0101 qreal newSliderValue = 0.0; 0102 0103 if (value) { 0104 newSliderValue = 1.0; 0105 oldSliderValue = slider->value(); 0106 } else { 0107 newSliderValue = oldSliderValue; 0108 } 0109 0110 { 0111 KisSignalsBlocker b(slider); 0112 slider->setValue(newSliderValue); 0113 } 0114 0115 emit q->sigSpacingChanged(); 0116 } 0117 0118 #include "moc_kis_spacing_selection_widget.moc"