You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
k3b/src/projects/k3bvcdburndialog.cpp

1089 lines
51 KiB

/*
*
* $Id: k3bvcdburndialog.cpp 619556 2007-01-03 17:38:12Z trueg $
* Copyright (C) 2003-2004 Christian Kvasny <chris@k3b.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See the file "COPYING" for the exact licensing terms.
*/
#include <tqcheckbox.h>
#include <tqgroupbox.h>
#include <tqspinbox.h>
#include <tqbuttongroup.h>
#include <tqradiobutton.h>
#include <tqlabel.h>
#include <tqlineedit.h>
#include <tqlayout.h>
#include <tqtooltip.h>
#include <tqwhatsthis.h>
#include <tqgrid.h>
#include <tqtoolbutton.h>
#include <tqfileinfo.h>
#include <klocale.h>
#include <kconfig.h>
#include <kmessagebox.h>
#include <kstandarddirs.h>
#include <kio/global.h>
#include <kapplication.h>
#include "k3bvcdburndialog.h"
#include "k3bvcddoc.h"
#include "k3bvcdoptions.h"
#include <k3bdevice.h>
#include <k3bcore.h>
#include <k3bwriterselectionwidget.h>
#include <k3btempdirselectionwidget.h>
#include <k3bstdguiitems.h>
#include <k3bglobals.h>
#include <k3bwritingmodewidget.h>
#include <k3bexternalbinmanager.h>
#include <k3bvalidators.h>
K3bVcdBurnDialog::K3bVcdBurnDialog( K3bVcdDoc* _doc, TQWidget *tqparent, const char *name, bool modal )
: K3bProjectBurnDialog( _doc, tqparent, name, modal )
{
m_vcdDoc = _doc;
prepareGui();
TQString vcdType;
switch ( m_vcdDoc->vcdType() ) {
case K3bVcdDoc::VCD11:
vcdType = i18n( "Video CD (Version 1.1)" );
case K3bVcdDoc::VCD20:
vcdType = i18n( "Video CD (Version 2.0)" );
case K3bVcdDoc::SVCD10:
vcdType = i18n( "Super Video CD" );
case K3bVcdDoc::HTQVCD:
vcdType = i18n( "High-Quality Video CD" );
default:
vcdType = i18n( "Video CD" );
}
setTitle( vcdType, i18n( "1 MPEG (%1)", "%n MPEGs (%1)",
m_vcdDoc->tracks() ->count() ).tqarg( KIO::convertSize( m_vcdDoc->size() ) ) );
const K3bExternalBin* cdrecordBin = k3bcore->externalBinManager() ->binObject( "cdrecord" );
if ( cdrecordBin && cdrecordBin->hasFeature( "cuefile" ) )
m_writerSelectionWidget->setSupportedWritingApps( K3b::CDRDAO | K3b::CDRECORD );
else
m_writerSelectionWidget->setSupportedWritingApps( K3b::CDRDAO );
m_checkCacheImage->hide();
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding );
m_optionGroupLayout->addItem( spacer );
setupVideoCdTab();
setupLabelTab();
setupAdvancedTab();
connect( m_spinVolumeCount, TQT_SIGNAL( valueChanged( int ) ), this, TQT_SLOT( slotSpinVolumeCount() ) );
connect( m_groupVcdFormat, TQT_SIGNAL( clicked( int ) ), this, TQT_SLOT( slotVcdTypeClicked( int ) ) );
connect( m_checkCdiSupport, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotCdiSupportChecked( bool ) ) );
connect( m_checkAutoDetect, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotAutoDetect( bool ) ) );
connect( m_checkGaps, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotGapsChecked( bool ) ) );
// ToolTips
// -------------------------------------------------------------------------
TQToolTip::add
( m_radioVcd11, i18n( "Select Video CD type %1" ).tqarg( "(VCD 1.1)" ) );
TQToolTip::add
( m_radioVcd20, i18n( "Select Video CD type %1" ).tqarg( "(VCD 2.0)" ) );
TQToolTip::add
( m_radioSvcd10, i18n( "Select Video CD type %1" ).tqarg( "(SVCD 1.0)" ) );
TQToolTip::add
( m_radioHqVcd10, i18n( "Select Video CD type %1" ).tqarg( "(HQ-VCD 1.0)" ) );
TQToolTip::add
( m_checkAutoDetect, i18n( "Automatic video type recognition." ) );
TQToolTip::add
( m_checkNonCompliant, i18n( "Non-compliant compatibility mode for broken devices" ) );
TQToolTip::add
( m_checkVCD30interpretation, i18n( "Chinese VCD3.0 track interpretation" ) );
TQToolTip::add
( m_check2336, i18n( "Use 2336 byte sectors for output" ) );
TQToolTip::add
( m_editVolumeId, i18n( "Specify ISO volume label for Video CD" ) );
TQToolTip::add
( m_editAlbumId, i18n( "Specify album id for VideoCD set" ) );
TQToolTip::add
( m_spinVolumeNumber, i18n( "Specify album set sequence number ( <= volume-count )" ) );
TQToolTip::add
( m_spinVolumeCount, i18n( "Specify number of volumes in album set" ) );
TQToolTip::add
( m_checkCdiSupport, i18n( "Enable CD-i Application Support for VideoCD Type 1.1 & 2.0" ) );
TQToolTip::add
( m_editCdiCfg, i18n( "Configuration parameters (only for VCD 2.0)" ) );
TQToolTip::add
( m_checkPbc, i18n( "Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats." ) );
TQToolTip::add
( m_checkSegmentFolder, i18n( "Add always an empty `/SEGMENT' directory" ) );
TQToolTip::add
( m_checkRelaxedAps, i18n( "This controls whether APS constraints are strict or relaxed. " ) );
TQToolTip::add
( m_checkUpdateScanOffsets, i18n( "This controls whether to update the scan data information contained in the MPEG-2 video streams." ) );
TQToolTip::add
( m_labelRestriction, i18n( "This element allows to set viewing restrictions which may be interpreted by the playing device." ) );
TQToolTip::add
( m_checkGaps, i18n( "This option allows customization of Gaps and Margins." ) );
TQToolTip::add
( m_labelPreGapLeadout, i18n( "Used to set the number of empty sectors added before the lead-out area begins." ) );
TQToolTip::add
( m_labelPreGapTrack, i18n( "Used to set the track pre-gap for all tracks in sectors globally." ) );
TQToolTip::add
( m_labelFrontMarginTrack, i18n( "Sets the front margin for sequence items." ) );
TQToolTip::add
( m_labelRearMarginTrack, i18n( "Sets the rear margin for sequence items." ) );
// What's This info
// -------------------------------------------------------------------------
TQWhatsThis::add
( m_radioVcd11, i18n( "<p>This is the most basic <b>Video CD</b> specification dating back to 1993, which has the following characteristics:"
"<ul><li>One mode2 mixed form ISO-9660 track containing file pointers to the information areas.</li>"
"<li>Up to 98 multiplex-ed MPEG-1 audio/video streams or CD-DA audio tracks.</li>"
"<li>Up to 500 MPEG sequence entry points used as chapter divisions.</li></ul>"
"<p>The Video CD specification requires the multiplex-ed MPEG-1 stream to have a CBR of less than 174300 bytes (1394400 bits) per second in order to accommodate single speed CD-ROM drives.<br>"
"The specification allows for the following two resolutions:"
"<ul><li>352 x 240 @ 29.97 Hz (NTSC SIF).</li>"
"<li>352 x 240 @ 23.976 Hz (FILM SIF).</li></ul>"
"<p>The CBR MPEG-1, layer II audio stream is fixed at 224 kbps with 1 stereo or 2 mono channels."
"<p><b>It is recommended to keep the video bit-rate under 1151929.1 bps.</b>" ) );
TQWhatsThis::add
( m_radioVcd20, i18n( "<p>About two years after the Video CD 1.1 specification came out, an improved <b>Video CD 2.0</b> standard was published in 1995."
"<p>This one added the following items to the features already available in the Video CD 1.1 specification:"
"<ul><li>Support for MPEG segment play items (<b>\"SPI\"</b>), consisting of still pictures, motion pictures and/or audio (only) streams was added.</li>"
"<li>Note Segment Items::.</li>"
"<li>Support for interactive playback control (<b>\"PBC\"</b>) was added.</li>"
"<li>Support for playing related access by providing a scan point index file was added. (<b>\"/EXT/SCANDATA.DAT\"</b>)</li>"
"<li>Support for closed captions.</li>"
"<li>Support for mixing NTSC and PAL content.</li></ul>"
"<p>By adding PAL support to the Video CD 1.1 specification, the following resolutions became available:"
"<ul><li>352 x 240 @ 29.97 Hz (NTSC SIF).</li>"
"<li>352 x 240 @ 23.976 Hz (FILM SIF).</li>"
"<li>352 x 288 @ 25 Hz (PAL SIF).</li></ul>"
"<p>For segment play items the following audio encodings became available:"
"<ul><li>Joint stereo, stereo or dual channel audio streams at 128, 192, 224 or 384 kbit/sec bit-rate.</li>"
"<li>Mono audio streams at 64, 96 or 192 kbit/sec bit-rate.</li></ul>"
"<p>Also the possibility to have audio only streams and still pictures was provided."
"<p><b>The bit-rate of multiplex-ed streams should be kept under 174300 bytes/sec (except for single still picture items) in order to accommodate single speed drives.</b>" ) );
TQWhatsThis::add
( m_radioSvcd10, i18n( "<p>With the upcoming of the DVD-V media, a new VCD standard had to be published in order to be able to keep up with technology, so the Super Video CD specification was called into life 1999."
"<p>In the midst of 2000 a full subset of this <b>Super Video CD</b> specification was published as <b>IEC-62107</b>."
"<p>As the most notable change over Video CD 2.0 is a switch from MPEG-1 CBR to MPEG-2 VBR encoding for the video stream was performed."
"<p>The following new features--building upon the Video CD 2.0 specification--are:"
"<ul><li>Use of MPEG-2 encoding instead of MPEG-1 for the video stream.</li>"
"<li>Allowed VBR encoding of MPEG-1 audio stream.</li>"
"<li>Higher resolutions (see below) for video stream resolution.</li>"
"<li>Up to 4 overlay graphics and text (<b>\"OGT\"</b>) sub-channels for user switchable subtitle displaying in addition to the already existing closed caption facility.</li>"
"<li>Command lists for controlling the SVCD virtual machine.</li></ul>"
"<p>For the <b>Super Video CD</b>, only the following two resolutions are supported for motion video and (low resolution) still pictures:"
"<ul><li>480 x 480 @ 29.97 Hz (NTSC 2/3 D-2).</li>"
"<li>480 x 576 @ 25 Hz (PAL 2/3 D-2).</li></ul>" ) );
TQWhatsThis::add
( m_radioHqVcd10, i18n( "<p>This is actually just a minor variation defined in IEC-62107 on the Super Video CD 1.0 format for compatibility with current products in the market."
"<p>It differs from the Super Video CD 1.0 format in the following items:"
"<ul><li>The system profile tag field in <b>/SVCD/INFO.SVD</b> is set to <b>1</b> instead of <b>0</b>.</li>"
"<li>The system identification field value in <b>/SVCD/INFO.SVD</b> is set to <b>HQ-VCD</b> instead of <b>SUPERVCD</b>.</li>"
"<li><b>/EXT/SCANDATA.DAT</b> is mandatory instead of being optional.</li>"
"<li><b>/SVCD/SEARCH.DAT</b> is optional instead of being mandatory.</li></ul>" ) );
TQWhatsThis::add
( m_checkAutoDetect, i18n( "<p>If Autodetect is:</p>"
"<ul><li>ON then K3b will set the correct VideoCD type.</li>"
"<li>OFF then the correct VideoCD type needs to be set by the user.</li></ul>"
"<p>If you are not sure about the correct VideoCD type, it is best to turn Autodetect ON.</p>"
"<p>If you want to force the VideoCD type, you must turn Autodetect OFF. This is useful for some standalone DVD players without SVCD support.</p>" ) );
TQWhatsThis::add
( m_checkNonCompliant, i18n( "<ul><li>Rename <b>\"/MPEG2\"</b> folder on SVCDs to (non-compliant) \"/MPEGAV\".</li>"
"<li>Enables the use of the (deprecated) signature <b>\"ENTRYSVD\"</b> instead of <b>\"ENTRYVCD\"</b> for the file <b>\"/SVCD/ENTRY.SVD\"</b>.</li></ul>" ) );
TQWhatsThis::add
( m_checkVCD30interpretation, i18n( "<ul><li>Enables the use of the (deprecated) Chinese <b>\"/SVCD/TRACKS.SVD\"</b> format which differs from the format defined in the <b>IEC-62107</b> specification.</li></ul>"
"<p><b>The differences are most exposed on SVCDs containing more than one video track.</b>" ) );
TQWhatsThis::add
( m_check2336, i18n( "<p>though most devices will have problems with such an out-of-specification media."
"<p><b>You may want use this option for images longer than 80 minutes</b>" ) );
TQWhatsThis::add
( m_checkCdiSupport, i18n( "<p>To allow the play of Video-CDs on a CD-i player, the Video-CD standard requires that a CD-i application program must be present."
"<p>This program is designed to:"
"<ul><li>provide full play back control as defined in the PSD of the standard</l>"
"<li>be extremely simple to use and easy-to-learn for the end-user</li></ul>"
"<p>The program runs on CD-i players equipped with the CDRTOS 1.1(.1) operating system and a Digital Video extension cartridge." ) );
TQWhatsThis::add
( m_editCdiCfg, i18n( "<p>Configuration parameters only available for VideoCD 2.0"
"<p>The engine works perfectly well when used as-is."
"<p>You have the option to configure the VCD application."
"<p>You can adapt the color and/or the tqshape of the cursor and lots more." ) );
TQWhatsThis::add
( m_checkPbc, i18n( "<p>Playback control, PBC, is available for Video CD 2.0 and Super Video CD 1.0 disc formats."
"<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." ) );
TQWhatsThis::add
( m_checkSegmentFolder, i18n( "<p>Here you can specify that the folder <b>SEGMENT</b> should always be present."
"<p>Some DVD players need the folder to give a faultless rendition." ) );
TQWhatsThis::add
( m_checkRelaxedAps, i18n( "<p>An Access Point Sector, APS, is an MPEG video sector on the VCD/SVCD which is suitable to be jumped to directly."
"<p>APS are required for entry points and scantables. APS have to fulfil the requirement to precede every I-frame by a GOP header which shall be preceded by a sequence header in its turn."
"<p>The start codes of these 3 items are required to be contained all in the same MPEG pack/sector, thus forming a so-called access point sector."
"<p>This requirement can be relaxed by enabling the relaxed aps option, i.e. every sector containing an I-frame will be regarded as an APS."
"<p><b>Warning:</b> The sequence header is needed for a playing device to figure out display parameters, such as display resolution and frame rate, relaxing the aps requirement may lead to non-working entry points." ) );
TQWhatsThis::add
( m_checkUpdateScanOffsets, i18n( "<p>According to the specification, it is mandatory for Super Video CDs to encode scan information data into user data blocks in the picture layer of all intra coded picture."
"<p>It can be used by playing devices for implementing fast forward & fast reverse scanning."
"<p>The already existing scan information data can be updated by enabling the update scan offsets option." ) );
TQWhatsThis::add
( m_labelRestriction, i18n( "<p>Viewing Restriction may be interpreted by the playing device."
"<p>The allowed range goes from 0 to 3."
"<ul><li>0 = unrestricted, free to view for all</li>"
"<li>3 = restricted, content not suitable for ages under 18</li></ul>"
"<p>Actually, the exact meaning is not defined and is player dependant."
"<p><b>Most players ignore that value.<b>" ) );
TQWhatsThis::add
( m_checkGaps, i18n( "<p>This option allows customization of Gaps and Margins." ) );
TQWhatsThis::add
( m_labelPreGapLeadout, i18n( "<p>This option allows to set the number of empty sectors added before the lead-out area begins, i.e. the number of post-gap sectors."
"<p>The ECMA-130 specification requires the last data track before the lead-out to carry a post-gap of at least 150 sectors, which is used as default for this parameter."
"<p>Some operating systems may encounter I/O errors due to read-ahead issues when reading the last MPEG track if this parameter is set too low."
"<p>Allowed value content: [0..300]. Default: 150." ) );
TQWhatsThis::add
( m_labelPreGapTrack, i18n( "<p>Used to set the track pre-gap for all tracks in sectors globally."
"<p>The specification requires the pre-gaps to be at least 150 sectors long."
"<p>Allowed value content: [0..300]. Default: 150." ) );
TQWhatsThis::add
( m_labelFrontMarginTrack, i18n( "Margins are used to compensate for inaccurate sector-addressing issues on CD-ROM media. Interestingly, they have been abandoned for Super Video CDs."
"<p>For Video CD 1.0/1.1/2.0 this margin should be at least 15 sectors long."
"<p>Allowed value content: [0..150]. Default: 30 for Video CD 1.0/1.1/2.0, otherwise (i.e. Super Video CD 1.0 and HQ-VCD 1.0) 0." ) );
TQWhatsThis::add
( m_labelRearMarginTrack, i18n( "<p>Margins are used to compensate for inaccurate sector-addressing issues on CD-ROM media. Interestingly, they have been abandoned for Super Video CDs."
"<p>For Video CD 1.0/1.1/2.0 this margin should be at least 15 sectors long."
"<p>Allowed value content: [0..150]. Default: 45 for Video CD 1.0/1.1/2.0, otherwise 0." ) );
}
K3bVcdBurnDialog::~K3bVcdBurnDialog()
{}
void K3bVcdBurnDialog::setupAdvancedTab()
{
TQWidget * w = new TQWidget( this );
// ---------------------------------------------------- generic group ----
m_groupGeneric = new TQGroupBox( 5, Qt::Vertical, i18n( "Generic" ), w );
m_checkPbc = new TQCheckBox( i18n( "Playback Control (PBC)" ), m_groupGeneric );
m_checkSegmentFolder = new TQCheckBox( i18n( "SEGMENT Folder must always be present" ), m_groupGeneric );
m_checkRelaxedAps = new TQCheckBox( i18n( "Relaxed aps" ), m_groupGeneric );
m_checkUpdateScanOffsets = new TQCheckBox( i18n( "Update scan offsets" ), m_groupGeneric );
m_checkUpdateScanOffsets->setEnabled( false );
// -------------------------------------------- gaps & margins group ----
m_groupGaps = new TQGroupBox( 0, Qt::Vertical, i18n( "Gaps" ), w );
m_groupGaps->tqlayout() ->setSpacing( spacingHint() );
m_groupGaps->tqlayout() ->setMargin( marginHint() );
TQGridLayout* groupGapsLayout = new TQGridLayout( m_groupGaps->tqlayout() );
groupGapsLayout->tqsetAlignment( TQt::AlignTop );
m_checkGaps = new TQCheckBox( i18n( "Customize gaps and margins" ), m_groupGaps );
m_labelPreGapLeadout = new TQLabel( i18n( "Leadout pre gap (0..300):" ), m_groupGaps, "labelPreGapLeadout" );
m_spinPreGapLeadout = new TQSpinBox( m_groupGaps, "m_spinPreGapLeadout" );
m_spinPreGapLeadout->setMinValue( 0 );
m_spinPreGapLeadout->setMaxValue( 300 );
m_labelPreGapTrack = new TQLabel( i18n( "Track pre gap (0..300):" ), m_groupGaps, "labelPreGapTrack" );
m_spinPreGapTrack = new TQSpinBox( m_groupGaps, "m_spinPreGapTrack" );
m_spinPreGapTrack->setMinValue( 0 );
m_spinPreGapTrack->setMaxValue( 300 );
m_labelFrontMarginTrack = new TQLabel( i18n( "Track front margin (0..150):" ), m_groupGaps, "labelFrontMarginTrack" );
m_spinFrontMarginTrack = new TQSpinBox( m_groupGaps, "m_spinFrontMarginTrack" );
m_spinFrontMarginTrack->setMinValue( 0 );
m_spinFrontMarginTrack->setMaxValue( 150 );
m_spinFrontMarginTrackSVCD = new TQSpinBox( m_groupGaps, "m_spinFrontMarginTrackSVCD" );
m_spinFrontMarginTrackSVCD->setMinValue( 0 );
m_spinFrontMarginTrackSVCD->setMaxValue( 150 );
m_spinFrontMarginTrackSVCD->setHidden( true );
m_labelRearMarginTrack = new TQLabel( i18n( "Track rear margin (0..150):" ), m_groupGaps, "labelRearMarginTrack" );
m_spinRearMarginTrack = new TQSpinBox( m_groupGaps, "m_spinRearMarginTrack" );
m_spinRearMarginTrack->setMinValue( 0 );
m_spinRearMarginTrack->setMaxValue( 150 );
m_spinRearMarginTrackSVCD = new TQSpinBox( m_groupGaps, "m_spinRearMarginTrackSVCD" );
m_spinRearMarginTrackSVCD->setMinValue( 0 );
m_spinRearMarginTrackSVCD->setMaxValue( 150 );
m_spinRearMarginTrackSVCD->setHidden( true );
groupGapsLayout->addMultiCellWidget( m_checkGaps, 1, 1, 0, 4 );
groupGapsLayout->addWidget( m_labelPreGapLeadout, 2, 0 );
groupGapsLayout->addWidget( m_spinPreGapLeadout, 2, 1 );
groupGapsLayout->addWidget( m_labelPreGapTrack, 2, 3 );
groupGapsLayout->addWidget( m_spinPreGapTrack, 2, 4 );
groupGapsLayout->addWidget( m_labelFrontMarginTrack, 3, 0 );
groupGapsLayout->addWidget( m_spinFrontMarginTrack, 3, 1 );
groupGapsLayout->addWidget( m_spinFrontMarginTrackSVCD, 3, 1 );
groupGapsLayout->addWidget( m_labelRearMarginTrack, 3, 3 );
groupGapsLayout->addWidget( m_spinRearMarginTrack, 3, 4 );
groupGapsLayout->addWidget( m_spinRearMarginTrackSVCD, 3, 4 );
groupGapsLayout->setRowStretch( 4, 0 );
groupGapsLayout->addMultiCellWidget( m_checkGaps, 1, 1, 0, 4 );
groupGapsLayout->addWidget( m_labelPreGapLeadout, 2, 0 );
groupGapsLayout->addWidget( m_spinPreGapLeadout, 2, 1 );
groupGapsLayout->addWidget( m_labelPreGapTrack, 2, 3 );
groupGapsLayout->addWidget( m_spinPreGapTrack, 2, 4 );
groupGapsLayout->addWidget( m_labelFrontMarginTrack, 3, 0 );
groupGapsLayout->addWidget( m_spinFrontMarginTrack, 3, 1 );
groupGapsLayout->addWidget( m_spinFrontMarginTrackSVCD, 3, 1 );
groupGapsLayout->addWidget( m_labelRearMarginTrack, 3, 3 );
groupGapsLayout->addWidget( m_spinRearMarginTrack, 3, 4 );
groupGapsLayout->addWidget( m_spinRearMarginTrackSVCD, 3, 4 );
groupGapsLayout->setRowStretch( 4, 0 );
groupGapsLayout->addMultiCellWidget( m_checkGaps, 1, 1, 0, 4 );
groupGapsLayout->addWidget( m_labelPreGapLeadout, 2, 0 );
groupGapsLayout->addWidget( m_spinPreGapLeadout, 2, 1 );
groupGapsLayout->addWidget( m_labelPreGapTrack, 2, 3 );
groupGapsLayout->addWidget( m_spinPreGapTrack, 2, 4 );
groupGapsLayout->addWidget( m_labelFrontMarginTrack, 3, 0 );
groupGapsLayout->addWidget( m_spinFrontMarginTrack, 3, 1 );
groupGapsLayout->addWidget( m_spinFrontMarginTrackSVCD, 3, 1 );
groupGapsLayout->addWidget( m_labelRearMarginTrack, 3, 3 );
groupGapsLayout->addWidget( m_spinRearMarginTrack, 3, 4 );
groupGapsLayout->addWidget( m_spinRearMarginTrackSVCD, 3, 4 );
groupGapsLayout->setRowStretch( 4, 0 );
groupGapsLayout->addMultiCellWidget( m_checkGaps, 1, 1, 0, 4 );
groupGapsLayout->addWidget( m_labelPreGapLeadout, 2, 0 );
groupGapsLayout->addWidget( m_spinPreGapLeadout, 2, 1 );
groupGapsLayout->addWidget( m_labelPreGapTrack, 2, 3 );
groupGapsLayout->addWidget( m_spinPreGapTrack, 2, 4 );
groupGapsLayout->addWidget( m_labelFrontMarginTrack, 3, 0 );
groupGapsLayout->addWidget( m_spinFrontMarginTrack, 3, 1 );
groupGapsLayout->addWidget( m_spinFrontMarginTrackSVCD, 3, 1 );
groupGapsLayout->addWidget( m_labelRearMarginTrack, 3, 3 );
groupGapsLayout->addWidget( m_spinRearMarginTrack, 3, 4 );
groupGapsLayout->addWidget( m_spinRearMarginTrackSVCD, 3, 4 );
groupGapsLayout->setRowStretch( 4, 0 );
// ------------------------------------------------------- misc group ----
m_groupMisc = new TQGroupBox( 0, Qt::Vertical, i18n( "Misc" ), w );
m_groupMisc->tqlayout() ->setSpacing( spacingHint() );
m_groupMisc->tqlayout() ->setMargin( marginHint() );
TQGridLayout* groupMiscLayout = new TQGridLayout( m_groupMisc->tqlayout() );
groupMiscLayout->tqsetAlignment( TQt::AlignTop );
m_labelRestriction = new TQLabel( i18n( "Restriction category (0..3):" ), m_groupMisc, "m_labelRestriction" );
m_spinRestriction = new TQSpinBox( m_groupMisc, "m_spinRestriction" );
m_spinRestriction->setMinValue( 0 );
m_spinRestriction->setMaxValue( 3 );
groupMiscLayout->addWidget( m_labelRestriction, 1, 0 );
groupMiscLayout->addMultiCellWidget( m_spinRestriction, 1, 1, 1, 4 );
groupMiscLayout->setRowStretch( 2, 0 );
// ----------------------------------------------------------------------
TQGridLayout* grid = new TQGridLayout( w );
grid->setMargin( marginHint() );
grid->setSpacing( spacingHint() );
grid->addWidget( m_groupGeneric, 0, 0 );
grid->addWidget( m_groupGaps, 1, 0 );
grid->addWidget( m_groupMisc, 2, 0 );
addPage( w, i18n( "Advanced" ) );
}
void K3bVcdBurnDialog::setupVideoCdTab()
{
TQWidget * w = new TQWidget( this );
// ---------------------------------------------------- Format group ----
m_groupVcdFormat = new TQButtonGroup( 4, Qt::Vertical, i18n( "Type" ), w );
m_radioVcd11 = new TQRadioButton( i18n( "VideoCD 1.1" ), m_groupVcdFormat );
m_radioVcd20 = new TQRadioButton( i18n( "VideoCD 2.0" ), m_groupVcdFormat );
m_radioSvcd10 = new TQRadioButton( i18n( "Super-VideoCD" ), m_groupVcdFormat );
m_radioHqVcd10 = new TQRadioButton( i18n( "HQ-VideoCD" ), m_groupVcdFormat );
m_groupVcdFormat->setExclusive( true );
// ---------------------------------------------------- Options group ---
m_groupOptions = new TQGroupBox( 5, Qt::Vertical, i18n( "Settings" ), w );
m_checkAutoDetect = new TQCheckBox( i18n( "Autodetect VideoCD type" ), m_groupOptions );
m_checkNonCompliant = new TQCheckBox( i18n( "Enable broken SVCD mode" ), m_groupOptions );
// Only available on SVCD Type
m_checkNonCompliant->setEnabled( false );
m_checkNonCompliant->setChecked( false );
m_checkVCD30interpretation = new TQCheckBox( i18n( "Enable %1 track interpretation" ).tqarg( "VCD 3.0" ), m_groupOptions );
// Only available on SVCD Type
m_checkVCD30interpretation->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_check2336 = new TQCheckBox( i18n( "Use 2336 byte sectors" ), m_groupOptions );
m_checkCdiSupport = new TQCheckBox( i18n( "Enable CD-i support" ), m_groupOptions );
// ------------------------------------------------- CD-i Application ---
m_groupCdi = new TQGroupBox( 4, Qt::Vertical, i18n( "VideoCD on CD-i" ), w );
m_editCdiCfg = new TQMultiLineEdit( m_groupCdi, "m_editCdiCfg" );
m_editCdiCfg->setFrameShape( TQTextEdit::NoFrame );
// ----------------------------------------------------------------------
TQGridLayout* grid = new TQGridLayout( w );
grid->setMargin( marginHint() );
grid->setSpacing( spacingHint() );
grid->addMultiCellWidget( m_groupVcdFormat, 0, 1, 0, 0 );
grid->addWidget( m_groupOptions, 0, 1 );
grid->addWidget( m_groupCdi, 1, 1 );
addPage( w, i18n( "Settings" ) );
}
void K3bVcdBurnDialog::setupLabelTab()
{
TQWidget * w = new TQWidget( this );
// ----------------------------------------------------------------------
// noEdit
TQLabel* labelSystemId = new TQLabel( i18n( "System:" ), w, "labelSystemId" );
TQLabel* labelApplicationId = new TQLabel( i18n( "Application:" ), w, "labelApplicationId" );
TQLabel* labelInfoSystemId = new TQLabel( vcdDoc() ->vcdOptions() ->systemId(), w, "labelInfoSystemId" );
TQLabel* labelInfoApplicationId = new TQLabel( vcdDoc() ->vcdOptions() ->applicationId(), w, "labelInfoApplicationId" );
labelInfoSystemId->setFrameShape( TQLabel::LineEditPanel );
labelInfoSystemId->setFrameShadow( TQLabel::Sunken );
labelInfoApplicationId->setFrameShape( TQLabel::LineEditPanel );
labelInfoApplicationId->setFrameShadow( TQLabel::Sunken );
TQToolTip::add
( labelInfoApplicationId, i18n( "ISO application id for VideoCD" ) );
// ----------------------------------------------------------------------
TQLabel* labelVolumeId = new TQLabel( i18n( "&Volume name:" ), w, "labelVolumeId" );
TQLabel* labelAlbumId = new TQLabel( i18n( "Volume &set name:" ), w, "labelAlbumId" );
TQLabel* labelVolumeCount = new TQLabel( i18n( "Volume set s&ize:" ), w, "labelVolumeCount" );
TQLabel* labelVolumeNumber = new TQLabel( i18n( "Volume set &number:" ), w, "labelVolumeNumber" );
TQLabel* labelPublisher = new TQLabel( i18n( "&Publisher:" ), w, "labelPublisher" );
m_editVolumeId = new TQLineEdit( w, "m_editVolumeId" );
m_editAlbumId = new TQLineEdit( w, "m_editAlbumId" );
m_spinVolumeNumber = new TQSpinBox( w, "m_editVolumeNumber" );
m_spinVolumeCount = new TQSpinBox( w, "m_editVolumeCount" );
m_editPublisher = new TQLineEdit( w, "m_editPublisher" );
// only ISO646 d-Characters
m_editVolumeId->setValidator( K3bValidators::iso646Validator( K3bValidators::Iso646_d, true, TQT_TQOBJECT(m_editVolumeId) ) );
m_editAlbumId->setValidator( K3bValidators::iso646Validator( K3bValidators::Iso646_d, true, TQT_TQOBJECT(m_editVolumeId) ) );
m_editVolumeId->setMaxLength( 32 );
m_editAlbumId->setMaxLength( 16 );
// only ISO646 a-Characters
m_editPublisher->setValidator( K3bValidators::iso646Validator( K3bValidators::Iso646_a, true, TQT_TQOBJECT(m_editVolumeId) ) );
m_editPublisher->setMaxLength( 128 );
m_spinVolumeNumber->setMinValue( 1 );
m_spinVolumeNumber->setMaxValue( 1 );
m_spinVolumeCount->setMinValue( 1 );
TQFrame* line = new TQFrame( w );
line->setFrameShape( TQFrame::HLine );
line->setFrameShadow( TQFrame::Sunken );
line->setFrameShape( TQFrame::HLine );
// ----------------------------------------------------------------------
TQGridLayout* grid = new TQGridLayout( w );
grid->setMargin( marginHint() );
grid->setSpacing( spacingHint() );
grid->addWidget( labelVolumeId, 1, 0 );
grid->addMultiCellWidget( m_editVolumeId, 1, 1, 1, 3 );
grid->addWidget( labelAlbumId, 2, 0 );
grid->addMultiCellWidget( m_editAlbumId, 2, 2, 1, 3 );
grid->addWidget( labelVolumeCount, 3, 0 );
grid->addWidget( m_spinVolumeCount, 3, 1 );
grid->addWidget( labelVolumeNumber, 3, 2 );
grid->addWidget( m_spinVolumeNumber, 3, 3 );
grid->addWidget( labelPublisher, 4, 0 );
grid->addMultiCellWidget( m_editPublisher, 4, 4, 1, 3 );
grid->addMultiCellWidget( line, 5, 5, 0, 3 );
grid->addWidget( labelSystemId, 6, 0 );
grid->addMultiCellWidget( labelInfoSystemId, 6, 6, 1, 3 );
grid->addWidget( labelApplicationId, 7, 0 );
grid->addMultiCellWidget( labelInfoApplicationId, 7, 7, 1, 3 );
// grid->addRowSpacing( 5, 15 );
grid->setRowStretch( 8, 1 );
// buddies
labelVolumeId->setBuddy( m_editVolumeId );
labelPublisher->setBuddy( m_editPublisher );
labelAlbumId->setBuddy( m_editAlbumId );
labelVolumeCount->setBuddy( m_spinVolumeCount );
labelVolumeNumber->setBuddy( m_spinVolumeNumber );
// tab order
setTabOrder( m_editVolumeId, m_editAlbumId );
setTabOrder( m_editAlbumId, m_spinVolumeCount );
setTabOrder( m_spinVolumeCount, m_spinVolumeNumber );
setTabOrder( m_spinVolumeNumber, m_editPublisher );
addPage( w, i18n( "Volume Descriptor" ) );
}
void K3bVcdBurnDialog::slotStartClicked()
{
if ( TQFile::exists( vcdDoc() ->vcdImage() ) ) {
if ( KMessageBox::warningContinueCancel( this, i18n( "Do you want to overwrite %1" ).tqarg( vcdDoc() ->vcdImage() ), i18n( "File Exists" ), i18n("Overwrite") )
!= KMessageBox::Continue )
return ;
}
K3bProjectBurnDialog::slotStartClicked();
}
void K3bVcdBurnDialog::loadK3bDefaults()
{
K3bVcdOptions o = K3bVcdOptions::defaults();
m_writingModeWidget->setWritingMode( K3b::WRITING_MODE_AUTO );
m_checkSimulate->setChecked( false );
m_checkRemoveBufferFiles->setChecked( true );
m_checkOnlyCreateImage->setChecked( false );
m_checkAutoDetect->setChecked( o.AutoDetect() );
m_groupVcdFormat->setDisabled( o.AutoDetect() );
m_check2336->setChecked( o.Sector2336() );
m_checkNonCompliant->setChecked( o.NonCompliantMode() );
m_checkVCD30interpretation->setChecked( o.VCD30interpretation() );
m_spinVolumeCount->setValue( o.volumeCount() );
m_spinVolumeNumber->setMaxValue( o.volumeCount() );
m_spinVolumeNumber->setValue( o.volumeNumber() );
// to not use i18n for this, so user can not use unsupported letters in her language pack
if ( m_radioSvcd10->isChecked() ) {
m_checkCdiSupport->setEnabled( false );
m_checkCdiSupport->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( true );
m_editVolumeId->setText( "SUPER_VIDEOCD" );
} else if ( m_radioHqVcd10->isChecked() ) {
m_checkCdiSupport->setEnabled( false );
m_checkCdiSupport->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( true );
m_editVolumeId->setText( "HTQ_VIDEOCD" );
} else {
m_checkCdiSupport->setEnabled( true );
m_checkCdiSupport->setChecked( o.CdiSupport() );
m_groupCdi->setEnabled( o.CdiSupport() );
m_checkUpdateScanOffsets->setEnabled( false );
m_editVolumeId->setText( "VIDEOCD" );
}
m_editPublisher->setText( o.publisher() );
m_editAlbumId->setText( o.albumId() );
m_checkPbc->setChecked( o.PbcEnabled() );
m_checkSegmentFolder->setChecked( o.SegmentFolder() );
m_checkRelaxedAps->setChecked( o.RelaxedAps() );
m_checkUpdateScanOffsets->setChecked( o.UpdateScanOffsets() );
m_spinRestriction->setValue( o.Restriction() );
m_checkGaps->setChecked( o.UseGaps() );
m_spinPreGapLeadout->setValue( o.PreGapLeadout() );
m_spinPreGapTrack->setValue( o.PreGapTrack() );
m_spinFrontMarginTrack->setValue( o.FrontMarginTrack() );
m_spinRearMarginTrack->setValue( o.RearMarginTrack() );
m_spinFrontMarginTrackSVCD->setValue( o.FrontMarginTrackSVCD() );
m_spinRearMarginTrackSVCD->setValue( o.RearMarginTrackSVCD() );
loadDefaultCdiConfig();
}
void K3bVcdBurnDialog::saveSettings()
{
K3bProjectBurnDialog::saveSettings();
// set VolumeID if empty
setVolumeID();
doc() ->setTempDir( m_tempDirSelectionWidget->tempPath() );
doc() ->setOnTheFly( false );
// save image file & path (.bin)
vcdDoc() ->setVcdImage( m_tempDirSelectionWidget->tempPath() + "/" + m_editVolumeId->text() + ".bin" );
vcdDoc() ->setVcdType( m_groupVcdFormat->id( m_groupVcdFormat->selected() ) );
vcdDoc() ->vcdOptions() ->setVolumeId( m_editVolumeId->text() );
vcdDoc() ->vcdOptions() ->setPublisher( m_editPublisher->text() );
vcdDoc() ->vcdOptions() ->setAlbumId( m_editAlbumId->text() );
vcdDoc() ->vcdOptions() ->setAutoDetect( m_checkAutoDetect->isChecked() );
vcdDoc() ->vcdOptions() ->setNonCompliantMode( m_checkNonCompliant->isChecked() );
vcdDoc() ->vcdOptions() ->setVCD30interpretation( m_checkVCD30interpretation->isChecked() );
vcdDoc() ->vcdOptions() ->setSector2336( m_check2336->isChecked() );
vcdDoc() ->vcdOptions() ->setCdiSupport( m_checkCdiSupport->isChecked() );
// vcdDoc() ->setOnlyCreateImages( m_checkOnlyCreateImage->isChecked() );
vcdDoc() ->vcdOptions() ->setVolumeNumber( m_spinVolumeNumber->value() );
vcdDoc() ->vcdOptions() ->setVolumeCount( m_spinVolumeCount->value() );
vcdDoc() ->vcdOptions() ->setPbcEnabled( m_checkPbc->isChecked() );
if ( m_checkPbc->isChecked() )
vcdDoc() -> setPbcTracks();
vcdDoc() ->vcdOptions() ->setSegmentFolder( m_checkSegmentFolder->isChecked() );
vcdDoc() ->vcdOptions() ->setRelaxedAps( m_checkRelaxedAps->isChecked() );
vcdDoc() ->vcdOptions() ->setUpdateScanOffsets( m_checkUpdateScanOffsets->isChecked() );
vcdDoc() ->vcdOptions() ->setRestriction( m_spinRestriction->value() );
vcdDoc() ->vcdOptions() ->setUseGaps( m_checkGaps->isChecked() );
vcdDoc() ->vcdOptions() ->setPreGapLeadout( m_spinPreGapLeadout->value() );
vcdDoc() ->vcdOptions() ->setPreGapTrack( m_spinPreGapTrack->value() );
vcdDoc() ->vcdOptions() ->setFrontMarginTrack( m_spinFrontMarginTrack->value() );
vcdDoc() ->vcdOptions() ->setRearMarginTrack( m_spinRearMarginTrack->value() );
vcdDoc() ->vcdOptions() ->setFrontMarginTrackSVCD( m_spinFrontMarginTrackSVCD->value() );
vcdDoc() ->vcdOptions() ->setRearMarginTrackSVCD( m_spinRearMarginTrackSVCD->value() );
if ( m_editCdiCfg->edited() )
saveCdiConfig();
}
void K3bVcdBurnDialog::readSettings()
{
K3bProjectBurnDialog::readSettings();
m_checkNonCompliant->setEnabled( false );
m_checkVCD30interpretation->setEnabled( false );
// read vcdType
switch ( ( ( K3bVcdDoc* ) doc() ) ->vcdType() ) {
case K3bVcdDoc::VCD11:
m_radioVcd11->setChecked( true );
break;
case K3bVcdDoc::VCD20:
m_radioVcd20->setChecked( true );
break;
case K3bVcdDoc::SVCD10:
m_radioSvcd10->setChecked( true );
m_checkNonCompliant->setEnabled( true );
m_checkVCD30interpretation->setEnabled( true );
break;
case K3bVcdDoc::HTQVCD:
m_radioHqVcd10->setChecked( true );
break;
default:
m_radioVcd20->setChecked( true );
break;
}
m_spinVolumeCount->setValue( vcdDoc() ->vcdOptions() ->volumeCount() );
m_spinVolumeNumber->setMaxValue( vcdDoc() ->vcdOptions() ->volumeCount() );
m_spinVolumeNumber->setValue( vcdDoc() ->vcdOptions() ->volumeNumber() );
m_checkAutoDetect->setChecked( vcdDoc() ->vcdOptions() ->AutoDetect() );
m_groupVcdFormat->setDisabled( vcdDoc() ->vcdOptions() ->AutoDetect() );
m_check2336->setChecked( vcdDoc() ->vcdOptions() ->Sector2336() );
m_checkCdiSupport->setEnabled( false );
m_checkCdiSupport->setChecked( false );
m_groupCdi->setEnabled( false );
if ( m_radioSvcd10->isChecked() ) {
m_checkNonCompliant->setChecked( vcdDoc() ->vcdOptions() ->NonCompliantMode() );
m_checkUpdateScanOffsets->setEnabled( true );
m_checkVCD30interpretation->setChecked( vcdDoc() ->vcdOptions() ->VCD30interpretation() );
} else if ( m_radioHqVcd10->isChecked() ) {
// NonCompliant only for SVCD
m_checkNonCompliant->setChecked( false );
m_checkNonCompliant->setEnabled( false );
m_checkUpdateScanOffsets->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkVCD30interpretation->setEnabled( false );
} else {
// NonCompliant only for SVCD
m_checkNonCompliant->setChecked( false );
m_checkNonCompliant->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( false );
m_checkVCD30interpretation->setEnabled( false );
// CD-I only for VCD and CD-i application was found :)
if ( vcdDoc() ->vcdOptions() ->checkCdiFiles() ) {
m_checkCdiSupport->setEnabled( true );
m_checkCdiSupport->setChecked( vcdDoc() ->vcdOptions() ->CdiSupport() );
}
}
// set VolumeID if empty
setVolumeID();
// m_editVolumeId->setText( vcdDoc() ->vcdOptions() ->volumeId() );
m_editPublisher->setText( vcdDoc() ->vcdOptions() ->publisher() );
m_editAlbumId->setText( vcdDoc() ->vcdOptions() ->albumId() );
m_checkPbc->setChecked( vcdDoc() ->vcdOptions() ->PbcEnabled() );
m_checkSegmentFolder->setChecked( vcdDoc() ->vcdOptions() ->SegmentFolder() );
m_checkRelaxedAps->setChecked( vcdDoc() ->vcdOptions() ->RelaxedAps() );
m_checkUpdateScanOffsets->setChecked( vcdDoc() ->vcdOptions() ->UpdateScanOffsets() );
m_spinRestriction->setValue( vcdDoc() ->vcdOptions() ->Restriction() );
m_checkGaps->setChecked( vcdDoc() ->vcdOptions() ->UseGaps() );
slotGapsChecked( m_checkGaps->isChecked() ) ;
m_spinPreGapLeadout->setValue( vcdDoc() ->vcdOptions() ->PreGapLeadout() );
m_spinPreGapTrack->setValue( vcdDoc() ->vcdOptions() ->PreGapTrack() );
m_spinFrontMarginTrack->setValue( vcdDoc() ->vcdOptions() ->FrontMarginTrack() );
m_spinRearMarginTrack->setValue( vcdDoc() ->vcdOptions() ->RearMarginTrack() );
m_spinFrontMarginTrackSVCD->setValue( vcdDoc() ->vcdOptions() ->FrontMarginTrackSVCD() );
m_spinRearMarginTrackSVCD->setValue( vcdDoc() ->vcdOptions() ->RearMarginTrackSVCD() );
if ( !doc() ->tempDir().isEmpty() )
m_tempDirSelectionWidget->setTempPath( doc() ->tempDir() );
loadCdiConfig();
}
void K3bVcdBurnDialog::loadUserDefaults( KConfigBase* c )
{
K3bProjectBurnDialog::loadUserDefaults( c );
K3bVcdOptions o = K3bVcdOptions::load( c );
m_checkAutoDetect->setChecked( o.AutoDetect() );
m_check2336->setChecked( o.Sector2336() );
m_checkCdiSupport->setChecked( false );
m_checkCdiSupport->setEnabled( false );
m_groupCdi->setEnabled( false );
if ( m_radioSvcd10->isChecked() ) {
m_checkNonCompliant->setChecked( o.NonCompliantMode() );
m_checkVCD30interpretation->setChecked( o.VCD30interpretation() );
} else {
m_checkNonCompliant->setChecked( false );
m_checkNonCompliant->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkVCD30interpretation->setEnabled( false );
if ( vcdDoc() ->vcdOptions() ->checkCdiFiles() ) {
m_checkCdiSupport->setEnabled( true );
m_checkCdiSupport->setChecked( o.CdiSupport() );
}
}
m_spinVolumeCount->setValue( o.volumeCount() );
m_spinVolumeNumber->setMaxValue( o.volumeCount() );
m_spinVolumeNumber->setValue( o.volumeNumber() );
m_editVolumeId->setText( o.volumeId() );
m_editPublisher->setText( o.publisher() );
m_editAlbumId->setText( o.albumId() );
m_checkPbc->setChecked( o.PbcEnabled() );
m_checkSegmentFolder->setChecked( o.SegmentFolder() );
m_checkRelaxedAps->setChecked( o.RelaxedAps() );
m_checkUpdateScanOffsets->setChecked( o.UpdateScanOffsets() );
m_spinRestriction->setValue( o.Restriction() );
m_checkGaps->setChecked( o.UseGaps() );
m_spinPreGapLeadout->setValue( o.PreGapLeadout() );
m_spinPreGapTrack->setValue( o.PreGapTrack() );
m_spinFrontMarginTrack->setValue( o.FrontMarginTrack() );
m_spinRearMarginTrack->setValue( o.RearMarginTrack() );
m_spinFrontMarginTrackSVCD->setValue( o.FrontMarginTrackSVCD() );
m_spinRearMarginTrackSVCD->setValue( o.RearMarginTrackSVCD() );
loadCdiConfig();
}
void K3bVcdBurnDialog::saveUserDefaults( KConfigBase* c )
{
K3bProjectBurnDialog::saveUserDefaults( c );
K3bVcdOptions o;
o.setVolumeId( m_editVolumeId->text() );
o.setPublisher( m_editPublisher->text() );
o.setAlbumId( m_editAlbumId->text() );
o.setAutoDetect( m_checkAutoDetect->isChecked() );
o.setNonCompliantMode( m_checkNonCompliant->isChecked() );
o.setVCD30interpretation( m_checkVCD30interpretation->isChecked() );
o.setSector2336( m_check2336->isChecked() );
o.setVolumeCount( m_spinVolumeCount->value() );
o.setVolumeNumber( m_spinVolumeNumber->value() );
o.setCdiSupport( m_checkCdiSupport->isChecked() );
o.setPbcEnabled( m_checkPbc->isChecked() );
o.setSegmentFolder( m_checkSegmentFolder->isChecked() );
o.setRelaxedAps( m_checkRelaxedAps->isChecked() );
o.setUpdateScanOffsets( m_checkUpdateScanOffsets->isChecked() );
o.setRestriction( m_spinRestriction->value() );
o.setUseGaps( m_checkGaps->isChecked() );
o.setPreGapLeadout( m_spinPreGapLeadout->value() );
o.setPreGapTrack( m_spinPreGapTrack->value() );
o.setFrontMarginTrack( m_spinFrontMarginTrack->value() );
o.setRearMarginTrack( m_spinRearMarginTrack->value() );
o.setFrontMarginTrackSVCD( m_spinFrontMarginTrackSVCD->value() );
o.setRearMarginTrackSVCD( m_spinRearMarginTrackSVCD->value() );
o.save( c );
saveCdiConfig();
}
void K3bVcdBurnDialog::saveCdiConfig()
{
TQString filename = locateLocal( "appdata", "cdi/cdi_vcd.cfg" );
if ( TQFile::exists( filename ) )
TQFile::remove
( filename );
TQFile cdi( filename );
if ( !cdi.open( IO_WriteOnly ) )
return ;
TQTextStream s( &cdi );
int i = m_editCdiCfg->numLines();
for ( int j = 0; j < i; j++ )
s << TQString( "%1" ).tqarg( m_editCdiCfg->textLine( j ) ) << "\n";
cdi.close();
m_editCdiCfg->setEdited( false );
}
void K3bVcdBurnDialog::loadCdiConfig()
{
TQString filename = locateLocal( "appdata", "cdi/cdi_vcd.cfg" );
if ( TQFile::exists( filename ) ) {
TQFile cdi( filename );
if ( !cdi.open( IO_ReadOnly ) ) {
loadDefaultCdiConfig();
return ;
}
TQTextStream s( &cdi );
m_editCdiCfg->clear();
while ( !s.atEnd() )
m_editCdiCfg->insertLine( s.readLine() );
cdi.close();
m_editCdiCfg->setEdited( false );
m_editCdiCfg->setCursorPosition( 0, 0, false );
m_groupCdi->setEnabled( m_checkCdiSupport->isChecked() );
} else
loadDefaultCdiConfig();
}
void K3bVcdBurnDialog::loadDefaultCdiConfig()
{
TQString filename = locate( "data", "k3b/cdi/cdi_vcd.cfg" );
if ( TQFile::exists( filename ) ) {
TQFile cdi( filename );
if ( !cdi.open( IO_ReadOnly ) ) {
m_checkCdiSupport->setChecked( false );
m_checkCdiSupport->setEnabled( false );
return ;
}
TQTextStream s( &cdi );
m_editCdiCfg->clear();
while ( !s.atEnd() )
m_editCdiCfg->insertLine( s.readLine() );
cdi.close();
m_editCdiCfg->setEdited( false );
m_editCdiCfg->setCursorPosition( 0, 0, false );
m_groupCdi->setEnabled( m_checkCdiSupport->isChecked() );
}
}
void K3bVcdBurnDialog::setVolumeID()
{
if ( m_editVolumeId->text().length() < 1 ) {
if ( m_radioSvcd10->isChecked() )
m_editVolumeId->setText( "SUPER_VIDEOCD" );
else if ( m_radioHqVcd10->isChecked() )
m_editVolumeId->setText( "HTQ_VIDEOCD" );
else
m_editVolumeId->setText( "VIDEOCD" );
}
}
void K3bVcdBurnDialog::slotSpinVolumeCount()
{
m_spinVolumeNumber->setMaxValue( m_spinVolumeCount->value() );
}
void K3bVcdBurnDialog::slotVcdTypeClicked( int i )
{
switch ( i ) {
case 0:
// vcd 1.1 no support for version 3.x.
// v4 work also for vcd 1.1 but without CD-i menus.
// Do anybody use vcd 1.1 with cd-i????
m_checkCdiSupport->setEnabled( vcdDoc() ->vcdOptions() ->checkCdiFiles() );
m_checkCdiSupport->setChecked( false );
m_checkNonCompliant->setEnabled( false );
m_checkNonCompliant->setChecked( false );
m_checkVCD30interpretation->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( false );
m_checkUpdateScanOffsets->setChecked( false );
break;
case 1:
//vcd 2.0
m_checkCdiSupport->setEnabled( vcdDoc() ->vcdOptions() ->checkCdiFiles() );
m_groupCdi->setEnabled( m_checkCdiSupport->isChecked() );
m_checkNonCompliant->setEnabled( false );
m_checkNonCompliant->setChecked( false );
m_checkVCD30interpretation->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( false );
m_checkUpdateScanOffsets->setChecked( false );
break;
case 2:
//svcd 1.0
m_checkCdiSupport->setEnabled( false );
m_checkCdiSupport->setChecked( false );
m_groupCdi->setEnabled( false );
m_checkNonCompliant->setEnabled( true );
m_checkVCD30interpretation->setEnabled( true );
m_checkUpdateScanOffsets->setEnabled( true );
break;
case 3:
//hqvcd 1.0
m_checkCdiSupport->setEnabled( false );
m_checkCdiSupport->setChecked( false );
m_groupCdi->setEnabled( false );
m_checkNonCompliant->setEnabled( false );
m_checkNonCompliant->setChecked( false );
m_checkVCD30interpretation->setEnabled( false );
m_checkVCD30interpretation->setChecked( false );
m_checkUpdateScanOffsets->setEnabled( true );
break;
}
MarginChecked( m_checkGaps->isChecked() );
}
void K3bVcdBurnDialog::slotGapsChecked( bool b )
{
m_labelPreGapLeadout->setEnabled( b );
m_spinPreGapLeadout->setEnabled( b );
m_labelPreGapTrack->setEnabled( b );
m_spinPreGapTrack->setEnabled( b );
MarginChecked( b );
}
void K3bVcdBurnDialog::MarginChecked( bool b )
{
if ( m_radioSvcd10->isChecked() || m_radioHqVcd10->isChecked() ) {
m_spinFrontMarginTrack->setHidden( true );
m_spinFrontMarginTrackSVCD->setHidden( false );
m_spinRearMarginTrack->setHidden( true );
m_spinRearMarginTrackSVCD->setHidden( false );
} else {
m_spinFrontMarginTrack->setHidden( false );
m_spinFrontMarginTrackSVCD->setHidden( true );
m_spinRearMarginTrack->setHidden( false );
m_spinRearMarginTrackSVCD->setHidden( true );
}
m_labelFrontMarginTrack->setEnabled( b );
m_spinFrontMarginTrack->setEnabled( b );
m_spinFrontMarginTrackSVCD->setEnabled( b );
m_labelRearMarginTrack->setEnabled( b );
m_spinRearMarginTrack->setEnabled( b );
m_spinRearMarginTrackSVCD->setEnabled( b );
}
void K3bVcdBurnDialog::slotCdiSupportChecked( bool b )
{
m_groupCdi->setEnabled( b );
}
void K3bVcdBurnDialog::slotAutoDetect( bool b )
{
if ( b ) {
m_groupVcdFormat->setButton( vcdDoc() ->vcdOptions() ->mpegVersion() );
slotVcdTypeClicked( vcdDoc() ->vcdOptions() ->mpegVersion() );
}
m_groupVcdFormat->setDisabled( b );
}
void K3bVcdBurnDialog::toggleAll()
{
K3bProjectBurnDialog::toggleAll();
m_writingModeWidget->setSupportedModes( K3b::DAO );
m_checkRemoveBufferFiles->setDisabled( m_checkOnlyCreateImage->isChecked() );
}
#include "k3bvcdburndialog.moc"