[calligra] krita/ui: Ask user for a file when a File Layer doesn't exist
Dmitry Kazakov
dimula73 at gmail.com
Mon May 5 13:44:08 UTC 2014
Git commit 4b96de279603d93edf8d9a76cd433898c21a201a by Dmitry Kazakov.
Committed on 05/05/2014 at 13:43.
Pushed by dkazakov into branch 'master'.
Ask user for a file when a File Layer doesn't exist
TODO: we need to be able to check whether we are running inside
of a calligraconverter or in a gui mode. Firing up message boxes
might not be the best idea for a calligraconverter :(
BUG:333326
CCMAIL:kimageshop at kde.org
M +1 -1 krita/ui/kis_doc2.cc
M +7 -0 krita/ui/kis_file_layer.cpp
M +37 -1 krita/ui/kra/kis_kra_loader.cpp
http://commits.kde.org/calligra/4b96de279603d93edf8d9a76cd433898c21a201a
diff --git a/krita/ui/kis_doc2.cc b/krita/ui/kis_doc2.cc
index 1f3e332..ee9fea6 100644
--- a/krita/ui/kis_doc2.cc
+++ b/krita/ui/kis_doc2.cc
@@ -251,7 +251,7 @@ QDomDocument KisDoc2::saveXML()
root.appendChild(m_d->kraSaver->saveXML(doc, m_d->image));
if (!m_d->kraSaver->errorMessages().isEmpty()) {
- setErrorMessage(m_d->kraLoader->errorMessages().join(".\n"));
+ setErrorMessage(m_d->kraSaver->errorMessages().join(".\n"));
}
return doc;
diff --git a/krita/ui/kis_file_layer.cpp b/krita/ui/kis_file_layer.cpp
index 5b86e4e..5eb7170 100644
--- a/krita/ui/kis_file_layer.cpp
+++ b/krita/ui/kis_file_layer.cpp
@@ -34,6 +34,13 @@ KisFileLayer::KisFileLayer(KisImageWSP image, const QString &basePath, const QSt
, m_filename(filename)
, m_scalingMethod(scaleToImageResolution)
{
+ /**
+ * Set default paint device for a layer. It will be used is case
+ * the file does not exist anymore. Or course, this can happen only
+ * in the failing execution path.
+ */
+ m_image = new KisPaintDevice(image->colorSpace());
+
connect(&m_loader, SIGNAL(loadingFinished()), SLOT(slotLoadingFinished()));
m_loader.setPath(path());
m_loader.reloadImage();
diff --git a/krita/ui/kra/kis_kra_loader.cpp b/krita/ui/kra/kis_kra_loader.cpp
index 0027b7b..874e4f0 100644
--- a/krita/ui/kra/kis_kra_loader.cpp
+++ b/krita/ui/kra/kis_kra_loader.cpp
@@ -19,12 +19,17 @@
#include "kra/kis_kra_loader.h"
+#include <QApplication>
#include <QStringList>
+#include <kmessagebox.h>
+
#include <KoStore.h>
#include <KoColorSpaceRegistry.h>
#include <KoColorProfile.h>
#include <KoDocumentInfo.h>
+#include <KoFileDialog.h>
+#include <KoFilterManager.h>
#include <filter/kis_filter.h>
#include <filter/kis_filter_registry.h>
@@ -585,7 +590,38 @@ KisNodeSP KisKraLoader::loadFileLayer(const KoXmlElement& element, KisImageWSP i
documentPath = m_d->document->url().toLocalFile();
}
QFileInfo info(documentPath);
- KisLayer *layer = new KisFileLayer(image, info.absolutePath(), filename, (KisFileLayer::ScalingMethod)scalingMethod, name, opacity);
+ QString basePath = info.absolutePath();
+
+ QString fullPath = basePath + QDir::separator() + filename;
+
+ if (!QFileInfo(fullPath).exists()) {
+ QString msg = i18nc(
+ "@info",
+ "The file associated to a file layer with the name \"%1\" is not found.<nl/><nl/>"
+ "Expected path:<nl/>"
+ "%2<nl/><nl/>"
+ "Do you want to locate it manually?", name, fullPath);
+
+ int result = KMessageBox::warningYesNo(0, msg,
+ i18n("File not found"));
+
+ if (result == KMessageBox::Yes) {
+
+ KoFileDialog dialog(0, KoFileDialog::OpenFile, "OpenDocument");
+ dialog.setMimeTypeFilters(KoFilterManager::mimeFilter("application/x-krita", KoFilterManager::Import));
+ dialog.setDefaultDir(basePath);
+ QString url = dialog.url();
+
+ if (!QFileInfo(basePath).exists()) {
+ filename = url;
+ } else {
+ QDir d(basePath);
+ filename = d.relativeFilePath(url);
+ }
+ }
+ }
+
+ KisLayer *layer = new KisFileLayer(image, basePath, filename, (KisFileLayer::ScalingMethod)scalingMethod, name, opacity);
Q_CHECK_PTR(layer);
return layer;
More information about the kimageshop
mailing list