-void ParameterPlotter::setPointLists(const QList< QPair<QString, QMap< int , QVariant > > >& params,int startframe, int endframe){
-
- QListIterator <QPair <QString, QMap< int , QVariant > > > nameit(params);
- int max_y=0;
- parameterNameList.clear();
-
-
- while (nameit.hasNext() ){
- KPlotObject *plot=new KPlotObject(colors[plotobjects.size()%colors.size()]);
- plot->setShowLines(true);
- QPair<QString, QMap< int , QVariant > > item=nameit.next();
- parameterNameList << item.first;
-
- QMapIterator <int,QVariant> pointit=item.second;
- while (pointit.hasNext()){
- pointit.next();
- plot->addPoint(QPointF(pointit.key(),pointit.value().toDouble()),item.first,1);
- if (pointit.value().toInt() >maxy)
- max_y=pointit.value().toInt();
- }
- plotobjects.append(plot);
- }
- maxx=endframe;
- maxy=max_y;
- setLimits(0,endframe,0,maxy+10);
- addPlotObjects(plotobjects);
+*/
+void ParameterPlotter::setPointLists(const QDomElement& d, const QString& paramName, int startframe, int endframe)
+{
+
+ //QListIterator <QPair <QString, QMap< int , QVariant > > > nameit(params);
+ m_paramName = paramName;
+ m_itemParameter = d;
+ QDomNodeList namenode = d.elementsByTagName("parameter");
+
+ m_max_y = 0;
+ m_min_y = 0;
+ removeAllPlotObjects();
+ m_stretchFactors.clear();
+ m_parameterNameList.clear();
+ m_plotobjects.clear();
+
+ QString dat;
+ QTextStream stre(&dat);
+ d.save(stre, 2);
+ kDebug() << dat;
+ int i = 0;
+ while (!namenode.item(i).isNull() && namenode.item(i).toElement().attribute("name") != m_paramName)
+ ++i;
+
+ if (namenode.count()) {
+ QDomElement pa = namenode.item(i).toElement();
+ //QDomNode na = pa.firstChildElement("name");
+
+ m_parameterNameList << pa.attribute("namedesc").split(';');
+ emit parameterList(m_parameterNameList);
+
+ //max_y=pa.attributes().namedItem("max").nodeValue().toInt();
+ //int val=pa.attributes().namedItem("value").nodeValue().toInt();
+ QStringList defaults;
+ if (pa.attribute("start").contains(';'))
+ defaults = pa.attribute("start").split(';');
+ else if (pa.attribute("value").contains(';'))
+ defaults = pa.attribute("value").split(';');
+ else if (pa.attribute("default").contains(';'))
+ defaults = pa.attribute("default").split(';');
+ QStringList maxv = pa.attribute("max").split(';');
+ QStringList minv = pa.attribute("min").split(';');
+ for (int i = 0; i < maxv.size() && i < minv.size(); ++i) {
+ if (m_max_y < maxv[i].toInt()) m_max_y = maxv[i].toInt();
+ if (m_min_y > minv[i].toInt()) m_min_y = minv[i].toInt();
+ }
+ for (int i = 0; i < m_parameterNameList.count(); ++i) {
+ KPlotObject *plot = new KPlotObject(m_colors[m_plotobjects.size()%m_colors.size()]);
+ plot->setShowLines(true);
+ if (!m_stretchFactors.contains(i) && i < maxv.size()) {
+ if (maxv[i].toInt() != 0)
+ m_stretchFactors[i] = m_max_y / maxv[i].toInt();
+ else
+ m_stretchFactors[i] = 1.0;
+ }
+ if (i < defaults.size() && defaults[i].toDouble() > m_max_y)
+ defaults[i] = m_max_y;
+ int def = 0;
+ if (i < defaults.size())
+ def = (int)(defaults[i].toInt() * m_stretchFactors[i]);
+ QString name = "";
+ if (i < m_parameterNameList.size())
+ name = m_parameterNameList[i];
+ plot->addPoint(startframe, def, name);
+ //add keyframes here
+ plot->addPoint(endframe, def);
+
+ m_plotobjects.append(plot);
+ }
+
+ /*TODO keyframes
+ while (pointit.hasNext()){
+ pointit.next();
+ plot->addPoint(QPointF(pointit.key(),pointit.value().toDouble()),item.first,1);
+ if (pointit.value().toInt() >maxy)
+ max_y=pointit.value().toInt();
+ }*/
+
+ }
+ setLimits(-1, endframe + 1, m_min_y - 10, m_max_y + 10);
+
+ addPlotObjects(m_plotobjects);
+
+}
+
+void ParameterPlotter::createParametersNew()
+{
+ QList<KPlotObject*> plotobjs = plotObjects();
+ if (plotobjs.size() != m_parameterNameList.size()) {
+ kDebug() << "ERROR size not equal";
+ }
+ QDomNodeList namenode = m_itemParameter.elementsByTagName("parameter");
+ QString paramlist;
+ QTextStream txtstr(¶mlist);
+ QDomNode pa = namenode.item(0);
+ if (!namenode.isEmpty()) {
+ for (int i = 0; i < plotobjs.count(); ++i) {
+ QList<KPlotPoint*> points = plotobjs.at(i)->points();
+ foreach(const KPlotPoint *o, points) {
+ txtstr << (int)o->y() ;
+ break;//first no keyframes
+ }
+ if (i + 1 != plotobjs.count())
+ txtstr << ";";
+ }
+ }
+ pa.attributes().namedItem("value").setNodeValue(paramlist);
+ pa.attributes().namedItem("start").setNodeValue(paramlist);
+ emit parameterChanged(m_itemParameter);
+
+}
+
+
+void ParameterPlotter::mouseMoveEvent(QMouseEvent * event)
+{
+
+ if (m_movepoint != NULL) {
+ QList<KPlotPoint*> list = pointsUnderPoint(event->pos() - QPoint(leftPadding(), topPadding())) ;
+ int i = 0;
+ foreach(KPlotObject *o, plotObjects()) {
+ QList<KPlotPoint*> points = o->points();
+ for (int p = 0; p < points.size(); p++) {
+ if (points[p] == m_movepoint && (m_activeIndexPlot == -1 || m_activeIndexPlot == i)) {
+ QPoint delta = event->pos() - m_oldmousepoint;
+ double newy = m_movepoint->y() - delta.y() * dataRect().height() / pixRect().height();
+ if (m_moveY && newy > m_min_y && newy < m_max_y)
+ m_movepoint->setY(newy);
+ if (p > 0 && p < points.size() - 1) {
+ double newx = m_movepoint->x() + delta.x() * dataRect().width() / pixRect().width();
+ if (newx > points[p-1]->x() && newx < points[p+1]->x() && m_moveX)
+ m_movepoint->setX(m_movepoint->x() + delta.x()*dataRect().width() / pixRect().width());
+ }
+ if (m_moveTimeline && (m_moveX || m_moveY))
+ emit updateFrame(0);
+ replacePlotObject(i, o);
+ m_oldmousepoint = event->pos();
+ }
+ }
+ ++i;
+ }
+ createParametersNew();
+ }