]> git.sven.stormbind.net Git - sven/vym.git/blob - src/slideitem.cpp
New upstream version 2.9.22
[sven/vym.git] / src / slideitem.cpp
1 #include <QStringList>
2
3 #include "slideitem.h"
4
5 #include "slidemodel.h"
6 #include "treeitem.h"
7 #include "vymmodel.h"
8
9 uint SlideItem::idLastSlide = 0; // make instance
10
11 SlideItem::SlideItem(const QVector<QVariant> &data, SlideItem *parent,
12                      SlideModel *sm)
13 {
14     parentItem = parent;
15     itemData = data;
16     idLastSlide++;
17     slideID = idLastSlide;
18     treeItemID = -1;
19     zoomFactor = -1;
20     duration = 2000;
21     easingCurve.setType(QEasingCurve::OutQuint);
22
23     if (sm)
24         model = sm;
25     else
26         model = parent->getModel();
27
28     if (data.isEmpty())
29         itemData.append(QVariant("empty"));
30 }
31
32 SlideItem::~SlideItem() { qDeleteAll(childItems); }
33
34 SlideModel *SlideItem::getModel() { return model; }
35
36 uint SlideItem::getID() { return slideID; }
37
38 SlideItem *SlideItem::child(int number) { return childItems.value(number); }
39
40 int SlideItem::childCount() const { return childItems.count(); }
41
42 int SlideItem::childNumber() const
43 {
44     if (parentItem)
45         return parentItem->childItems.indexOf(const_cast<SlideItem *>(this));
46
47     return 0;
48 }
49
50 int SlideItem::columnCount() const { return itemData.count(); }
51
52 QVariant SlideItem::data(int column) const { return itemData.value(column); }
53
54 int SlideItem::row() const
55 {
56     if (parentItem)
57         return parentItem->childItems.indexOf(const_cast<SlideItem *>(this));
58
59     return 0;
60 }
61
62 void SlideItem::insertItem(int pos, SlideItem *si)
63 {
64     if (pos < 0)
65         pos = 0;
66     if (pos > childItems.count())
67         pos = childItems.count();
68     childItems.insert(pos, si);
69     si->parentItem = this;
70 }
71
72 void SlideItem::removeItem(int pos)
73 {
74     // Remove, but don't delete (needed for relinking)
75     if (pos < 0 || pos > childItems.size() - 1)
76         qWarning("TreeItem::removeChild tried to remove non existing item?!");
77     else
78         childItems.removeAt(pos);
79 }
80
81 bool SlideItem::insertChildren(int position, int count, int columns)
82 {
83     if (position < 0 || position > childItems.size())
84         return false;
85
86     for (int row = 0; row < count; ++row) {
87         QVector<QVariant> data(columns);
88         SlideItem *item = new SlideItem(data, this);
89         childItems.insert(position, item);
90     }
91
92     return true;
93 }
94
95 bool SlideItem::insertColumns(int position, int columns)
96 {
97     if (position < 0 || position > itemData.size())
98         return false;
99
100     for (int column = 0; column < columns; ++column)
101         itemData.insert(position, QVariant());
102
103     foreach (SlideItem *child, childItems)
104         child->insertColumns(position, columns);
105
106     return true;
107 }
108
109 SlideItem *SlideItem::parent() { return parentItem; }
110
111 bool SlideItem::removeChildren(int position, int count)
112 {
113     if (position < 0 || position + count > childItems.size())
114         return false;
115
116     for (int row = 0; row < count; ++row)
117         delete childItems.takeAt(position);
118
119     return true;
120 }
121
122 bool SlideItem::removeColumns(int position, int columns)
123 {
124     if (position < 0 || position + columns > itemData.size())
125         return false;
126
127     for (int column = 0; column < columns; ++column)
128         itemData.remove(position);
129
130     foreach (SlideItem *child, childItems)
131         child->removeColumns(position, columns);
132
133     return true;
134 }
135
136 bool SlideItem::setData(int column, const QVariant &value)
137 {
138     if (column < 0 || column >= itemData.size())
139         return false;
140
141     itemData[column] = value;
142     return true;
143 }
144
145 void SlideItem::setName(const QString &n) { setData(0, QVariant(n)); }
146
147 QString SlideItem::getName() { return data(0).toString(); }
148
149 void SlideItem::setTreeItem(TreeItem *ti)
150 {
151     if (ti)
152         treeItemID = ti->getID();
153     else
154         qWarning() << "SlideItem::setTreeItem no ID!";
155 }
156
157 int SlideItem::getTreeItemID() { return treeItemID; }
158
159 void SlideItem::setInScript(const QString &s) { inScript = s; }
160
161 QString SlideItem::getInScript() { return inScript; }
162
163 void SlideItem::setOutScript(const QString &s) { outScript = s; }
164
165 QString SlideItem::getOutScript() { return outScript; }
166
167 void SlideItem::setZoomFactor(const qreal &zf) { zoomFactor = zf; }
168
169 qreal SlideItem::getZoomFactor() { return zoomFactor; }
170
171 void SlideItem::setRotationAngle(const qreal &zf) { rotationAngle = zf; }
172
173 qreal SlideItem::getRotationAngle() { return rotationAngle; }
174
175 void SlideItem::setDuration(const int &d) { duration = d; }
176
177 int SlideItem::getDuration() { return duration; }
178
179 void SlideItem::setEasingCurve(const QEasingCurve &c) { easingCurve = c; }
180
181 QEasingCurve SlideItem::getEasingCurve() { return easingCurve; }
182
183 QString SlideItem::saveToDir()
184 {
185     QString att_ins, att_outs;
186     if (inScript.isEmpty()) {
187         att_ins = attribut(
188             "inScript",
189             QString("select(\"%1\")")
190                 .arg(model->getVymModel()->getSelectString(treeItemID)));
191     }
192     else
193         att_ins = attribut("inScript", inScript);
194     if (!outScript.isEmpty())
195         att_outs = attribut("outScript", outScript);
196
197     return singleElement(
198         "slide", attribut("name", data(0).toString()) +
199                      attribut("zoom", QString().setNum(zoomFactor)) +
200                      attribut("rotation", QString().setNum(rotationAngle)) +
201                      attribut("duration", QString().setNum(duration)) +
202                      attribut("curve", QString().setNum(easingCurve.type())) +
203                      attribut("mapitem", model->getVymModel()->getSelectString(
204                                              treeItemID)) +
205                      att_ins + att_outs);
206 }