KSeExpr 6.0.0.0
Editable.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2// SPDX-License-Identifier: LicenseRef-Apache-2.0
3// SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4// SPDX-License-Identifier: GPL-3.0-or-later
5/*
6 * @file Editable.h
7 * @author Andrew Selle, L. E. Segovia
8 */
9
10#pragma once
11
12#include <KSeExpr/Curve.h>
13#include <KSeExpr/Vec.h>
14#include <cstring>
15#include <sstream>
16
17inline void printVal(std::stringstream &stream, double v)
18{
19 stream << v;
20}
21inline void printVal(std::stringstream &stream, const KSeExpr::Vec3d &v)
22{
23 stream << "[" << v[0] << "," << v[1] << "," << v[2] << "]";
24}
25
26template<typename T> void UNUSED(T)
27{
28}
29
31{
32public:
33 std::string name;
35
36 Editable(const std::string &name, int startPos, int endPos);
37 Editable &operator=(const Editable &) = default;
38 Editable &operator=(Editable &&) = default;
39 Editable(const Editable &) = default;
40 Editable(Editable &&) = default;
41
42 void updatePositions(const Editable &other);
43
44 virtual ~Editable() = default; // must have this to ensure destruction
45
47 virtual bool parseComment(const std::string &comment) = 0;
48 virtual std::string str() const;
49 virtual void appendString(std::stringstream &stream) const = 0;
50 virtual bool controlsMatch(const Editable &) const = 0;
51};
52
54{
55public:
56 double v;
57 double min, max;
58 bool isInt;
59 NumberEditable(const std::string &name, int startPos, int endPos, double val);
60
61 bool parseComment(const std::string &comment) override;
62 std::string str() const override;
63 void appendString(std::stringstream &stream) const override;
64 bool controlsMatch(const Editable &other) const override;
65};
66
68{
69public:
71 double min, max;
72 bool isColor;
73 VectorEditable(const std::string &name, int startPos, int endPos, const KSeExpr::Vec3d &val);
74
75 bool parseComment(const std::string &comment) override;
76 std::string str() const override;
77 void appendString(std::stringstream &stream) const override;
78 bool controlsMatch(const Editable &other) const override;
79};
80
82{
83public:
84 std::string v;
85 std::string type;
86 StringEditable(int startPos, int endPos, const std::string &val);
87
88 bool parseComment(const std::string &comment) override;
89 void appendString(std::stringstream &stream) const override;
90 std::string str() const override;
91 bool controlsMatch(const Editable &other) const override;
92};
93
94template<class TVAL> struct GenericCurveEditable : public Editable {
95 using Curve = typename KSeExpr::Curve<TVAL>;
96 using CV = typename KSeExpr::Curve<TVAL>::CV;
97 using InterpType = typename Curve::InterpType;
98
99 std::vector<CV> cvs;
100 GenericCurveEditable(const std::string &name, int startPos, int endPos)
102 {
103 }
104
105 void add(double x, const TVAL &y, int interp)
106 {
107 cvs.push_back(CV(x, y, InterpType(interp)));
108 }
109
110 bool parseComment(const std::string & /*comment*/) override
111 {
112 return true;
113 }
114 std::string str() const override
115 {
116 std::stringstream s;
117 s << name << " ccurve";
118 return s.str();
119 }
120
121public:
122 void appendString(std::stringstream &stream) const override
123 {
124 for (const auto &cv : cvs) {
125 stream << "," << cv._pos << ",";
126 printVal(stream, cv._val);
127 stream << "," << cv._interp;
128 }
129 }
130
131 bool controlsMatch(const Editable &other) const override
132 {
133 if (const auto *o = dynamic_cast<const GenericCurveEditable *>(&other)) {
134 // TODO: fix this
135 // return cvs==o->cvs && name==o->name;
136 UNUSED(o);
137 return false;
138 } else
139 return false;
140 }
141};
144
146{
147public:
148 std::vector<KSeExpr::Vec3d> colors;
149 std::string labelType;
150
151 ColorSwatchEditable(const std::string &name, int startPos, int endPos);
152
153 bool parseComment(const std::string &comment) override;
154 std::string str() const override;
155 void appendString(std::stringstream &stream) const override;
156 bool controlsMatch(const Editable &other) const override;
157
158 void add(const KSeExpr::Vec3d &value);
159 void change(int index, const KSeExpr::Vec3d &value);
160 void remove(int index);
161 void print();
162};
void printVal(std::stringstream &stream, double v)
Definition Editable.h:17
void UNUSED(T)
Definition Editable.h:26
void remove(int index)
Definition Editable.cpp:222
bool controlsMatch(const Editable &other) const override
Definition Editable.cpp:202
void change(int index, const KSeExpr::Vec3d &value)
Definition Editable.cpp:217
void add(const KSeExpr::Vec3d &value)
Definition Editable.cpp:212
std::string str() const override
Definition Editable.cpp:187
std::string labelType
Definition Editable.h:149
void appendString(std::stringstream &stream) const override
Definition Editable.cpp:194
bool parseComment(const std::string &comment) override
parses a comment. if false is returned then delete the control from the editable
Definition Editable.cpp:177
std::vector< KSeExpr::Vec3d > colors
Definition Editable.h:148
virtual std::string str() const
Definition Editable.cpp:32
void updatePositions(const Editable &other)
Definition Editable.cpp:26
Editable(const Editable &)=default
virtual void appendString(std::stringstream &stream) const =0
Editable & operator=(Editable &&)=default
virtual ~Editable()=default
Editable & operator=(const Editable &)=default
Editable(Editable &&)=default
int endPos
Definition Editable.h:34
int startPos
Definition Editable.h:34
virtual bool parseComment(const std::string &comment)=0
parses a comment. if false is returned then delete the control from the editable
std::string name
Definition Editable.h:33
virtual bool controlsMatch(const Editable &) const =0
bool parseComment(const std::string &comment) override
parses a comment. if false is returned then delete the control from the editable
Definition Editable.cpp:46
bool controlsMatch(const Editable &other) const override
Definition Editable.cpp:80
void appendString(std::stringstream &stream) const override
Definition Editable.cpp:75
std::string str() const override
Definition Editable.cpp:68
bool parseComment(const std::string &comment) override
parses a comment. if false is returned then delete the control from the editable
Definition Editable.cpp:137
std::string v
Definition Editable.h:84
std::string str() const override
Definition Editable.cpp:157
bool controlsMatch(const Editable &other) const override
Definition Editable.cpp:164
std::string type
Definition Editable.h:85
void appendString(std::stringstream &stream) const override
Definition Editable.cpp:151
void appendString(std::stringstream &stream) const override
Definition Editable.cpp:118
KSeExpr::Vec3d v
Definition Editable.h:70
std::string str() const override
Definition Editable.cpp:111
bool controlsMatch(const Editable &other) const override
Definition Editable.cpp:123
bool parseComment(const std::string &comment) override
parses a comment. if false is returned then delete the control from the editable
Definition Editable.cpp:97
typename KSeExpr::Curve< TVAL > Curve
Definition Editable.h:95
void appendString(std::stringstream &stream) const override
Definition Editable.h:122
typename KSeExpr::Curve< TVAL >::CV CV
Definition Editable.h:96
typename Curve::InterpType InterpType
Definition Editable.h:97
bool parseComment(const std::string &) override
parses a comment. if false is returned then delete the control from the editable
Definition Editable.h:110
void add(double x, const TVAL &y, int interp)
Definition Editable.h:105
bool controlsMatch(const Editable &other) const override
Definition Editable.h:131
std::string str() const override
Definition Editable.h:114
GenericCurveEditable(const std::string &name, int startPos, int endPos)
Definition Editable.h:100
std::vector< CV > cvs
Definition Editable.h:99