44
44
#include "progresspage.h"
45
45
#include "thumbnailpage.h"
50
class ImportDialogPrivate {
50
class ImportDialogPrivate
53
QStackedWidget* mCentralWidget;
54
ThumbnailPage* mThumbnailPage;
55
ProgressPage* mProgressPage;
56
DialogPage* mDialogPage;
59
void deleteImportedUrls() {
60
KUrl::List importedUrls = mImporter->importedUrlList();
61
KUrl::List skippedUrls = mImporter->skippedUrlList();
62
int importedCount = importedUrls.count();
63
int skippedCount = skippedUrls.count();
65
if (importedCount == 0 && skippedCount == 0) {
71
"One document has been imported.",
72
"%1 documents have been imported.",
74
if (skippedCount > 0) {
76
"One document has been skipped because it had already been imported.",
77
"%1 documents have been skipped because they had already been imported.",
81
if (mImporter->renamedCount() > 0) {
82
message[0].append("*");
83
message << "<small>* " + i18np(
84
"One of them has been renamed because another document with the same name had already been imported.",
85
"%1 of them have been renamed because other documents with the same name had already been imported.",
86
mImporter->renamedCount())
91
if (skippedCount == 0) {
93
"Delete the imported document from the device?",
94
"Delete the %1 imported documents from the device?",
96
} else if (importedCount == 0) {
98
"Delete the skipped document from the device?",
99
"Delete the %1 skipped documents from the device?",
103
"Singular sentence is actually never used.",
104
"Delete the imported or skipped document from the device?",
105
"Delete the %1 imported and skipped documents from the device?",
106
importedCount + skippedCount);
109
int answer = KMessageBox::questionYesNo(mCentralWidget,
110
"<qt>" + message.join("<br/>") + "</qt>",
111
i18nc("@title:window", "Import Finished"),
112
KStandardGuiItem::del(),
113
KGuiItem(i18n("Keep"))
115
if (answer != KMessageBox::Yes) {
118
KUrl::List urls = importedUrls + skippedUrls;
120
KIO::Job* job = KIO::del(urls);
121
if (KIO::NetAccess::synchronousRun(job, q)) {
125
int answer = KMessageBox::warningYesNo(mCentralWidget,
126
i18np("Failed to delete the document:\n%2",
127
"Failed to delete documents:\n%2",
128
urls.count(), job->errorString()),
130
KGuiItem(i18n("Retry")),
131
KGuiItem(i18n("Ignore"))
133
if (answer != KMessageBox::Yes) {
140
void startGwenview() {
141
KService::Ptr service = KService::serviceByDesktopName("gwenview");
143
kError() << "Could not find gwenview";
145
KRun::run(*service, KUrl::List() << mThumbnailPage->destinationUrl(), 0 /* window */);
149
void showWhatNext() {
150
mCentralWidget->setCurrentWidget(mDialogPage);
151
mDialogPage->setText(i18n("What do you want to do now?"));
152
mDialogPage->removeButtons();
153
int gwenview = mDialogPage->addButton(KGuiItem(i18n("View Imported Documents with Gwenview"), "gwenview"));
154
int importMore = mDialogPage->addButton(KGuiItem(i18n("Import more Documents")));
155
mDialogPage->addButton(KGuiItem(i18n("Quit"), "dialog-cancel"));
157
int answer = mDialogPage->exec();
158
if (answer == gwenview) {
161
} else if (answer == importMore) {
162
mCentralWidget->setCurrentWidget(mThumbnailPage);
54
QStackedWidget* mCentralWidget;
55
ThumbnailPage* mThumbnailPage;
56
ProgressPage* mProgressPage;
57
DialogPage* mDialogPage;
60
void deleteImportedUrls()
62
KUrl::List importedUrls = mImporter->importedUrlList();
63
KUrl::List skippedUrls = mImporter->skippedUrlList();
64
int importedCount = importedUrls.count();
65
int skippedCount = skippedUrls.count();
67
if (importedCount == 0 && skippedCount == 0) {
73
"One document has been imported.",
74
"%1 documents have been imported.",
76
if (skippedCount > 0) {
78
"One document has been skipped because it had already been imported.",
79
"%1 documents have been skipped because they had already been imported.",
83
if (mImporter->renamedCount() > 0) {
84
message[0].append("*");
85
message << "<small>* " + i18np(
86
"One of them has been renamed because another document with the same name had already been imported.",
87
"%1 of them have been renamed because other documents with the same name had already been imported.",
88
mImporter->renamedCount())
93
if (skippedCount == 0) {
95
"Delete the imported document from the device?",
96
"Delete the %1 imported documents from the device?",
98
} else if (importedCount == 0) {
100
"Delete the skipped document from the device?",
101
"Delete the %1 skipped documents from the device?",
105
"Singular sentence is actually never used.",
106
"Delete the imported or skipped document from the device?",
107
"Delete the %1 imported and skipped documents from the device?",
108
importedCount + skippedCount);
111
int answer = KMessageBox::questionYesNo(mCentralWidget,
112
"<qt>" + message.join("<br/>") + "</qt>",
113
i18nc("@title:window", "Import Finished"),
114
KStandardGuiItem::del(),
115
KGuiItem(i18n("Keep"))
117
if (answer != KMessageBox::Yes) {
120
KUrl::List urls = importedUrls + skippedUrls;
122
KIO::Job* job = KIO::del(urls);
123
if (KIO::NetAccess::synchronousRun(job, q)) {
127
int answer = KMessageBox::warningYesNo(mCentralWidget,
128
i18np("Failed to delete the document:\n%2",
129
"Failed to delete documents:\n%2",
130
urls.count(), job->errorString()),
132
KGuiItem(i18n("Retry")),
133
KGuiItem(i18n("Ignore"))
135
if (answer != KMessageBox::Yes) {
144
KService::Ptr service = KService::serviceByDesktopName("gwenview");
146
kError() << "Could not find gwenview";
148
KRun::run(*service, KUrl::List() << mThumbnailPage->destinationUrl(), 0 /* window */);
154
mCentralWidget->setCurrentWidget(mDialogPage);
155
mDialogPage->setText(i18n("What do you want to do now?"));
156
mDialogPage->removeButtons();
157
int gwenview = mDialogPage->addButton(KGuiItem(i18n("View Imported Documents with Gwenview"), "gwenview"));
158
int importMore = mDialogPage->addButton(KGuiItem(i18n("Import more Documents")));
159
mDialogPage->addButton(KGuiItem(i18n("Quit"), "dialog-cancel"));
161
int answer = mDialogPage->exec();
162
if (answer == gwenview) {
165
} else if (answer == importMore) {
166
mCentralWidget->setCurrentWidget(mThumbnailPage);
170
173
ImportDialog::ImportDialog()
171
: d(new ImportDialogPrivate) {
173
d->mImporter = new Importer(this);
174
connect(d->mImporter, SIGNAL(error(const QString&)),
175
SLOT(showImportError(const QString&)));
176
d->mThumbnailPage = new ThumbnailPage;
178
KUrl url = ImporterConfig::destinationUrl();
179
if (!url.isValid()) {
180
url = KUrl::fromPath(KGlobalSettings::picturesPath());
181
int year = QDate::currentDate().year();
182
url.addPath(QString::number(year));
184
d->mThumbnailPage->setDestinationUrl(url);
186
d->mProgressPage = new ProgressPage(d->mImporter);
188
d->mDialogPage = new DialogPage;
190
d->mCentralWidget = new QStackedWidget;
191
setCentralWidget(d->mCentralWidget);
192
d->mCentralWidget->addWidget(d->mThumbnailPage);
193
d->mCentralWidget->addWidget(d->mProgressPage);
194
d->mCentralWidget->addWidget(d->mDialogPage);
196
connect(d->mThumbnailPage, SIGNAL(importRequested()),
197
SLOT(startImport()));
198
connect(d->mThumbnailPage, SIGNAL(rejected()),
200
connect(d->mImporter, SIGNAL(importFinished()),
201
SLOT(slotImportFinished()));
203
d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
205
setAutoSaveSettings();
209
ImportDialog::~ImportDialog() {
214
QSize ImportDialog::sizeHint() const {
215
return QSize(700, 500);
219
void ImportDialog::setSourceUrl(const KUrl& url) {
220
d->mThumbnailPage->setSourceUrl(url);
224
void ImportDialog::startImport() {
225
KUrl url = d->mThumbnailPage->destinationUrl();
226
ImporterConfig::setDestinationUrl(url);
227
ImporterConfig::self()->writeConfig();
229
d->mCentralWidget->setCurrentWidget(d->mProgressPage);
230
d->mImporter->setAutoRenameFormat(
231
ImporterConfig::autoRename()
232
? ImporterConfig::autoRenameFormat()
234
d->mImporter->start(d->mThumbnailPage->urlList(), url);
238
void ImportDialog::slotImportFinished() {
239
d->deleteImportedUrls();
244
void ImportDialog::showImportError(const QString& message) {
245
KMessageBox::sorry(this, message);
246
d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
174
: d(new ImportDialogPrivate)
177
d->mImporter = new Importer(this);
178
connect(d->mImporter, SIGNAL(error(QString)),
179
SLOT(showImportError(QString)));
180
d->mThumbnailPage = new ThumbnailPage;
182
KUrl url = ImporterConfig::destinationUrl();
183
if (!url.isValid()) {
184
url = KUrl::fromPath(KGlobalSettings::picturesPath());
185
int year = QDate::currentDate().year();
186
url.addPath(QString::number(year));
188
d->mThumbnailPage->setDestinationUrl(url);
190
d->mProgressPage = new ProgressPage(d->mImporter);
192
d->mDialogPage = new DialogPage;
194
d->mCentralWidget = new QStackedWidget;
195
setCentralWidget(d->mCentralWidget);
196
d->mCentralWidget->addWidget(d->mThumbnailPage);
197
d->mCentralWidget->addWidget(d->mProgressPage);
198
d->mCentralWidget->addWidget(d->mDialogPage);
200
connect(d->mThumbnailPage, SIGNAL(importRequested()),
201
SLOT(startImport()));
202
connect(d->mThumbnailPage, SIGNAL(rejected()),
204
connect(d->mImporter, SIGNAL(importFinished()),
205
SLOT(slotImportFinished()));
207
d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
209
setAutoSaveSettings();
212
ImportDialog::~ImportDialog()
217
QSize ImportDialog::sizeHint() const
219
return QSize(700, 500);
222
void ImportDialog::setSourceUrl(const KUrl& url)
224
d->mThumbnailPage->setSourceUrl(url);
227
void ImportDialog::startImport()
229
KUrl url = d->mThumbnailPage->destinationUrl();
230
ImporterConfig::setDestinationUrl(url);
231
ImporterConfig::self()->writeConfig();
233
d->mCentralWidget->setCurrentWidget(d->mProgressPage);
234
d->mImporter->setAutoRenameFormat(
235
ImporterConfig::autoRename()
236
? ImporterConfig::autoRenameFormat()
238
d->mImporter->start(d->mThumbnailPage->urlList(), url);
241
void ImportDialog::slotImportFinished()
243
d->deleteImportedUrls();
247
void ImportDialog::showImportError(const QString& message)
249
KMessageBox::sorry(this, message);
250
d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);