File indexing completed on 2024-05-12 15:59:05
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "FileLayer.h" 0007 #include <kis_file_layer.h> 0008 #include <kis_image.h> 0009 #include <QFileInfo> 0010 #include <QDir> 0011 0012 FileLayer::FileLayer(KisImageSP image, const QString name, const QString baseName, const QString fileName, const QString scalingMethod, QObject *parent) 0013 : Node(image, new KisFileLayer(image, name, OPACITY_OPAQUE_U8), parent) 0014 { 0015 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0016 KIS_ASSERT(file); 0017 KisFileLayer::ScalingMethod sm = KisFileLayer::None; 0018 if (scalingMethod=="ToImageSize") { 0019 sm= KisFileLayer::ToImageSize; 0020 } else if (scalingMethod=="ToImagePPI") { 0021 sm= KisFileLayer::ToImagePPI; 0022 } 0023 file->setScalingMethod(sm); 0024 0025 const QString &basePath = QFileInfo(baseName).absolutePath(); 0026 const QString &absoluteFilePath = QFileInfo(fileName).absoluteFilePath(); 0027 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath)); 0028 } 0029 0030 FileLayer::FileLayer(KisFileLayerSP layer, QObject *parent) 0031 : Node(layer->image(), layer, parent) 0032 { 0033 0034 } 0035 0036 FileLayer::~FileLayer() 0037 { 0038 0039 } 0040 0041 QString FileLayer::type() const 0042 { 0043 return "filelayer"; 0044 } 0045 0046 void FileLayer::setProperties(QString fileName, QString scalingMethod) 0047 { 0048 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0049 KIS_ASSERT(file); 0050 KisFileLayer::ScalingMethod sm = KisFileLayer::None; 0051 if (scalingMethod.toLower() == "toimagesize") { 0052 sm= KisFileLayer::ToImageSize; 0053 } else if (scalingMethod.toLower() == "toimageppi") { 0054 sm= KisFileLayer::ToImagePPI; 0055 } 0056 file->setScalingMethod(sm); 0057 0058 const QString basePath = QFileInfo(file->path()).absolutePath(); 0059 const QString absoluteFilePath = QFileInfo(fileName).absoluteFilePath(); 0060 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath)); 0061 } 0062 0063 void FileLayer::resetCache() 0064 { 0065 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0066 KIS_ASSERT_RECOVER_RETURN(file); 0067 file->resetCache(); 0068 } 0069 0070 QString FileLayer::path() const 0071 { 0072 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node()); 0073 KIS_ASSERT(file); 0074 return file->path(); 0075 } 0076 0077 QString FileLayer::scalingMethod() const 0078 { 0079 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node()); 0080 KIS_ASSERT_RECOVER_RETURN_VALUE(file, "None"); 0081 KisFileLayer::ScalingMethod sm = file->scalingMethod(); 0082 QString method = "None"; 0083 0084 if (sm==KisFileLayer::ToImageSize) { 0085 method = "ToImageSize"; 0086 } else if (sm==KisFileLayer::ToImagePPI) { 0087 method = "ToImagePPI"; 0088 } 0089 return method; 0090 } 0091 0092 QString FileLayer::getFileNameFromAbsolute(const QString &basePath, QString filePath) 0093 { 0094 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(QFileInfo(filePath).isAbsolute(), filePath); 0095 0096 // try to resolve symlink 0097 { 0098 const QFileInfo fi(filePath); 0099 if (fi.isSymLink()) { 0100 filePath = fi.symLinkTarget(); 0101 } 0102 } 0103 0104 if (!basePath.isEmpty()) { 0105 QDir directory(basePath); 0106 filePath = directory.relativeFilePath(filePath); 0107 } 0108 0109 return filePath; 0110 } 0111 0112