1 /*
2 SPDX-FileCopyrightText: 2003-2004 Christian Kvasny <chris@k3b.org>
3 SPDX-FileCopyrightText: 2008 Sebastian Trueg <trueg@k3b.org>
4 SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
5 SPDX-FileCopyrightText: 1998-2010 Sebastian Trueg <trueg@k3b.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10 #include "k3bvcdtrackdialog.h"
11 #include "k3bglobals.h"
12 #include "k3bmsf.h"
13 #include "k3bvcddoc.h"
14 #include "k3bvcdtrack.h"
15 #include "k3bvcdtrackkeysdelegate.h"
16 #include "k3bvcdtrackkeysmodel.h"
17
18 #include <KIconLoader>
19 #include <KIO/Global>
20 #include <KLocalizedString>
21 #include <KSqueezedTextLabel>
22
23 #include <QList>
24 #include <QUrl>
25 #include <QPixmap>
26 #include <QCheckBox>
27 #include <QComboBox>
28 #include <QDialogButtonBox>
29 #include <QFormLayout>
30 #include <QGridLayout>
31 #include <QGroupBox>
32 #include <QHeaderView>
33 #include <QLabel>
34 #include <QLineEdit>
35 #include <QPushButton>
36 #include <QRadioButton>
37 #include <QSpinBox>
38 #include <QTabWidget>
39 #include <QToolTip>
40 #include <QTreeView>
41 #include <QVBoxLayout>
42
43
44 namespace {
45 const int KEY_COUNT = 99;
46 } // namespace
47
48
49 class K3b::VcdTrackDialog::Private
50 {
51 public:
Private(K3b::VcdDoc * d,const QList<K3b::VcdTrack * > & t,QList<K3b::VcdTrack * > & st)52 Private( K3b::VcdDoc* d, const QList<K3b::VcdTrack*>& t, QList<K3b::VcdTrack*>& st )
53 : doc( d ), tracks( t ), selectedTracks( st )
54 {
55 }
56
57 void setPbcTrack( VcdTrack* selected, QComboBox* box, VcdTrack::PbcTracks which );
58
59 VcdDoc* doc;
60 QList<VcdTrack*> tracks;
61 QList<VcdTrack*> selectedTracks;
62 QTabWidget* mainTabbed;
63
64 KSqueezedTextLabel* displayFileName;
65 QLabel* labelMimeType;
66 QLabel* displaySize;
67 QLabel* displayLength;
68 QLabel* muxrate;
69
70 QLabel* mpegver_audio;
71 QLabel* rate_audio;
72 QLabel* sampling_frequency_audio;
73 QLabel* mode_audio;
74 QLabel* copyright_audio;
75
76 QLabel* mpegver_video;
77 QLabel* rate_video;
78 QLabel* chromaformat_video;
79 QLabel* format_video;
80 QLabel* resolution_video;
81 QLabel* highresolution_video;
82
83 QLabel* labelAfterTimeout;
84 QLabel* labelWait;
85
86 QGroupBox* groupPlay;
87 QGroupBox* groupPbc;
88 QWidget* widgetnumkeys;
89
90 QComboBox* pbc_previous;
91 QComboBox* pbc_next;
92 QComboBox* pbc_return;
93 QComboBox* pbc_default;
94 QComboBox* comboAfterTimeout;
95
96 QCheckBox* check_reactivity;
97 QCheckBox* check_pbc;
98 QCheckBox* check_usekeys;
99 QCheckBox* check_overwritekeys;
100 QTreeView* keys_view;
101 VcdTrackKeysModel* keys_model;
102 VcdTrackKeysDelegate* keys_delegate;
103
104 QSpinBox* spin_times;
105 QSpinBox* spin_waittime;
106 };
107
108
setPbcTrack(K3b::VcdTrack * selected,QComboBox * box,VcdTrack::PbcTracks which)109 void K3b::VcdTrackDialog::Private::setPbcTrack( K3b::VcdTrack* selected, QComboBox* box, VcdTrack::PbcTracks which )
110 {
111 const int currentIndex = box->currentIndex();
112 const int count = tracks.count();
113
114 // TODO: Unset Userdefined on default settings
115 qDebug() << QString( "K3b::VcdTrackDialog::setPbcTrack: currentIndex = %1, count = %2" ).arg( currentIndex ).arg( count );
116
117 if( VcdTrack* track = selected->getPbcTrack( which ) )
118 track->delFromRevRefList( selected );
119
120 if( currentIndex >= 0 && currentIndex < count ) {
121 selected->setPbcTrack( which, tracks.at( currentIndex ) );
122 tracks.at( currentIndex ) ->addToRevRefList( selected );
123 }
124 else if( currentIndex == count ) {
125 selected->setPbcTrack( which, 0 );
126 selected->setPbcNonTrack( which, VcdTrack::DISABLED );
127 }
128 else {
129 selected->setPbcTrack( which, 0 );
130 selected->setPbcNonTrack( which, VcdTrack::VIDEOEND );
131 }
132
133 selected->setUserDefined( which, true );
134 }
135
136
VcdTrackDialog(K3b::VcdDoc * doc,const QList<K3b::VcdTrack * > & tracks,QList<K3b::VcdTrack * > & selectedTracks,QWidget * parent)137 K3b::VcdTrackDialog::VcdTrackDialog( K3b::VcdDoc* doc, const QList<K3b::VcdTrack*>& tracks, QList<K3b::VcdTrack*>& selectedTracks, QWidget* parent )
138 : QDialog( parent ),
139 d( new Private( doc, tracks, selectedTracks ) )
140 {
141 setWindowTitle( i18n( "Video Track Properties" ) );
142
143 prepareGui();
144
145 setupPbcTab();
146 setupPbcKeyTab();
147 setupVideoTab();
148 setupAudioTab();
149
150 if ( !d->selectedTracks.isEmpty() ) {
151
152 K3b::VcdTrack * selectedTrack = d->selectedTracks.first();
153
154 d->displayFileName->setText( selectedTrack->fileName() );
155 d->displayLength->setText( selectedTrack->duration() );
156 d->displaySize->setText( KIO::convertSize( selectedTrack->size() ) );
157 d->muxrate->setText( i18n( "%1 bit/s", selectedTrack->muxrate() ) );
158
159 if ( selectedTrack->isSegment() )
160 d->labelMimeType->setPixmap( QIcon::fromTheme("image-x-generic").pixmap(KIconLoader::SizeMedium) );
161 else
162 d->labelMimeType->setPixmap( QIcon::fromTheme("video-x-generic").pixmap(KIconLoader::SizeMedium) );
163
164 fillGui();
165 }
166 }
167
~VcdTrackDialog()168 K3b::VcdTrackDialog::~VcdTrackDialog()
169 {
170 delete d;
171 }
172
accept()173 void K3b::VcdTrackDialog::accept()
174 {
175 slotApply();
176 QDialog::accept();
177 }
178
slotApply()179 void K3b::VcdTrackDialog::slotApply()
180 {
181 // track set
182 K3b::VcdTrack * selectedTrack = d->selectedTracks.first();
183
184 d->setPbcTrack( selectedTrack, d->pbc_previous, K3b::VcdTrack::PREVIOUS );
185 d->setPbcTrack( selectedTrack, d->pbc_next, K3b::VcdTrack::NEXT );
186 d->setPbcTrack( selectedTrack, d->pbc_return, K3b::VcdTrack::RETURN );
187 d->setPbcTrack( selectedTrack, d->pbc_default, K3b::VcdTrack::DEFAULT );
188 d->setPbcTrack( selectedTrack, d->comboAfterTimeout, K3b::VcdTrack::AFTERTIMEOUT );
189
190 selectedTrack->setPlayTime( d->spin_times->value() );
191 selectedTrack->setWaitTime( d->spin_waittime->value() );
192 selectedTrack->setReactivity( d->check_reactivity->isChecked() );
193 selectedTrack->setPbcNumKeys( d->check_usekeys->isChecked() );
194 selectedTrack->setPbcNumKeysUserdefined( d->check_overwritekeys->isChecked() );
195
196 // global set
197 d->doc->vcdOptions()->setPbcEnabled( d->check_pbc->isChecked() );
198
199 // define numeric keys
200 selectedTrack->delDefinedNumKey();
201
202 if ( d->check_overwritekeys->isChecked() ) {
203
204 for( int key = 1; key <= d->keys_model->keyCount(); ++key ) {
205 VcdTrackKeysModel::Key2Track::const_iterator it = d->keys_model->keys().constFind( key );
206 if( it != d->keys_model->keys().constEnd() )
207 selectedTrack->setDefinedNumKey( it.key(), it.value() );
208 else
209 selectedTrack->delDefinedNumKey( it.key() );
210 }
211 } else {
212 selectedTrack->setDefinedNumKey( 1, selectedTrack );
213 qDebug() << "Key 1" << " Playing: (default) " << VcdTrackKeysModel::trackName( selectedTrack ) << "Track: " << selectedTrack;
214 }
215 }
216
fillGui()217 void K3b::VcdTrackDialog::fillGui()
218 {
219 K3b::VcdTrack * selectedTrack = d->selectedTracks.first();
220
221 d->mpegver_video->setText( selectedTrack->mpegTypeS() );
222 d->rate_video->setText( selectedTrack->video_bitrate() );
223 d->chromaformat_video->setText( selectedTrack->video_chroma() );
224 d->format_video->setText( selectedTrack->video_format() );
225 d->highresolution_video->setText( selectedTrack->highresolution() );
226 d->resolution_video->setText( selectedTrack->resolution() );
227
228 d->mpegver_audio->setText( selectedTrack->mpegTypeS( true ) );
229 d->rate_audio->setText( selectedTrack->audio_bitrate() );
230
231 d->sampling_frequency_audio->setText( selectedTrack->audio_sampfreq() );
232 d->mode_audio->setText( selectedTrack->audio_mode() );
233 d->copyright_audio->setText( selectedTrack->audio_copyright() );
234
235 fillPbcGui();
236
237
238 d->pbc_previous->setToolTip( i18n( "May also look like | << on the remote control. " ) );
239 d->pbc_next->setToolTip( i18n( "May also look like >> | on the remote control." ) );
240 d->pbc_return->setToolTip( i18n( "This key may be mapped to the STOP key." ) );
241 d->pbc_default->setToolTip( i18n( "This key is usually mapped to the > or PLAY key." ) );
242 d->comboAfterTimeout->setToolTip( i18n( "Target to be jumped to on time-out of <wait>." ) );
243 d->check_reactivity->setToolTip( i18n( "Delay reactivity of keys." ) );
244 d->check_pbc->setToolTip( i18n( "Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats." ) );
245 d->check_usekeys->setToolTip( i18n( "Activate the use of numeric keys." ) );
246 d->check_overwritekeys->setToolTip( i18n( "Overwrite default numeric keys." ) );
247 d->keys_view->setToolTip( i18n( "Numeric keys." ) );
248 d->spin_times->setToolTip( i18n( "Times to repeat the playback of 'play track'." ) );
249 d->spin_waittime->setToolTip( i18n( "Time in seconds to wait after playback of 'play track'." ) );
250
251 d->comboAfterTimeout->setWhatsThis( i18n( "<p>Target to be jumped to on time-out of <wait>."
252 "<p>If omitted (and <wait> is not set to an infinite time) one of the targets is selected at random." ) );
253 d->check_reactivity->setWhatsThis( i18n( "<p>When reactivity is set to delayed, it is recommended that the length of the referenced 'play track' is not more than 5 seconds."
254 "<p>The recommended setting for a play item consisting of one still picture and no audio is to loop once and have a delayed reactivity." ) );
255 d->check_pbc->setWhatsThis( i18n( "<p>Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats."
256 "<p>PBC allows control of the playback of play items and the possibility of interaction with the user through the remote control or some other input device available." ) );
257 d->check_usekeys->setWhatsThis( i18n( "These are actually pseudo keys, representing the numeric keys 0, 1, ..., 9." ) );
258 d->check_overwritekeys->setWhatsThis( i18n( "<p>If numeric keys enabled, you can overwrite the default settings." ) );
259 d->spin_times->setWhatsThis( i18n( "<p>Times to repeat the playback of 'play track'."
260 "<p>The reactivity attribute controls whether the playback of 'play track' is finished, thus delayed, before executing user triggered action or an immediate jump is performed."
261 "<p>After the specified number of repetitions have completed, the <wait> time begins to count down, unless set to an infinite wait time."
262 "<p>If this element is omitted, a default of `1' is used, i.e. the 'play track' will be displayed once." ) );
263 d->spin_waittime->setWhatsThis( i18n( "Time in seconds to wait after playback of 'play track' before triggering the <timeout> action (unless the user triggers some action before time ran up)." ) );
264
265 }
266
fillPbcGui()267 void K3b::VcdTrackDialog::fillPbcGui()
268 {
269 K3b::VcdTrack * selectedTrack = d->selectedTracks.first();
270 // add tracktitles to combobox
271 int iPrevious = -1;
272 int iNext = -1;
273 int iReturn = -1;
274 int iDefault = -1;
275 int iAfterTimeOut = -1;
276
277 Q_FOREACH( K3b::VcdTrack* track, d->tracks ) {
278 QString name = VcdTrackKeysModel::trackName( track );
279 QIcon icon = VcdTrackKeysModel::trackIcon( track );
280
281 d->pbc_previous->addItem( icon, name );
282 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::PREVIOUS ) )
283 iPrevious = d->pbc_previous->count() - 1;
284
285 d->pbc_next->addItem( icon, name );
286 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::NEXT ) )
287 iNext = d->pbc_next->count() - 1;
288
289 d->pbc_return->addItem( icon, name );
290 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::RETURN ) )
291 iReturn = d->pbc_return->count() - 1;
292
293 d->pbc_default->addItem( icon, name );
294 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::DEFAULT ) )
295 iDefault = d->pbc_default->count() - 1;
296
297 d->comboAfterTimeout->addItem( icon, name );
298 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::AFTERTIMEOUT ) )
299 iAfterTimeOut = d->comboAfterTimeout->count() - 1;
300 }
301
302 // add Event Disabled
303 QPixmap disabledIcon = QIcon::fromTheme( "process-stop" ).pixmap( KIconLoader::SizeSmall );
304 QString disabledName = i18n( "Event Disabled" );
305 d->pbc_previous->addItem( disabledIcon, disabledName );
306 d->pbc_next->addItem( disabledIcon, disabledName );
307 d->pbc_return->addItem( disabledIcon, disabledName );
308 d->pbc_default->addItem( disabledIcon, disabledName );
309 d->comboAfterTimeout->addItem( disabledIcon, disabledName );
310
311 // add VideoCD End
312 QString endName = VcdTrackKeysModel::trackName( 0 );
313 QIcon endIcon = VcdTrackKeysModel::trackIcon( 0 );
314 d->pbc_previous->addItem( endIcon, endName );
315 d->pbc_next->addItem( endIcon, endName );
316 d->pbc_return->addItem( endIcon, endName );
317 d->pbc_default->addItem( endIcon, endName );
318 d->comboAfterTimeout->addItem( endIcon, endName );
319
320 int count = d->tracks.count();
321
322 if ( iPrevious < 0 )
323 d->pbc_previous->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::PREVIOUS ) );
324 else
325 d->pbc_previous->setCurrentIndex( iPrevious );
326
327 if ( iNext < 0 )
328 d->pbc_next->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::NEXT ) );
329 else
330 d->pbc_next->setCurrentIndex( iNext );
331
332 if ( iReturn < 0 )
333 d->pbc_return->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::RETURN ) );
334 else
335 d->pbc_return->setCurrentIndex( iReturn );
336
337 if ( iDefault < 0 )
338 d->pbc_default->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::DEFAULT ) );
339 else
340 d->pbc_default->setCurrentIndex( iDefault );
341
342 if ( iAfterTimeOut < 0 )
343 d->comboAfterTimeout->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::AFTERTIMEOUT ) );
344 else
345 d->comboAfterTimeout->setCurrentIndex( iAfterTimeOut );
346
347
348 d->spin_waittime->setValue( selectedTrack->getWaitTime() );
349 d->spin_times->setValue( selectedTrack->getPlayTime() );
350
351 d->check_reactivity->setChecked( selectedTrack->Reactivity() );
352 d->check_pbc->setChecked( d->doc->vcdOptions()->PbcEnabled() );
353
354 d->check_usekeys->setChecked( selectedTrack->PbcNumKeys() );
355 d->check_overwritekeys->setChecked( selectedTrack->PbcNumKeysUserdefined() );
356
357 if( selectedTrack->PbcNumKeysUserdefined() ) {
358 d->keys_model->setKeys( selectedTrack->DefinedNumKey() );
359 }
360 else {
361 QMap<int, VcdTrack*> keys;
362 keys.insert( 1, selectedTrack );
363 d->keys_model->setKeys( keys );
364 }
365
366 d->mainTabbed->setTabEnabled( d->mainTabbed->indexOf( d->widgetnumkeys ),
367 d->check_usekeys->isChecked() && d->check_pbc->isChecked() );
368 }
369
prepareGui()370 void K3b::VcdTrackDialog::prepareGui()
371 {
372 // /////////////////////////////////////////////////
373 // FILE-INFO BOX
374 // /////////////////////////////////////////////////
375 QGroupBox* groupFileInfo = new QGroupBox( i18n( "File Info" ), this );
376
377 QGridLayout* groupFileInfoLayout = new QGridLayout( groupFileInfo );
378 groupFileInfoLayout->setAlignment( Qt::AlignTop );
379
380 d->labelMimeType = new QLabel( groupFileInfo );
381
382 d->displayFileName = new KSqueezedTextLabel( groupFileInfo );
383 d->displayFileName->setText( i18n( "Filename" ) );
384 d->displayFileName->setAlignment( Qt::AlignTop | Qt::AlignLeft );
385
386 QLabel* labelSize = new QLabel( i18n( "Size:" ), groupFileInfo );
387 QLabel* labelLength = new QLabel( i18n( "Length:" ), groupFileInfo );
388 QLabel* labelMuxrate = new QLabel( i18n( "Muxrate:" ), groupFileInfo );
389
390 d->displaySize = new QLabel( groupFileInfo );
391 d->displaySize->setText( "0.0 MB" );
392 d->displaySize->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
393
394 d->displayLength = new QLabel( groupFileInfo );
395 d->displayLength->setText( "0:0:0" );
396 d->displayLength->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
397
398 d->muxrate = new QLabel( groupFileInfo );
399 d->muxrate->setText( i18n( "%1 bit/s" ,QString::number( 0 ) ));
400 d->muxrate->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
401
402 QFrame* fileInfoLine = new QFrame( groupFileInfo );
403 fileInfoLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
404
405 groupFileInfoLayout->addWidget( d->labelMimeType, 0, 0 );
406 groupFileInfoLayout->addWidget( d->displayFileName, 0, 1, 2, 1 );
407 groupFileInfoLayout->addWidget( fileInfoLine, 2, 0, 1, 2 );
408 groupFileInfoLayout->addWidget( labelLength, 3, 0 );
409 groupFileInfoLayout->addWidget( labelSize, 4, 0 );
410 groupFileInfoLayout->addWidget( labelMuxrate, 5, 0 );
411 groupFileInfoLayout->addWidget( d->displayLength, 3, 1 );
412 groupFileInfoLayout->addWidget( d->displaySize, 4, 1 );
413 groupFileInfoLayout->addWidget( d->muxrate, 5, 1 );
414
415 groupFileInfoLayout->setRowStretch( 6, 1 );
416 groupFileInfoLayout->setColumnStretch( 1, 1 );
417
418 QFont f( d->displayLength->font() );
419 f.setBold( true );
420 d->displayLength->setFont( f );
421 d->displaySize->setFont( f );
422 d->muxrate->setFont( f );
423
424 d->mainTabbed = new QTabWidget( this );
425
426 QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel, this );
427 connect( buttonBox, SIGNAL(accepted()), SLOT(accept()) );
428 connect( buttonBox, SIGNAL(rejected()), SLOT(reject()) );
429 connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL(clicked()), SLOT(slotApply()) );
430
431 QGridLayout* mainLayout = new QGridLayout( this );
432 mainLayout->addWidget( groupFileInfo, 0, 0 );
433 mainLayout->addWidget( d->mainTabbed, 0, 1 );
434 mainLayout->addWidget( buttonBox, 1, 0, 1, 2 );
435 }
436
setupPbcTab()437 void K3b::VcdTrackDialog::setupPbcTab()
438 {
439 // /////////////////////////////////////////////////
440 // Playback Control TAB
441 // /////////////////////////////////////////////////
442 QWidget * w = new QWidget( d->mainTabbed );
443
444 //////////////////////////////////////////////////////////////////////////////////////////
445 QGroupBox* groupOptions = new QGroupBox( i18n( "Settings" ), w );
446
447 d->check_pbc = new QCheckBox( i18n( "Enable playback control (for the whole CD)" ), groupOptions );
448 d->check_usekeys = new QCheckBox( i18n( "Use numeric keys" ), groupOptions );
449 d->check_usekeys->setEnabled( false );
450 d->check_reactivity = new QCheckBox( i18n( "Reactivity delayed to the end of playing track" ), groupOptions );
451 d->check_reactivity->setEnabled( false );
452
453 QVBoxLayout* groupOptionsLayout = new QVBoxLayout( groupOptions );
454 groupOptionsLayout->addWidget( d->check_pbc );
455 groupOptionsLayout->addWidget( d->check_usekeys );
456 groupOptionsLayout->addWidget( d->check_reactivity );
457
458 //////////////////////////////////////////////////////////////////////////////////////////
459 d->groupPlay = new QGroupBox( i18n( "Playing" ), w );
460
461 QGridLayout* groupPlayLayout = new QGridLayout( d->groupPlay );
462 groupPlayLayout->setAlignment( Qt::AlignTop );
463
464 QLabel* labelPlaying = new QLabel( i18n( "Playing track" ) , d->groupPlay );
465
466 d->spin_times = new QSpinBox( d->groupPlay );
467 d->spin_times->setValue( 1 );
468 d->spin_times->setSuffix( i18n( " time(s)" ) );
469 d->spin_times->setSpecialValueText( i18n( "forever" ) );
470
471 //////////////////////////////////////////////////////////////////////////////////////////
472 d->labelWait = new QLabel( i18n( "then wait" ), d->groupPlay );
473 d->spin_waittime = new QSpinBox( d->groupPlay );
474 d->spin_waittime->setMinimum( -1 );
475 d->spin_waittime->setValue( 0 );
476 // d->spin_waittime->setEnabled( false );
477 d->spin_waittime->setSuffix( i18n( " seconds" ) );
478 d->spin_waittime->setSpecialValueText( i18n( "infinite" ) );
479
480 d->labelAfterTimeout = new QLabel( i18n( "after timeout playing" ), d->groupPlay );
481 // d->labelAfterTimeout->setEnabled( false );
482 d->comboAfterTimeout = new QComboBox( /*K3b::CutComboBox::SQUEEZE, */d->groupPlay );
483 // d->comboAfterTimeout->setEnabled( false );
484
485 groupPlayLayout->addWidget( labelPlaying, 1, 0 );
486 groupPlayLayout->addWidget( d->spin_times, 1, 1 );
487 groupPlayLayout->addWidget( d->labelWait, 1, 2 );
488 groupPlayLayout->addWidget( d->spin_waittime, 1, 3 );
489 groupPlayLayout->addWidget( d->labelAfterTimeout, 2, 1, 1, 3 );
490 groupPlayLayout->addWidget( d->comboAfterTimeout, 3, 1, 1, 3 );
491 groupPlayLayout->setColumnStretch( 1, 1 );
492 groupPlayLayout->setColumnStretch( 3, 1 );
493
494 //////////////////////////////////////////////////////////////////////////////////////////
495 d->groupPbc = new QGroupBox( i18n( "Key Pressed Interaction" ), w );
496
497 QLabel* labelPbc_previous = new QLabel( i18n( "Previous:" ), d->groupPbc );
498 QLabel* labelPbc_next = new QLabel( i18n( "Next:" ), d->groupPbc );
499 QLabel* labelPbc_return = new QLabel( i18n( "Return:" ), d->groupPbc );
500 QLabel* labelPbc_default = new QLabel( i18n( "Default:" ), d->groupPbc );
501
502 d->pbc_previous = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc );
503 d->pbc_next = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc );
504 d->pbc_return = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc );
505 d->pbc_default = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc );
506
507 QFormLayout* groupPbcLayout = new QFormLayout( d->groupPbc );
508 groupPbcLayout->setAlignment( Qt::AlignTop );
509 groupPbcLayout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow );
510 groupPbcLayout->addRow( labelPbc_previous, d->pbc_previous );
511 groupPbcLayout->addRow( labelPbc_next, d->pbc_next );
512 groupPbcLayout->addRow( labelPbc_return, d->pbc_return );
513 groupPbcLayout->addRow( labelPbc_default, d->pbc_default );
514
515 QVBoxLayout* grid = new QVBoxLayout( w );
516 grid->setAlignment( Qt::AlignTop );
517 grid->addWidget( groupOptions );
518 grid->addWidget( d->groupPlay );
519 grid->addWidget( d->groupPbc );
520
521 d->mainTabbed->addTab( w, i18n( "Playback Control" ) );
522
523 d->groupPlay->setEnabled( false );
524 d->groupPbc->setEnabled( false );
525
526 connect( d->check_pbc, SIGNAL(toggled(bool)), this, SLOT(slotPbcToggled(bool)) );
527 connect( d->spin_times, SIGNAL(valueChanged(int)), this, SLOT(slotPlayTimeChanged(int)) );
528 connect( d->spin_waittime, SIGNAL(valueChanged(int)), this, SLOT(slotWaitTimeChanged(int)) );
529 connect( d->check_usekeys, SIGNAL(toggled(bool)), this, SLOT(slotUseKeysToggled(bool)) );
530 }
531
setupPbcKeyTab()532 void K3b::VcdTrackDialog::setupPbcKeyTab()
533 {
534 // /////////////////////////////////////////////////
535 // Playback Control Numeric Key's TAB
536 // /////////////////////////////////////////////////
537 d->widgetnumkeys = new QWidget( d->mainTabbed );
538
539 d->check_overwritekeys = new QCheckBox( i18n( "Overwrite default assignment" ), d->widgetnumkeys );
540
541 d->keys_model = new VcdTrackKeysModel( KEY_COUNT, this );
542 d->keys_delegate = new VcdTrackKeysDelegate( d->tracks, this );
543
544 d->keys_view = new QTreeView( d->widgetnumkeys );
545 d->keys_view->setEnabled( false );
546 d->keys_view->setModel( d->keys_model );
547 d->keys_view->setItemDelegateForColumn( VcdTrackKeysModel::PlayingColumn, d->keys_delegate );
548 d->keys_view->setAllColumnsShowFocus( true );
549 d->keys_view->setRootIsDecorated( false );
550 d->keys_view->setEditTriggers( QAbstractItemView::AllEditTriggers );
551 d->keys_view->header()->setSectionResizeMode( VcdTrackKeysModel::KeyColumn, QHeaderView::ResizeToContents );
552
553 QVBoxLayout* layout = new QVBoxLayout( d->widgetnumkeys );
554 layout->addWidget( d->check_overwritekeys );
555 layout->addWidget( d->keys_view );
556
557 d->mainTabbed->addTab( d->widgetnumkeys, i18n( "Numeric Keys" ) );
558
559 connect( d->check_overwritekeys, SIGNAL(toggled(bool)), d->keys_view, SLOT(setEnabled(bool)) );
560 }
561
setupAudioTab()562 void K3b::VcdTrackDialog::setupAudioTab()
563 {
564 // /////////////////////////////////////////////////
565 // AUDIO TAB
566 // /////////////////////////////////////////////////
567 QWidget * w = new QWidget( d->mainTabbed );
568
569 d->mpegver_audio = new QLabel( w );
570 d->rate_audio = new QLabel( w );
571 d->sampling_frequency_audio = new QLabel( w );
572 d->mode_audio = new QLabel( w );
573 d->copyright_audio = new QLabel( w );
574
575 d->mpegver_audio->setFrameShape( QLabel::StyledPanel );
576 d->rate_audio->setFrameShape( QLabel::StyledPanel );
577 d->sampling_frequency_audio->setFrameShape( QLabel::StyledPanel );
578 d->mode_audio->setFrameShape( QLabel::StyledPanel );
579 d->copyright_audio->setFrameShape( QLabel::StyledPanel );
580
581 d->mpegver_audio->setFrameShadow( QLabel::Sunken );
582 d->rate_audio->setFrameShadow( QLabel::Sunken );
583 d->sampling_frequency_audio->setFrameShadow( QLabel::Sunken );
584 d->mode_audio->setFrameShadow( QLabel::Sunken );
585 d->copyright_audio->setFrameShadow( QLabel::Sunken );
586
587 QFormLayout* layout = new QFormLayout( w );
588 layout->setAlignment( Qt::AlignTop );
589 layout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow );
590 layout->addRow( new QLabel( i18n( "Type:" ), w ), d->mpegver_audio );
591 layout->addRow( new QLabel( i18n( "Rate:" ), w ), d->rate_audio );
592 layout->addRow( new QLabel( i18n( "Sampling frequency:" ), w ), d->sampling_frequency_audio );
593 layout->addRow( new QLabel( i18n( "Mode:" ), w ), d->mode_audio );
594 layout->addRow( new QLabel( i18n( "Copyright:" ), w ), d->copyright_audio );
595
596 d->mainTabbed->addTab( w, i18n( "Audio" ) );
597
598 }
599
setupVideoTab()600 void K3b::VcdTrackDialog::setupVideoTab()
601 {
602 // /////////////////////////////////////////////////
603 // VIDEO TAB
604 // /////////////////////////////////////////////////
605 QWidget * w = new QWidget( d->mainTabbed );
606
607 d->mpegver_video = new QLabel( w );
608 d->rate_video = new QLabel( w );
609 d->chromaformat_video = new QLabel( w );
610 d->format_video = new QLabel( w );
611 d->resolution_video = new QLabel( w );
612 d->highresolution_video = new QLabel( w );
613
614 d->mpegver_video->setFrameShape( QLabel::StyledPanel );
615 d->rate_video->setFrameShape( QLabel::StyledPanel );
616 d->chromaformat_video->setFrameShape( QLabel::StyledPanel );
617 d->format_video->setFrameShape( QLabel::StyledPanel );
618 d->resolution_video->setFrameShape( QLabel::StyledPanel );
619 d->highresolution_video->setFrameShape( QLabel::StyledPanel );
620
621 d->mpegver_video->setFrameShadow( QLabel::Sunken );
622 d->rate_video->setFrameShadow( QLabel::Sunken );
623 d->chromaformat_video->setFrameShadow( QLabel::Sunken );
624 d->format_video->setFrameShadow( QLabel::Sunken );
625 d->resolution_video->setFrameShadow( QLabel::Sunken );
626 d->highresolution_video->setFrameShadow( QLabel::Sunken );
627
628 QFormLayout* layout = new QFormLayout( w );
629 layout->setAlignment( Qt::AlignTop );
630 layout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow );
631 layout->addRow( new QLabel( i18n( "Type:" ), w ), d->mpegver_video );
632 layout->addRow( new QLabel( i18n( "Rate:" ), w ), d->rate_video );
633 layout->addRow( new QLabel( i18n( "Chroma format:" ), w ), d->chromaformat_video );
634 layout->addRow( new QLabel( i18n( "Video format:" ), w ), d->format_video );
635 layout->addRow( new QLabel( i18n( "Resolution:" ), w ), d->resolution_video );
636 layout->addRow( new QLabel( i18n( "High resolution:" ), w ), d->highresolution_video );
637
638 d->mainTabbed->addTab( w, i18n( "Video" ) );
639 }
640
slotPlayTimeChanged(int value)641 void K3b::VcdTrackDialog::slotPlayTimeChanged( int value )
642 {
643 if ( value == 0 ) {
644 d->labelWait->setEnabled( false );
645 d->spin_waittime->setEnabled( false );
646 d->labelAfterTimeout->setEnabled( false );
647 d->comboAfterTimeout->setEnabled( false );
648 } else {
649 d->labelWait->setEnabled( true );
650 d->spin_waittime->setEnabled( true );
651 if ( d->spin_waittime->value() > -1 ) {
652 d->labelAfterTimeout->setEnabled( true );
653 d->comboAfterTimeout->setEnabled( true );
654 }
655 }
656 }
657
slotWaitTimeChanged(int value)658 void K3b::VcdTrackDialog::slotWaitTimeChanged( int value )
659 {
660 if ( value < 0 || !d->labelWait->isEnabled() ) {
661 d->labelAfterTimeout->setEnabled( false );
662 d->comboAfterTimeout->setEnabled( false );
663 } else {
664 d->labelAfterTimeout->setEnabled( true );
665 d->comboAfterTimeout->setEnabled( true );
666 }
667 }
668
slotPbcToggled(bool checked)669 void K3b::VcdTrackDialog::slotPbcToggled( bool checked )
670 {
671 d->groupPlay->setEnabled( checked );
672 d->groupPbc->setEnabled( checked );
673 d->check_usekeys->setEnabled( checked );
674 slotUseKeysToggled( checked && d->check_usekeys->isChecked() );
675 d->check_reactivity->setEnabled( checked );
676 if ( checked )
677 slotWaitTimeChanged( d->spin_waittime->value() );
678 }
679
slotUseKeysToggled(bool checked)680 void K3b::VcdTrackDialog::slotUseKeysToggled( bool checked )
681 {
682 d->mainTabbed->setTabEnabled( d->mainTabbed->indexOf( d->widgetnumkeys ), checked );
683 }
684
685
686