Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
array.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Inkscape::LivePathEffectParameters
4 *
5 * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
6 *
7 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
8 */
9
10#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_H
11#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_H
12
13#include <cstddef>
14#include <vector>
15#include <glib.h>
16
17#include "bad-uri-exception.h"
21#include "object/uri.h"
22#include "svg/stringstream.h"
23
25
26namespace TpS {
27// we need a separate namespace to avoid clashes with other LPEs
28class KnotHolderEntityAttachBegin;
29class KnotHolderEntityAttachEnd;
30} // namespace TpS
31
32template <typename StorageType>
33class ArrayParam : public Parameter {
34public:
35 ArrayParam( const Glib::ustring& label,
36 const Glib::ustring& tip,
37 const Glib::ustring& key,
39 Effect* effect,
40 std::size_t n = 0 )
41 : Parameter(label, tip, key, wr, effect), _vector(n), _default_size(n)
42 {
43 }
44
47
48 std::vector<StorageType> const & data() const {
49 return _vector;
50 }
51
52 Gtk::Widget * param_newWidget() override {
53 return nullptr;
54 }
55
56 bool param_readSVGValue(char const * const strvalue) override {
57 _vector.clear();
58 auto const strarray = g_strsplit(strvalue, "|", 0);
59 auto iter = strarray;
60
61 while (*iter != nullptr) {
62 Glib::ustring fixer = *iter;
63 fixer.erase(0, fixer.find_first_not_of(" "));
64 fixer.erase(fixer.find_last_not_of(" ")+1);
65 _vector.push_back( readsvg(fixer.c_str()) );
66 iter++;
67 }
68 g_strfreev (strarray);
69 return true;
70 }
71
72 void param_update_default(char const * default_value) override{};
73
74 Glib::ustring param_getSVGValue() const override {
76 writesvg(os, _vector);
77 return os.str();
78 }
79
80 Glib::ustring param_getDefaultSVGValue() const override {
81 return "";
82 }
83
84 void param_setValue(std::vector<StorageType> const &new_vector) {
85 _vector = new_vector;
86 }
87
88 void param_set_default() override {
89 param_setValue( std::vector<StorageType>(_default_size) );
90 }
91
92 void param_set_and_write_new_value(std::vector<StorageType> const &new_vector) {
94 writesvg(os, new_vector);
95 param_write_to_repr(os.str().c_str());
96 }
97
98 ParamType paramType() const override { return ParamType::ARRAY; };
99 bool valid_index(int index) const { return _vector.size() > index; }
100
101protected:
104 std::vector<StorageType> _vector;
105 std::size_t _default_size;
106
107 void writesvg(SVGOStringStream &str, std::vector<StorageType> const &vector) const {
108 for (std::size_t i = 0; i < vector.size(); ++i) {
109 if (i != 0) {
110 // separate items with pipe symbol
111 str << " | ";
112 }
113 writesvgData(str,vector[i]);
114 }
115 }
116
117 void writesvgData(SVGOStringStream &str, float const &vector_data) const {
118 str << vector_data;
119 }
120
121 void writesvgData(SVGOStringStream &str, double const &vector_data) const {
122 str << vector_data;
123 }
124
125 void writesvgData(SVGOStringStream &str, Glib::ustring const &vector_data) const {
126 str << vector_data;
127 }
128
129 void writesvgData(SVGOStringStream &str, Geom::Point const &vector_data) const {
130 str << vector_data;
131 }
132
133 void writesvgData(SVGOStringStream &str, std::shared_ptr<SatelliteReference> const &vector_data) const
134 {
135 if (vector_data && vector_data->isAttached()) {
136 str << vector_data->getURI()->str();
137 if (vector_data->getHasActive()) {
138 str << ",";
139 str << vector_data->getActive();
140 }
141 }
142 }
143
144 void writesvgData(SVGOStringStream &str, std::vector<NodeSatellite> const &vector_data) const
145 {
146 for (std::size_t i = 0; i < vector_data.size(); ++i) {
147 if (i != 0) {
148 // separate nodes with @ symbol ( we use | for paths)
149 str << " @ ";
150 }
151 str << vector_data[i].getNodeSatellitesTypeGchar();
152 str << ",";
153 str << vector_data[i].is_time;
154 str << ",";
155 str << vector_data[i].selected;
156 str << ",";
157 str << vector_data[i].has_mirror;
158 str << ",";
159 str << vector_data[i].hidden;
160 str << ",";
161 str << vector_data[i].amount;
162 str << ",";
163 str << vector_data[i].angle;
164 str << ",";
165 str << static_cast<int>(vector_data[i].steps);
166 }
167 }
168
169 StorageType readsvg(char const * str);
170};
171
172} // namespace Inkscape::LivePathEffect
173
174#endif // INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_H
175
176/*
177 Local Variables:
178 mode:c++
179 c-file-style:"stroustrup"
180 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
181 indent-tabs-mode:nil
182 fill-column:99
183 End:
184*/
185// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
TODO: insert short description here.
Two-dimensional point that doubles as a vector.
Definition point.h:66
ArrayParam(const Glib::ustring &label, const Glib::ustring &tip, const Glib::ustring &key, Inkscape::UI::Widget::Registry *wr, Effect *effect, std::size_t n=0)
Definition array.h:35
void writesvg(SVGOStringStream &str, std::vector< StorageType > const &vector) const
Definition array.h:107
void writesvgData(SVGOStringStream &str, float const &vector_data) const
Definition array.h:117
void param_set_and_write_new_value(std::vector< StorageType > const &new_vector)
Definition array.h:92
void param_update_default(char const *default_value) override
Definition array.h:72
friend class TpS::KnotHolderEntityAttachBegin
Definition array.h:102
void writesvgData(SVGOStringStream &str, Glib::ustring const &vector_data) const
Definition array.h:125
friend class TpS::KnotHolderEntityAttachEnd
Definition array.h:103
void writesvgData(SVGOStringStream &str, Geom::Point const &vector_data) const
Definition array.h:129
void param_set_default() override
Definition array.h:88
void writesvgData(SVGOStringStream &str, std::shared_ptr< SatelliteReference > const &vector_data) const
Definition array.h:133
void writesvgData(SVGOStringStream &str, std::vector< NodeSatellite > const &vector_data) const
Definition array.h:144
Glib::ustring param_getSVGValue() const override
Definition array.h:74
Gtk::Widget * param_newWidget() override
Definition array.h:52
void param_setValue(std::vector< StorageType > const &new_vector)
Definition array.h:84
std::vector< StorageType > _vector
Definition array.h:104
StorageType readsvg(char const *str)
bool param_readSVGValue(char const *const strvalue) override
Definition array.h:56
void writesvgData(SVGOStringStream &str, double const &vector_data) const
Definition array.h:121
ParamType paramType() const override
Definition array.h:98
bool valid_index(int index) const
Definition array.h:99
std::vector< StorageType > const & data() const
Definition array.h:48
ArrayParam & operator=(const ArrayParam &)
Glib::ustring param_getDefaultSVGValue() const override
Definition array.h:80
void param_write_to_repr(const char *svgd)
Definition parameter.cpp:52
std::string str() const
NodeSatellite – a per node holder of data.
Glib::ustring label
Live Path Effects code.
static cairo_user_data_key_t key
TODO: insert short description here.
TODO: insert short description here.
int index