bool PictureContent::fromXml(QDomElement & pe) { AbstractContent::fromXml(pe); // load picture properties QString path = pe.firstChildElement("path").text(); // build the afterload effects list m_afterLoadEffects.clear(); QDomElement effectsE = pe.firstChildElement("effects"); for (QDomElement effectE = effectsE.firstChildElement("effect"); effectE.isElement(); effectE = effectE.nextSiblingElement("effect")) { PictureEffect fx; fx.effect = (PictureEffect::Effect)effectE.attribute("type").toInt(); fx.param = effectE.attribute("param").toDouble(); if (fx.effect == PictureEffect::Opacity) setOpacity(fx.param); else if (fx.effect == PictureEffect::Crop) { QString rect = effectE.attribute("cropingRect"); QStringList coordinates = rect.split(" "); if(coordinates.size() >= 3) { QRect cropingRect (coordinates.at(0).toInt(), coordinates.at(1).toInt(), coordinates.at(2).toInt(), coordinates.at(3).toInt()); fx.cropingRect = cropingRect; } } m_afterLoadEffects.append(fx); } // load Network image if (path.startsWith("http", Qt::CaseInsensitive) || path.startsWith("ftp", Qt::CaseInsensitive)) return loadFromNetwork(path, 0); // load Local image return loadPhoto(path); }
bool PictureContent::fromXml(QDomElement & contentElement, const QDir & baseDir) { AbstractContent::fromXml(contentElement, baseDir); // build the afterload effects list m_afterLoadEffects.clear(); QDomElement effectsE = contentElement.firstChildElement("effects"); for (QDomElement effectE = effectsE.firstChildElement("effect"); effectE.isElement(); effectE = effectE.nextSiblingElement("effect")) { PictureEffect fx; fx.effect = (PictureEffect::Effect)effectE.attribute("type").toInt(); fx.param = effectE.attribute("param").toDouble(); if (fx.effect == PictureEffect::Crop) { QString rect = effectE.attribute("croppingRect"); QStringList coordinates = rect.split(" "); if(coordinates.size() >= 3) { QRect croppingRect (coordinates.at(0).toInt(), coordinates.at(1).toInt(), coordinates.at(2).toInt(), coordinates.at(3).toInt()); fx.rect = croppingRect; } } else if (fx.effect == PictureEffect::Opacity) setContentOpacity(fx.param); m_afterLoadEffects.append(fx); } // load picture properties QString path; // try relative file path const QString relPath = contentElement.firstChildElement("relativeFilePath").text(); if (!relPath.isEmpty() && baseDir.exists(relPath)) path = QDir::cleanPath(baseDir.filePath(relPath)); // or use absolute path/url if (path.isEmpty()) path = contentElement.firstChildElement("fileUrl").text(); // RETROCOMP <= 0.8 if (path.isEmpty()) path = contentElement.firstChildElement("path").text(); // load Network image if (path.startsWith("http", Qt::CaseInsensitive) || path.startsWith("ftp", Qt::CaseInsensitive)) return loadFromNetwork(path, 0); // look for the file if can't find it anymore if (!QFile::exists(path)) { QString searchFileName = QFileInfo(path).fileName(); if (!searchFileName.isEmpty()) { // find all replacements from the current basepath qWarning("PictureContent::fromXml: file '%s' not found, scanning for replacements", qPrintable(path)); QDirIterator dIt(baseDir, QDirIterator::Subdirectories); QStringList replacements; while (dIt.hasNext()) { dIt.next(); if (dIt.fileName() == searchFileName) { QString replacement = dIt.fileInfo().absoluteFilePath(); replacements.append(replacement); qWarning("PictureContent::fromXml: found '%s'", qPrintable(replacement)); } } // use the first replacement (### 1.0 display a selection dialog) if (!replacements.isEmpty()) { path = replacements.first(); qWarning("PictureContent::fromXml: using '%s'", qPrintable(path)); } else qWarning("PictureContent::fromXml: no replacements found"); } } // load Local image return loadPhoto(path, false, false); }