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()));
71 effectLists["audio"]=audioEffectList;
72 effectLists["video"]=videoEffectList;
73 effectLists["custom"]=customEffectList;
79 QList< QPair<QString, QMap<int,QVariant> > > points;
80 QMap<int,QVariant> data;
85 QPair<QString,QMap<int,QVariant> > testpair("gray",data);
86 points.append(testpair);
88 QMap<int,QVariant> data1;
93 QPair<QString,QMap<int,QVariant> > testpair1("dx",data1);
94 points.append(testpair1);
95 ui.parameterList->addItem("all");
96 ui.parameterList->addItem("gray");
97 ui.parameterList->addItem("dx");
99 ui.kplotwidget->setPointLists(points,0,305);
103 void EffectStackView::slotClipItemSelected(ClipItem* c)
111 effects=clipref->effectNames();
112 setupListView(effects);
116 void EffectStackView::setupListView(const QStringList& effects_list){
118 ui.effectlist->clear();
119 ui.effectlist->addItems(effects);
120 for (int i=0;i< ui.effectlist->count();i++){
121 QListWidgetItem* item=ui.effectlist->item(i);
122 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsDragEnabled|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
123 item->setCheckState(Qt::Checked);
125 item->setSelected(true);
126 ui.effectlist->setCurrentRow(activeRow);
132 void EffectStackView::slotItemSelectionChanged(){
134 if (ui.effectlist->currentItem() && ui.effectlist->currentItem()->isSelected() ){
135 activeRow=ui.effectlist->row( ui.effectlist->currentItem() );
139 ui.buttonDel->setEnabled( activeRow!=-1);
140 ui.buttonUp->setEnabled( activeRow >0 );
141 ui.buttonDown->setEnabled( (activeRow<ui.effectlist->count()-1) && activeRow>=0 );
144 void EffectStackView::slotItemUp(){
145 if (activeRow>0 && activeRow <effects.size() ){
146 effects.swap(activeRow, activeRow-1);
149 setupListView(effects);
153 void EffectStackView::slotItemDown(){
154 if (activeRow<effects.size()-1 ){
155 effects.swap(activeRow, activeRow+1);
158 setupListView(effects);
162 void EffectStackView::slotItemDel(){
163 if (activeRow<effects.size() && activeRow>=0 ){
164 effects.removeAt(activeRow);
166 if (effects.size()>0 && activeRow>0)
168 setupListView(effects);
172 void EffectStackView::slotSetMoveX(){
173 ui.kplotwidget->setMoveX(!ui.kplotwidget->isMoveX());
174 updateButtonStatus();
177 void EffectStackView::slotSetMoveY(){
178 ui.kplotwidget->setMoveY(!ui.kplotwidget->isMoveY());
179 updateButtonStatus();
182 void EffectStackView::slotSetNew(){
183 ui.kplotwidget->setNewPoints(!ui.kplotwidget->isNewPoints());
184 updateButtonStatus();
187 void EffectStackView::slotSetHelp(){
188 ui.infoBox->setVisible(!ui.infoBox->isVisible());
189 ui.buttonHelp->setDown(ui.infoBox->isVisible());
192 void EffectStackView::slotShowInTimeline(){
194 ui.kplotwidget->setMoveTimeLine(!ui.kplotwidget->isMoveTimeline());
195 updateButtonStatus();
199 void EffectStackView::updateButtonStatus(){
200 ui.buttonLeftRight->setDown(ui.kplotwidget->isMoveX());
201 ui.buttonUpDown->setDown(ui.kplotwidget->isMoveY());
203 ui.buttonShowInTimeline->setEnabled( ui.kplotwidget->isMoveX() || ui.kplotwidget->isMoveY () );
204 ui.buttonShowInTimeline->setDown(ui.kplotwidget->isMoveTimeline());
206 ui.buttonNewPoints->setEnabled(ui.parameterList->currentText()!="all");
207 ui.buttonNewPoints->setDown(ui.kplotwidget->isNewPoints());
210 void EffectStackView::slotParameterChanged(const QString& text){
212 //ui.buttonNewPoints->setEnabled(text!="all");
213 ui.kplotwidget->replot(text);
214 updateButtonStatus();
217 void EffectStackView::slotNewEffect(){
220 QMenu *displayMenu=new QMenu (this);
221 displayMenu->setTitle("Filters");
222 foreach (QString type, effectLists.keys() ){
223 QAction *a=new QAction(type,displayMenu);
224 EffectsList *list=effectLists[type];
226 QMenu *parts=new QMenu(type,displayMenu);
227 parts->setTitle(type);
228 foreach (QString name, list->effectNames()){
229 QAction *entry=new QAction(name,parts);
230 entry->setData(name);
231 entry->setToolTip(list->getInfo(name));
232 entry->setStatusTip(list->getInfo(name));
233 parts->addAction(entry);
236 displayMenu->addMenu(parts);
240 QAction *result=displayMenu->exec(mapToGlobal(ui.buttonNew->pos()+ui.buttonNew->rect().bottomRight()));
243 effects.append(result->data().toString());
244 setupListView(effects);
245 kDebug()<< result->data();
251 void EffectStackView::itemSelectionChanged (){
252 //kDebug() << "drop";
254 #include "effectstackview.moc"