示例#1
0
void MetaInfoParser::handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, const QString &className, const QIcon &icon)
{
    if (reader.isStartElement() && reader.name() == "itemlibraryentry")
    {
        const QString versionNumber = reader.attributes().value("version").toString();

        int major = 1;
        int minor = 0;

        if (!versionNumber.isEmpty()) {
            int val;
            bool ok;
            if (versionNumber.contains('.')) {
                val = versionNumber.split('.').first().toInt(&ok);
                major = ok ? val : major;
                val = versionNumber.split('.').last().toInt(&ok);
                minor = ok ? val : minor;
            } else {
                val = versionNumber.toInt(&ok);
                major = ok ? val : major;
            }
        }

        const QString name = reader.attributes().value("name").toString();

        ItemLibraryEntry entry;
        entry.setType(className, major, minor);
        entry.setName(name);
        entry.setIcon(icon);

        QString iconPath = reader.attributes().value("libraryIcon").toString();
        if (!iconPath.isEmpty()) 
            entry.setIconPath(iconPath);

        QString category = reader.attributes().value("category").toString();
        if (!category.isEmpty())
            entry.setCategory(category);

        QString requiredImport = reader.attributes().value("requiredImport").toString();
        if (!requiredImport.isEmpty())
            entry.setRequiredImport(requiredImport);

        if (reader.attributes().hasAttribute("forceImport")) {
            QString forceImport = reader.attributes().value("forceImport").toString();
            if (forceImport == QLatin1String("true") || forceImport == QLatin1String("True"))
                entry.setForceImport(true);
            else
                entry.setForceImport(false);
        } else {
            entry.setForceImport(false);
        }

        while (!reader.atEnd() && !(reader.isEndElement() && reader.name() == "itemlibraryentry")) {
            reader.readNext();
            handleItemLibraryEntryPropertyElement(reader, entry);
            handleItemLibraryEntryQmlElement(reader, entry);
        }

        m_metaInfo.itemLibraryInfo()->addEntry(entry);
    }
}