38
38
#include <lib/document/documentfactory.h>
39
39
#include <lib/document/documentjob.h>
44
44
struct SaveAllHelperPrivate {
46
KProgressDialog* mProgressDialog;
47
QSet<DocumentJob*> mJobSet;
48
QStringList mErrorList;
46
KProgressDialog* mProgressDialog;
47
QSet<DocumentJob*> mJobSet;
48
QStringList mErrorList;
52
51
SaveAllHelper::SaveAllHelper(QWidget* parent)
53
: d(new SaveAllHelperPrivate) {
55
d->mProgressDialog = new KProgressDialog(parent);
56
connect(d->mProgressDialog, SIGNAL(cancelClicked()), SLOT(slotCanceled()));
57
d->mProgressDialog->setLabelText(i18nc("@info:progress saving all image changes", "Saving..."));
58
d->mProgressDialog->setButtonText(i18n("&Stop"));
59
d->mProgressDialog->progressBar()->setMinimum(0);
63
SaveAllHelper::~SaveAllHelper() {
68
void SaveAllHelper::save() {
69
KUrl::List list = DocumentFactory::instance()->modifiedDocumentList();
70
d->mProgressDialog->progressBar()->setRange(0, list.size());
71
d->mProgressDialog->progressBar()->setValue(0);
72
Q_FOREACH(const KUrl& url, list) {
73
Document::Ptr doc = DocumentFactory::instance()->load(url);
74
DocumentJob* job = doc->save(url, doc->format());
75
connect(job, SIGNAL(result(KJob*)), SLOT(slotResult(KJob*)));
79
d->mProgressDialog->exec();
81
// Done, show message if necessary
82
if (d->mErrorList.count() > 0) {
83
QString msg = i18ncp("@info", "One document could not be saved:", "%1 documents could not be saved:", d->mErrorList.count());
85
Q_FOREACH(const QString& item, d->mErrorList) {
86
msg += "<li>" + item + "</li>";
89
KMessageBox::sorry(d->mParent, msg);
94
void SaveAllHelper::slotCanceled() {
95
Q_FOREACH(DocumentJob* job, d->mJobSet) {
101
void SaveAllHelper::slotResult(KJob* _job) {
102
DocumentJob* job = static_cast<DocumentJob*>(_job);
104
KUrl url = job->document()->url();
105
QString name = url.fileName().isEmpty() ? url.pathOrUrl() : url.fileName();
106
d->mErrorList << i18nc("@info %1 is the name of the document which failed to save, %2 is the reason for the failure",
107
"<filename>%1</filename>: %2", name, job->errorString());
109
d->mJobSet.remove(job);
110
QProgressBar* bar = d->mProgressDialog->progressBar();
111
bar->setValue(bar->value() + 1);
52
: d(new SaveAllHelperPrivate)
55
d->mProgressDialog = new KProgressDialog(parent);
56
connect(d->mProgressDialog, SIGNAL(cancelClicked()), SLOT(slotCanceled()));
57
d->mProgressDialog->setLabelText(i18nc("@info:progress saving all image changes", "Saving..."));
58
d->mProgressDialog->setButtonText(i18n("&Stop"));
59
d->mProgressDialog->progressBar()->setMinimum(0);
62
SaveAllHelper::~SaveAllHelper()
67
void SaveAllHelper::save()
69
KUrl::List list = DocumentFactory::instance()->modifiedDocumentList();
70
d->mProgressDialog->progressBar()->setRange(0, list.size());
71
d->mProgressDialog->progressBar()->setValue(0);
72
Q_FOREACH(const KUrl & url, list) {
73
Document::Ptr doc = DocumentFactory::instance()->load(url);
74
DocumentJob* job = doc->save(url, doc->format());
75
connect(job, SIGNAL(result(KJob*)), SLOT(slotResult(KJob*)));
79
d->mProgressDialog->exec();
81
// Done, show message if necessary
82
if (d->mErrorList.count() > 0) {
83
QString msg = i18ncp("@info", "One document could not be saved:", "%1 documents could not be saved:", d->mErrorList.count());
85
Q_FOREACH(const QString & item, d->mErrorList) {
86
msg += "<li>" + item + "</li>";
89
KMessageBox::sorry(d->mParent, msg);
93
void SaveAllHelper::slotCanceled()
95
Q_FOREACH(DocumentJob * job, d->mJobSet) {
100
void SaveAllHelper::slotResult(KJob* _job)
102
DocumentJob* job = static_cast<DocumentJob*>(_job);
104
KUrl url = job->document()->url();
105
QString name = url.fileName().isEmpty() ? url.pathOrUrl() : url.fileName();
106
d->mErrorList << i18nc("@info %1 is the name of the document which failed to save, %2 is the reason for the failure",
107
"<filename>%1</filename>: %2", name, job->errorString());
109
d->mJobSet.remove(job);
110
QProgressBar* bar = d->mProgressDialog->progressBar();
111
bar->setValue(bar->value() + 1);