summaryrefslogtreecommitdiffstats
path: root/src/rip/k3bvideocdrippingdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rip/k3bvideocdrippingdialog.cpp')
-rw-r--r--src/rip/k3bvideocdrippingdialog.cpp260
1 files changed, 260 insertions, 0 deletions
diff --git a/src/rip/k3bvideocdrippingdialog.cpp b/src/rip/k3bvideocdrippingdialog.cpp
new file mode 100644
index 0000000..490f531
--- /dev/null
+++ b/src/rip/k3bvideocdrippingdialog.cpp
@@ -0,0 +1,260 @@
+/*
+*
+* $Id: k3bvideocdrippingdialog.cpp 640370 2007-03-07 19:44:32Z trueg $
+* Copyright (C) 2003 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.
+*/
+
+
+// kde include
+#include <klocale.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kurlrequester.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+
+// qt includes
+#include <qgroupbox.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qdir.h>
+#include <qfileinfo.h>
+#include <qstringlist.h>
+#include <qhbox.h>
+
+// k3b includes
+#include "k3bvideocdrippingdialog.h"
+#include "k3bvideocdrip.h"
+
+#include <k3bjobprogressdialog.h>
+#include <k3bcore.h>
+#include <k3bglobals.h>
+#include <k3bstdguiitems.h>
+
+K3bVideoCdRippingDialog::K3bVideoCdRippingDialog( K3bVideoCdRippingOptions* options, QWidget* parent, const char* name )
+ : K3bInteractionDialog( parent, name,
+ i18n( "Video CD Ripping" ),
+ QString::null,
+ START_BUTTON|CANCEL_BUTTON,
+ START_BUTTON,
+ "Video CD Ripping" ), // config group
+ m_videooptions( options )
+{
+ setupGui();
+ setupContextHelp();
+}
+
+
+K3bVideoCdRippingDialog::~K3bVideoCdRippingDialog()
+{
+}
+
+
+void K3bVideoCdRippingDialog::setupGui()
+{
+ QWidget * frame = mainWidget();
+ QGridLayout* MainLayout = new QGridLayout( frame );
+ MainLayout->setSpacing( KDialog::spacingHint() );
+ MainLayout->setMargin( 0 );
+
+ // ---------------------------------------------------- Directory group ---
+ QGroupBox* groupDirectory = new QGroupBox( 0, Qt::Vertical, i18n( "Destination Directory" ), frame );
+ groupDirectory->layout() ->setSpacing( KDialog::spacingHint() );
+ groupDirectory->layout() ->setMargin( KDialog::marginHint() );
+
+ QGridLayout* groupDirectoryLayout = new QGridLayout( groupDirectory->layout() );
+ groupDirectoryLayout->setAlignment( Qt::AlignTop );
+
+ QLabel* rippathLabel = new QLabel( i18n( "Rip files to:" ), groupDirectory );
+ m_editDirectory = new KURLRequester( groupDirectory, "m_editDirectory" );
+ m_editDirectory->setURL( QDir::homeDirPath() );
+ m_editDirectory->setMode( KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly );
+
+ rippathLabel->setBuddy( m_editDirectory );
+
+ QHBox* freeSpaceBox = new QHBox( groupDirectory );
+ freeSpaceBox->setSpacing( KDialog::spacingHint() );
+ ( void ) new QLabel( i18n( "Free space in directory:" ), freeSpaceBox, "FreeSpaceLabel" );
+ m_labelFreeSpace = new QLabel( " ", freeSpaceBox, "m_labelFreeSpace" );
+ m_labelFreeSpace->setAlignment( int( QLabel::AlignVCenter | QLabel::AlignRight ) );
+
+ QHBox* necessarySizeBox = new QHBox( groupDirectory );
+ necessarySizeBox->setSpacing( KDialog::spacingHint() );
+ ( void ) new QLabel( i18n( "Necessary storage size:" ), necessarySizeBox, "StorSize" );
+ m_labelNecessarySize = new QLabel( " ", necessarySizeBox, "m_labelNecessarySize" );
+ m_labelNecessarySize->setAlignment( int( QLabel::AlignVCenter | QLabel::AlignRight ) );
+
+
+ groupDirectoryLayout->addWidget( rippathLabel, 0, 0 );
+ groupDirectoryLayout->addWidget( m_editDirectory, 0, 1 );
+ groupDirectoryLayout->addWidget( freeSpaceBox, 1, 1 );
+ groupDirectoryLayout->addWidget( necessarySizeBox, 2, 1 );
+
+ // ---------------------------------------------------- Options group ---
+ QGroupBox* groupOptions = new QGroupBox( 4, Qt::Vertical, i18n( "Settings" ), frame );
+
+ m_ignoreExt = new QCheckBox( i18n( "Ignore /EXT/PSD_X.VCD" ), groupOptions );
+
+ m_sector2336 = new QCheckBox( i18n( "Use 2336 byte sector mode for image file" ), groupOptions );
+ // Only available for image file ripping
+ m_sector2336->setEnabled( false );
+ m_sector2336->setChecked( false );
+
+ m_extractXML = new QCheckBox( i18n( "Extract XML structure" ), groupOptions );
+
+
+ MainLayout->addWidget( groupDirectory, 0, 0 );
+ MainLayout->addWidget( groupOptions, 1, 0 );
+ MainLayout->setRowStretch( 0, 1 );
+
+ setStartButtonText( i18n( "Start Ripping" ), i18n( "Starts extracting the selected VideoCd tracks" ) );
+ // ----------------------------------------------------------------------------------
+
+ connect( m_editDirectory, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateFreeSpace()) );
+
+ m_labelNecessarySize ->setText( KIO::convertSize( m_videooptions ->getVideoCdSize() ) );
+}
+
+
+void K3bVideoCdRippingDialog::setupContextHelp()
+{
+ QToolTip::add( m_labelFreeSpace, i18n("Free space on destination directory: %1").arg( m_editDirectory ->url() ) );
+
+ QToolTip::add( m_labelNecessarySize, i18n("Necessary space for extracted files") );
+
+ QToolTip::add( m_ignoreExt, i18n("Ignore extended PSD") );
+ QWhatsThis::add( m_ignoreExt, i18n("<p>Ignore extended PSD (located in the ISO-9660 filesystem under `/EXT/PSD_X.VCD') and use the <em>standard</em> PSD.</p>") );
+
+ QToolTip::add( m_sector2336, i18n("Assume a 2336-byte sector mode") );
+ QWhatsThis::add( m_sector2336, i18n("<p>This option only makes sense if you are reading from a BIN CD disk image. This indicates to `vcdxrip' to assume a 2336-byte sector mode for image file.</p>"
+ "<b>Note: This option is slated to disappear.</b>") );
+
+ QToolTip::add( m_extractXML, i18n("Create XML description file.") );
+ QWhatsThis::add( m_extractXML, i18n("<p>This option creates an XML description file with all video CD information.</p>"
+ "<p>This file will always contain all of the information.</p>"
+ "<p>Example: If you only extract sequences, the description file will also hold the information for files and segments.</p>"
+ "<p>The filename is the same as the video CD name, with a .xml extension. The default is VIDEOCD.xml.</p>") );
+}
+
+void K3bVideoCdRippingDialog::slotStartClicked()
+{
+
+ QStringList filesExists;
+ QDir d;
+ d.setPath( m_editDirectory ->url() );
+ if( !d.exists() ) {
+ if( KMessageBox::warningYesNo( this, i18n("Image folder '%1' does not exist. Do you want K3b to create it?").arg( m_editDirectory->url() ) )
+ == KMessageBox::Yes ) {
+ if( !KStandardDirs::makeDir( m_editDirectory->url() ) ) {
+ KMessageBox::error( this, i18n("Failed to create folder '%1'.").arg( m_editDirectory->url() ) );
+ return;
+ }
+ }
+ }
+ const QFileInfoList* list = d.entryInfoList();
+ QFileInfoListIterator it( *list );
+ QFileInfo* fi;
+ while ( ( fi = it.current() ) != 0 ) {
+ if ( fi ->fileName() != "." && fi ->fileName() != ".." )
+ filesExists.append( QString( "%1 (%2)" ).arg( QFile::encodeName( fi ->fileName() ) ).arg( KIO::convertSize( fi ->size() ) ) );
+ ++it;
+ }
+
+ if( !filesExists.isEmpty() )
+ if( KMessageBox::questionYesNoList( this,
+ i18n("Continue although the folder is not empty?"),
+ filesExists,
+ i18n("Files Exist"),KStdGuiItem::cont(),KStdGuiItem::cancel() ) == KMessageBox::No )
+ return;
+
+ m_videooptions ->setVideoCdIgnoreExt( m_ignoreExt ->isChecked() );
+ m_videooptions ->setVideoCdSector2336( m_sector2336 ->isChecked() );
+ m_videooptions ->setVideoCdExtractXml( m_extractXML ->isChecked() );
+ m_videooptions ->setVideoCdDestination( m_editDirectory ->url() );
+
+ K3bJobProgressDialog ripDialog( kapp->mainWidget(), "Ripping" );
+ K3bVideoCdRip * rip = new K3bVideoCdRip( &ripDialog, m_videooptions );
+
+ hide();
+ ripDialog.startJob( rip );
+
+ delete rip;
+
+ close();
+}
+
+void K3bVideoCdRippingDialog::slotFreeSpace(const QString&,
+ unsigned long,
+ unsigned long,
+ unsigned long kbAvail)
+{
+ m_labelFreeSpace->setText( KIO::convertSizeFromKB(kbAvail) );
+
+ m_freeSpace = kbAvail;
+
+ if( m_freeSpace < m_videooptions ->getVideoCdSize() /1024 )
+ m_labelNecessarySize->setPaletteForegroundColor( red );
+ else
+ m_labelNecessarySize->setPaletteForegroundColor( m_labelFreeSpace->paletteForegroundColor() );
+
+ QTimer::singleShot( 1000, this, SLOT(slotUpdateFreeSpace()) );
+}
+
+
+void K3bVideoCdRippingDialog::slotUpdateFreeSpace()
+{
+ QString path = m_editDirectory->url();
+
+ if( !QFile::exists( path ) )
+ path.truncate( path.findRev('/') );
+
+ unsigned long size, avail;
+ if( K3b::kbFreeOnFs( path, size, avail ) )
+ slotFreeSpace( path, size, 0, avail );
+ else
+ m_labelFreeSpace->setText("-");
+}
+
+void K3bVideoCdRippingDialog::loadK3bDefaults()
+{
+ m_editDirectory->setURL( QDir::homeDirPath() );
+ m_ignoreExt ->setChecked( false );
+ m_sector2336 ->setChecked( false );
+ m_extractXML ->setChecked( false );
+
+ slotUpdateFreeSpace();
+}
+
+void K3bVideoCdRippingDialog::loadUserDefaults( KConfigBase* c )
+{
+ m_editDirectory ->setURL( c->readPathEntry( "last ripping directory", QDir::homeDirPath() ) );
+ m_ignoreExt ->setChecked( c->readBoolEntry( "ignore ext", false ) );
+ m_sector2336 ->setChecked( c->readBoolEntry( "sector 2336", false ) );
+ m_extractXML ->setChecked( c->readBoolEntry( "extract xml", false ) );
+
+ slotUpdateFreeSpace();
+}
+
+void K3bVideoCdRippingDialog::saveUserDefaults( KConfigBase* c )
+{
+ c->writePathEntry( "last ripping directory", m_editDirectory->url() );
+ c->writeEntry( "ignore ext", m_ignoreExt ->isChecked( ) );
+ c->writeEntry( "sector 2336", m_sector2336 ->isChecked( ) );
+ c->writeEntry( "extract xml", m_extractXML ->isChecked( ) );
+}
+
+#include "k3bvideocdrippingdialog.moc"