File indexing completed on 2024-05-05 04:51:49

0001 /*
0002     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 #include "k3bvideodvdburndialog.h"
0006 #include "k3bvideodvddoc.h"
0007 
0008 #include "k3bdevice.h"
0009 #include "k3bwriterselectionwidget.h"
0010 #include "k3btempdirselectionwidget.h"
0011 #include "k3bcore.h"
0012 #include "k3bwritingmodewidget.h"
0013 #include "k3bglobals.h"
0014 #include "k3bdataimagesettingswidget.h"
0015 #include "k3bisooptions.h"
0016 #include "k3bstdguiitems.h"
0017 #include "k3bglobalsettings.h"
0018 
0019 #include <KConfig>
0020 #include <KLocalizedString>
0021 #include <KIO/Global>
0022 #include <KMessageBox>
0023 
0024 #include <QFileInfo>
0025 #include <QCheckBox>
0026 #include <QLayout>
0027 #include <QLabel>
0028 #include <QToolTip>
0029 
0030 
0031 K3b::VideoDvdBurnDialog::VideoDvdBurnDialog( K3b::VideoDvdDoc* doc, QWidget *parent )
0032     : K3b::ProjectBurnDialog( doc, parent ),
0033       m_doc( doc )
0034 {
0035     prepareGui();
0036 
0037     setTitle( i18n("Video DVD Project"), i18n("Size: %1", KIO::convertSize(doc->size()) ) );
0038 
0039     // for now we just put the verify checkbox on the main page...
0040     m_checkVerify = K3b::StdGuiItems::verifyCheckBox( m_optionGroup );
0041     m_optionGroupLayout->addWidget( m_checkVerify );
0042 
0043     QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
0044     m_optionGroupLayout->addItem( spacer );
0045 
0046     // create image settings tab
0047     m_imageSettingsWidget = new K3b::DataImageSettingsWidget( this );
0048     m_imageSettingsWidget->showFileSystemOptions( false );
0049 
0050     addPage( m_imageSettingsWidget, i18n("Filesystem") );
0051 
0052     m_tempDirSelectionWidget->setSelectionMode( K3b::TempDirSelectionWidget::FILE );
0053 
0054     QString path = m_doc->tempDir();
0055     if( path.isEmpty() ) {
0056         path = K3b::defaultTempPath();
0057         if( m_doc->isoOptions().volumeID().isEmpty() )
0058             path.append( "image.iso" );
0059         else
0060             path.append( m_doc->isoOptions().volumeID() + ".iso" );
0061     }
0062     m_tempDirSelectionWidget->setTempPath( path );
0063 }
0064 
0065 
0066 K3b::VideoDvdBurnDialog::~VideoDvdBurnDialog()
0067 {
0068 }
0069 
0070 
0071 void K3b::VideoDvdBurnDialog::saveSettingsToProject()
0072 {
0073     K3b::ProjectBurnDialog::saveSettingsToProject();
0074 
0075     // save iso image settings
0076     K3b::IsoOptions o = m_doc->isoOptions();
0077     m_imageSettingsWidget->save( o );
0078     m_doc->setIsoOptions( o );
0079 
0080     // save image file path
0081     m_doc->setTempDir( m_tempDirSelectionWidget->tempPath() );
0082 
0083     m_doc->setVerifyData( m_checkVerify->isChecked() );
0084 }
0085 
0086 
0087 void K3b::VideoDvdBurnDialog::readSettingsFromProject()
0088 {
0089     K3b::ProjectBurnDialog::readSettingsFromProject();
0090 
0091     if( !doc()->tempDir().isEmpty() )
0092         m_tempDirSelectionWidget->setTempPath( doc()->tempDir() );
0093     else
0094         m_tempDirSelectionWidget->setTempPath( K3b::defaultTempPath() + doc()->name() + ".iso" );
0095 
0096     m_checkVerify->setChecked( m_doc->verifyData() );
0097 
0098     m_imageSettingsWidget->load( m_doc->isoOptions() );
0099 
0100     // in case overburn is enabled we allow some made up max size
0101     // before we force a DL medium
0102     if( doc()->length() > MediaSizeDvd4Gb && !IsOverburnAllowed( doc()->length(), MediaSizeDvd4Gb ) )
0103         m_writerSelectionWidget->setWantedMediumType( K3b::Device::MEDIA_WRITABLE_DVD_DL );
0104     else
0105         m_writerSelectionWidget->setWantedMediumType( K3b::Device::MEDIA_WRITABLE_DVD );
0106 
0107     toggleAll();
0108 }
0109 
0110 
0111 void K3b::VideoDvdBurnDialog::toggleAll()
0112 {
0113     K3b::ProjectBurnDialog::toggleAll();
0114 
0115     if( m_checkSimulate->isChecked() || m_checkOnlyCreateImage->isChecked() ) {
0116         m_checkVerify->setChecked(false);
0117         m_checkVerify->setEnabled(false);
0118     }
0119     else
0120         m_checkVerify->setEnabled(true);
0121 }
0122 
0123 
0124 void K3b::VideoDvdBurnDialog::loadSettings( const KConfigGroup& c )
0125 {
0126     K3b::ProjectBurnDialog::loadSettings( c );
0127 
0128     K3b::IsoOptions o = K3b::IsoOptions::load( c );
0129     m_imageSettingsWidget->load( o );
0130 
0131     m_checkVerify->setChecked( c.readEntry( "verify data", false ) );
0132 
0133     toggleAll();
0134 }
0135 
0136 
0137 void K3b::VideoDvdBurnDialog::saveSettings( KConfigGroup c )
0138 {
0139     K3b::ProjectBurnDialog::saveSettings(c);
0140 
0141     K3b::IsoOptions o;
0142     m_imageSettingsWidget->save( o );
0143     o.save( c );
0144 
0145     c.writeEntry( "verify data", m_checkVerify->isChecked() );
0146 }
0147 
0148 
0149 void K3b::VideoDvdBurnDialog::slotStartClicked()
0150 {
0151     if( m_checkOnlyCreateImage->isChecked() ||
0152         m_checkCacheImage->isChecked() ) {
0153         QFileInfo fi( m_tempDirSelectionWidget->tempPath() );
0154         if( fi.isDir() )
0155             m_tempDirSelectionWidget->setTempPath( fi.filePath() + "/image.iso" );
0156 
0157         if( QFile::exists( m_tempDirSelectionWidget->tempPath() ) ) {
0158             if( KMessageBox::warningContinueCancel( this,
0159                                                     i18n("Do you want to overwrite %1?",m_tempDirSelectionWidget->tempPath()),
0160                                                     i18n("File Exists"), KStandardGuiItem::overwrite() )
0161                 == KMessageBox::Continue ) {
0162                 // delete the file here to avoid problems with free space in K3b::ProjectBurnDialog::slotStartClicked
0163                 QFile::remove( m_tempDirSelectionWidget->tempPath() );
0164             }
0165             else
0166                 return;
0167         }
0168     }
0169 
0170     K3b::ProjectBurnDialog::slotStartClicked();
0171 }
0172 
0173 #include "moc_k3bvideodvdburndialog.cpp"