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"