~ubuntu-branches/ubuntu/hardy/kdenlive/hardy

« back to all changes in this revision

Viewing changes to kdenlive/transitionpipwidget.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Albin Tonnerre
  • Date: 2008-01-30 17:07:51 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080130170751-lyc8p6xvd7o98ur5
Tags: 0.5.svn20071228-0.0ubuntu1
* Merge from debian-multimedia (LP: #150453). Remaining changes:
  - Bump compat to 5
  - Suggest dvgrab and ffmpeg (needed for firewire capture)
  - debian/{rules,control}: add a kdenlive-data package
  - Add .install files for kdenlive and kdenlive-data
  - debian/copyright: add some copyright information
  - Modify Maintainer value to match the DebianMaintainerField specification

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#include <qspinbox.h>
31
31
#include <qtoolbutton.h>
32
32
#include <qradiobutton.h>
 
33
#include <qcheckbox.h>
33
34
#include <qcursor.h>
34
35
 
35
36
#include <kpushbutton.h>
50
51
#define ResizeMode 4
51
52
 
52
53
//TODO don't hardcode image size
53
 
#define imageWidth 240
 
54
#define imageWidth 200
54
55
#define imageHeight 192
55
56
// safety margin for text
56
57
#define frameWidth 80
57
 
#define frameHeight 64
58
58
 
59
59
 
60
60
namespace Gui {
71
71
        canvas()->setBackgroundColor(black);
72
72
 
73
73
        // Draw the monitor rectangle
74
 
        QCanvasRectangle *marginRect = new QCanvasRectangle(QRect(imageWidth/2-frameWidth/2,imageHeight/2-frameHeight/2,frameWidth,frameHeight),canvas());
 
74
 
 
75
        m_frameHeight = (int) ((double) frameWidth / KdenliveSettings::displayratio());
 
76
        QCanvasRectangle *marginRect = new QCanvasRectangle(QRect((canvas()->width()-frameWidth)/2,  (canvas()->height()-m_frameHeight)/2, frameWidth, m_frameHeight),canvas());
75
77
        marginRect->setZ(-100);
76
78
        marginRect->setPen(QPen(QColor(255,255,255)));
77
79
        marginRect->show();
108
110
{
109
111
        //TODO make canvas keep a fixed ratio when resizing
110
112
        QWMatrix wm;
111
 
        wm.scale(((double) width()-10)/((double) imageWidth),((double) height()-10)/((double) imageHeight));
 
113
        wm.scale(((double) width()-10)/((double) width()),((double) height()-10)/((double) height()));
112
114
        setWorldMatrix (wm);
113
115
}
114
116
 
142
144
                }
143
145
        }
144
146
        // If user was moving an item, end the move
145
 
                  int x = (int)((moving->x() + frameWidth/2 - imageWidth/2) * 100.0 /(frameWidth));
146
 
                  int y = (int)((moving->y() + frameHeight/2 - imageHeight/2) * 100.0 /(frameHeight));
 
147
                  int x = (int)((moving->x() + frameWidth/2 - width()/2) * 100.0 /(frameWidth));
 
148
                  int y = (int)((moving->y() + m_frameHeight/2 - height()/2) * 100.0 /(m_frameHeight));
147
149
        emit positionRect(x,y);
148
150
 
149
151
}
183
185
{
184
186
    if ( moving ) {
185
187
        setCursor(QCursor(Qt::SizeAllCursor));
186
 
        moving->setX(imageWidth/2 + frameWidth * x/100.0 - frameWidth/2);
 
188
        moving->setX(width()/2 + frameWidth * x/100.0 - frameWidth/2);
187
189
        if (!m_silent) canvas()->update();
188
190
    }
189
191
}
192
194
{
193
195
    if ( moving ) {
194
196
        setCursor(QCursor(Qt::SizeAllCursor));
195
 
        moving->setY(imageHeight/2 + frameHeight * y/100.0 - frameHeight/2);
 
197
        moving->setY(height()/2 + m_frameHeight * y/100.0 - m_frameHeight/2);
196
198
        if (!m_silent) canvas()->update();
197
199
    }
198
200
}
201
203
{
202
204
    if ( moving ) {
203
205
        setCursor(QCursor(Qt::SizeAllCursor));
204
 
                  ((QCanvasRectangle*)(moving))->setSize((int)(x/100.0 * frameWidth), (int)(x/100.0 * frameHeight));
 
206
                  ((QCanvasRectangle*)(moving))->setSize((int)(x/100.0 * frameWidth), (int)(x/100.0 * m_frameHeight));
205
207
        if (!m_silent) canvas()->update();
206
208
    }
207
209
    
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)
233
235
{
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);
 
240
 
 
241
        m_frameHeight = (int) ((double) frameWidth / KdenliveSettings::displayratio());
 
242
 
 
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);
 
246
 
 
247
        fixed_trans->setChecked(false);
241
248
 
242
249
        QHBoxLayout* flayout = new QHBoxLayout( frame_preview, 1, 1, "flayout");
243
250
        flayout->addWidget( canview, 1 );
244
251
 
245
 
        spin_size->setMaxValue(500);
246
 
        slider_size->setMaxValue(500);
 
252
        spin_size->setMaxValue(900);
 
253
        slider_size->setMaxValue(900);
247
254
 
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()));
267
274
 
268
275
        
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()));*/
 
279
 
 
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()));
 
285
 
 
286
        connect(fixed_trans, SIGNAL(toggled(bool)), this, SLOT(duplicateKeyFrame(bool)));
272
287
 
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());
276
291
}
277
292
 
278
293
 
294
309
 
295
310
}
296
311
 
297
 
void transitionPipWidget::changeKeyFrame(int isOn)
298
 
{
299
 
    int x, y, size, transp, ix;
300
 
    if (isOn) ix = 0;
301
 
    else ix = 1;
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)
 
313
{
 
314
    if (!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];
 
320
        return;
 
321
    }
 
322
    //radio_end->setEnabled(false);
 
323
    button_create->setEnabled(false);
 
324
    button_delete->setEnabled(false);
 
325
    keyframe_number->setEnabled(false);
 
326
 
 
327
    int pos = getKeyFrameIndex(keyframe_number->value());
 
328
 
 
329
    QString value = m_transitionParameters[pos];
 
330
    m_transitionParameters.clear();
 
331
    m_transitionParameters[0] = value;
 
332
    changeKeyFrame(0);
 
333
 
 
334
    /*int current, toChange;
 
335
    if (radio_start->isChecked()) {
 
336
        current = 0;
 
337
        toChange = 1;
 
338
    }
 
339
    else {
 
340
        current = 1;
 
341
        toChange = 0;
 
342
    }
 
343
 
 
344
    // size
 
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;
 
348
 
 
349
    // transparency
 
350
    QString s = m_transitionParameters[current].section(":",0,2);
 
351
    m_transitionParameters[toChange] = s1+":"+ QString::number(spin_transparency->value());
 
352
 
 
353
    // x pos
 
354
    s = m_transitionParameters[current].section(":",1);
 
355
    m_transitionParameters[toChange] = QString::number(spin_x->value())+":"+s;
 
356
 
 
357
    // y pos
 
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();
 
363
 
 
364
}
 
365
 
 
366
int transitionPipWidget::getKeyFrameIndex(int nb)
 
367
{
 
368
   QMap < int, QString >::Iterator it = m_transitionParameters.begin();
 
369
    int ct = 0;
 
370
    it++;
 
371
    for ( ; it != m_transitionParameters.end(); ++it ) {
 
372
        if (ct == nb) break;
 
373
        ct++;
 
374
    }
 
375
    if (it == m_transitionParameters.end()) it = m_transitionParameters.begin();
 
376
    return it.key();
 
377
}
 
378
 
 
379
void transitionPipWidget::changeKeyFrame(int nb)
 
380
{
 
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);
 
385
 
 
386
    if (pos == 0 || pos == -1) button_delete->setEnabled(false);
 
387
    else button_delete->setEnabled(true);
 
388
 
 
389
    
 
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();
306
395
    m_silent = true;
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();
316
408
}
317
409
 
318
410
void transitionPipWidget::adjustSize(int x)
319
411
{
320
412
    int ix;
321
 
    if (radio_start->isChecked()) ix = 0;
322
 
    else ix = 1;
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();
 
414
 
 
415
    int pos = getKeyFrameIndex(ix);
 
416
    QString data = m_transitionParameters[pos];
 
417
 
 
418
    QString s1 = data.section(":",0,1);
 
419
    QString s2 = data.section(":",3);
 
420
    m_transitionParameters[pos] = s1+":"+ QString::number(x)+":"+s2;
 
421
 
 
422
    /*if (fixed_trans->isChecked()) {
 
423
        m_transitionParameters[1] = m_transitionParameters[0];
 
424
    }*/
326
425
    canview->adjustSize(x);
327
426
    if (!m_silent) {
328
427
        emit transitionChanged();
333
432
void transitionPipWidget::adjustTransparency(int x)
334
433
{
335
434
    int ix;
336
 
    if (radio_start->isChecked()) ix = 0;
337
 
    else ix = 1;
338
 
    QString s1 = m_transitionParameters[ix].section(":",0,2);
339
 
    m_transitionParameters[ix] = s1+":"+ QString::number(x);
 
435
    /*if (radio_start->isChecked()) ix = 0;
 
436
    else ix = 1;*/
 
437
    ix = keyframe_number->value();
 
438
 
 
439
    int pos = getKeyFrameIndex(ix);
 
440
    QString data = m_transitionParameters[pos];
 
441
 
 
442
    QString s1 = data.section(":",0,2);
 
443
    m_transitionParameters[pos] = s1+":"+ QString::number(x);
 
444
 
 
445
    /*if (fixed_trans->isChecked()) {
 
446
        m_transitionParameters[1] = m_transitionParameters[0];
 
447
    }*/
340
448
    if (!m_silent) {
341
449
        emit transitionChanged();
342
450
        m_app->focusTimelineWidget();
346
454
void transitionPipWidget::moveX(int x)
347
455
{
348
456
    int ix;
349
 
    if (radio_start->isChecked()) ix = 0;
350
 
    else ix = 1;
351
 
    QString s = m_transitionParameters[ix].section(":",1);
352
 
    m_transitionParameters[ix] = QString::number(x)+":"+s;
 
457
    /*if (radio_start->isChecked()) ix = 0;
 
458
    else ix = 1;*/
 
459
    ix = keyframe_number->value();
 
460
    int pos = getKeyFrameIndex(ix);
 
461
    QString data = m_transitionParameters[pos];
 
462
 
 
463
    QString s = data.section(":",1);
 
464
    m_transitionParameters[pos] = QString::number(x)+":"+s;
 
465
 
 
466
    /*if (fixed_trans->isChecked()) {
 
467
        m_transitionParameters[1] = m_transitionParameters[0];
 
468
    }*/
353
469
    canview->moveX(x);
354
470
    if (!m_silent) {
355
471
        emit transitionChanged();
360
476
void transitionPipWidget::moveY(int y)
361
477
{
362
478
    int ix;
363
 
    if (radio_start->isChecked()) ix = 0;
364
 
    else ix = 1;
365
 
    QString s1 = m_transitionParameters[ix].section(":",0,0);
366
 
    QString s2 = m_transitionParameters[ix].section(":",2);
367
 
    m_transitionParameters[ix] = s1+":"+ QString::number(y)+":"+s2;
 
479
    /*if (radio_start->isChecked()) ix = 0;
 
480
    else ix = 1;*/
 
481
    ix = keyframe_number->value();
 
482
    int pos = getKeyFrameIndex(ix);
 
483
    QString data = m_transitionParameters[pos];
 
484
 
 
485
    QString s1 = data.section(":",0,0);
 
486
    QString s2 = data.section(":",2);
 
487
    m_transitionParameters[pos] = s1+":"+ QString::number(y)+":"+s2;
 
488
 
 
489
    /*if (fixed_trans->isChecked()) {
 
490
        m_transitionParameters[1] = m_transitionParameters[0];
 
491
    }*/
368
492
    canview->moveY(y);
369
493
    if (!m_silent) {
370
494
        emit transitionChanged();
375
499
void transitionPipWidget::adjustSliders(int x, int y)
376
500
{
377
501
    int ix;
378
 
    if (radio_start->isChecked()) ix = 0;
379
 
    else ix = 1;
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;
 
503
    else ix = 1;*/
 
504
    ix = keyframe_number->value();
 
505
    int pos = getKeyFrameIndex(ix);
 
506
    QString data = m_transitionParameters[pos];
 
507
 
 
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);
384
512
}
385
513
 
386
514
 
387
 
void transitionPipWidget::setParameters(QString params)
388
 
{
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);
395
 
    
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);
401
 
    
402
 
    m_transitionParameters[0]=x1+":"+y1+":"+size1+":"+transp1;
403
 
    m_transitionParameters[1]=x2+":"+y2+":"+size2+":"+transp2;
404
 
    changeKeyFrame(radio_start->isChecked());
405
 
 
 
515
QString transitionPipWidget::getParametersFromString(QString param)
 
516
{
 
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;
 
522
}
 
523
 
 
524
void transitionPipWidget::setParameters(QString params, int duration)
 
525
{
 
526
    if (params.isEmpty()) {
 
527
        params = "0=0%,0%:100%x100%:100;-1=0%,0%:100%x100%:100";
 
528
    }
 
529
    int ct = 0;
 
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;
 
537
        ct++;
 
538
        param = params.section(";", ct, ct);
 
539
    }
 
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);*/
 
543
 
 
544
//    changeKeyFrame(radio_start->isChecked());
 
545
    spin_pos->setMaxValue(duration - 1);
 
546
    slider_pos->setMaxValue(duration - 1);
 
547
    changeKeyFrame(0);
406
548
}
407
549
 
408
550
 
409
551
QString transitionPipWidget::parameters()
410
552
{
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());
415
 
    
416
 
    QString x2 = m_transitionParameters[1].section(":",0,0)+"%";
 
553
    QString result;
 
554
    QString x, y, size, transp, pos;
 
555
    uint max = m_transitionParameters.size();
 
556
    uint ct = 0;
 
557
 
 
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);
 
567
        ct++;
 
568
        if (ct != max) result += ";";
 
569
    }
 
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());*/
420
575
    
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);*/
 
577
}
 
578
 
 
579
void transitionPipWidget::slotAddKeyFrame()
 
580
{
 
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();
 
587
}
 
588
 
 
589
void transitionPipWidget::slotDeleteKeyFrame()
 
590
{
 
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);
 
598
            break;
 
599
        }
 
600
    }
 
601
    changeKeyFrame(pos);
 
602
    emit transitionChanged();
422
603
}
423
604
 
424
605
}  //  end GUI namespace