From cc5713d03dd6f423782ec5fb10e023166eb781d0 Mon Sep 17 00:00:00 2001 From: Marco Gittler Date: Thu, 21 Feb 2008 00:38:52 +0000 Subject: [PATCH] effectstack can setup the parameter now svn path=/branches/KDE4/; revision=1894 --- src/effectstackview.cpp | 83 ++++++++++++++---------- src/effectstackview.h | 8 ++- src/parameterplotter.cpp | 117 ++++++++++++++++++++++------------ src/parameterplotter.h | 7 +- src/widgets/effectstack_ui.ui | 49 +++++++++++--- 5 files changed, 174 insertions(+), 90 deletions(-) diff --git a/src/effectstackview.cpp b/src/effectstackview.cpp index 58131f97..08b27661 100644 --- a/src/effectstackview.cpp +++ b/src/effectstackview.cpp @@ -66,8 +66,9 @@ EffectStackView::EffectStackView(EffectsList *audioEffectList, EffectsList *vide connect (ui.buttonNewPoints, SIGNAL (clicked()), this , SLOT ( slotSetNew() ) ); 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 (ui.effectlist, SIGNAL (itemSelectionChanged() ) , this, SLOT ( itemSelectionChanged())); + connect( this,SIGNAL (transferParamDesc(const QDomElement&,int ,int) ), ui.kplotwidget, SLOT(setPointLists(const QDomElement&,int ,int) )); + connect(ui.kplotwidget, SIGNAL (parameterChanged(QDomElement ) ), this , SLOT (slotUpdateEffectParams(QDomElement))); effectLists["audio"]=audioEffectList; effectLists["video"]=videoEffectList; effectLists["custom"]=customEffectList; @@ -75,29 +76,11 @@ EffectStackView::EffectStackView(EffectsList *audioEffectList, EffectsList *vide ui.infoBox->hide(); updateButtonStatus(); - - QList< QPair > > points; - QMap data; - data[0]=0.1; - data[100]=30; - data[255]=50; - data[300]=100; - QPair > testpair("gray",data); - points.append(testpair); - - QMap data1; - data1[0]=20; - data1[10]=70; - data1[155]=110; - data1[300]=133; - QPair > testpair1("dx",data1); - points.append(testpair1); - ui.parameterList->addItem("all"); - ui.parameterList->addItem("gray"); - ui.parameterList->addItem("dx"); - - ui.kplotwidget->setPointLists(points,0,305); - +} + +void EffectStackView::slotUpdateEffectParams(QDomElement e){ + if (clipref) + emit updateClipEffect(clipref, e); } void EffectStackView::slotClipItemSelected(ClipItem* c) @@ -108,15 +91,29 @@ void EffectStackView::slotClipItemSelected(ClipItem* c) return; } setEnabled(true); - effects=clipref->effectNames(); - setupListView(effects); + //effects=clipref->effectNames(); + effects.clear(); + for (int i=0;ieffectsCount();i++){ + /*QString outstr; + QTextStream str(&outstr); + clipref->effectAt(i).save(str,2); + kDebug() << outstr;*/ + effects.append(clipref->effectAt(i)); + } + setupListView(); } -void EffectStackView::setupListView(const QStringList& effects_list){ +void EffectStackView::setupListView(){ ui.effectlist->clear(); - ui.effectlist->addItems(effects); + foreach (QDomElement d,effects){ + + QDomNode namenode = d.elementsByTagName("name").item(0); + if (!namenode.isNull()) + ui.effectlist->addItem(namenode.toElement().text() ); + } + //ui.effectlist->addItems(effects); for (int i=0;i< ui.effectlist->count();i++){ QListWidgetItem* item=ui.effectlist->item(i); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsDragEnabled|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); @@ -133,6 +130,16 @@ void EffectStackView::slotItemSelectionChanged(){ if (ui.effectlist->currentItem() && ui.effectlist->currentItem()->isSelected() ){ activeRow=ui.effectlist->row( ui.effectlist->currentItem() ); + ui.parameterList->clear(); + ui.parameterList->addItem("all"); + QDomNodeList namenode = effects.at(activeRow).elementsByTagName("parameter"); + for (int i=0;iaddItem(na.toElement().text() ); + } + + emit transferParamDesc(effects.at(activeRow) ,0,100);//minx max frame }else{ activeRow=-1; } @@ -146,7 +153,7 @@ void EffectStackView::slotItemUp(){ effects.swap(activeRow, activeRow-1); } activeRow--; - setupListView(effects); + setupListView(); } @@ -155,7 +162,7 @@ void EffectStackView::slotItemDown(){ effects.swap(activeRow, activeRow+1); } activeRow++; - setupListView(effects); + setupListView(); } @@ -167,7 +174,7 @@ void EffectStackView::slotItemDel(){ } if (effects.size()>0 && activeRow>0) activeRow--; - setupListView(effects); + setupListView(); } @@ -242,9 +249,15 @@ void EffectStackView::slotNewEffect(){ QAction *result=displayMenu->exec(mapToGlobal(ui.buttonNew->pos()+ui.buttonNew->rect().bottomRight())); if (result){ - effects.append(result->data().toString()); - setupListView(effects); - kDebug()<< result->data(); + //TODO effects.append(result->data().toString()); + foreach (EffectsList* e, effectLists.values()){ + QDomElement dom=e->getEffectByName(result->data().toString()); + clipref->addEffect(dom); + slotClipItemSelected(clipref); + } + + setupListView(); + //kDebug()<< result->data(); } delete displayMenu; diff --git a/src/effectstackview.h b/src/effectstackview.h index 662fd5e6..dd2ad056 100644 --- a/src/effectstackview.h +++ b/src/effectstackview.h @@ -34,10 +34,10 @@ class EffectStackView : public QWidget private: int activeRow; - QStringList effects; + QList effects; Ui::EffectStack_UI ui; ClipItem* clipref; - void setupListView(const QStringList& ); + void setupListView(); void updateButtonStatus(); QMap effectLists; @@ -55,10 +55,12 @@ public slots: void slotShowInTimeline(); void slotParameterChanged(const QString&); void itemSelectionChanged(); - + void slotUpdateEffectParams(QDomElement); signals: + void transferParamDesc(const QDomElement&,int ,int); void removeEffect(ClipItem*, QDomElement); void updateClipEffect(ClipItem*, QDomElement); + }; #endif diff --git a/src/parameterplotter.cpp b/src/parameterplotter.cpp index 0b107dae..4208e140 100644 --- a/src/parameterplotter.cpp +++ b/src/parameterplotter.cpp @@ -37,27 +37,52 @@ ParameterPlotter::ParameterPlotter (QWidget *parent):KPlotWidget (parent){ m_newPoints=false; activeIndexPlot=-1; } - -void ParameterPlotter::setPointLists(const QList< QPair > >& params,int startframe, int endframe){ +/* + Lines + Lines from top to bottom + Marco Gittler + + + Num + + + Width + + + +*/ +void ParameterPlotter::setPointLists(const QDomElement& d,int startframe,int endframe){ + + //QListIterator > > nameit(params); + itemParameter=d; + QDomNodeList namenode = d.elementsByTagName("parameter"); - QListIterator > > nameit(params); int max_y=0; + removeAllPlotObjects (); parameterNameList.clear(); + plotobjects.clear(); - - while (nameit.hasNext() ){ + + for (int i=0;i< namenode.count() ;i++){ KPlotObject *plot=new KPlotObject(colors[plotobjects.size()%colors.size()]); plot->setShowLines(true); - QPair > item=nameit.next(); - parameterNameList << item.first; - - QMapIterator pointit=item.second; + //QPair > item=nameit.next(); + QDomNode pa=namenode.item(i); + QDomNode na=pa.firstChildElement("name"); + + parameterNameList << na.toElement().text(); + + + max_y=pa.attributes().namedItem("max").nodeValue().toInt(); + int val=pa.attributes().namedItem("value").nodeValue().toInt(); + plot->addPoint((i+1)*20,val); + /*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(); - } + }*/ plotobjects.append(plot); } maxx=endframe; @@ -68,23 +93,31 @@ void ParameterPlotter::setPointLists(const QList< QPair > > ret; + QList plotobjs=plotObjects(); if (plotobjs.size() != parameterNameList.size() ){ kDebug() << "ERROR size not equal"; } - - for (int i=0;i points=plotobjs[i]->points(); + QDomNode pa=namenode.item(i); + + + + + + QMap vals; foreach (KPlotPoint *o,points){ - vals[o->x()]=o->y(); + //vals[o->x()]=o->y(); + pa.attributes().namedItem("value").setNodeValue(QString::number(o->y())); } QPair > pair("contrast",vals); - ret.append(pair); + //ret.append(pair); } - emit parameterChanged(ret); + emit parameterChanged(itemParameter); } @@ -136,33 +169,37 @@ void ParameterPlotter::mousePressEvent ( QMouseEvent * event ) { //topPadding and other padding can be wrong and this (i hope) will be correctet in newer kde versions QPoint inPlot=event->pos()-QPoint(leftPadding(), topPadding() ); QList list= pointsUnderPoint (inPlot ) ; - if (list.size() > 0){ - movepoint=list[0]; - oldmousepoint=event->pos(); - }else{ - if (m_newPoints && activeIndexPlot>=0){ - //setup new points - KPlotObject* p=plotObjects()[activeIndexPlot]; - QList points=p->points(); - QList newpoints; - - double newx=inPlot.x()*dataRect().width()/pixRect().width(); - double newy=(height()-inPlot.y()-bottomPadding()-topPadding() )*dataRect().height()/pixRect().height(); - bool inserted=false; - foreach (KPlotPoint* pt,points){ - if (pt->x() >newx && !inserted){ - newpoints.append(QPointF(newx,newy)); - inserted=true; + if (event->button()==Qt::LeftButton){ + if (list.size() > 0){ + movepoint=list[0]; + oldmousepoint=event->pos(); + }else{ + if (m_newPoints && activeIndexPlot>=0){ + //setup new points + KPlotObject* p=plotObjects()[activeIndexPlot]; + QList points=p->points(); + QList newpoints; + + double newx=inPlot.x()*dataRect().width()/pixRect().width(); + double newy=(height()-inPlot.y()-bottomPadding()-topPadding() )*dataRect().height()/pixRect().height(); + bool inserted=false; + foreach (KPlotPoint* pt,points){ + if (pt->x() >newx && !inserted){ + newpoints.append(QPointF(newx,newy)); + inserted=true; + } + newpoints.append(QPointF(pt->x(),pt->y())); } - newpoints.append(QPointF(pt->x(),pt->y())); - } - p->clearPoints(); - foreach (QPointF qf, newpoints ){ - p->addPoint(qf); + p->clearPoints(); + foreach (QPointF qf, newpoints ){ + p->addPoint(qf); + } + replacePlotObject(activeIndexPlot,p); } - replacePlotObject(activeIndexPlot,p); + movepoint=NULL; } - movepoint=NULL; + }else if (event->button()==Qt::LeftButton){ + //menu for deleting or exact setup of point } } diff --git a/src/parameterplotter.h b/src/parameterplotter.h index 1208b089..058286f0 100644 --- a/src/parameterplotter.h +++ b/src/parameterplotter.h @@ -16,6 +16,7 @@ ***************************************************************************/ #include +#include class ParameterPlotter : public KPlotWidget { Q_OBJECT @@ -41,14 +42,14 @@ class ParameterPlotter : public KPlotWidget { void createParametersNew(); QList plotobjects; QList colors; - + QDomElement itemParameter; protected: void mouseMoveEvent ( QMouseEvent * event ); void mousePressEvent ( QMouseEvent * event ); public slots: - void setPointLists(const QList< QPair > >&,int,int); + void setPointLists(const QDomElement&,int ,int); signals: - void parameterChanged(QList< QPair > > ); + void parameterChanged(QDomElement ); void updateFrame(int); }; diff --git a/src/widgets/effectstack_ui.ui b/src/widgets/effectstack_ui.ui index 0fc695c6..025d1e2c 100644 --- a/src/widgets/effectstack_ui.ui +++ b/src/widgets/effectstack_ui.ui @@ -114,22 +114,31 @@ - - - - 0 - 0 - - - - true + + + 0 + + + + + + + + + + + + + + move on X axis + ... @@ -140,6 +149,9 @@ true + + move on Y axis + ... @@ -150,6 +162,9 @@ false + + update values in timeline + ... @@ -160,6 +175,9 @@ false + + create new points + ... @@ -178,6 +196,16 @@ + + + + GraphView + + + true + + + @@ -186,6 +214,9 @@ true + + parameter description + ... -- 2.39.2