]> git.sesse.net Git - kdenlive/commitdiff
complex parameter also for "geometry"
authorMarco Gittler <marco@gitma.de>
Tue, 25 Mar 2008 17:34:42 +0000 (17:34 +0000)
committerMarco Gittler <marco@gitma.de>
Tue, 25 Mar 2008 17:34:42 +0000 (17:34 +0000)
svn path=/branches/KDE4/; revision=2119

effects/obscure.xml
src/clipitem.cpp
src/complexparameter.cpp
src/complexparameter.h
src/effectstackedit.cpp
src/initeffects.cpp
src/initeffects.h
src/parameterplotter.cpp
src/parameterplotter.h
src/renderer.cpp

index bf5d43bc8e13b347c1145a286cf7aa6808db26cc..ef3028826640c71c9d56bf972fce741f23b42b2a 100644 (file)
@@ -9,7 +9,7 @@
        <label>Height</label>
        <label>Averaging</label>
        <properties id="obscure" tag="obscure" />
-       <parameter type="complex" name="X;Y;Width;Height;Averaging" max="MAX_WIDTH;MAX_HEIGHT;1000;1000;100" min="0;0;0;0;3" default="MID_WIDTH;MID_HEIGHT;100;100;20" format="%d,%d:%dx%d">
+       <parameter type="complex" namedesc="X;Y;Width;Height;Averaging" max="MAX_WIDTH;MAX_HEIGHT;1000;1000;100" min="0;0;0;0;3" default="MID_WIDTH;MID_HEIGHT;100;100;20" format="%d,%d:%dx%d">
                <name>Region</name>
        </parameter>
 </effect>
index 348682c8411f5ff4897af6df735d99906b92070b..3297c473521dff0e3a80dd0262e25844da3a4eba 100644 (file)
@@ -569,7 +569,7 @@ QMap <QString, QString> ClipItem::getEffectArgs(QDomElement effect) {
     QDomNodeList params = effect.elementsByTagName("parameter");
     for (int i = 0; i < params.count(); i++) {
         QDomElement e = params.item(i).toElement();
-        if (e.attribute("name").contains(";")) {
+        if (e.attribute("namedesc").contains(";")) {
             QString format = e.attribute("format");
             QStringList separators = format.split("%d", QString::SkipEmptyParts);
             QStringList values = e.attribute("value").split(QRegExp("[,:;x]"));
index 8dc1e53f086e23e12289c0672133351dae00b580..3e3b93f7f1a26ec189e26b0208256cdb3c1b4173 100644 (file)
@@ -51,7 +51,7 @@ ComplexParameter::ComplexParameter(QWidget *parent)
     connect(ui.buttonHelp, SIGNAL(clicked()), this , SLOT(slotSetHelp()));
     connect(ui.parameterList, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(slotParameterChanged(const QString&)));
     //connect (ui.effectlist, SIGNAL (itemSelectionChanged() ) , this, SLOT ( itemSelectionChanged()));
-    connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), ui.kplotwidget, SLOT(setPointLists(const QDomElement&, int , int)));
+    connect(this, SIGNAL(transferParamDesc(const QDomElement&, const QString&, int , int)), ui.kplotwidget, SLOT(setPointLists(const QDomElement&, const QString&, int , int)));
     connect(ui.kplotwidget, SIGNAL(parameterChanged(QDomElement)), this , SLOT(slotUpdateEffectParams(QDomElement)));
     connect(ui.kplotwidget, SIGNAL(parameterList(QStringList)), this , SLOT(slotUpdateParameterList(QStringList)));
     /*ÜeffectLists["audio"]=audioEffectList;
@@ -110,9 +110,9 @@ void ComplexParameter::slotParameterChanged(const QString& text) {
     updateButtonStatus();
 }
 
-void ComplexParameter::setupParam(const QDomElement& d, int from, int to) {
+void ComplexParameter::setupParam(const QDomElement& d, const QString& paramName, int from, int to) {
     param = d;
-    ui.kplotwidget->setPointLists(d, from, to);
+    ui.kplotwidget->setPointLists(d, paramName, from, to);
 }
 
 void ComplexParameter::itemSelectionChanged() {
index 6ecf0eaf705b94d74b2b7b456be11869bfbb7619..a22a2527a17cf14291aae6e38fabd336d9c6aae4 100644 (file)
@@ -49,11 +49,11 @@ public slots:
     void slotShowInTimeline();
     void slotParameterChanged(const QString&);
     void itemSelectionChanged();
-    void setupParam(const QDomElement&, int, int);
+    void setupParam(const QDomElement&, const QString& paramName, int, int);
     void slotUpdateEffectParams(QDomElement e);
     void slotUpdateParameterList(QStringList);
 signals:
-    void transferParamDesc(const QDomElement&, int , int);
+    void transferParamDesc(const QDomElement&, const QString&, int , int);
     void removeEffect(ClipItem*, QDomElement);
     void updateClipEffect(ClipItem*, QDomElement);
     void parameterChanged();
index 069434c12eeebacbf802b95cac41f130843ada17..b0acd704b9c44a733e0b969f741500d15147d085 100644 (file)
@@ -73,27 +73,33 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
 
     for (int i = 0;i < namenode.count() ;i++) {
         kDebug() << "in form";
-        QDomNode pa = namenode.item(i);
+        QDomElement pa = namenode.item(i).toElement();
         QDomNode na = pa.firstChildElement("name");
-        QDomNamedNodeMap nodeAtts = pa.attributes();
-        QString type = nodeAtts.namedItem("type").nodeValue();
+        QString type = pa.attribute("type");
         QString paramName = na.toElement().text();
         QWidget * toFillin = new QWidget;
-        QString value = nodeAtts.namedItem("value").isNull() ?
-                        nodeAtts.namedItem("default").nodeValue() :
-                        nodeAtts.namedItem("value").nodeValue();
+        QString value = pa.attribute("value").isNull() ?
+                        pa.attribute("default") : pa.attribute("value");
+        if (type == "geometry") {
+            pa.setAttribute("namedesc", "X;Y;W;H");
+            pa.setAttribute("format", "%d,%d:%dx%d");
+            pa.setAttribute("min", "-100;-100;0;0");
+            pa.setAttribute("max", "0;0;100;100");
+        }
+        if (type == "complex") {
+            //pa.setAttribute("namedesc",pa.attribute("name"));
 
+        }
         //TODO constant, list, bool, complex , color, geometry, position
         if (type == "double" || type == "constant") {
-            createSliderItem(paramName, value.toInt(), nodeAtts.namedItem("min").nodeValue().toInt(), nodeAtts.namedItem("max").nodeValue().toInt());
+            createSliderItem(paramName, value.toInt(), pa.attribute("min").toInt(), pa.attribute("max").toInt());
             delete toFillin;
             toFillin = NULL;
         } else if (type == "list") {
 
             Ui::Listval_UI *lsval = new Ui::Listval_UI;
             lsval->setupUi(toFillin);
-            nodeAtts.namedItem("paramlist");
-            QStringList listitems = nodeAtts.namedItem("paramlist").nodeValue().split(",");
+            QStringList listitems = pa.attribute("paramlist").split(",");
             lsval->list->addItems(listitems);
             lsval->list->setCurrentIndex(listitems.indexOf(value));
             for (int i = 0;i < lsval->list->count();i++) {
@@ -120,7 +126,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
             bval->checkBox->setText(na.toElement().text());
             valueItems[paramName] = bval;
             uiItems.append(bval);
-        } else if (type == "complex") {
+        } else if (type == "complex" || type == "geometry") {
             /*QStringList names=nodeAtts.namedItem("name").nodeValue().split(";");
             QStringList max=nodeAtts.namedItem("max").nodeValue().split(";");
             QStringList min=nodeAtts.namedItem("min").nodeValue().split(";");
@@ -136,7 +142,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
             }*/
             ComplexParameter *pl = new ComplexParameter;
             connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
-            pl->setupParam(d, 0, 100);
+            pl->setupParam(d, pa.attribute("name"), 0, 100);
             vbox->addWidget(pl);
             valueItems[paramName+"complex"] = pl;
             items.append(pl);
@@ -187,11 +193,11 @@ void EffectStackEdit::collectAllParameters() {
                         KColorButton *color = ((Ui::Colorval_UI*)valueItems[na.toElement().text()])->kcolorbutton;
                         setValue.sprintf("0x%08x", color->color().rgba());
                     } else
-                        if (type == "complex") {
+                        if (type == "complex" || type == "geometry") {
                             ComplexParameter *complex = ((ComplexParameter*)valueItems[na.toElement().text()+"complex"]);
                             namenode.item(i) = complex->getParamDesc();
                         }
-        if (!setValue.isEmpty()) {
+        if (!setValue.isNull()) {
             pa.attributes().namedItem("value").setNodeValue(setValue);
         }
     }
index bc70a1c40a15618764bc49eb15c8891581c79b8b..a50f9f4a38e2b405166631f98a68635197b6029c 100644 (file)
@@ -376,10 +376,14 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository,
                     params.setAttribute("type", "constant");
                 if (QString(paramdesc.get("type")) == "boolean")
                     params.setAttribute("type", "bool");
-                if (!QString(paramdesc.get("format")).isEmpty()) {
+                if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) != "geometry") {
                     params.setAttribute("type", "complex");
                     params.setAttribute("format", paramdesc.get("format"));
                 }
+                if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) == "geometry") {
+                    params.setAttribute("type", "geometry");
+                    //params.setAttribute("format", paramdesc.get("format"));
+                }
                 if (paramdesc.get("default")) params.setAttribute("default", paramdesc.get("default"));
                 if (paramdesc.get("value")) {
                     params.setAttribute("value", paramdesc.get("value"));
@@ -415,6 +419,41 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
         Mlt::Properties *metadata = repository->metadata(transition_type, name.toAscii().data());
         //kDebug() << filtername;
         if (metadata && metadata->is_valid()) {
+            Mlt::Properties param_props((mlt_properties) metadata->get_data("parameters"));
+            for (int j = 0; param_props.is_valid() && j < param_props.count();j++) {
+                QDomElement params = ret.createElement("parameter");
+
+                Mlt::Properties paramdesc((mlt_properties) param_props.get_data(param_props.get_name(j)));
+
+                params.setAttribute("name", paramdesc.get("identifier"));
+
+                if (paramdesc.get("maximum")) params.setAttribute("max", paramdesc.get("maximum"));
+                if (paramdesc.get("minimum")) params.setAttribute("min", paramdesc.get("minimum"));
+                if (QString(paramdesc.get("type")) == "integer") {
+                    params.setAttribute("type", "constant");
+                    params.setAttribute("factor", "100");
+                }
+                if (QString(paramdesc.get("type")) == "boolean")
+                    params.setAttribute("type", "bool");
+                if (!QString(paramdesc.get("format")).isEmpty()) {
+                    params.setAttribute("type", "complex");
+                    params.setAttribute("format", paramdesc.get("format"));
+
+                }
+                if (paramdesc.get("default")) params.setAttribute("default", paramdesc.get("default"));
+                if (paramdesc.get("value")) {
+                    params.setAttribute("value", paramdesc.get("value"));
+                } else {
+                    params.setAttribute("value", paramdesc.get("default"));
+                }
+
+
+                QDomElement pname = ret.createElement("name");
+                pname.appendChild(ret.createTextNode(paramdesc.get("title")));
+                params.appendChild(pname);
+
+                ktrans.appendChild(params);
+            }
 
             ret.appendChild(ktrans);
             if (metadata->get("title") && metadata->get("identifier")) {
@@ -477,7 +516,8 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                 paramList.append(quickParameterFill(ret, "Fix Shear Z", "fix_shear_z", "double", "0", "0", "360"));
                 paramList.append(quickParameterFill(ret, "Mirror", "mirror_off", "bool", "0", "0", "1"));
                 paramList.append(quickParameterFill(ret, "Repeat", "repeat_off", "bool", "0", "0", "1"));
-                paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%", "0,0:100%x100%", "0,0:100%x100%"));
+                paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%", "0%,0%:100%x100%", "0%,0%:100%x100%"));
+                tname.appendChild(ret.createTextNode("Composite"));
             } else if (name == "region") {
                 tname.appendChild(ret.createTextNode("Region"));
             }
@@ -499,7 +539,7 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
         */
     }
 }
-QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString factor) {
+QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString factor, QString namedesc, QString format) {
     QDomElement parameter = doc.createElement("parameter");
     parameter.setAttribute("tag", tag);
     parameter.setAttribute("default", def);
@@ -511,6 +551,10 @@ QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QS
         parameter.setAttribute("paramlist", list);
     if (!factor.isEmpty())
         parameter.setAttribute("factor", factor);
+    if (!namedesc.isEmpty())
+        parameter.setAttribute("namedesc", namedesc);
+    if (!format.isEmpty())
+        parameter.setAttribute("format", format);
     QDomElement pname = doc.createElement("name");
     pname.appendChild(doc.createTextNode(name));
     parameter.appendChild(pname);
index 0c8df42a84d143ce61b632b52c39d1927716337e..377a00e7e8735b58658b9032da5f592fac3517fd 100644 (file)
@@ -37,7 +37,7 @@ public:
     static Mlt::Repository *parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *transitions);
     static QDomDocument createDescriptionFromMlt(Mlt::Repository* repository, const QString& type, const QString& name);
     static void fillTransitionsList(Mlt::Repository *, EffectsList* transitions, QStringList names);
-    static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString factor = QString());
+    static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString factor = QString(), QString namedesc = QString(), QString format = QString());
     static void parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList);
     static char* ladspaEffectString(int ladspaId, QStringList params);
     static void ladspaEffectFile(const QString & fname, int ladspaId, QStringList params);
index 527e06bcb4e1ddbbfef468438752bbf4830920df..7d8d5d57039a5c17e951089b1e836b4d5d98d80d 100644 (file)
@@ -52,9 +52,10 @@ ParameterPlotter::ParameterPlotter(QWidget *parent): KPlotWidget(parent) {
   </effect>
 
 */
-void ParameterPlotter::setPointLists(const QDomElement& d, int startframe, int endframe) {
+void ParameterPlotter::setPointLists(const QDomElement& d, const QString& paramName, int startframe, int endframe) {
 
     //QListIterator <QPair <QString, QMap< int , QVariant > > > nameit(params);
+    m_paramName = paramName;
     itemParameter = d;
     QDomNodeList namenode = d.elementsByTagName("parameter");
 
@@ -69,28 +70,30 @@ void ParameterPlotter::setPointLists(const QDomElement& d, int startframe, int e
     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()) {
 
 
-        QDomNode pa = namenode.item(0);
+        QDomElement pa = namenode.item(i).toElement();
         QDomNode na = pa.firstChildElement("name");
 
-        parameterNameList << pa.attributes().namedItem("name").nodeValue().split(";");
+        parameterNameList << pa.attribute("namedesc").split(";");
         emit parameterList(parameterNameList);
 
         //max_y=pa.attributes().namedItem("max").nodeValue().toInt();
         //int val=pa.attributes().namedItem("value").nodeValue().toInt();
         QStringList defaults;
-        if (pa.attributes().namedItem("start").nodeValue().contains(";"))
-            defaults = pa.attributes().namedItem("start").nodeValue().split(";");
-        else if (pa.attributes().namedItem("value").nodeValue().contains(";"))
-            defaults = pa.attributes().namedItem("value").nodeValue().split(";");
-        else if (pa.attributes().namedItem("default").nodeValue().contains(";"))
-            defaults = pa.attributes().namedItem("default").nodeValue().split(";");
-        QStringList maxv = pa.attributes().namedItem("max").nodeValue().split(";");
-        QStringList minv = pa.attributes().namedItem("max").nodeValue().split(";");
-        for (int i = 0;i < maxv.size();i++) {
+        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("max").split(";");
+        for (int i = 0;i < maxv.size() && i < minv.size();i++) {
             if (max_y < maxv[i].toInt()) max_y = maxv[i].toInt();
             if (min_y > minv[i].toInt()) min_y = minv[i].toInt();
         }
@@ -98,17 +101,23 @@ void ParameterPlotter::setPointLists(const QDomElement& d, int startframe, int e
         for (int i = 0;i < parameterNameList.count();i++) {
             KPlotObject *plot = new KPlotObject(colors[plotobjects.size()%colors.size()]);
             plot->setShowLines(true);
-            if (!stretchFactors.contains(i)) {
+            if (!stretchFactors.contains(i) && i < maxv.size()) {
                 if (maxv[i].toInt() != 0)
                     stretchFactors[i] = max_y / maxv[i].toInt();
                 else
                     stretchFactors[i] = 1.0;
             }
-            if (defaults[i].toDouble() > max_y)
+            if (i < defaults.size() && defaults[i].toDouble() > max_y)
                 defaults[i] = max_y;
-            plot->addPoint(startframe, defaults[i].toInt()*stretchFactors[i], parameterNameList[i]);
+            int def = 0;
+            if (i < defaults.size())
+                def = (int)(defaults[i].toInt() * stretchFactors[i]);
+            QString name = "";
+            if (i < parameterNameList.size())
+                name = parameterNameList[i];
+            plot->addPoint(startframe, def, name);
             //add keyframes here
-            plot->addPoint(endframe, defaults[i].toInt()*stretchFactors[i]);
+            plot->addPoint(endframe, def);
 
             plotobjects.append(plot);
         }
@@ -125,12 +134,12 @@ void ParameterPlotter::setPointLists(const QDomElement& d, int startframe, int e
     maxx = endframe;
     maxy = max_y;
     setLimits(-1, endframe + 1, min_y - 10, maxy + 10);
+
     addPlotObjects(plotobjects);
 
 }
 
 void ParameterPlotter::createParametersNew() {
-
     QList<KPlotObject*> plotobjs = plotObjects();
     if (plotobjs.size() != parameterNameList.size()) {
         kDebug() << "ERROR size not equal";
@@ -188,18 +197,23 @@ void ParameterPlotter::mouseMoveEvent(QMouseEvent * event) {
 }
 
 void ParameterPlotter::replot(const QString & name) {
+
     //removeAllPlotObjects();
     int i = 0;
     bool drawAll = name.isEmpty() || name == "all";
     activeIndexPlot = -1;
 
+
     foreach(KPlotObject* p, plotObjects()) {
-        p->setShowPoints(drawAll || parameterNameList[i] == name);
-        p->setShowLines(drawAll || parameterNameList[i] == name);
-        QPen pen = (drawAll || parameterNameList[i] == name ? QPen(Qt::SolidLine) : QPen(Qt::NoPen));
+        QString selectedName = "none";
+        if (i < parameterNameList.size())
+            selectedName = parameterNameList[i];
+        p->setShowPoints(drawAll || selectedName == name);
+        p->setShowLines(drawAll || selectedName == name);
+        QPen pen = (drawAll || selectedName == name ? QPen(Qt::SolidLine) : QPen(Qt::NoPen));
         pen.setColor(p->linePen().color());
         p->setLabelPen(pen);
-        if (parameterNameList[i] == name)
+        if (selectedName == name)
             activeIndexPlot = i;
         replacePlotObject(i++, p);
     }
index e2f64f053dd6b2c9658d3bb4b17fd3e00c7a3a3d..8f1a070b9595c2aed54b3eee2875c66379e79f8a 100644 (file)
@@ -46,11 +46,12 @@ private:
     QList<QColor> colors;
     QDomElement itemParameter;
     int max_y, min_y;
+    QString m_paramName;
 protected:
     void mouseMoveEvent(QMouseEvent * event);
     void mousePressEvent(QMouseEvent * event);
 public slots:
-    void setPointLists(const QDomElement&, int , int);
+    void setPointLists(const QDomElement&, const QString& paramName, int , int);
 signals:
     void parameterChanged(QDomElement);
     void updateFrame(int);
index 57c23e07f5fcf693e35e2824b427c20eb435139d..b6a8ac9969abd430d7fab2426406efc17c45f2da 100644 (file)
@@ -1379,7 +1379,7 @@ void Render::mltMoveTransition(QString type, int startTrack, int trackOffset, Ge
                     mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
                     mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset);
                     mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset);
-                                                 kDebug() << "set new start & end :" << new_in << new_out;
+                    kDebug() << "set new start & end :" << new_in << new_out;
                 }
                 break;
             }
@@ -1464,17 +1464,31 @@ void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in,
     QDomNodeList attribs = xml.elementsByTagName("parameter");
     QMap<QString, QString> map;
     for (int i = 0;i < attribs.count();i++) {
-        QDomNamedNodeMap atts = attribs.item(i).attributes();
-        QString name = atts.namedItem("name").nodeValue();
-        map[name] = atts.namedItem("default").nodeValue();
-        if (!atts.namedItem("value").nodeValue().isEmpty()) {
-            map[name] = atts.namedItem("value").nodeValue();
+        QDomElement e = attribs.item(i).toElement();
+        QString name = e.attribute("name");
+        map[name] = e.attribute("default");
+        if (!e.attribute("value").isEmpty()) {
+            map[name] = e.attribute("value");
         }
-        if (!atts.namedItem("factor").nodeValue().isEmpty() && atts.namedItem("factor").nodeValue().toDouble() > 0) {
-            map[name] = QString::number(map[name].toDouble() / atts.namedItem("factor").nodeValue().toDouble());
+        if (!e.attribute("factor").isEmpty() && e.attribute("factor").toDouble() > 0) {
+            map[name] = QString::number(map[name].toDouble() / e.attribute("factor").toDouble());
             //map[name]=map[name].replace(".",","); //FIXME how to solve locale conversion of . ,
         }
 
+        if (e.attribute("namedesc").contains(";")) {
+            QString format = e.attribute("format");
+            QStringList separators = format.split("%d", QString::SkipEmptyParts);
+            QStringList values = e.attribute("value").split(QRegExp("[,:;x]"));
+            QString neu;
+            QTextStream txtNeu(&neu);
+            if (values.size() > 0)
+                txtNeu << (int)values[0].toDouble();
+            for (int i = 0;i < separators.size() && i + 1 < values.size();i++) {
+                txtNeu << separators[i];
+                txtNeu << (int)(values[i+1].toDouble());
+            }
+            map[e.attribute("name")] = neu;
+        }
 
     }