231
233
transitionPipWidget::transitionPipWidget(KdenliveApp * app, int width, int height, QWidget* parent, const char* name, WFlags fl ):
232
234
transitionPip_UI(parent,name), m_silent(false), m_app(app)
234
/*frame_preview->setMinimumWidth(width);
236
frame_preview->setMinimumWidth(width);
235
237
frame_preview->setMaximumWidth(width);
236
238
frame_preview->setMinimumHeight(height);
237
frame_preview->setMaximumHeight(height);*/
238
canvas=new QCanvas(imageWidth,imageHeight);
239
frame_preview->setMaximumHeight(height);
241
m_frameHeight = (int) ((double) frameWidth / KdenliveSettings::displayratio());
243
canvas=new QCanvas(width,height);
239
244
canview = new ScreenPreview(*canvas,frame_preview);
240
canview->initRectangle(imageWidth/2-frameWidth/2,imageHeight/2-frameHeight/2,frameWidth,frameHeight);
245
canview->initRectangle(width/2-frameWidth/2, height/2-m_frameHeight/2, frameWidth, m_frameHeight);
247
fixed_trans->setChecked(false);
242
249
QHBoxLayout* flayout = new QHBoxLayout( frame_preview, 1, 1, "flayout");
243
250
flayout->addWidget( canview, 1 );
245
spin_size->setMaxValue(500);
246
slider_size->setMaxValue(500);
252
spin_size->setMaxValue(900);
253
slider_size->setMaxValue(900);
248
255
connect(slider_transparency, SIGNAL(valueChanged(int)), spin_transparency, SLOT(setValue(int)));
249
256
connect(spin_transparency, SIGNAL(valueChanged(int)), slider_transparency, SLOT(setValue(int)));
266
273
connect(luma_file, SIGNAL(activated(int)), this, SIGNAL(transitionChanged()));
269
connect(radio_start, SIGNAL(stateChanged(int)), this, SLOT(changeKeyFrame(int)));
276
/*connect(radio_start, SIGNAL(stateChanged(int)), this, SLOT(changeKeyFrame(int)));
270
277
connect(radio_start, SIGNAL(pressed()), this, SLOT(focusInOut()));
271
connect(radio_end, SIGNAL(pressed()), this, SLOT(focusInOut()));
278
connect(radio_end, SIGNAL(pressed()), this, SLOT(focusInOut()));*/
280
connect(keyframe_number, SIGNAL(valueChanged(int)), this, SLOT(changeKeyFrame(int)));
281
connect(slider_pos, SIGNAL(valueChanged(int)), spin_pos, SLOT(setValue(int)));
282
connect(spin_pos, SIGNAL(valueChanged(int)), slider_pos, SLOT(setValue(int)));
283
connect(button_create, SIGNAL(clicked()), this, SLOT(slotAddKeyFrame()));
284
connect(button_delete, SIGNAL(clicked()), this, SLOT(slotDeleteKeyFrame()));
286
connect(fixed_trans, SIGNAL(toggled(bool)), this, SLOT(duplicateKeyFrame(bool)));
273
288
m_transitionParameters[0]="0:0:100:0";
274
m_transitionParameters[1]="0:0:100:0";
275
changeKeyFrame(radio_start->isChecked());
289
m_transitionParameters[-1]="0:0:100:0";
290
//changeKeyFrame(radio_start->isChecked());
297
void transitionPipWidget::changeKeyFrame(int isOn)
299
int x, y, size, transp, ix;
302
x = m_transitionParameters[ix].section(":",0,0).toInt();
303
y = m_transitionParameters[ix].section(":",1,1).toInt();
304
size = m_transitionParameters[ix].section(":",2,2).toInt();
305
transp = m_transitionParameters[ix].section(":",3,3).toInt();
312
void transitionPipWidget::duplicateKeyFrame(bool isOn)
315
//radio_end->setEnabled(true);
316
button_create->setEnabled(true);
317
button_delete->setEnabled(true);
318
keyframe_number->setEnabled(true);
319
m_transitionParameters[-1] = m_transitionParameters[0];
322
//radio_end->setEnabled(false);
323
button_create->setEnabled(false);
324
button_delete->setEnabled(false);
325
keyframe_number->setEnabled(false);
327
int pos = getKeyFrameIndex(keyframe_number->value());
329
QString value = m_transitionParameters[pos];
330
m_transitionParameters.clear();
331
m_transitionParameters[0] = value;
334
/*int current, toChange;
335
if (radio_start->isChecked()) {
345
QString s1 = m_transitionParameters[current].section(":",0,1);
346
QString s2 = m_transitionParameters[current].section(":",3);
347
m_transitionParameters[toChange] = s1+":"+ QString::number(spin_size->value())+":"+s2;
350
QString s = m_transitionParameters[current].section(":",0,2);
351
m_transitionParameters[toChange] = s1+":"+ QString::number(spin_transparency->value());
354
s = m_transitionParameters[current].section(":",1);
355
m_transitionParameters[toChange] = QString::number(spin_x->value())+":"+s;
358
s1 = m_transitionParameters[current].section(":",0,0);
359
s2 = m_transitionParameters[current].section(":",2);
360
m_transitionParameters[toChange] = s1+":"+ QString::number(spin_y->value())+":"+s2;
361
if (current == 1) radio_start->setChecked(true);*/
362
emit transitionChanged();
366
int transitionPipWidget::getKeyFrameIndex(int nb)
368
QMap < int, QString >::Iterator it = m_transitionParameters.begin();
371
for ( ; it != m_transitionParameters.end(); ++it ) {
375
if (it == m_transitionParameters.end()) it = m_transitionParameters.begin();
379
void transitionPipWidget::changeKeyFrame(int nb)
381
int x, y, size, transp, ix, pos;
382
if (nb + 1 > m_transitionParameters.size()) nb = m_transitionParameters.size() - 1;
383
keyframe_number->setValue(nb);
384
pos = getKeyFrameIndex(nb);
386
if (pos == 0 || pos == -1) button_delete->setEnabled(false);
387
else button_delete->setEnabled(true);
390
QString params = m_transitionParameters[pos];
391
x = params.section(":",0,0).toInt();
392
y = params.section(":",1,1).toInt();
393
size = params.section(":",2,2).toInt();
394
transp = params.section(":",3,3).toInt();
307
396
canview->setSilent(true);
397
if (pos == -1) pos = spin_pos->maxValue();
398
spin_pos->setValue(pos);
308
399
slider_x->setValue(x);
309
400
slider_y->setValue(y);
310
401
slider_size->setValue(size);
311
402
slider_transparency->setValue(transp);
312
403
m_silent = false;
313
404
canview->setSilent(false);
314
emit transitionChanged();
405
emit transitionNeedsRedraw(); //transitionChanged();
406
emit moveCursorToKeyFrame(pos);
315
407
canview->canvas()->update();
318
410
void transitionPipWidget::adjustSize(int x)
321
if (radio_start->isChecked()) ix = 0;
323
QString s1 = m_transitionParameters[ix].section(":",0,1);
324
QString s2 = m_transitionParameters[ix].section(":",3);
325
m_transitionParameters[ix] = s1+":"+ QString::number(x)+":"+s2;
413
ix = keyframe_number->value();
415
int pos = getKeyFrameIndex(ix);
416
QString data = m_transitionParameters[pos];
418
QString s1 = data.section(":",0,1);
419
QString s2 = data.section(":",3);
420
m_transitionParameters[pos] = s1+":"+ QString::number(x)+":"+s2;
422
/*if (fixed_trans->isChecked()) {
423
m_transitionParameters[1] = m_transitionParameters[0];
326
425
canview->adjustSize(x);
328
427
emit transitionChanged();
375
499
void transitionPipWidget::adjustSliders(int x, int y)
378
if (radio_start->isChecked()) ix = 0;
380
QString s = m_transitionParameters[ix].section(":",2);
381
m_transitionParameters[ix] = QString::number(x)+":"+QString::number(y)+":"+s;
502
/*if (radio_start->isChecked()) ix = 0;
504
ix = keyframe_number->value();
505
int pos = getKeyFrameIndex(ix);
506
QString data = m_transitionParameters[pos];
508
QString s = data.section(":",2);
509
m_transitionParameters[pos] = QString::number(x)+":"+QString::number(y)+":"+s;
382
510
spin_x->setValue(x);
383
511
spin_y->setValue(y);
387
void transitionPipWidget::setParameters(QString params)
389
if (params.isEmpty()) params = "0=0%,0%:100%x100%:100;-1=0%,0%:100%x100%:100";
390
QString param1 = params.section(";",0,0);
391
QString transp1 = QString::number(100-param1.section(":",-1).toInt());
392
QString size1 = param1.section("x",1,1).section("%",0,0);
393
QString x1 = param1.section("=",1,1).section("%",0,0);
394
QString y1 = param1.section(",",1,1).section("%",0,0);
396
QString param2 = params.section(";",1,1);
397
QString transp2 = QString::number(100 - param2.section(":",-1).toInt());
398
QString size2 = param2.section("x",1,1).section("%",0,0);
399
QString x2 = param2.section("=",1,1).section("%",0,0);
400
QString y2 = param2.section(",",1,1).section("%",0,0);
402
m_transitionParameters[0]=x1+":"+y1+":"+size1+":"+transp1;
403
m_transitionParameters[1]=x2+":"+y2+":"+size2+":"+transp2;
404
changeKeyFrame(radio_start->isChecked());
515
QString transitionPipWidget::getParametersFromString(QString param)
517
QString transp = QString::number(100-param.section(":",-1).toInt());
518
QString size = param.section("x",1,1).section("%",0,0);
519
QString x = param.section("%",0,0);
520
QString y = param.section(",",1,1).section("%",0,0);
521
return x+":"+y+":"+size+":"+transp;
524
void transitionPipWidget::setParameters(QString params, int duration)
526
if (params.isEmpty()) {
527
params = "0=0%,0%:100%x100%:100;-1=0%,0%:100%x100%:100";
530
QString param = params.section(";",0,0);
531
m_transitionParameters.clear();
532
while (!param.isEmpty()) {
533
int pos = param.section("=", 0, 0).toInt();
534
QString data = param.section("=", 1);
535
m_transitionParameters[pos] = getParametersFromString(data);
536
kdDebug()<<"// inserting param at: "<<pos<<", with value: "<<m_transitionParameters[pos]<<endl;
538
param = params.section(";", ct, ct);
540
if (ct == 1) fixed_trans->setChecked(true);
541
/* if (m_transitionParameters[0] == m_transitionParameters[1]) fixed_trans->setChecked(true);
542
else fixed_trans->setChecked(false);*/
544
// changeKeyFrame(radio_start->isChecked());
545
spin_pos->setMaxValue(duration - 1);
546
slider_pos->setMaxValue(duration - 1);
409
551
QString transitionPipWidget::parameters()
411
QString x1 = m_transitionParameters[0].section(":",0,0)+"%";
412
QString y1 = m_transitionParameters[0].section(":",1,1)+"%";
413
QString size1 = m_transitionParameters[0].section(":",2,2)+"%";
414
QString transp1 = QString::number(100 - m_transitionParameters[0].section(":",3,3).toInt());
416
QString x2 = m_transitionParameters[1].section(":",0,0)+"%";
554
QString x, y, size, transp, pos;
555
uint max = m_transitionParameters.size();
558
QMap < int, QString >::Iterator it;
559
for ( it = m_transitionParameters.begin(); it != m_transitionParameters.end(); ++it ) {
560
pos = QString::number(it.key()); //m_transitionParameters[i].section(":",0,0);
561
QString params = it.data();
562
x = params.section(":",0,0)+"%";
563
y = params.section(":",1,1)+"%";
564
size = params.section(":",2,2)+"%";
565
transp = QString::number(100 - params.section(":",3,3).toInt());
566
result += QString(pos+"="+x+","+y+":"+size+"x"+size+":"+transp);
568
if (ct != max) result += ";";
570
kdDebug()<<" + + +TRANS RESULT: "<<result<<endl;
571
/*QString x2 = m_transitionParameters[1].section(":",0,0)+"%";
417
572
QString y2 = m_transitionParameters[1].section(":",1,1)+"%";
418
573
QString size2 = m_transitionParameters[1].section(":",2,2)+"%";
419
QString transp2 = QString::number(100 - m_transitionParameters[1].section(":",3,3).toInt());
574
QString transp2 = QString::number(100 - m_transitionParameters[1].section(":",3,3).toInt());*/
421
return QString("0="+x1+","+y1+":"+size1+"x"+size1+":"+transp1+";-1="+x2+","+y2+":"+size2+"x"+size2+":"+transp2);
576
return result; /*QString("0="+x1+","+y1+":"+size1+"x"+size1+":"+transp1+";-1="+x2+","+y2+":"+size2+"x"+size2+":"+transp2);*/
579
void transitionPipWidget::slotAddKeyFrame()
581
GenTime cursorPos = m_app->cursorPosition();
582
GenTime transStart = m_app->transitionPanel()->activeTransition()->transitionStartTime();
583
int pos = (cursorPos - transStart).frames(KdenliveSettings::defaultfps());
584
if ((pos < 1) || (pos > slider_pos->maxValue() - 2)) return;
585
m_transitionParameters[pos] = "0:0:100:0";
586
emit transitionChanged();
589
void transitionPipWidget::slotDeleteKeyFrame()
591
int pos = keyframe_number->value();
592
int value = getKeyFrameIndex(pos);
593
if (value == 0 || value == -1) return;
594
QMap < int, QString >::Iterator it;
595
for ( it = m_transitionParameters.begin(); it != m_transitionParameters.end(); ++it ) {
596
if (it.key() == value) {
597
m_transitionParameters.remove(it);
602
emit transitionChanged();
424
605
} // end GUI namespace