• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

ark

  • sources
  • kde-4.14
  • kdeutils
  • ark
  • kerfuffle
extractiondialog.cpp
Go to the documentation of this file.
1 /*
2  * ark -- archiver for the KDE project
3  *
4  * Copyright (C) 2009 Harald Hvaal <haraldhv@stud.ntnu.no>
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT
21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #include "extractiondialog.h"
29 #include "settings.h"
30 
31 #include <KLocale>
32 #include <KIconLoader>
33 #include <KMessageBox>
34 #include <KStandardDirs>
35 #include <KDebug>
36 #include <KIO/NetAccess>
37 
38 #include <QDir>
39 
40 #include "ui_extractiondialog.h"
41 
42 namespace Kerfuffle
43 {
44 
45 class ExtractionDialogUI: public QFrame, public Ui::ExtractionDialog
46 {
47 public:
48  ExtractionDialogUI(QWidget *parent = 0)
49  : QFrame(parent) {
50  setupUi(this);
51  }
52 };
53 
54 ExtractionDialog::ExtractionDialog(QWidget *parent)
55  : KDirSelectDialog(KUrl(), false, parent)
56 {
57  m_ui = new ExtractionDialogUI(this);
58 
59  mainWidget()->layout()->addWidget(m_ui);
60  setCaption(i18nc("@title:window", "Extract"));
61  m_ui->iconLabel->setPixmap(DesktopIcon(QLatin1String( "archive-extract" )));
62 
63  m_ui->filesToExtractGroupBox->hide();
64  m_ui->allFilesButton->setChecked(true);
65  m_ui->extractAllLabel->show();
66 
67  setSingleFolderArchive(false);
68 
69  m_ui->autoSubfolders->hide();
70 
71  loadSettings();
72 
73  connect(this, SIGNAL(finished(int)), SLOT(writeSettings()));
74 }
75 
76 void ExtractionDialog::loadSettings()
77 {
78  setOpenDestinationFolderAfterExtraction(ArkSettings::openDestinationFolderAfterExtraction());
79  setCloseAfterExtraction(ArkSettings::closeAfterExtraction());
80  setPreservePaths(ArkSettings::preservePaths());
81 }
82 
83 void ExtractionDialog::setSingleFolderArchive(bool value)
84 {
85  m_ui->singleFolderGroup->setChecked(!value);
86 }
87 
88 void ExtractionDialog::batchModeOption()
89 {
90  m_ui->autoSubfolders->show();
91  m_ui->autoSubfolders->setEnabled(true);
92  m_ui->singleFolderGroup->hide();
93  m_ui->extractAllLabel->setText(i18n("Extract multiple archives"));
94 }
95 
96 void ExtractionDialog::accept()
97 {
98  if (extractToSubfolder()) {
99  if (subfolder().contains(QLatin1String( "/" ))) {
100  KMessageBox::error(NULL, i18n("The subfolder name may not contain the character '/'."));
101  return;
102  }
103 
104  const QString pathWithSubfolder = url().pathOrUrl(KUrl::AddTrailingSlash) + subfolder();
105 
106  while (1) {
107  if (KIO::NetAccess::exists(pathWithSubfolder, KIO::NetAccess::SourceSide, 0)) {
108  if (QFileInfo(pathWithSubfolder).isDir()) {
109  int overwrite = KMessageBox::questionYesNoCancel(0, i18nc("@info", "The folder <filename>%1</filename> already exists. Are you sure you want to extract here?", pathWithSubfolder), i18n("Folder exists"), KGuiItem(i18n("Extract here")), KGuiItem(i18n("Retry")), KGuiItem(i18n("Cancel")));
110 
111  if (overwrite == KMessageBox::No) {
112  // The user clicked Retry.
113  continue;
114  } else if (overwrite == KMessageBox::Cancel) {
115  return;
116  }
117  } else {
118  KMessageBox::detailedError(0,
119  i18nc("@info", "The folder <filename>%1</filename> could not be created.", subfolder()),
120  i18nc("@info", "<filename>%1</filename> already exists, but is not a folder.", subfolder()));
121  return;
122  }
123  } else if (!KIO::NetAccess::mkdir(pathWithSubfolder, 0)) {
124  KMessageBox::detailedError(0,
125  i18nc("@info", "The folder <filename>%1</filename> could not be created.", subfolder()),
126  i18n("Please check your permissions to create it."));
127  return;
128  }
129  break;
130  }
131  }
132 
133  KDirSelectDialog::accept();
134 }
135 
136 void ExtractionDialog::setSubfolder(const QString& subfolder)
137 {
138  m_ui->subfolder->setText(subfolder);
139 }
140 
141 QString ExtractionDialog::subfolder() const
142 {
143  return m_ui->subfolder->text();
144 }
145 
146 ExtractionDialog::~ExtractionDialog()
147 {
148  delete m_ui;
149  m_ui = 0;
150 }
151 
152 void ExtractionDialog::setShowSelectedFiles(bool value)
153 {
154  if (value) {
155  m_ui->filesToExtractGroupBox->show();
156  m_ui->selectedFilesButton->setChecked(true);
157  m_ui->extractAllLabel->hide();
158  } else {
159  m_ui->filesToExtractGroupBox->hide();
160  m_ui->selectedFilesButton->setChecked(false);
161  m_ui->extractAllLabel->show();
162  }
163 }
164 
165 bool ExtractionDialog::extractAllFiles() const
166 {
167  return m_ui->allFilesButton->isChecked();
168 }
169 
170 void ExtractionDialog::setAutoSubfolder(bool value)
171 {
172  m_ui->autoSubfolders->setChecked(value);
173 }
174 
175 bool ExtractionDialog::autoSubfolders() const
176 {
177  return m_ui->autoSubfolders->isChecked();
178 }
179 
180 bool ExtractionDialog::extractToSubfolder() const
181 {
182  return m_ui->singleFolderGroup->isChecked();
183 }
184 
185 void ExtractionDialog::setOpenDestinationFolderAfterExtraction(bool value)
186 {
187  m_ui->openFolderCheckBox->setChecked(value);
188 }
189 
190 void ExtractionDialog::setCloseAfterExtraction(bool value)
191 {
192  m_ui->closeAfterExtraction->setChecked(value);
193 }
194 
195 void ExtractionDialog::setPreservePaths(bool value)
196 {
197  m_ui->preservePaths->setChecked(value);
198 }
199 
200 bool ExtractionDialog::preservePaths() const
201 {
202  return m_ui->preservePaths->isChecked();
203 }
204 
205 bool ExtractionDialog::openDestinationAfterExtraction() const
206 {
207  return m_ui->openFolderCheckBox->isChecked();
208 }
209 
210 bool ExtractionDialog::closeAfterExtraction() const
211 {
212  return m_ui->closeAfterExtraction->isChecked();
213 }
214 
215 KUrl ExtractionDialog::destinationDirectory() const
216 {
217  if (extractToSubfolder()) {
218  return QString(url().pathOrUrl(KUrl::AddTrailingSlash) + subfolder() + QLatin1Char( '/' ));
219  } else {
220  return url().pathOrUrl(KUrl::AddTrailingSlash);
221  }
222 }
223 
224 void ExtractionDialog::writeSettings()
225 {
226  ArkSettings::setOpenDestinationFolderAfterExtraction(openDestinationAfterExtraction());
227  ArkSettings::setCloseAfterExtraction(closeAfterExtraction());
228  ArkSettings::setPreservePaths(preservePaths());
229  ArkSettings::self()->writeConfig();
230 }
231 
232 }
233 
234 #include "extractiondialog.moc"
Kerfuffle::ExtractionDialog::setCloseAfterExtraction
void setCloseAfterExtraction(bool)
Definition: extractiondialog.cpp:190
QWidget
QWidget::setupUi
void setupUi(QWidget *widget)
Kerfuffle::ExtractionDialog::setSubfolder
void setSubfolder(const QString &subfolder)
Definition: extractiondialog.cpp:136
ArkSettings::setCloseAfterExtraction
static void setCloseAfterExtraction(bool v)
Set Close Ark after extraction.
Definition: settings.h:41
Kerfuffle::ExtractionDialog::setOpenDestinationFolderAfterExtraction
void setOpenDestinationFolderAfterExtraction(bool)
Definition: extractiondialog.cpp:185
Kerfuffle::ExtractionDialog::subfolder
QString subfolder() const
Definition: extractiondialog.cpp:141
Kerfuffle::ExtractionDialog::setShowSelectedFiles
void setShowSelectedFiles(bool)
Definition: extractiondialog.cpp:152
Kerfuffle::ExtractionDialog::~ExtractionDialog
virtual ~ExtractionDialog()
Definition: extractiondialog.cpp:146
Kerfuffle::ExtractionDialog::accept
virtual void accept()
Definition: extractiondialog.cpp:96
ArkSettings::openDestinationFolderAfterExtraction
static bool openDestinationFolderAfterExtraction()
Get Open destination folder after extraction.
Definition: settings.h:32
Kerfuffle::ExtractionDialog::autoSubfolders
bool autoSubfolders() const
Definition: extractiondialog.cpp:175
Kerfuffle::ExtractionDialog::setAutoSubfolder
void setAutoSubfolder(bool value)
Definition: extractiondialog.cpp:170
ArkSettings::preservePaths
static bool preservePaths()
Get Preserve paths when extracting.
Definition: settings.h:70
Kerfuffle::ExtractionDialog::setPreservePaths
void setPreservePaths(bool)
Definition: extractiondialog.cpp:195
Kerfuffle::ExtractionDialog::setSingleFolderArchive
void setSingleFolderArchive(bool)
Definition: extractiondialog.cpp:83
ArkSettings::self
static ArkSettings * self()
Definition: settings.cpp:19
Kerfuffle::ExtractionDialog::destinationDirectory
KUrl destinationDirectory() const
Definition: extractiondialog.cpp:215
Kerfuffle::ExtractionDialog::openDestinationAfterExtraction
bool openDestinationAfterExtraction() const
Definition: extractiondialog.cpp:205
QString
Kerfuffle::ExtractionDialog::preservePaths
bool preservePaths() const
Definition: extractiondialog.cpp:200
Kerfuffle::ExtractionDialog::extractToSubfolder
bool extractToSubfolder() const
Definition: extractiondialog.cpp:180
Kerfuffle::ExtractionDialog::extractAllFiles
bool extractAllFiles() const
Definition: extractiondialog.cpp:165
extractiondialog.h
QFileInfo
Kerfuffle::ExtractionDialog::ExtractionDialog
ExtractionDialog(QWidget *parent=0)
Definition: extractiondialog.cpp:54
QLatin1Char
QFrame
KDirSelectDialog
Kerfuffle::ExtractionDialog::batchModeOption
void batchModeOption()
Definition: extractiondialog.cpp:88
settings.h
QLatin1String
Kerfuffle::ExtractionDialog::closeAfterExtraction
bool closeAfterExtraction() const
Definition: extractiondialog.cpp:210
QObject::parent
QObject * parent() const
ArkSettings::setOpenDestinationFolderAfterExtraction
static void setOpenDestinationFolderAfterExtraction(bool v)
Set Open destination folder after extraction.
Definition: settings.h:22
ArkSettings::setPreservePaths
static void setPreservePaths(bool v)
Set Preserve paths when extracting.
Definition: settings.h:60
ArkSettings::closeAfterExtraction
static bool closeAfterExtraction()
Get Close Ark after extraction.
Definition: settings.h:51
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:37 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

ark

Skip menu "ark"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • ktimer
  • kwallet
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal