~ubuntu-branches/ubuntu/precise/gwenview/precise-proposed

« back to all changes in this revision

Viewing changes to importer/importdialog.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2011-12-15 14:17:54 UTC
  • mto: This revision was merged to the branch mainline in revision 12.
  • Revision ID: package-import@ubuntu.com-20111215141754-z043hyx69dulbggf
Tags: upstream-4.7.90
ImportĀ upstreamĀ versionĀ 4.7.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// vim: set tabstop=4 shiftwidth=4 noexpandtab:
 
1
// vim: set tabstop=4 shiftwidth=4 expandtab:
2
2
/*
3
3
Gwenview: an image viewer
4
4
Copyright 2009 AurĆ©lien GĆ¢teau <agateau@kde.org>
44
44
#include "progresspage.h"
45
45
#include "thumbnailpage.h"
46
46
 
47
 
namespace Gwenview {
48
 
 
49
 
 
50
 
class ImportDialogPrivate {
 
47
namespace Gwenview
 
48
{
 
49
 
 
50
class ImportDialogPrivate
 
51
{
51
52
public:
52
 
        ImportDialog* q;
53
 
        QStackedWidget* mCentralWidget;
54
 
        ThumbnailPage* mThumbnailPage;
55
 
        ProgressPage* mProgressPage;
56
 
        DialogPage* mDialogPage;
57
 
        Importer* mImporter;
58
 
 
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();
64
 
 
65
 
                if (importedCount == 0 && skippedCount == 0) {
66
 
                        return;
67
 
                }
68
 
 
69
 
                QStringList message;
70
 
                message << i18np(
71
 
                        "One document has been imported.",
72
 
                        "%1 documents have been imported.",
73
 
                        importedCount);
74
 
                if (skippedCount > 0) {
75
 
                        message << i18np(
76
 
                                "One document has been skipped because it had already been imported.",
77
 
                                "%1 documents have been skipped because they had already been imported.",
78
 
                                skippedCount);
79
 
                }
80
 
 
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())
87
 
                                + "</small>";
88
 
                }
89
 
 
90
 
                message << QString();
91
 
                if (skippedCount == 0) {
92
 
                        message << i18np(
93
 
                                "Delete the imported document from the device?",
94
 
                                "Delete the %1 imported documents from the device?",
95
 
                                importedCount);
96
 
                } else if (importedCount == 0) {
97
 
                        message << i18np(
98
 
                                "Delete the skipped document from the device?",
99
 
                                "Delete the %1 skipped documents from the device?",
100
 
                                skippedCount);
101
 
                } else {
102
 
                        message << i18ncp(
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);
107
 
                }
108
 
 
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"))
114
 
                        );
115
 
                if (answer != KMessageBox::Yes) {
116
 
                        return;
117
 
                }
118
 
                KUrl::List urls = importedUrls + skippedUrls;
119
 
                while (true) {
120
 
                        KIO::Job* job = KIO::del(urls);
121
 
                        if (KIO::NetAccess::synchronousRun(job, q)) {
122
 
                                break;
123
 
                        }
124
 
                        // Deleting failed
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()),
129
 
                                QString(),
130
 
                                KGuiItem(i18n("Retry")),
131
 
                                KGuiItem(i18n("Ignore"))
132
 
                                );
133
 
                        if (answer != KMessageBox::Yes) {
134
 
                                // Ignore
135
 
                                break;
136
 
                        }
137
 
                }
138
 
        }
139
 
 
140
 
        void startGwenview() {
141
 
                KService::Ptr service = KService::serviceByDesktopName("gwenview");
142
 
                if (!service) {
143
 
                        kError() << "Could not find gwenview";
144
 
                } else {
145
 
                        KRun::run(*service, KUrl::List() << mThumbnailPage->destinationUrl(), 0 /* window */);
146
 
                }
147
 
        }
148
 
 
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"));
156
 
 
157
 
                int answer = mDialogPage->exec();
158
 
                if (answer == gwenview) {
159
 
                        startGwenview();
160
 
                        qApp->quit();
161
 
                } else if (answer == importMore) {
162
 
                        mCentralWidget->setCurrentWidget(mThumbnailPage);
163
 
                } else { /* quit */
164
 
                        qApp->quit();
165
 
                }
166
 
        }
 
53
    ImportDialog* q;
 
54
    QStackedWidget* mCentralWidget;
 
55
    ThumbnailPage* mThumbnailPage;
 
56
    ProgressPage* mProgressPage;
 
57
    DialogPage* mDialogPage;
 
58
    Importer* mImporter;
 
59
 
 
60
    void deleteImportedUrls()
 
61
    {
 
62
        KUrl::List importedUrls = mImporter->importedUrlList();
 
63
        KUrl::List skippedUrls = mImporter->skippedUrlList();
 
64
        int importedCount = importedUrls.count();
 
65
        int skippedCount = skippedUrls.count();
 
66
 
 
67
        if (importedCount == 0 && skippedCount == 0) {
 
68
            return;
 
69
        }
 
70
 
 
71
        QStringList message;
 
72
        message << i18np(
 
73
                    "One document has been imported.",
 
74
                    "%1 documents have been imported.",
 
75
                    importedCount);
 
76
        if (skippedCount > 0) {
 
77
            message << i18np(
 
78
                        "One document has been skipped because it had already been imported.",
 
79
                        "%1 documents have been skipped because they had already been imported.",
 
80
                        skippedCount);
 
81
        }
 
82
 
 
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())
 
89
                    + "</small>";
 
90
        }
 
91
 
 
92
        message << QString();
 
93
        if (skippedCount == 0) {
 
94
            message << i18np(
 
95
                        "Delete the imported document from the device?",
 
96
                        "Delete the %1 imported documents from the device?",
 
97
                        importedCount);
 
98
        } else if (importedCount == 0) {
 
99
            message << i18np(
 
100
                        "Delete the skipped document from the device?",
 
101
                        "Delete the %1 skipped documents from the device?",
 
102
                        skippedCount);
 
103
        } else {
 
104
            message << i18ncp(
 
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);
 
109
        }
 
110
 
 
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"))
 
116
                                               );
 
117
        if (answer != KMessageBox::Yes) {
 
118
            return;
 
119
        }
 
120
        KUrl::List urls = importedUrls + skippedUrls;
 
121
        while (true) {
 
122
            KIO::Job* job = KIO::del(urls);
 
123
            if (KIO::NetAccess::synchronousRun(job, q)) {
 
124
                break;
 
125
            }
 
126
            // Deleting failed
 
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()),
 
131
                                                   QString(),
 
132
                                                   KGuiItem(i18n("Retry")),
 
133
                                                   KGuiItem(i18n("Ignore"))
 
134
                                                  );
 
135
            if (answer != KMessageBox::Yes) {
 
136
                // Ignore
 
137
                break;
 
138
            }
 
139
        }
 
140
    }
 
141
 
 
142
    void startGwenview()
 
143
    {
 
144
        KService::Ptr service = KService::serviceByDesktopName("gwenview");
 
145
        if (!service) {
 
146
            kError() << "Could not find gwenview";
 
147
        } else {
 
148
            KRun::run(*service, KUrl::List() << mThumbnailPage->destinationUrl(), 0 /* window */);
 
149
        }
 
150
    }
 
151
 
 
152
    void showWhatNext()
 
153
    {
 
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"));
 
160
 
 
161
        int answer = mDialogPage->exec();
 
162
        if (answer == gwenview) {
 
163
            startGwenview();
 
164
            qApp->quit();
 
165
        } else if (answer == importMore) {
 
166
            mCentralWidget->setCurrentWidget(mThumbnailPage);
 
167
        } else { /* quit */
 
168
            qApp->quit();
 
169
        }
 
170
    }
167
171
};
168
172
 
169
 
 
170
173
ImportDialog::ImportDialog()
171
 
: d(new ImportDialogPrivate) {
172
 
        d->q = this;
173
 
        d->mImporter = new Importer(this);
174
 
        connect(d->mImporter, SIGNAL(error(const QString&)),
175
 
                SLOT(showImportError(const QString&)));
176
 
        d->mThumbnailPage = new ThumbnailPage;
177
 
 
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));
183
 
        }
184
 
        d->mThumbnailPage->setDestinationUrl(url);
185
 
 
186
 
        d->mProgressPage = new ProgressPage(d->mImporter);
187
 
 
188
 
        d->mDialogPage = new DialogPage;
189
 
 
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);
195
 
 
196
 
        connect(d->mThumbnailPage, SIGNAL(importRequested()),
197
 
                SLOT(startImport()));
198
 
        connect(d->mThumbnailPage, SIGNAL(rejected()),
199
 
                SLOT(close()));
200
 
        connect(d->mImporter, SIGNAL(importFinished()),
201
 
                SLOT(slotImportFinished()));
202
 
 
203
 
        d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
204
 
 
205
 
        setAutoSaveSettings();
206
 
}
207
 
 
208
 
 
209
 
ImportDialog::~ImportDialog() {
210
 
        delete d;
211
 
}
212
 
 
213
 
 
214
 
QSize ImportDialog::sizeHint() const {
215
 
        return QSize(700, 500);
216
 
}
217
 
 
218
 
 
219
 
void ImportDialog::setSourceUrl(const KUrl& url) {
220
 
        d->mThumbnailPage->setSourceUrl(url);
221
 
}
222
 
 
223
 
 
224
 
void ImportDialog::startImport() {
225
 
        KUrl url = d->mThumbnailPage->destinationUrl();
226
 
        ImporterConfig::setDestinationUrl(url);
227
 
        ImporterConfig::self()->writeConfig();
228
 
 
229
 
        d->mCentralWidget->setCurrentWidget(d->mProgressPage);
230
 
        d->mImporter->setAutoRenameFormat(
231
 
                ImporterConfig::autoRename()
232
 
                ? ImporterConfig::autoRenameFormat()
233
 
                : QString());
234
 
        d->mImporter->start(d->mThumbnailPage->urlList(), url);
235
 
}
236
 
 
237
 
 
238
 
void ImportDialog::slotImportFinished() {
239
 
        d->deleteImportedUrls();
240
 
        d->showWhatNext();
241
 
}
242
 
 
243
 
 
244
 
void ImportDialog::showImportError(const QString& message) {
245
 
        KMessageBox::sorry(this, message);
246
 
        d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
247
 
}
248
 
 
 
174
: d(new ImportDialogPrivate)
 
175
{
 
176
    d->q = this;
 
177
    d->mImporter = new Importer(this);
 
178
    connect(d->mImporter, SIGNAL(error(QString)),
 
179
            SLOT(showImportError(QString)));
 
180
    d->mThumbnailPage = new ThumbnailPage;
 
181
 
 
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));
 
187
    }
 
188
    d->mThumbnailPage->setDestinationUrl(url);
 
189
 
 
190
    d->mProgressPage = new ProgressPage(d->mImporter);
 
191
 
 
192
    d->mDialogPage = new DialogPage;
 
193
 
 
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);
 
199
 
 
200
    connect(d->mThumbnailPage, SIGNAL(importRequested()),
 
201
            SLOT(startImport()));
 
202
    connect(d->mThumbnailPage, SIGNAL(rejected()),
 
203
            SLOT(close()));
 
204
    connect(d->mImporter, SIGNAL(importFinished()),
 
205
            SLOT(slotImportFinished()));
 
206
 
 
207
    d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
 
208
 
 
209
    setAutoSaveSettings();
 
210
}
 
211
 
 
212
ImportDialog::~ImportDialog()
 
213
{
 
214
    delete d;
 
215
}
 
216
 
 
217
QSize ImportDialog::sizeHint() const
 
218
{
 
219
    return QSize(700, 500);
 
220
}
 
221
 
 
222
void ImportDialog::setSourceUrl(const KUrl& url)
 
223
{
 
224
    d->mThumbnailPage->setSourceUrl(url);
 
225
}
 
226
 
 
227
void ImportDialog::startImport()
 
228
{
 
229
    KUrl url = d->mThumbnailPage->destinationUrl();
 
230
    ImporterConfig::setDestinationUrl(url);
 
231
    ImporterConfig::self()->writeConfig();
 
232
 
 
233
    d->mCentralWidget->setCurrentWidget(d->mProgressPage);
 
234
    d->mImporter->setAutoRenameFormat(
 
235
        ImporterConfig::autoRename()
 
236
        ? ImporterConfig::autoRenameFormat()
 
237
        : QString());
 
238
    d->mImporter->start(d->mThumbnailPage->urlList(), url);
 
239
}
 
240
 
 
241
void ImportDialog::slotImportFinished()
 
242
{
 
243
    d->deleteImportedUrls();
 
244
    d->showWhatNext();
 
245
}
 
246
 
 
247
void ImportDialog::showImportError(const QString& message)
 
248
{
 
249
    KMessageBox::sorry(this, message);
 
250
    d->mCentralWidget->setCurrentWidget(d->mThumbnailPage);
 
251
}
249
252
 
250
253
} // namespace