#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
);
}