[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-kimageshop
Subject:    Re: [calligra] krita/ui: Ask user for a file when a File Layer doesn't exist
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2014-05-09 7:12:42
Message-ID: 5024504.WklbjCRjQN () linux-ixka ! site
[Download RAW message or body]

There's api for that:

KoDocument.h:    bool saveInBatchMode() const;

On Monday 05 May 2014 May 13:44:08 Dmitry Kazakov wrote:
> 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@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;
> _______________________________________________
> Krita mailing list
> kimageshop@kde.org
> https://mail.kde.org/mailman/listinfo/kimageshop

-- 
Boudewijn Rempt
http://www.valdyas.org, http://www.krita.org, http://www.boudewijnrempt.nl

_______________________________________________
Krita mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic