1 /*
2  *  Copyright (c) 2008-2010 Lukáš Tvrdý <lukast.dev@gmail.com>
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18 #include "kis_hairy_ink_option.h"
19 #include "kis_hairy_paintop_settings.h"
20 
21 #include <klocalizedstring.h>
22 #include "ui_wdgInkOptions.h"
23 
24 class KisInkOptionsWidget: public QWidget, public Ui::WdgInkOptions
25 {
26 public:
KisInkOptionsWidget(QWidget * parent=0)27     KisInkOptionsWidget(QWidget *parent = 0)
28         : QWidget(parent) {
29         setupUi(this);
30     }
31 };
32 
KisHairyInkOption()33 KisHairyInkOption::KisHairyInkOption()
34     : KisPaintOpOption(KisPaintOpOption::COLOR, false)
35 {
36     setObjectName("KisHairyInkOption");
37 
38 
39     m_checkable = true;
40     m_options = new KisInkOptionsWidget();
41 
42     // init values for slider
43     m_options->pressureSlider->setRange(0.0, 100, 0);
44     m_options->pressureSlider->setValue(50);
45     m_options->pressureSlider->setSuffix(i18n("%"));
46 
47     m_options->bristleLengthSlider->setRange(0, 100, 0);
48     m_options->bristleLengthSlider->setValue(50);
49     m_options->bristleLengthSlider->setSuffix(i18n("%"));
50 
51     m_options->bristleInkAmountSlider->setRange(0, 100, 0);
52     m_options->bristleInkAmountSlider->setValue(50);
53     m_options->bristleInkAmountSlider->setSuffix(i18n("%"));
54 
55     m_options->inkDepletionSlider->setRange(0, 100, 0);
56     m_options->inkDepletionSlider->setValue(50);
57     m_options->inkDepletionSlider->setSuffix(i18n("%"));
58 
59 
60     connect(m_options->inkAmountSpinBox, SIGNAL(valueChanged(int)), SLOT(emitSettingChanged()));
61     connect(m_options->saturationCBox, SIGNAL(toggled(bool)), SLOT(emitSettingChanged()));
62     connect(m_options->opacityCBox, SIGNAL(toggled(bool)), SLOT(emitSettingChanged()));
63     connect(m_options->useWeightCHBox, SIGNAL(toggled(bool)), SLOT(emitSettingChanged()));
64     connect(m_options->pressureSlider, SIGNAL(valueChanged(qreal)), SLOT(emitSettingChanged()));
65     connect(m_options->bristleLengthSlider, SIGNAL(valueChanged(qreal)), SLOT(emitSettingChanged()));
66     connect(m_options->bristleInkAmountSlider, SIGNAL(valueChanged(qreal)), SLOT(emitSettingChanged()));
67     connect(m_options->inkDepletionSlider, SIGNAL(valueChanged(qreal)), SLOT(emitSettingChanged()));
68     connect(m_options->inkCurve, SIGNAL(modified()), SLOT(emitSettingChanged()));
69     connect(m_options->soakInkCBox, SIGNAL(toggled(bool)), SLOT(emitSettingChanged()));
70 
71     setConfigurationPage(m_options);
72 }
73 
~KisHairyInkOption()74 KisHairyInkOption::~KisHairyInkOption()
75 {
76     delete m_options;
77 }
78 
79 
readOptionSetting(const KisPropertiesConfigurationSP settings)80 void KisHairyInkOption::readOptionSetting(const KisPropertiesConfigurationSP settings)
81 {
82     setChecked(settings->getBool(HAIRY_INK_DEPLETION_ENABLED));
83     m_options->inkAmountSpinBox->setValue(settings->getInt(HAIRY_INK_AMOUNT));
84     m_options->saturationCBox->setChecked(settings->getBool(HAIRY_INK_USE_SATURATION));
85     m_options->opacityCBox->setChecked(settings->getBool(HAIRY_INK_USE_OPACITY));
86     m_options->useWeightCHBox->setChecked(settings->getBool(HAIRY_INK_USE_WEIGHTS));
87     m_options->pressureSlider->setValue(settings->getInt(HAIRY_INK_PRESSURE_WEIGHT));
88     m_options->bristleLengthSlider->setValue(settings->getInt(HAIRY_INK_BRISTLE_LENGTH_WEIGHT));
89     m_options->bristleInkAmountSlider->setValue(settings->getInt(HAIRY_INK_BRISTLE_INK_AMOUNT_WEIGHT));
90     m_options->inkDepletionSlider->setValue(settings->getInt(HAIRY_INK_DEPLETION_WEIGHT));
91     m_options->inkCurve->setCurve(settings->getCubicCurve(HAIRY_INK_DEPLETION_CURVE));
92     m_options->soakInkCBox->setChecked(settings->getBool(HAIRY_INK_SOAK));
93 }
94 
writeOptionSetting(KisPropertiesConfigurationSP settings) const95 void KisHairyInkOption::writeOptionSetting(KisPropertiesConfigurationSP settings) const
96 {
97     settings->setProperty(HAIRY_INK_DEPLETION_ENABLED, isChecked());
98     settings->setProperty(HAIRY_INK_AMOUNT, inkAmount());
99     settings->setProperty(HAIRY_INK_USE_SATURATION, useSaturation());
100     settings->setProperty(HAIRY_INK_USE_OPACITY, useOpacity());
101     settings->setProperty(HAIRY_INK_USE_WEIGHTS, useWeights());
102     settings->setProperty(HAIRY_INK_PRESSURE_WEIGHT, pressureWeight());
103     settings->setProperty(HAIRY_INK_BRISTLE_LENGTH_WEIGHT, bristleLengthWeight());
104     settings->setProperty(HAIRY_INK_BRISTLE_INK_AMOUNT_WEIGHT, bristleInkAmountWeight());
105     settings->setProperty(HAIRY_INK_DEPLETION_WEIGHT, inkDepletionWeight());
106     settings->setProperty(HAIRY_INK_DEPLETION_CURVE, qVariantFromValue(m_options->inkCurve->curve()));
107     settings->setProperty(HAIRY_INK_SOAK, m_options->soakInkCBox->isChecked());
108 }
109 
110 
inkAmount() const111 int KisHairyInkOption::inkAmount() const
112 {
113     return m_options->inkAmountSpinBox->value();
114 }
115 
116 
useOpacity() const117 bool KisHairyInkOption::useOpacity() const
118 {
119     return m_options->opacityCBox->isChecked();
120 }
121 
122 
useSaturation() const123 bool KisHairyInkOption::useSaturation() const
124 {
125     return m_options->saturationCBox->isChecked();
126 }
127 
128 
useWeights() const129 bool KisHairyInkOption::useWeights() const
130 {
131     return m_options->useWeightCHBox->isChecked();
132 }
133 
134 
pressureWeight() const135 int KisHairyInkOption::pressureWeight() const
136 {
137     return m_options->pressureSlider->value();
138 }
139 
140 
bristleLengthWeight() const141 int KisHairyInkOption::bristleLengthWeight() const
142 {
143     return m_options->bristleLengthSlider->value();
144 }
145 
146 
bristleInkAmountWeight() const147 int KisHairyInkOption::bristleInkAmountWeight() const
148 {
149     return m_options->bristleInkAmountSlider->value();
150 }
151 
152 
inkDepletionWeight() const153 int KisHairyInkOption::inkDepletionWeight() const
154 {
155     return m_options->inkDepletionSlider->value();
156 }
157 
158 
159