11#include <QDomDocument>
17template <
typename Data,
21inline std::vector<SensorData*>
sensors(Data *data)
23 std::vector<SensorData*> result;
27 result.push_back(&data->sensorPressure);
28 result.push_back(&data->sensorPressureIn);
29 result.push_back(&data->sensorTangentialPressure);
31 result.push_back(&data->sensorDrawingAngle);
32 result.push_back(&data->sensorXTilt);
33 result.push_back(&data->sensorYTilt);
34 result.push_back(&data->sensorTiltDirection);
35 result.push_back(&data->sensorTiltElevation);
36 result.push_back(&data->sensorRotation);
38 result.push_back(&data->sensorFuzzyPerDab);
39 result.push_back(&data->sensorFuzzyPerStroke);
41 result.push_back(&data->sensorSpeed);
42 result.push_back(&data->sensorFade);
43 result.push_back(&data->sensorDistance);
44 result.push_back(&data->sensorTime);
46 result.push_back(&data->sensorPerspective);
64 sensorTime(
TimeId, QLatin1String(
"duration")),
75 : m_checkability(checkability)
117 (!data.
prefix.isEmpty() ||
123 QMap<QString, KisSensorData*> sensorById;
126 sensorById.insert(sensor->
id.
id(), sensor);
129 QSet<KisSensorData*> sensorsToReset;
131 QList l = sensorById.values();
133 sensorsToReset = QSet<KisSensorData*>(l.begin(), l.end());
136 const QString sensorDefinition = setting->
getString(data.
id.
id() +
"Sensor");
138 if (sensorDefinition.isEmpty()) {
140 }
else if (!sensorDefinition.contains(
"sensorslist")) {
142 doc.setContent(sensorDefinition);
143 QDomElement e = doc.documentElement();
145 const QString sensorId = e.attribute(
"id",
"");
152 sensorsToReset.remove(sensor);
157 QString proposedCommonCurve;
160 doc.setContent(sensorDefinition);
161 QDomElement elt = doc.documentElement();
162 QDomNode node = elt.firstChild();
163 while (!node.isNull()) {
164 if (node.isElement()) {
165 QDomElement childelt = node.toElement();
166 if (childelt.tagName() ==
"ChildSensor") {
168 const QString sensorId = childelt.attribute(
"id",
"");
173 sensor->
read(childelt);
175 sensorsToReset.remove(sensor);
179 proposedCommonCurve = sensor->
curve;
182 node = node.nextSibling();
192 if (!sensorDefinition.contains(
"curve")) {
193 if (setting->
getBool(
"Custom" + data.
id.
id(),
false)) {
197 sensorsToReset.remove(sensor);
244 activeSensors.append(sensor);
248 QDomDocument doc = QDomDocument(
"params");
249 QDomElement root = doc.createElement(
"params");
250 doc.appendChild(root);
252 if (activeSensors.size() == 1) {
253 activeSensors.first()->write(doc, root);
255 root.setAttribute(
"id",
"sensorslist");
257 QDomElement childelt = doc.createElement(
"ChildSensor");
258 sensor->
write(doc, childelt);
259 root.appendChild(childelt);
276 if (activeSensorId ==
FadeId.
id()) {
280 }
else if (activeSensorId ==
TimeId.
id()) {
const KoID FadeId("fade", ki18nc("Context: dynamic sensors", "Fade"))
generate a number that increase every time you call it (e.g. per dab)
const KoID PerspectiveId("perspective", ki18nc("Context: dynamic sensors", "Perspective"))
< tilt elevation is 90 when stylus is perpendicular to tablet and 0 when it's parallel to tablet
const KoID XTiltId("xtilt", ki18nc("Context: dynamic sensors", "X-Tilt"))
number depending on X-tilt
const KoID PressureInId("pressurein", ki18nc("Context: dynamic sensors", "PressureIn"))
number depending on the pressure
const KoID TiltElevationId("declination", ki18nc("Context: dynamic sensors", "Tilt elevation"))
< number depending on the X and Y tilt, tilt direction is 0 when stylus nib points to you and changes...
const KoID FuzzyPerStrokeId("fuzzystroke", ki18nc("Context: dynamic sensors", "Fuzzy Stroke"))
generate a random number
const KoID PressureId("pressure", ki18nc("Context: dynamic sensors", "Pressure"))
number depending on the pressure
const KoID YTiltId("ytilt", ki18nc("Context: dynamic sensors", "Y-Tilt"))
number depending on Y-tilt
const KoID TangentialPressureId("tangentialpressure", ki18nc("Context: dynamic sensors", "Tangential pressure"))
the wheel on an airbrush device
const KoID RotationId("rotation", ki18nc("Context: dynamic sensors", "Rotation"))
rotation coming from the device
const KoID TiltDirectionId("ascension", ki18nc("Context: dynamic sensors", "Tilt direction"))
const KoID DistanceId("distance", ki18nc("Context: dynamic sensors", "Distance"))
generate a number that increase with distance
const KoID TimeId("time", ki18nc("Context: dynamic sensors", "Time"))
generate a number that increase with time
const KoID FuzzyPerDabId("fuzzy", ki18nc("Context: dynamic sensors", "Fuzzy Dab"))
generate a random number
const KoID SpeedId("speed", ki18nc("Context: dynamic sensors", "Speed"))
generate a number depending on the speed of the cursor
KisKritaSensorPack(Checkability checkability)
int calcActiveSensorLength(const QString &activeSensorId) const override
std::vector< const KisSensorData * > constSensors() const override
bool read(KisCurveOptionDataCommon &data, const KisPropertiesConfiguration *setting) const override
const KisKritaSensorData & constSensorsStruct() const
std::vector< KisSensorData * > sensors() override
KisKritaSensorData & sensorsStruct()
void write(const KisCurveOptionDataCommon &data, KisPropertiesConfiguration *setting) const override
bool compare(const KisSensorPackInterface *rhs) const override
KisKritaSensorData m_data
Checkability m_checkability
KisSensorPackInterface * clone() const override
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
const QString DEFAULT_CURVE_STRING
std::vector< SensorData * > sensors(Data *data)
typename copy_const< Src, Dst >::type copy_const_t
std::vector< const KisSensorData * > sensors() const
ValueFixUpReadCallback valueFixUpReadCallback
ValueFixUpWriteCallback valueFixUpWriteCallback
KisSensorWithLengthData sensorTime
KisSensorWithLengthData sensorDistance
KisSensorData sensorPressure
KisSensorWithLengthData sensorFade
QString getString(const QString &name, const QString &def=QString()) const
virtual void setProperty(const QString &name, const QVariant &value)
static QString extractedPrefixKey()
bool getBool(const QString &name, bool def=false) const
int getInt(const QString &name, int def=0) const
double getDouble(const QString &name, double def=0.0) const
virtual void write(QDomDocument &doc, QDomElement &e) const
virtual void read(const QDomElement &e)