KSeExpr  4.0.4.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 
17 inline void printVal(std::stringstream &stream, double v)
18 {
19  stream << v;
20 }
21 inline void printVal(std::stringstream &stream, const KSeExpr::Vec3d &v)
22 {
23  stream << "[" << v[0] << "," << v[1] << "," << v[2] << "]";
24 }
25 
26 template<typename T> void UNUSED(T)
27 {
28 }
29 
30 class Editable
31 {
32 public:
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 
53 class NumberEditable : public Editable
54 {
55 public:
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 
67 class VectorEditable : public Editable
68 {
69 public:
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 
81 class StringEditable : public Editable
82 {
83 public:
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 
94 template<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 
121 public:
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 {
147 public:
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
ColorSwatchEditable(const std::string &name, int startPos, int endPos)
Definition: Editable.cpp:172
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
virtual ~Editable()=default
Editable & operator=(const Editable &)=default
Editable(Editable &&)=default
int endPos
Definition: Editable.h:34
Editable(const std::string &name, int startPos, int endPos)
Definition: Editable.cpp:19
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
Editable & operator=(Editable &&)=default
std::string name
Definition: Editable.h:33
virtual bool controlsMatch(const Editable &) const =0
Interpolation curve class for double->double and double->Vec3D.
Definition: Curve.h:27
double min
Definition: Editable.h:57
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
double max
Definition: Editable.h:57
double v
Definition: Editable.h:56
NumberEditable(const std::string &name, int startPos, int endPos, double val)
Definition: Editable.cpp:37
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
StringEditable(int startPos, int endPos, const std::string &val)
Definition: Editable.cpp:131
void appendString(std::stringstream &stream) const override
Definition: Editable.cpp:151
double min
Definition: Editable.h:71
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
double max
Definition: Editable.h:71
bool isColor
Definition: Editable.h:72
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
VectorEditable(const std::string &name, int startPos, int endPos, const KSeExpr::Vec3d &val)
Definition: Editable.cpp:88
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