Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}