]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/slideitem.cpp
New upstream version 2.9.22
[sven/vym.git] / src / slideitem.cpp
diff --git a/src/slideitem.cpp b/src/slideitem.cpp
new file mode 100644 (file)
index 0000000..25804ba
--- /dev/null
@@ -0,0 +1,206 @@
+#include <QStringList>
+
+#include "slideitem.h"
+
+#include "slidemodel.h"
+#include "treeitem.h"
+#include "vymmodel.h"
+
+uint SlideItem::idLastSlide = 0; // make instance
+
+SlideItem::SlideItem(const QVector<QVariant> &data, SlideItem *parent,
+                     SlideModel *sm)
+{
+    parentItem = parent;
+    itemData = data;
+    idLastSlide++;
+    slideID = idLastSlide;
+    treeItemID = -1;
+    zoomFactor = -1;
+    duration = 2000;
+    easingCurve.setType(QEasingCurve::OutQuint);
+
+    if (sm)
+        model = sm;
+    else
+        model = parent->getModel();
+
+    if (data.isEmpty())
+        itemData.append(QVariant("empty"));
+}
+
+SlideItem::~SlideItem() { qDeleteAll(childItems); }
+
+SlideModel *SlideItem::getModel() { return model; }
+
+uint SlideItem::getID() { return slideID; }
+
+SlideItem *SlideItem::child(int number) { return childItems.value(number); }
+
+int SlideItem::childCount() const { return childItems.count(); }
+
+int SlideItem::childNumber() const
+{
+    if (parentItem)
+        return parentItem->childItems.indexOf(const_cast<SlideItem *>(this));
+
+    return 0;
+}
+
+int SlideItem::columnCount() const { return itemData.count(); }
+
+QVariant SlideItem::data(int column) const { return itemData.value(column); }
+
+int SlideItem::row() const
+{
+    if (parentItem)
+        return parentItem->childItems.indexOf(const_cast<SlideItem *>(this));
+
+    return 0;
+}
+
+void SlideItem::insertItem(int pos, SlideItem *si)
+{
+    if (pos < 0)
+        pos = 0;
+    if (pos > childItems.count())
+        pos = childItems.count();
+    childItems.insert(pos, si);
+    si->parentItem = this;
+}
+
+void SlideItem::removeItem(int pos)
+{
+    // Remove, but don't delete (needed for relinking)
+    if (pos < 0 || pos > childItems.size() - 1)
+        qWarning("TreeItem::removeChild tried to remove non existing item?!");
+    else
+        childItems.removeAt(pos);
+}
+
+bool SlideItem::insertChildren(int position, int count, int columns)
+{
+    if (position < 0 || position > childItems.size())
+        return false;
+
+    for (int row = 0; row < count; ++row) {
+        QVector<QVariant> data(columns);
+        SlideItem *item = new SlideItem(data, this);
+        childItems.insert(position, item);
+    }
+
+    return true;
+}
+
+bool SlideItem::insertColumns(int position, int columns)
+{
+    if (position < 0 || position > itemData.size())
+        return false;
+
+    for (int column = 0; column < columns; ++column)
+        itemData.insert(position, QVariant());
+
+    foreach (SlideItem *child, childItems)
+        child->insertColumns(position, columns);
+
+    return true;
+}
+
+SlideItem *SlideItem::parent() { return parentItem; }
+
+bool SlideItem::removeChildren(int position, int count)
+{
+    if (position < 0 || position + count > childItems.size())
+        return false;
+
+    for (int row = 0; row < count; ++row)
+        delete childItems.takeAt(position);
+
+    return true;
+}
+
+bool SlideItem::removeColumns(int position, int columns)
+{
+    if (position < 0 || position + columns > itemData.size())
+        return false;
+
+    for (int column = 0; column < columns; ++column)
+        itemData.remove(position);
+
+    foreach (SlideItem *child, childItems)
+        child->removeColumns(position, columns);
+
+    return true;
+}
+
+bool SlideItem::setData(int column, const QVariant &value)
+{
+    if (column < 0 || column >= itemData.size())
+        return false;
+
+    itemData[column] = value;
+    return true;
+}
+
+void SlideItem::setName(const QString &n) { setData(0, QVariant(n)); }
+
+QString SlideItem::getName() { return data(0).toString(); }
+
+void SlideItem::setTreeItem(TreeItem *ti)
+{
+    if (ti)
+        treeItemID = ti->getID();
+    else
+        qWarning() << "SlideItem::setTreeItem no ID!";
+}
+
+int SlideItem::getTreeItemID() { return treeItemID; }
+
+void SlideItem::setInScript(const QString &s) { inScript = s; }
+
+QString SlideItem::getInScript() { return inScript; }
+
+void SlideItem::setOutScript(const QString &s) { outScript = s; }
+
+QString SlideItem::getOutScript() { return outScript; }
+
+void SlideItem::setZoomFactor(const qreal &zf) { zoomFactor = zf; }
+
+qreal SlideItem::getZoomFactor() { return zoomFactor; }
+
+void SlideItem::setRotationAngle(const qreal &zf) { rotationAngle = zf; }
+
+qreal SlideItem::getRotationAngle() { return rotationAngle; }
+
+void SlideItem::setDuration(const int &d) { duration = d; }
+
+int SlideItem::getDuration() { return duration; }
+
+void SlideItem::setEasingCurve(const QEasingCurve &c) { easingCurve = c; }
+
+QEasingCurve SlideItem::getEasingCurve() { return easingCurve; }
+
+QString SlideItem::saveToDir()
+{
+    QString att_ins, att_outs;
+    if (inScript.isEmpty()) {
+        att_ins = attribut(
+            "inScript",
+            QString("select(\"%1\")")
+                .arg(model->getVymModel()->getSelectString(treeItemID)));
+    }
+    else
+        att_ins = attribut("inScript", inScript);
+    if (!outScript.isEmpty())
+        att_outs = attribut("outScript", outScript);
+
+    return singleElement(
+        "slide", attribut("name", data(0).toString()) +
+                     attribut("zoom", QString().setNum(zoomFactor)) +
+                     attribut("rotation", QString().setNum(rotationAngle)) +
+                     attribut("duration", QString().setNum(duration)) +
+                     attribut("curve", QString().setNum(easingCurve.type())) +
+                     attribut("mapitem", model->getVymModel()->getSelectString(
+                                             treeItemID)) +
+                     att_ins + att_outs);
+}