File indexing completed on 2024-05-05 04:51:48
0001 /* 0002 SPDX-FileCopyrightText: 2003-2004 Christian Kvasny <chris@k3b.org> 0003 SPDX-FileCopyrightText: 2008 Sebastian Trueg <trueg@k3b.org> 0004 SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl> 0005 SPDX-FileCopyrightText: 1998-2010 Sebastian Trueg <trueg@k3b.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #include "k3bvcdtrackdialog.h" 0011 #include "k3bglobals.h" 0012 #include "k3bmsf.h" 0013 #include "k3bvcddoc.h" 0014 #include "k3bvcdtrack.h" 0015 #include "k3bvcdtrackkeysdelegate.h" 0016 #include "k3bvcdtrackkeysmodel.h" 0017 0018 #include <KIconLoader> 0019 #include <KIO/Global> 0020 #include <KLocalizedString> 0021 #include <KSqueezedTextLabel> 0022 0023 #include <QList> 0024 #include <QUrl> 0025 #include <QPixmap> 0026 #include <QCheckBox> 0027 #include <QComboBox> 0028 #include <QDialogButtonBox> 0029 #include <QFormLayout> 0030 #include <QGridLayout> 0031 #include <QGroupBox> 0032 #include <QHeaderView> 0033 #include <QLabel> 0034 #include <QLineEdit> 0035 #include <QPushButton> 0036 #include <QRadioButton> 0037 #include <QSpinBox> 0038 #include <QTabWidget> 0039 #include <QToolTip> 0040 #include <QTreeView> 0041 #include <QVBoxLayout> 0042 0043 0044 namespace { 0045 const int KEY_COUNT = 99; 0046 } // namespace 0047 0048 0049 class K3b::VcdTrackDialog::Private 0050 { 0051 public: 0052 Private( K3b::VcdDoc* d, const QList<K3b::VcdTrack*>& t, QList<K3b::VcdTrack*>& st ) 0053 : doc( d ), tracks( t ), selectedTracks( st ) 0054 { 0055 } 0056 0057 void setPbcTrack( VcdTrack* selected, QComboBox* box, VcdTrack::PbcTracks which ); 0058 0059 VcdDoc* doc; 0060 QList<VcdTrack*> tracks; 0061 QList<VcdTrack*> selectedTracks; 0062 QTabWidget* mainTabbed; 0063 0064 KSqueezedTextLabel* displayFileName; 0065 QLabel* labelMimeType; 0066 QLabel* displaySize; 0067 QLabel* displayLength; 0068 QLabel* muxrate; 0069 0070 QLabel* mpegver_audio; 0071 QLabel* rate_audio; 0072 QLabel* sampling_frequency_audio; 0073 QLabel* mode_audio; 0074 QLabel* copyright_audio; 0075 0076 QLabel* mpegver_video; 0077 QLabel* rate_video; 0078 QLabel* chromaformat_video; 0079 QLabel* format_video; 0080 QLabel* resolution_video; 0081 QLabel* highresolution_video; 0082 0083 QLabel* labelAfterTimeout; 0084 QLabel* labelWait; 0085 0086 QGroupBox* groupPlay; 0087 QGroupBox* groupPbc; 0088 QWidget* widgetnumkeys; 0089 0090 QComboBox* pbc_previous; 0091 QComboBox* pbc_next; 0092 QComboBox* pbc_return; 0093 QComboBox* pbc_default; 0094 QComboBox* comboAfterTimeout; 0095 0096 QCheckBox* check_reactivity; 0097 QCheckBox* check_pbc; 0098 QCheckBox* check_usekeys; 0099 QCheckBox* check_overwritekeys; 0100 QTreeView* keys_view; 0101 VcdTrackKeysModel* keys_model; 0102 VcdTrackKeysDelegate* keys_delegate; 0103 0104 QSpinBox* spin_times; 0105 QSpinBox* spin_waittime; 0106 }; 0107 0108 0109 void K3b::VcdTrackDialog::Private::setPbcTrack( K3b::VcdTrack* selected, QComboBox* box, VcdTrack::PbcTracks which ) 0110 { 0111 const int currentIndex = box->currentIndex(); 0112 const int count = tracks.count(); 0113 0114 // TODO: Unset Userdefined on default settings 0115 qDebug() << QString( "K3b::VcdTrackDialog::setPbcTrack: currentIndex = %1, count = %2" ).arg( currentIndex ).arg( count ); 0116 0117 if( VcdTrack* track = selected->getPbcTrack( which ) ) 0118 track->delFromRevRefList( selected ); 0119 0120 if( currentIndex >= 0 && currentIndex < count ) { 0121 selected->setPbcTrack( which, tracks.at( currentIndex ) ); 0122 tracks.at( currentIndex ) ->addToRevRefList( selected ); 0123 } 0124 else if( currentIndex == count ) { 0125 selected->setPbcTrack( which, 0 ); 0126 selected->setPbcNonTrack( which, VcdTrack::DISABLED ); 0127 } 0128 else { 0129 selected->setPbcTrack( which, 0 ); 0130 selected->setPbcNonTrack( which, VcdTrack::VIDEOEND ); 0131 } 0132 0133 selected->setUserDefined( which, true ); 0134 } 0135 0136 0137 K3b::VcdTrackDialog::VcdTrackDialog( K3b::VcdDoc* doc, const QList<K3b::VcdTrack*>& tracks, QList<K3b::VcdTrack*>& selectedTracks, QWidget* parent ) 0138 : QDialog( parent ), 0139 d( new Private( doc, tracks, selectedTracks ) ) 0140 { 0141 setWindowTitle( i18n( "Video Track Properties" ) ); 0142 0143 prepareGui(); 0144 0145 setupPbcTab(); 0146 setupPbcKeyTab(); 0147 setupVideoTab(); 0148 setupAudioTab(); 0149 0150 if ( !d->selectedTracks.isEmpty() ) { 0151 0152 K3b::VcdTrack * selectedTrack = d->selectedTracks.first(); 0153 0154 d->displayFileName->setText( selectedTrack->fileName() ); 0155 d->displayLength->setText( selectedTrack->duration() ); 0156 d->displaySize->setText( KIO::convertSize( selectedTrack->size() ) ); 0157 d->muxrate->setText( i18n( "%1 bit/s", selectedTrack->muxrate() ) ); 0158 0159 if ( selectedTrack->isSegment() ) 0160 d->labelMimeType->setPixmap( QIcon::fromTheme("image-x-generic").pixmap(KIconLoader::SizeMedium) ); 0161 else 0162 d->labelMimeType->setPixmap( QIcon::fromTheme("video-x-generic").pixmap(KIconLoader::SizeMedium) ); 0163 0164 fillGui(); 0165 } 0166 } 0167 0168 K3b::VcdTrackDialog::~VcdTrackDialog() 0169 { 0170 delete d; 0171 } 0172 0173 void K3b::VcdTrackDialog::accept() 0174 { 0175 slotApply(); 0176 QDialog::accept(); 0177 } 0178 0179 void K3b::VcdTrackDialog::slotApply() 0180 { 0181 // track set 0182 K3b::VcdTrack * selectedTrack = d->selectedTracks.first(); 0183 0184 d->setPbcTrack( selectedTrack, d->pbc_previous, K3b::VcdTrack::PREVIOUS ); 0185 d->setPbcTrack( selectedTrack, d->pbc_next, K3b::VcdTrack::NEXT ); 0186 d->setPbcTrack( selectedTrack, d->pbc_return, K3b::VcdTrack::RETURN ); 0187 d->setPbcTrack( selectedTrack, d->pbc_default, K3b::VcdTrack::DEFAULT ); 0188 d->setPbcTrack( selectedTrack, d->comboAfterTimeout, K3b::VcdTrack::AFTERTIMEOUT ); 0189 0190 selectedTrack->setPlayTime( d->spin_times->value() ); 0191 selectedTrack->setWaitTime( d->spin_waittime->value() ); 0192 selectedTrack->setReactivity( d->check_reactivity->isChecked() ); 0193 selectedTrack->setPbcNumKeys( d->check_usekeys->isChecked() ); 0194 selectedTrack->setPbcNumKeysUserdefined( d->check_overwritekeys->isChecked() ); 0195 0196 // global set 0197 d->doc->vcdOptions()->setPbcEnabled( d->check_pbc->isChecked() ); 0198 0199 // define numeric keys 0200 selectedTrack->delDefinedNumKey(); 0201 0202 if ( d->check_overwritekeys->isChecked() ) { 0203 0204 for( int key = 1; key <= d->keys_model->keyCount(); ++key ) { 0205 VcdTrackKeysModel::Key2Track::const_iterator it = d->keys_model->keys().constFind( key ); 0206 if( it != d->keys_model->keys().constEnd() ) 0207 selectedTrack->setDefinedNumKey( it.key(), it.value() ); 0208 else 0209 selectedTrack->delDefinedNumKey( it.key() ); 0210 } 0211 } else { 0212 selectedTrack->setDefinedNumKey( 1, selectedTrack ); 0213 qDebug() << "Key 1" << " Playing: (default) " << VcdTrackKeysModel::trackName( selectedTrack ) << "Track: " << selectedTrack; 0214 } 0215 } 0216 0217 void K3b::VcdTrackDialog::fillGui() 0218 { 0219 K3b::VcdTrack * selectedTrack = d->selectedTracks.first(); 0220 0221 d->mpegver_video->setText( selectedTrack->mpegTypeS() ); 0222 d->rate_video->setText( selectedTrack->video_bitrate() ); 0223 d->chromaformat_video->setText( selectedTrack->video_chroma() ); 0224 d->format_video->setText( selectedTrack->video_format() ); 0225 d->highresolution_video->setText( selectedTrack->highresolution() ); 0226 d->resolution_video->setText( selectedTrack->resolution() ); 0227 0228 d->mpegver_audio->setText( selectedTrack->mpegTypeS( true ) ); 0229 d->rate_audio->setText( selectedTrack->audio_bitrate() ); 0230 0231 d->sampling_frequency_audio->setText( selectedTrack->audio_sampfreq() ); 0232 d->mode_audio->setText( selectedTrack->audio_mode() ); 0233 d->copyright_audio->setText( selectedTrack->audio_copyright() ); 0234 0235 fillPbcGui(); 0236 0237 0238 d->pbc_previous->setToolTip( i18n( "May also look like | << on the remote control. " ) ); 0239 d->pbc_next->setToolTip( i18n( "May also look like >> | on the remote control." ) ); 0240 d->pbc_return->setToolTip( i18n( "This key may be mapped to the STOP key." ) ); 0241 d->pbc_default->setToolTip( i18n( "This key is usually mapped to the > or PLAY key." ) ); 0242 d->comboAfterTimeout->setToolTip( i18n( "Target to be jumped to on time-out of <wait>." ) ); 0243 d->check_reactivity->setToolTip( i18n( "Delay reactivity of keys." ) ); 0244 d->check_pbc->setToolTip( i18n( "Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats." ) ); 0245 d->check_usekeys->setToolTip( i18n( "Activate the use of numeric keys." ) ); 0246 d->check_overwritekeys->setToolTip( i18n( "Overwrite default numeric keys." ) ); 0247 d->keys_view->setToolTip( i18n( "Numeric keys." ) ); 0248 d->spin_times->setToolTip( i18n( "Times to repeat the playback of 'play track'." ) ); 0249 d->spin_waittime->setToolTip( i18n( "Time in seconds to wait after playback of 'play track'." ) ); 0250 0251 d->comboAfterTimeout->setWhatsThis( i18n( "<p>Target to be jumped to on time-out of <wait>." 0252 "<p>If omitted (and <wait> is not set to an infinite time) one of the targets is selected at random." ) ); 0253 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." 0254 "<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." ) ); 0255 d->check_pbc->setWhatsThis( i18n( "<p>Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats." 0256 "<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." ) ); 0257 d->check_usekeys->setWhatsThis( i18n( "These are actually pseudo keys, representing the numeric keys 0, 1, ..., 9." ) ); 0258 d->check_overwritekeys->setWhatsThis( i18n( "<p>If numeric keys enabled, you can overwrite the default settings." ) ); 0259 d->spin_times->setWhatsThis( i18n( "<p>Times to repeat the playback of 'play track'." 0260 "<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." 0261 "<p>After the specified number of repetitions have completed, the <wait> time begins to count down, unless set to an infinite wait time." 0262 "<p>If this element is omitted, a default of `1' is used, i.e. the 'play track' will be displayed once." ) ); 0263 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)." ) ); 0264 0265 } 0266 0267 void K3b::VcdTrackDialog::fillPbcGui() 0268 { 0269 K3b::VcdTrack * selectedTrack = d->selectedTracks.first(); 0270 // add tracktitles to combobox 0271 int iPrevious = -1; 0272 int iNext = -1; 0273 int iReturn = -1; 0274 int iDefault = -1; 0275 int iAfterTimeOut = -1; 0276 0277 Q_FOREACH( K3b::VcdTrack* track, d->tracks ) { 0278 QString name = VcdTrackKeysModel::trackName( track ); 0279 QIcon icon = VcdTrackKeysModel::trackIcon( track ); 0280 0281 d->pbc_previous->addItem( icon, name ); 0282 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::PREVIOUS ) ) 0283 iPrevious = d->pbc_previous->count() - 1; 0284 0285 d->pbc_next->addItem( icon, name ); 0286 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::NEXT ) ) 0287 iNext = d->pbc_next->count() - 1; 0288 0289 d->pbc_return->addItem( icon, name ); 0290 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::RETURN ) ) 0291 iReturn = d->pbc_return->count() - 1; 0292 0293 d->pbc_default->addItem( icon, name ); 0294 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::DEFAULT ) ) 0295 iDefault = d->pbc_default->count() - 1; 0296 0297 d->comboAfterTimeout->addItem( icon, name ); 0298 if ( track == selectedTrack->getPbcTrack( K3b::VcdTrack::AFTERTIMEOUT ) ) 0299 iAfterTimeOut = d->comboAfterTimeout->count() - 1; 0300 } 0301 0302 // add Event Disabled 0303 QPixmap disabledIcon = QIcon::fromTheme( "process-stop" ).pixmap( KIconLoader::SizeSmall ); 0304 QString disabledName = i18n( "Event Disabled" ); 0305 d->pbc_previous->addItem( disabledIcon, disabledName ); 0306 d->pbc_next->addItem( disabledIcon, disabledName ); 0307 d->pbc_return->addItem( disabledIcon, disabledName ); 0308 d->pbc_default->addItem( disabledIcon, disabledName ); 0309 d->comboAfterTimeout->addItem( disabledIcon, disabledName ); 0310 0311 // add VideoCD End 0312 QString endName = VcdTrackKeysModel::trackName( 0 ); 0313 QIcon endIcon = VcdTrackKeysModel::trackIcon( 0 ); 0314 d->pbc_previous->addItem( endIcon, endName ); 0315 d->pbc_next->addItem( endIcon, endName ); 0316 d->pbc_return->addItem( endIcon, endName ); 0317 d->pbc_default->addItem( endIcon, endName ); 0318 d->comboAfterTimeout->addItem( endIcon, endName ); 0319 0320 int count = d->tracks.count(); 0321 0322 if ( iPrevious < 0 ) 0323 d->pbc_previous->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::PREVIOUS ) ); 0324 else 0325 d->pbc_previous->setCurrentIndex( iPrevious ); 0326 0327 if ( iNext < 0 ) 0328 d->pbc_next->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::NEXT ) ); 0329 else 0330 d->pbc_next->setCurrentIndex( iNext ); 0331 0332 if ( iReturn < 0 ) 0333 d->pbc_return->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::RETURN ) ); 0334 else 0335 d->pbc_return->setCurrentIndex( iReturn ); 0336 0337 if ( iDefault < 0 ) 0338 d->pbc_default->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::DEFAULT ) ); 0339 else 0340 d->pbc_default->setCurrentIndex( iDefault ); 0341 0342 if ( iAfterTimeOut < 0 ) 0343 d->comboAfterTimeout->setCurrentIndex( count + selectedTrack->getNonPbcTrack( K3b::VcdTrack::AFTERTIMEOUT ) ); 0344 else 0345 d->comboAfterTimeout->setCurrentIndex( iAfterTimeOut ); 0346 0347 0348 d->spin_waittime->setValue( selectedTrack->getWaitTime() ); 0349 d->spin_times->setValue( selectedTrack->getPlayTime() ); 0350 0351 d->check_reactivity->setChecked( selectedTrack->Reactivity() ); 0352 d->check_pbc->setChecked( d->doc->vcdOptions()->PbcEnabled() ); 0353 0354 d->check_usekeys->setChecked( selectedTrack->PbcNumKeys() ); 0355 d->check_overwritekeys->setChecked( selectedTrack->PbcNumKeysUserdefined() ); 0356 0357 if( selectedTrack->PbcNumKeysUserdefined() ) { 0358 d->keys_model->setKeys( selectedTrack->DefinedNumKey() ); 0359 } 0360 else { 0361 QMap<int, VcdTrack*> keys; 0362 keys.insert( 1, selectedTrack ); 0363 d->keys_model->setKeys( keys ); 0364 } 0365 0366 d->mainTabbed->setTabEnabled( d->mainTabbed->indexOf( d->widgetnumkeys ), 0367 d->check_usekeys->isChecked() && d->check_pbc->isChecked() ); 0368 } 0369 0370 void K3b::VcdTrackDialog::prepareGui() 0371 { 0372 // ///////////////////////////////////////////////// 0373 // FILE-INFO BOX 0374 // ///////////////////////////////////////////////// 0375 QGroupBox* groupFileInfo = new QGroupBox( i18n( "File Info" ), this ); 0376 0377 QGridLayout* groupFileInfoLayout = new QGridLayout( groupFileInfo ); 0378 groupFileInfoLayout->setAlignment( Qt::AlignTop ); 0379 0380 d->labelMimeType = new QLabel( groupFileInfo ); 0381 0382 d->displayFileName = new KSqueezedTextLabel( groupFileInfo ); 0383 d->displayFileName->setText( i18n( "Filename" ) ); 0384 d->displayFileName->setAlignment( Qt::AlignTop | Qt::AlignLeft ); 0385 0386 QLabel* labelSize = new QLabel( i18n( "Size:" ), groupFileInfo ); 0387 QLabel* labelLength = new QLabel( i18n( "Length:" ), groupFileInfo ); 0388 QLabel* labelMuxrate = new QLabel( i18n( "Muxrate:" ), groupFileInfo ); 0389 0390 d->displaySize = new QLabel( groupFileInfo ); 0391 d->displaySize->setText( "0.0 MB" ); 0392 d->displaySize->setAlignment( Qt::AlignVCenter | Qt::AlignRight ); 0393 0394 d->displayLength = new QLabel( groupFileInfo ); 0395 d->displayLength->setText( "0:0:0" ); 0396 d->displayLength->setAlignment( Qt::AlignVCenter | Qt::AlignRight ); 0397 0398 d->muxrate = new QLabel( groupFileInfo ); 0399 d->muxrate->setText( i18n( "%1 bit/s" ,QString::number( 0 ) )); 0400 d->muxrate->setAlignment( Qt::AlignVCenter | Qt::AlignRight ); 0401 0402 QFrame* fileInfoLine = new QFrame( groupFileInfo ); 0403 fileInfoLine->setFrameStyle( QFrame::HLine | QFrame::Sunken ); 0404 0405 groupFileInfoLayout->addWidget( d->labelMimeType, 0, 0 ); 0406 groupFileInfoLayout->addWidget( d->displayFileName, 0, 1, 2, 1 ); 0407 groupFileInfoLayout->addWidget( fileInfoLine, 2, 0, 1, 2 ); 0408 groupFileInfoLayout->addWidget( labelLength, 3, 0 ); 0409 groupFileInfoLayout->addWidget( labelSize, 4, 0 ); 0410 groupFileInfoLayout->addWidget( labelMuxrate, 5, 0 ); 0411 groupFileInfoLayout->addWidget( d->displayLength, 3, 1 ); 0412 groupFileInfoLayout->addWidget( d->displaySize, 4, 1 ); 0413 groupFileInfoLayout->addWidget( d->muxrate, 5, 1 ); 0414 0415 groupFileInfoLayout->setRowStretch( 6, 1 ); 0416 groupFileInfoLayout->setColumnStretch( 1, 1 ); 0417 0418 QFont f( d->displayLength->font() ); 0419 f.setBold( true ); 0420 d->displayLength->setFont( f ); 0421 d->displaySize->setFont( f ); 0422 d->muxrate->setFont( f ); 0423 0424 d->mainTabbed = new QTabWidget( this ); 0425 0426 QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel, this ); 0427 connect( buttonBox, SIGNAL(accepted()), SLOT(accept()) ); 0428 connect( buttonBox, SIGNAL(rejected()), SLOT(reject()) ); 0429 connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL(clicked()), SLOT(slotApply()) ); 0430 0431 QGridLayout* mainLayout = new QGridLayout( this ); 0432 mainLayout->addWidget( groupFileInfo, 0, 0 ); 0433 mainLayout->addWidget( d->mainTabbed, 0, 1 ); 0434 mainLayout->addWidget( buttonBox, 1, 0, 1, 2 ); 0435 } 0436 0437 void K3b::VcdTrackDialog::setupPbcTab() 0438 { 0439 // ///////////////////////////////////////////////// 0440 // Playback Control TAB 0441 // ///////////////////////////////////////////////// 0442 QWidget * w = new QWidget( d->mainTabbed ); 0443 0444 ////////////////////////////////////////////////////////////////////////////////////////// 0445 QGroupBox* groupOptions = new QGroupBox( i18n( "Settings" ), w ); 0446 0447 d->check_pbc = new QCheckBox( i18n( "Enable playback control (for the whole CD)" ), groupOptions ); 0448 d->check_usekeys = new QCheckBox( i18n( "Use numeric keys" ), groupOptions ); 0449 d->check_usekeys->setEnabled( false ); 0450 d->check_reactivity = new QCheckBox( i18n( "Reactivity delayed to the end of playing track" ), groupOptions ); 0451 d->check_reactivity->setEnabled( false ); 0452 0453 QVBoxLayout* groupOptionsLayout = new QVBoxLayout( groupOptions ); 0454 groupOptionsLayout->addWidget( d->check_pbc ); 0455 groupOptionsLayout->addWidget( d->check_usekeys ); 0456 groupOptionsLayout->addWidget( d->check_reactivity ); 0457 0458 ////////////////////////////////////////////////////////////////////////////////////////// 0459 d->groupPlay = new QGroupBox( i18n( "Playing" ), w ); 0460 0461 QGridLayout* groupPlayLayout = new QGridLayout( d->groupPlay ); 0462 groupPlayLayout->setAlignment( Qt::AlignTop ); 0463 0464 QLabel* labelPlaying = new QLabel( i18n( "Playing track" ) , d->groupPlay ); 0465 0466 d->spin_times = new QSpinBox( d->groupPlay ); 0467 d->spin_times->setValue( 1 ); 0468 d->spin_times->setSuffix( i18n( " time(s)" ) ); 0469 d->spin_times->setSpecialValueText( i18n( "forever" ) ); 0470 0471 ////////////////////////////////////////////////////////////////////////////////////////// 0472 d->labelWait = new QLabel( i18n( "then wait" ), d->groupPlay ); 0473 d->spin_waittime = new QSpinBox( d->groupPlay ); 0474 d->spin_waittime->setMinimum( -1 ); 0475 d->spin_waittime->setValue( 0 ); 0476 // d->spin_waittime->setEnabled( false ); 0477 d->spin_waittime->setSuffix( i18n( " seconds" ) ); 0478 d->spin_waittime->setSpecialValueText( i18n( "infinite" ) ); 0479 0480 d->labelAfterTimeout = new QLabel( i18n( "after timeout playing" ), d->groupPlay ); 0481 // d->labelAfterTimeout->setEnabled( false ); 0482 d->comboAfterTimeout = new QComboBox( /*K3b::CutComboBox::SQUEEZE, */d->groupPlay ); 0483 // d->comboAfterTimeout->setEnabled( false ); 0484 0485 groupPlayLayout->addWidget( labelPlaying, 1, 0 ); 0486 groupPlayLayout->addWidget( d->spin_times, 1, 1 ); 0487 groupPlayLayout->addWidget( d->labelWait, 1, 2 ); 0488 groupPlayLayout->addWidget( d->spin_waittime, 1, 3 ); 0489 groupPlayLayout->addWidget( d->labelAfterTimeout, 2, 1, 1, 3 ); 0490 groupPlayLayout->addWidget( d->comboAfterTimeout, 3, 1, 1, 3 ); 0491 groupPlayLayout->setColumnStretch( 1, 1 ); 0492 groupPlayLayout->setColumnStretch( 3, 1 ); 0493 0494 ////////////////////////////////////////////////////////////////////////////////////////// 0495 d->groupPbc = new QGroupBox( i18n( "Key Pressed Interaction" ), w ); 0496 0497 QLabel* labelPbc_previous = new QLabel( i18n( "Previous:" ), d->groupPbc ); 0498 QLabel* labelPbc_next = new QLabel( i18n( "Next:" ), d->groupPbc ); 0499 QLabel* labelPbc_return = new QLabel( i18n( "Return:" ), d->groupPbc ); 0500 QLabel* labelPbc_default = new QLabel( i18n( "Default:" ), d->groupPbc ); 0501 0502 d->pbc_previous = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc ); 0503 d->pbc_next = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc ); 0504 d->pbc_return = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc ); 0505 d->pbc_default = new QComboBox( /*K3b::CutComboBox::SQUEEZE,*/ d->groupPbc ); 0506 0507 QFormLayout* groupPbcLayout = new QFormLayout( d->groupPbc ); 0508 groupPbcLayout->setAlignment( Qt::AlignTop ); 0509 groupPbcLayout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow ); 0510 groupPbcLayout->addRow( labelPbc_previous, d->pbc_previous ); 0511 groupPbcLayout->addRow( labelPbc_next, d->pbc_next ); 0512 groupPbcLayout->addRow( labelPbc_return, d->pbc_return ); 0513 groupPbcLayout->addRow( labelPbc_default, d->pbc_default ); 0514 0515 QVBoxLayout* grid = new QVBoxLayout( w ); 0516 grid->setAlignment( Qt::AlignTop ); 0517 grid->addWidget( groupOptions ); 0518 grid->addWidget( d->groupPlay ); 0519 grid->addWidget( d->groupPbc ); 0520 0521 d->mainTabbed->addTab( w, i18n( "Playback Control" ) ); 0522 0523 d->groupPlay->setEnabled( false ); 0524 d->groupPbc->setEnabled( false ); 0525 0526 connect( d->check_pbc, SIGNAL(toggled(bool)), this, SLOT(slotPbcToggled(bool)) ); 0527 connect( d->spin_times, SIGNAL(valueChanged(int)), this, SLOT(slotPlayTimeChanged(int)) ); 0528 connect( d->spin_waittime, SIGNAL(valueChanged(int)), this, SLOT(slotWaitTimeChanged(int)) ); 0529 connect( d->check_usekeys, SIGNAL(toggled(bool)), this, SLOT(slotUseKeysToggled(bool)) ); 0530 } 0531 0532 void K3b::VcdTrackDialog::setupPbcKeyTab() 0533 { 0534 // ///////////////////////////////////////////////// 0535 // Playback Control Numeric Key's TAB 0536 // ///////////////////////////////////////////////// 0537 d->widgetnumkeys = new QWidget( d->mainTabbed ); 0538 0539 d->check_overwritekeys = new QCheckBox( i18n( "Overwrite default assignment" ), d->widgetnumkeys ); 0540 0541 d->keys_model = new VcdTrackKeysModel( KEY_COUNT, this ); 0542 d->keys_delegate = new VcdTrackKeysDelegate( d->tracks, this ); 0543 0544 d->keys_view = new QTreeView( d->widgetnumkeys ); 0545 d->keys_view->setEnabled( false ); 0546 d->keys_view->setModel( d->keys_model ); 0547 d->keys_view->setItemDelegateForColumn( VcdTrackKeysModel::PlayingColumn, d->keys_delegate ); 0548 d->keys_view->setAllColumnsShowFocus( true ); 0549 d->keys_view->setRootIsDecorated( false ); 0550 d->keys_view->setEditTriggers( QAbstractItemView::AllEditTriggers ); 0551 d->keys_view->header()->setSectionResizeMode( VcdTrackKeysModel::KeyColumn, QHeaderView::ResizeToContents ); 0552 0553 QVBoxLayout* layout = new QVBoxLayout( d->widgetnumkeys ); 0554 layout->addWidget( d->check_overwritekeys ); 0555 layout->addWidget( d->keys_view ); 0556 0557 d->mainTabbed->addTab( d->widgetnumkeys, i18n( "Numeric Keys" ) ); 0558 0559 connect( d->check_overwritekeys, SIGNAL(toggled(bool)), d->keys_view, SLOT(setEnabled(bool)) ); 0560 } 0561 0562 void K3b::VcdTrackDialog::setupAudioTab() 0563 { 0564 // ///////////////////////////////////////////////// 0565 // AUDIO TAB 0566 // ///////////////////////////////////////////////// 0567 QWidget * w = new QWidget( d->mainTabbed ); 0568 0569 d->mpegver_audio = new QLabel( w ); 0570 d->rate_audio = new QLabel( w ); 0571 d->sampling_frequency_audio = new QLabel( w ); 0572 d->mode_audio = new QLabel( w ); 0573 d->copyright_audio = new QLabel( w ); 0574 0575 d->mpegver_audio->setFrameShape( QLabel::StyledPanel ); 0576 d->rate_audio->setFrameShape( QLabel::StyledPanel ); 0577 d->sampling_frequency_audio->setFrameShape( QLabel::StyledPanel ); 0578 d->mode_audio->setFrameShape( QLabel::StyledPanel ); 0579 d->copyright_audio->setFrameShape( QLabel::StyledPanel ); 0580 0581 d->mpegver_audio->setFrameShadow( QLabel::Sunken ); 0582 d->rate_audio->setFrameShadow( QLabel::Sunken ); 0583 d->sampling_frequency_audio->setFrameShadow( QLabel::Sunken ); 0584 d->mode_audio->setFrameShadow( QLabel::Sunken ); 0585 d->copyright_audio->setFrameShadow( QLabel::Sunken ); 0586 0587 QFormLayout* layout = new QFormLayout( w ); 0588 layout->setAlignment( Qt::AlignTop ); 0589 layout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow ); 0590 layout->addRow( new QLabel( i18n( "Type:" ), w ), d->mpegver_audio ); 0591 layout->addRow( new QLabel( i18n( "Rate:" ), w ), d->rate_audio ); 0592 layout->addRow( new QLabel( i18n( "Sampling frequency:" ), w ), d->sampling_frequency_audio ); 0593 layout->addRow( new QLabel( i18n( "Mode:" ), w ), d->mode_audio ); 0594 layout->addRow( new QLabel( i18n( "Copyright:" ), w ), d->copyright_audio ); 0595 0596 d->mainTabbed->addTab( w, i18n( "Audio" ) ); 0597 0598 } 0599 0600 void K3b::VcdTrackDialog::setupVideoTab() 0601 { 0602 // ///////////////////////////////////////////////// 0603 // VIDEO TAB 0604 // ///////////////////////////////////////////////// 0605 QWidget * w = new QWidget( d->mainTabbed ); 0606 0607 d->mpegver_video = new QLabel( w ); 0608 d->rate_video = new QLabel( w ); 0609 d->chromaformat_video = new QLabel( w ); 0610 d->format_video = new QLabel( w ); 0611 d->resolution_video = new QLabel( w ); 0612 d->highresolution_video = new QLabel( w ); 0613 0614 d->mpegver_video->setFrameShape( QLabel::StyledPanel ); 0615 d->rate_video->setFrameShape( QLabel::StyledPanel ); 0616 d->chromaformat_video->setFrameShape( QLabel::StyledPanel ); 0617 d->format_video->setFrameShape( QLabel::StyledPanel ); 0618 d->resolution_video->setFrameShape( QLabel::StyledPanel ); 0619 d->highresolution_video->setFrameShape( QLabel::StyledPanel ); 0620 0621 d->mpegver_video->setFrameShadow( QLabel::Sunken ); 0622 d->rate_video->setFrameShadow( QLabel::Sunken ); 0623 d->chromaformat_video->setFrameShadow( QLabel::Sunken ); 0624 d->format_video->setFrameShadow( QLabel::Sunken ); 0625 d->resolution_video->setFrameShadow( QLabel::Sunken ); 0626 d->highresolution_video->setFrameShadow( QLabel::Sunken ); 0627 0628 QFormLayout* layout = new QFormLayout( w ); 0629 layout->setAlignment( Qt::AlignTop ); 0630 layout->setFieldGrowthPolicy( QFormLayout::AllNonFixedFieldsGrow ); 0631 layout->addRow( new QLabel( i18n( "Type:" ), w ), d->mpegver_video ); 0632 layout->addRow( new QLabel( i18n( "Rate:" ), w ), d->rate_video ); 0633 layout->addRow( new QLabel( i18n( "Chroma format:" ), w ), d->chromaformat_video ); 0634 layout->addRow( new QLabel( i18n( "Video format:" ), w ), d->format_video ); 0635 layout->addRow( new QLabel( i18n( "Resolution:" ), w ), d->resolution_video ); 0636 layout->addRow( new QLabel( i18n( "High resolution:" ), w ), d->highresolution_video ); 0637 0638 d->mainTabbed->addTab( w, i18n( "Video" ) ); 0639 } 0640 0641 void K3b::VcdTrackDialog::slotPlayTimeChanged( int value ) 0642 { 0643 if ( value == 0 ) { 0644 d->labelWait->setEnabled( false ); 0645 d->spin_waittime->setEnabled( false ); 0646 d->labelAfterTimeout->setEnabled( false ); 0647 d->comboAfterTimeout->setEnabled( false ); 0648 } else { 0649 d->labelWait->setEnabled( true ); 0650 d->spin_waittime->setEnabled( true ); 0651 if ( d->spin_waittime->value() > -1 ) { 0652 d->labelAfterTimeout->setEnabled( true ); 0653 d->comboAfterTimeout->setEnabled( true ); 0654 } 0655 } 0656 } 0657 0658 void K3b::VcdTrackDialog::slotWaitTimeChanged( int value ) 0659 { 0660 if ( value < 0 || !d->labelWait->isEnabled() ) { 0661 d->labelAfterTimeout->setEnabled( false ); 0662 d->comboAfterTimeout->setEnabled( false ); 0663 } else { 0664 d->labelAfterTimeout->setEnabled( true ); 0665 d->comboAfterTimeout->setEnabled( true ); 0666 } 0667 } 0668 0669 void K3b::VcdTrackDialog::slotPbcToggled( bool checked ) 0670 { 0671 d->groupPlay->setEnabled( checked ); 0672 d->groupPbc->setEnabled( checked ); 0673 d->check_usekeys->setEnabled( checked ); 0674 slotUseKeysToggled( checked && d->check_usekeys->isChecked() ); 0675 d->check_reactivity->setEnabled( checked ); 0676 if ( checked ) 0677 slotWaitTimeChanged( d->spin_waittime->value() ); 0678 } 0679 0680 void K3b::VcdTrackDialog::slotUseKeysToggled( bool checked ) 0681 { 0682 d->mainTabbed->setTabEnabled( d->mainTabbed->indexOf( d->widgetnumkeys ), checked ); 0683 } 0684 0685 #include "moc_k3bvcdtrackdialog.cpp"