1+ #include " AnchorNodeSequence.h"
2+
3+ #include < QJSValue>
4+ #include < QJSEngine>
5+
6+ #include < opendspx/anchornode.h>
7+
8+ #include < dspxmodel/private/PointSequenceContainer_p.h>
9+ #include < dspxmodel/private/Model_p.h>
10+ #include < dspxmodel/AnchorNode.h>
11+ #include < dspxmodel/ModelStrategy.h>
12+ #include < dspxmodel/private/PointSequenceData_p.h>
13+
14+ namespace dspx {
15+
16+ class AnchorNodeSequencePrivate : public PointSequenceData <AnchorNodeSequence, AnchorNode, &AnchorNode::x, &AnchorNode::xChanged> {
17+ Q_DECLARE_PUBLIC (AnchorNodeSequence)
18+ };
19+
20+ AnchorNodeSequence::AnchorNodeSequence (Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new AnchorNodeSequencePrivate) {
21+ Q_D (AnchorNodeSequence);
22+ Q_ASSERT (model->strategy ()->getEntityType (handle) == ModelStrategy::ES_ParamCurveAnchorNodes);
23+ d->q_ptr = this ;
24+ d->pModel = ModelPrivate::get (model);
25+ }
26+
27+ AnchorNodeSequence::~AnchorNodeSequence () = default ;
28+
29+ int AnchorNodeSequence::size () const {
30+ Q_D (const AnchorNodeSequence);
31+ return d->container .size ();
32+ }
33+
34+ AnchorNode *AnchorNodeSequence::firstItem () const {
35+ Q_D (const AnchorNodeSequence);
36+ return d->firstItem ;
37+ }
38+
39+ AnchorNode *AnchorNodeSequence::lastItem () const {
40+ Q_D (const AnchorNodeSequence);
41+ return d->lastItem ;
42+ }
43+
44+ AnchorNode *AnchorNodeSequence::previousItem (AnchorNode *item) const {
45+ Q_D (const AnchorNodeSequence);
46+ return d->container .previousItem (item);
47+ }
48+
49+ AnchorNode *AnchorNodeSequence::nextItem (AnchorNode *item) const {
50+ Q_D (const AnchorNodeSequence);
51+ return d->container .nextItem (item);
52+ }
53+
54+ QList<AnchorNode *> AnchorNodeSequence::slice (int position, int length) const {
55+ Q_D (const AnchorNodeSequence);
56+ return d->container .slice (position, length);
57+ }
58+
59+ bool AnchorNodeSequence::contains (AnchorNode *item) const {
60+ Q_D (const AnchorNodeSequence);
61+ return d->container .contains (item);
62+ }
63+
64+ bool AnchorNodeSequence::insertItem (AnchorNode *item) {
65+ Q_D (AnchorNodeSequence);
66+ return d->pModel ->strategy ->insertIntoSequenceContainer (handle (), item->handle ());
67+ }
68+
69+ bool AnchorNodeSequence::removeItem (AnchorNode *item) {
70+ Q_D (AnchorNodeSequence);
71+ return d->pModel ->strategy ->takeFromSequenceContainer (handle (), item->handle ());
72+ }
73+
74+ QList<QDspx::AnchorNode> AnchorNodeSequence::toQDspx () const {
75+ Q_D (const AnchorNodeSequence);
76+ QList<QDspx::AnchorNode> ret;
77+ ret.reserve (d->container .size ());
78+ for (const auto &[_, item] : d->container .m_items ) {
79+ ret.append (item->toQDspx ());
80+ }
81+ return ret;
82+ }
83+
84+ void AnchorNodeSequence::fromQDspx (const QList<QDspx::AnchorNode> &nodes) {
85+ while (size ()) {
86+ removeItem (firstItem ());
87+ }
88+ for (const auto &node : nodes) {
89+ auto item = model ()->createAnchorNode ();
90+ item->fromQDspx (node);
91+ insertItem (item);
92+ }
93+ }
94+
95+ void AnchorNodeSequence::handleInsertIntoSequenceContainer (Handle entity) {
96+ Q_D (AnchorNodeSequence);
97+ d->handleInsertIntoSequenceContainer (entity);
98+ }
99+
100+ void AnchorNodeSequence::handleTakeFromSequenceContainer (Handle takenEntity, Handle entity) {
101+ Q_D (AnchorNodeSequence);
102+ d->handleTakeFromSequenceContainer (takenEntity, entity);
103+ }
104+
105+ }
106+
107+ #include " moc_AnchorNodeSequence.cpp"
0 commit comments