summaryrefslogtreecommitdiffstats
path: root/ark/extractiondialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ark/extractiondialog.cpp')
-rw-r--r--ark/extractiondialog.cpp195
1 files changed, 195 insertions, 0 deletions
diff --git a/ark/extractiondialog.cpp b/ark/extractiondialog.cpp
new file mode 100644
index 0000000..7892efb
--- /dev/null
+++ b/ark/extractiondialog.cpp
@@ -0,0 +1,195 @@
+/*
+ * ark -- archiver for the KDE project
+ *
+ * Copyright (C)
+ *
+ * 2005: Henrique Pinto <henrique.pinto@kdemail.net>
+ * 2002: Helio Chissini de Castro <helio@conectiva.com.br>
+ * 2001: Roberto Selbach Teixeira <maragato@conectiva.com.br>
+ * 2001: Corel Corporation (author: Michael Jarrett, michaelj@corel.com)
+ * 1999-2000: Corel Corporation (author: Emily Ezust emilye@corel.com)
+ * 1999: Francois-Xavier Duranceau duranceau@kde.org
+ * 1997-1999: Rob Palmbos palm9744@kettering.edu
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "extractiondialog.h"
+
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qhbuttongroup.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kurlrequester.h>
+#include <kurlcompletion.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+#include <kcombobox.h>
+#include <klineedit.h>
+#include <kurlpixmapprovider.h>
+#include <kdebug.h>
+
+#include "arkutils.h"
+#include "settings.h"
+
+ExtractionDialog::ExtractionDialog( QWidget *parent, const char *name,
+ bool enableSelected,
+ const KURL& defaultExtractionDir,
+ const QString &prefix,
+ const QString &archiveName )
+ : KDialogBase( parent, name, true, i18n( "Extract" ), Ok | Cancel, Ok ),
+ m_selectedButton( 0 ), m_allButton( 0 ),
+ m_selectedOnly( enableSelected ), m_extractionDirectory( defaultExtractionDir ),
+ m_defaultExtractionDir( defaultExtractionDir.prettyURL() ), m_prefix( prefix )
+{
+ if ( !archiveName.isNull() )
+ {
+ setCaption( i18n( "Extract Files From %1" ).arg( archiveName ) );
+ }
+
+ QVBox *vbox = makeVBoxMainWidget();
+
+ QHBox *header = new QHBox( vbox );
+ header->layout()->setSpacing( 10 );
+
+ QLabel *icon = new QLabel( header );
+ icon->setPixmap( DesktopIcon( "ark_extract" ) );
+ icon->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Minimum );
+
+ if ( enableSelected )
+ {
+ QVBox *whichFiles = new QVBox( header );
+ whichFiles->layout()->setSpacing( 6 );
+ new QLabel( QString( "<qt><b><font size=\"+1\">%1</font></b></qt>" )
+ .arg( i18n( "Extract:" ) ), whichFiles );
+ QHButtonGroup *filesGroup = new QHButtonGroup( whichFiles );
+ m_selectedButton = new QRadioButton( i18n( "Selected files only" ), filesGroup );
+ m_allButton = new QRadioButton( i18n( "All files" ), filesGroup );
+
+ m_selectedButton->setChecked( true );
+ }
+ else
+ {
+ new QLabel( QString( "<qt><b><font size=\"+2\">%1</font></b></qt>" )
+ .arg( i18n( "Extract all files" ) ), header );
+ }
+
+ QHBox *destDirBox = new QHBox( vbox );
+
+ QLabel *destFolderLabel = new QLabel( i18n( "Destination folder: " ), destDirBox );
+ destFolderLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
+
+ KHistoryCombo *combobox = new KHistoryCombo( true, destDirBox );
+ combobox->setPixmapProvider( new KURLPixmapProvider );
+ combobox->setHistoryItems( ArkSettings::extractionHistory() );
+ destFolderLabel->setBuddy( combobox );
+
+ KURLCompletion *comp = new KURLCompletion();
+ comp->setReplaceHome( true );
+ comp->setCompletionMode( KGlobalSettings::CompletionAuto );
+ combobox->setCompletionObject( comp );
+ combobox->setMaxCount( 20 );
+ combobox->setInsertionPolicy( QComboBox::AtTop );
+
+ m_urlRequester = new KURLRequester( combobox, destDirBox );
+ m_urlRequester->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
+ m_urlRequester->setMode( KFile::Directory );
+
+ if (!defaultExtractionDir.prettyURL().isEmpty() )
+ {
+ m_urlRequester->setKURL( defaultExtractionDir.prettyURL() + prefix );
+ }
+
+ m_viewFolderAfterExtraction = new QCheckBox( i18n( "Open destination folder after extraction" ), vbox );
+ m_viewFolderAfterExtraction->setChecked( ArkSettings::openDestinationFolder() );
+
+ connect( combobox, SIGNAL( returnPressed( const QString& ) ), combobox, SLOT( addToHistory( const QString& ) ) );
+ connect( combobox->lineEdit(), SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( extractDirChanged( const QString & ) ) );
+}
+
+ExtractionDialog::~ExtractionDialog()
+{
+ ArkSettings::setExtractionHistory( ( static_cast<KHistoryCombo*>( m_urlRequester->comboBox() ) )->historyItems() );
+}
+
+void ExtractionDialog::accept()
+{
+
+ KURLCompletion uc;
+ uc.setReplaceHome( true );
+ KURL p( uc.replacedPath( m_urlRequester->comboBox()->currentText() ) );
+
+ //if p isn't local KIO and friends will complain later on
+ if ( p.isLocalFile() )
+ {
+ QFileInfo fi( p.path() );
+ if ( !fi.isDir() && !fi.exists() )
+ {
+ QString ltext = i18n( "Create folder %1?").arg(p.path());
+ int createDir = KMessageBox::questionYesNo( this, ltext, i18n( "Missing Folder" ) , i18n("Create Folder"), i18n("Do Not Create"));
+ if( createDir == 4 )
+ {
+ return;
+ }
+ // create directory using filename, make sure it has trailing slash
+ p.adjustPath(1);
+ if( !KStandardDirs::makeDir( p.path() ) )
+ {
+ KMessageBox::error( this, i18n( "The folder could not be created. Please check permissions." ) );
+ return;
+ }
+ }
+ if ( !ArkUtils::haveDirPermissions( p.path() ) )
+ {
+ KMessageBox::error( this, i18n( "You do not have write permission to this folder. Please provide another folder." ) );
+ return;
+ }
+ }
+
+ m_extractionDirectory = p;
+ m_selectedOnly = m_selectedButton == 0? false : m_selectedButton->isChecked();
+
+ // Determine what exactly should be added to the extraction combo list
+ QString historyURL = p.prettyURL();
+ if ( historyURL == KURL( m_defaultExtractionDir + m_prefix ).prettyURL() )
+ {
+ historyURL = m_defaultExtractionDir;
+ }
+
+ KHistoryCombo *combo = static_cast<KHistoryCombo*>( m_urlRequester->comboBox() );
+ // If the item was already in the list, delete it from the list and readd it at the top
+ combo->removeFromHistory( historyURL );
+ combo->addToHistory( historyURL );
+
+ ArkSettings::setOpenDestinationFolder( m_viewFolderAfterExtraction->isChecked() );
+
+ KDialogBase::accept();
+}
+
+void ExtractionDialog::extractDirChanged(const QString &text )
+{
+ enableButtonOK(!text.isEmpty());
+}
+
+#include "extractiondialog.moc"
+// kate: space-indent off; tab-width 4;