1 /***************************************************************************
2 effecstackview.cpp - description
5 copyright : (C) 2008 by Marco Gittler
6 email : g.marco@freenet.de
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
21 #include "effectstackview.h"
22 #include "effectslist.h"
24 #include <QHeaderView>
27 EffectStackView::EffectStackView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent)
31 //ui.effectlist->horizontalHeader()->setVisible(false);
32 //ui.effectlist->verticalHeader()->setVisible(false);
36 ui.buttonNew->setIcon(KIcon("document-new"));
37 ui.buttonNew->setToolTip(i18n("Add new effect"));
38 ui.buttonUp->setIcon(KIcon("go-up"));
39 ui.buttonUp->setToolTip(i18n("Move effect up"));
40 ui.buttonDown->setIcon(KIcon("go-down"));
41 ui.buttonDown->setToolTip(i18n("Move effect down"));
42 ui.buttonDel->setIcon(KIcon("trash-empty"));
43 ui.buttonDel->setToolTip(i18n("Delete effect"));
45 ui.buttonLeftRight->setIcon(KIcon("go-next"));//better icons needed
46 ui.buttonLeftRight->setToolTip(i18n("Allow horizontal moves"));
47 ui.buttonUpDown->setIcon(KIcon("go-up"));
48 ui.buttonUpDown->setToolTip(i18n("Allow vertical moves"));
49 ui.buttonShowInTimeline->setIcon(KIcon("kmplayer"));
50 ui.buttonShowInTimeline->setToolTip(i18n("Show keyframes in timeline"));
51 ui.buttonHelp->setIcon(KIcon("help-about"));
52 ui.buttonHelp->setToolTip(i18n("Parameter info"));
53 ui.buttonNewPoints->setIcon(KIcon("xedit"));
54 ui.buttonNewPoints->setToolTip(i18n("Add keyframe"));
56 ui.effectlist->setDragDropMode(QAbstractItemView::NoDragDrop);//use internal if drop is recognised right
58 connect (ui.effectlist, SIGNAL ( itemSelectionChanged()), this , SLOT( slotItemSelectionChanged() ));
59 connect (ui.buttonNew, SIGNAL (clicked()), this, SLOT (slotNewEffect()) );
60 connect (ui.buttonUp, SIGNAL (clicked()), this, SLOT (slotItemUp()) );
61 connect (ui.buttonDown, SIGNAL (clicked()), this, SLOT (slotItemDown()) );
62 connect (ui.buttonDel, SIGNAL (clicked()), this, SLOT (slotItemDel()) );
63 connect (ui.buttonLeftRight, SIGNAL (clicked()), this , SLOT ( slotSetMoveX() ) );
64 connect (ui.buttonUpDown, SIGNAL (clicked()), this , SLOT ( slotSetMoveY() ) );
65 connect (ui.buttonShowInTimeline, SIGNAL (clicked()), this , SLOT ( slotShowInTimeline() ) );
66 connect (ui.buttonNewPoints, SIGNAL (clicked()), this , SLOT ( slotSetNew() ) );
67 connect (ui.buttonHelp, SIGNAL (clicked()), this , SLOT ( slotSetHelp() ) );
68 connect (ui.parameterList, SIGNAL (currentIndexChanged ( const QString & ) ), this, SLOT( slotParameterChanged(const QString&) ) );
69 //connect (ui.effectlist, SIGNAL (itemSelectionChanged() ) , this, SLOT ( itemSelectionChanged()));
70 connect( this,SIGNAL (transferParamDesc(const QDomElement&,int ,int) ), ui.kplotwidget, SLOT(setPointLists(const QDomElement&,int ,int) ));
71 connect(ui.kplotwidget, SIGNAL (parameterChanged(QDomElement ) ), this , SLOT (slotUpdateEffectParams(QDomElement)));
72 effectLists["audio"]=audioEffectList;
73 effectLists["video"]=videoEffectList;
74 effectLists["custom"]=customEffectList;
81 void EffectStackView::slotUpdateEffectParams(QDomElement e){
83 emit updateClipEffect(clipref, e);
86 void EffectStackView::slotClipItemSelected(ClipItem* c)
94 //effects=clipref->effectNames();
96 for (int i=0;i<clipref->effectsCount();i++){
98 QTextStream str(&outstr);
99 clipref->effectAt(i).save(str,2);
100 kDebug() << outstr;*/
101 effects.append(clipref->effectAt(i));
107 void EffectStackView::setupListView(){
109 ui.effectlist->clear();
110 foreach (QDomElement d,effects){
112 QDomNode namenode = d.elementsByTagName("name").item(0);
113 if (!namenode.isNull())
114 ui.effectlist->addItem(namenode.toElement().text() );
116 //ui.effectlist->addItems(effects);
117 for (int i=0;i< ui.effectlist->count();i++){
118 QListWidgetItem* item=ui.effectlist->item(i);
119 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsDragEnabled|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
120 item->setCheckState(Qt::Checked);
122 item->setSelected(true);
123 ui.effectlist->setCurrentRow(activeRow);
129 void EffectStackView::slotItemSelectionChanged(){
131 if (ui.effectlist->currentItem() && ui.effectlist->currentItem()->isSelected() ){
132 activeRow=ui.effectlist->row( ui.effectlist->currentItem() );
133 ui.parameterList->clear();
134 ui.parameterList->addItem("all");
135 QDomNodeList namenode = effects.at(activeRow).elementsByTagName("parameter");
136 for (int i=0;i<namenode.count();i++){
137 QDomNode pa=namenode.item(i);
138 QDomNode na=pa.firstChildElement("name");
139 ui.parameterList->addItem(na.toElement().text() );
142 emit transferParamDesc(effects.at(activeRow) ,0,100);//minx max frame
146 ui.buttonDel->setEnabled( activeRow!=-1);
147 ui.buttonUp->setEnabled( activeRow >0 );
148 ui.buttonDown->setEnabled( (activeRow<ui.effectlist->count()-1) && activeRow>=0 );
151 void EffectStackView::slotItemUp(){
152 if (activeRow>0 && activeRow <effects.size() ){
153 effects.swap(activeRow, activeRow-1);
160 void EffectStackView::slotItemDown(){
161 if (activeRow<effects.size()-1 ){
162 effects.swap(activeRow, activeRow+1);
169 void EffectStackView::slotItemDel(){
170 if (activeRow<effects.size() && activeRow>=0 ){
171 emit removeEffect(clipref, clipref->effectAt(activeRow));
172 effects.removeAt(activeRow);
175 if (effects.size()>0 && activeRow>0)
181 void EffectStackView::slotSetMoveX(){
182 ui.kplotwidget->setMoveX(!ui.kplotwidget->isMoveX());
183 updateButtonStatus();
186 void EffectStackView::slotSetMoveY(){
187 ui.kplotwidget->setMoveY(!ui.kplotwidget->isMoveY());
188 updateButtonStatus();
191 void EffectStackView::slotSetNew(){
192 ui.kplotwidget->setNewPoints(!ui.kplotwidget->isNewPoints());
193 updateButtonStatus();
196 void EffectStackView::slotSetHelp(){
197 ui.infoBox->setVisible(!ui.infoBox->isVisible());
198 ui.buttonHelp->setDown(ui.infoBox->isVisible());
201 void EffectStackView::slotShowInTimeline(){
203 ui.kplotwidget->setMoveTimeLine(!ui.kplotwidget->isMoveTimeline());
204 updateButtonStatus();
208 void EffectStackView::updateButtonStatus(){
209 ui.buttonLeftRight->setDown(ui.kplotwidget->isMoveX());
210 ui.buttonUpDown->setDown(ui.kplotwidget->isMoveY());
212 ui.buttonShowInTimeline->setEnabled( ui.kplotwidget->isMoveX() || ui.kplotwidget->isMoveY () );
213 ui.buttonShowInTimeline->setDown(ui.kplotwidget->isMoveTimeline());
215 ui.buttonNewPoints->setEnabled(ui.parameterList->currentText()!="all");
216 ui.buttonNewPoints->setDown(ui.kplotwidget->isNewPoints());
219 void EffectStackView::slotParameterChanged(const QString& text){
221 //ui.buttonNewPoints->setEnabled(text!="all");
222 ui.kplotwidget->replot(text);
223 updateButtonStatus();
226 void EffectStackView::slotNewEffect(){
229 QMenu *displayMenu=new QMenu (this);
230 displayMenu->setTitle("Filters");
231 foreach (QString type, effectLists.keys() ){
232 QAction *a=new QAction(type,displayMenu);
233 EffectsList *list=effectLists[type];
235 QMenu *parts=new QMenu(type,displayMenu);
236 parts->setTitle(type);
237 foreach (QString name, list->effectNames()){
238 QAction *entry=new QAction(name,parts);
239 entry->setData(name);
240 entry->setToolTip(list->getInfo(name));
241 entry->setStatusTip(list->getInfo(name));
242 parts->addAction(entry);
245 displayMenu->addMenu(parts);
249 QAction *result=displayMenu->exec(mapToGlobal(ui.buttonNew->pos()+ui.buttonNew->rect().bottomRight()));
252 //TODO effects.append(result->data().toString());
253 foreach (EffectsList* e, effectLists.values()){
254 QDomElement dom=e->getEffectByName(result->data().toString());
255 clipref->addEffect(dom);
256 slotClipItemSelected(clipref);
260 //kDebug()<< result->data();
266 void EffectStackView::itemSelectionChanged (){
267 //kDebug() << "drop";
269 #include "effectstackview.moc"