File indexing completed on 2024-05-05 04:51:46
0001 /* 0002 SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 0008 #include "k3bmovixburndialog.h" 0009 #include "k3bmovixdoc.h" 0010 #include "k3bmovixprogram.h" 0011 #include "k3bmovixoptionswidget.h" 0012 #include "../k3bapplication.h" 0013 0014 #include "k3bdataimagesettingswidget.h" 0015 #include "k3bexternalbinmanager.h" 0016 #include "k3bwriterselectionwidget.h" 0017 #include "k3btempdirselectionwidget.h" 0018 #include "k3bstdguiitems.h" 0019 #include "k3bglobals.h" 0020 #include "k3bdatamodewidget.h" 0021 #include "k3bisooptions.h" 0022 #include "k3bwritingmodewidget.h" 0023 #include "k3bcore.h" 0024 #include "k3bmediacache.h" 0025 0026 #include <KConfig> 0027 #include <KIO/Global> 0028 #include <KLocalizedString> 0029 #include <KMessageBox> 0030 0031 #include <QDebug> 0032 #include <QFileInfo> 0033 #include <QCheckBox> 0034 #include <QLayout> 0035 #include <QGroupBox> 0036 #include <QGridLayout> 0037 0038 0039 K3b::MovixBurnDialog::MovixBurnDialog( K3b::MovixDoc* doc, QWidget* parent ) 0040 : K3b::ProjectBurnDialog( doc, parent ), 0041 m_doc(doc) 0042 { 0043 prepareGui(); 0044 0045 m_tempDirSelectionWidget->setSelectionMode( K3b::TempDirSelectionWidget::FILE ); 0046 0047 setTitle( i18n("eMovix Project"), 0048 i18np("One file (%2)", "%1 files (%2)", m_doc->movixFileItems().count(),KIO::convertSize(m_doc->size())) ); 0049 0050 m_movixOptionsWidget = new K3b::MovixOptionsWidget( this ); 0051 addPage( m_movixOptionsWidget, i18n("eMovix") ); 0052 0053 // create image settings tab 0054 m_imageSettingsWidget = new K3b::DataImageSettingsWidget( this ); 0055 addPage( m_imageSettingsWidget, i18n("Filesystem") ); 0056 0057 setupSettingsPage(); 0058 0059 // for now we just put the verify checkbox on the main page... 0060 m_checkVerify = K3b::StdGuiItems::verifyCheckBox( m_optionGroup ); 0061 m_optionGroupLayout->addWidget( m_checkVerify ); 0062 0063 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); 0064 m_optionGroupLayout->addItem( spacer ); 0065 0066 m_tempDirSelectionWidget->setSelectionMode( K3b::TempDirSelectionWidget::FILE ); 0067 QString path = m_doc->tempDir(); 0068 if( !path.isEmpty() ) { 0069 m_tempDirSelectionWidget->setTempPath( path ); 0070 } 0071 if( !m_doc->isoOptions().volumeID().isEmpty() ) { 0072 m_tempDirSelectionWidget->setDefaultImageFileName( m_doc->isoOptions().volumeID() + ".iso" ); 0073 } 0074 0075 connect( m_imageSettingsWidget->m_editVolumeName, SIGNAL(textChanged(QString)), 0076 m_tempDirSelectionWidget, SLOT(setDefaultImageFileName(QString)) ); 0077 } 0078 0079 0080 K3b::MovixBurnDialog::~MovixBurnDialog() 0081 { 0082 } 0083 0084 0085 void K3b::MovixBurnDialog::setupSettingsPage() 0086 { 0087 QWidget* frame = new QWidget( this ); 0088 QGridLayout* frameLayout = new QGridLayout( frame ); 0089 0090 QGroupBox* groupDataMode = new QGroupBox( i18n("Datatrack Mode"), frame ); 0091 m_dataModeWidget = new K3b::DataModeWidget( groupDataMode ); 0092 QVBoxLayout* groupDataModeLayout = new QVBoxLayout( groupDataMode ); 0093 groupDataModeLayout->addWidget( m_dataModeWidget ); 0094 0095 QGroupBox* groupMultisession = new QGroupBox( i18n("Multisession"), frame ); 0096 m_checkStartMultiSesssion = K3b::StdGuiItems::startMultisessionCheckBox( groupMultisession ); 0097 QVBoxLayout* groupMultisessionLayout = new QVBoxLayout( groupMultisession ); 0098 groupMultisessionLayout->addWidget( m_checkStartMultiSesssion ); 0099 0100 frameLayout->addWidget( groupDataMode, 0, 0 ); 0101 frameLayout->addWidget( groupMultisession, 1, 0 ); 0102 frameLayout->setRowStretch( 2, 1 ); 0103 0104 addPage( frame, i18n("Misc") ); 0105 } 0106 0107 0108 void K3b::MovixBurnDialog::loadSettings( const KConfigGroup& c ) 0109 { 0110 K3b::ProjectBurnDialog::loadSettings(c); 0111 0112 m_checkStartMultiSesssion->setChecked( c.readEntry( "start_multisession", false ) ); 0113 0114 m_dataModeWidget->loadConfig(c); 0115 0116 K3b::IsoOptions o = K3b::IsoOptions::load( c ); 0117 m_imageSettingsWidget->load( o ); 0118 0119 m_movixOptionsWidget->loadConfig(c); 0120 0121 m_checkVerify->setChecked( c.readEntry( "verify data", false ) ); 0122 0123 toggleAll(); 0124 } 0125 0126 0127 void K3b::MovixBurnDialog::saveSettings( KConfigGroup c ) 0128 { 0129 K3b::ProjectBurnDialog::saveSettings(c); 0130 0131 c.writeEntry( "start_multisession", m_checkStartMultiSesssion->isChecked() ); 0132 0133 m_dataModeWidget->saveConfig(c); 0134 0135 K3b::IsoOptions o; 0136 m_imageSettingsWidget->save( o ); 0137 o.save( c ); 0138 0139 c.writeEntry( "verify data", m_checkVerify->isChecked() ); 0140 0141 m_movixOptionsWidget->saveConfig(c); 0142 } 0143 0144 0145 void K3b::MovixBurnDialog::saveSettingsToProject() 0146 { 0147 K3b::ProjectBurnDialog::saveSettingsToProject(); 0148 0149 m_movixOptionsWidget->saveSettings( m_doc ); 0150 0151 m_doc->setMultiSessionMode( m_checkStartMultiSesssion->isChecked() ? K3b::DataDoc::START : K3b::DataDoc::NONE ); 0152 0153 // save iso image settings 0154 K3b::IsoOptions o = m_doc->isoOptions(); 0155 m_imageSettingsWidget->save( o ); 0156 m_doc->setIsoOptions( o ); 0157 0158 m_doc->setDataMode( m_dataModeWidget->dataMode() ); 0159 0160 // save image file path 0161 m_doc->setTempDir( m_tempDirSelectionWidget->tempPath() ); 0162 0163 m_doc->setVerifyData( m_checkVerify->isChecked() ); 0164 } 0165 0166 0167 void K3b::MovixBurnDialog::readSettingsFromProject() 0168 { 0169 K3b::ProjectBurnDialog::readSettingsFromProject(); 0170 0171 m_checkStartMultiSesssion->setChecked( m_doc->multiSessionMode() == K3b::DataDoc::START ); 0172 0173 m_checkVerify->setChecked( m_doc->verifyData() ); 0174 0175 m_imageSettingsWidget->load( m_doc->isoOptions() ); 0176 0177 m_dataModeWidget->setDataMode( m_doc->dataMode() ); 0178 0179 if( !doc()->tempDir().isEmpty() ) 0180 m_tempDirSelectionWidget->setTempPath( doc()->tempDir() ); 0181 else 0182 m_tempDirSelectionWidget->setTempPath( K3b::defaultTempPath() + doc()->name() + ".iso" ); 0183 0184 // first of all we need a movix installation object 0185 const K3b::MovixBin* bin = dynamic_cast<const K3b::MovixBin*>( k3bcore->externalBinManager()->binObject("eMovix") ); 0186 if( bin ) { 0187 m_movixOptionsWidget->init( bin ); 0188 m_movixOptionsWidget->readSettings( m_doc ); 0189 } 0190 else { 0191 KMessageBox::error( this, i18n("Could not find a valid eMovix installation.") ); 0192 slotCancelClicked(); 0193 } 0194 } 0195 0196 0197 void K3b::MovixBurnDialog::slotStartClicked() 0198 { 0199 if( m_checkOnlyCreateImage->isChecked() || 0200 m_checkCacheImage->isChecked() ) { 0201 QFileInfo fi( m_tempDirSelectionWidget->tempPath() ); 0202 if( fi.isDir() ) 0203 m_tempDirSelectionWidget->setTempPath( fi.filePath() + "/image.iso" ); 0204 0205 if( QFile::exists( m_tempDirSelectionWidget->tempPath() ) ) { 0206 if( KMessageBox::warningContinueCancel( this, 0207 i18n("Do you want to overwrite %1?",m_tempDirSelectionWidget->tempPath()), 0208 i18n("File Exists"), KStandardGuiItem::overwrite() ) 0209 != KMessageBox::Continue ) 0210 return; 0211 } 0212 } 0213 0214 if( m_writingModeWidget->writingMode() == K3b::WritingModeSao && 0215 m_checkStartMultiSesssion->isChecked() && 0216 m_writerSelectionWidget->writingApp() == K3b::WritingAppCdrecord ) 0217 if( KMessageBox::warningContinueCancel( this, 0218 i18n("Most writers do not support writing " 0219 "multisession CDs in DAO mode.") ) 0220 == KMessageBox::Cancel ) 0221 return; 0222 0223 0224 K3b::ProjectBurnDialog::slotStartClicked(); 0225 } 0226 0227 0228 void K3b::MovixBurnDialog::toggleAll() 0229 { 0230 K3b::ProjectBurnDialog::toggleAll(); 0231 0232 if( m_checkSimulate->isChecked() || m_checkOnlyCreateImage->isChecked() ) { 0233 m_checkVerify->setChecked(false); 0234 m_checkVerify->setEnabled(false); 0235 } 0236 else 0237 m_checkVerify->setEnabled(true); 0238 0239 // we can only select the data mode for CD media 0240 m_dataModeWidget->setDisabled( m_checkOnlyCreateImage->isChecked() || 0241 !K3b::Device::isCdMedia( k3bappcore->mediaCache()->diskInfo( m_writerSelectionWidget->writerDevice() ).mediaType() ) ); 0242 m_checkStartMultiSesssion->setDisabled( m_checkOnlyCreateImage->isChecked() ); 0243 } 0244 0245 #include "moc_k3bmovixburndialog.cpp"