bool KoGenStyle::operator==(const KoGenStyle &other) const { if (m_type != other.m_type) return false; if (m_parentName != other.m_parentName) return false; if (m_familyName != other.m_familyName) return false; if (m_autoStyleInStylesDotXml != other.m_autoStyleInStylesDotXml) return false; for (uint i = 0 ; i <= LastPropertyType; ++i) if (m_properties[i].count() != other.m_properties[i].count()) return false; if (m_attributes.count() != other.m_attributes.count()) return false; if (m_maps.count() != other.m_maps.count()) return false; // Same number of properties and attributes, no other choice than iterating for (uint i = 0 ; i <= LastPropertyType; ++i) { int comp = compareMap(m_properties[i], other.m_properties[i]); if (comp != 0) return false; } int comp = compareMap(m_attributes, other.m_attributes); if (comp != 0) return false; for (int i = 0 ; i < m_maps.count() ; ++i) { int comp = compareMap(m_maps[i], other.m_maps[i]); if (comp != 0) return false; } return true; }
bool KoGenChange::operator==(const KoGenChange &other) const { if (m_type != other.m_type) return false; if (m_changeMetaData.count() != other.m_changeMetaData.count()) return false; if (m_literalData.count() != other.m_literalData.count()) return false; int comp = compareMap(m_changeMetaData, other.m_changeMetaData); if (comp != 0) return false; return (compareMap(m_literalData, other.m_literalData) == 0); }
void KoGenStyle::addStyleMap(const QMap<QString, QString>& styleMap) { // check, if already present for (int i = 0 ; i < m_maps.count() ; ++i) { if (m_maps[i].count() == styleMap.count()) { int comp = compareMap(m_maps[i], styleMap); if (comp == 0) return; } } m_maps.append(styleMap); }
map checkMapExistence(map m, list origin) { if (compareMap(m, origin->m)) { //deleteMap(m); //return origin->m; delete_game(m->g); free(m); return NULL; } if (origin->next == NULL) { newListItem(m, origin); return m; } return checkMapExistence(m, origin->next); }
void KoGenStyle::writeStyle(KoXmlWriter* writer, const KoGenStyles& styles, const char* elementName, const QString& name, const char* propertiesElementName, bool closeElement, bool drawElement) const { //debugOdf <<"writing out style" << name <<" display-name=" << m_attributes["style:display-name"] <<" family=" << m_familyName; writer->startElement(elementName); const KoGenStyle* parentStyle = 0; if (!m_defaultStyle) { if (!drawElement) writer->addAttribute("style:name", name); else writer->addAttribute("draw:name", name); if (!m_parentName.isEmpty()) { Q_ASSERT(!m_familyName.isEmpty()); parentStyle = styles.style(m_parentName, m_familyName); if (parentStyle && m_familyName.isEmpty()) { // get family from parent style, just in case // Note: this is saving code, don't convert to attributeNS! const_cast<KoGenStyle *>(this)-> m_familyName = parentStyle->attribute("style:family").toLatin1(); //debugOdf <<"Got familyname" << m_familyName <<" from parent"; } if (parentStyle && !parentStyle->isDefaultStyle()) writer->addAttribute("style:parent-style-name", m_parentName); } } else { // default-style Q_ASSERT(qstrcmp(elementName, "style:default-style") == 0); Q_ASSERT(m_parentName.isEmpty()); } if (!m_familyName.isEmpty()) const_cast<KoGenStyle *>(this)-> addAttribute("style:family", QString::fromLatin1(m_familyName)); else { if (qstrcmp(elementName, "style:style") == 0) warnOdf << "User style " << name << " is without family - invalid. m_type=" << m_type; } #if 0 // #ifndef NDEBUG debugOdf << "style:" << name; printDebug(); if (parentStyle) { debugOdf << " parent:" << m_parentName; parentStyle->printDebug(); } #endif // Write attributes [which differ from the parent style] // We only look at the direct parent style because we assume // that styles are fully specified, i.e. the inheritance is // only in the final file, not in the caller's code. QMap<QString, QString>::const_iterator it = m_attributes.constBegin(); for (; it != m_attributes.constEnd(); ++it) { bool writeit = true; if (parentStyle && it.key() != "style:family" // always write the family out && parentStyle->attribute(it.key()) == it.value()) writeit = false; if (writeit) writer->addAttribute(it.key().toUtf8(), it.value().toUtf8()); } bool createPropertiesTag = propertiesElementName && propertiesElementName[0] != '\0'; KoGenStyle::PropertyType i = KoGenStyle::DefaultType; KoGenStyle::PropertyType defaultPropertyType = KoGenStyle::DefaultType; if (createPropertiesTag) defaultPropertyType = propertyTypeByElementName(propertiesElementName); if (!m_properties[i].isEmpty() || !m_childProperties[defaultPropertyType].isEmpty() || !m_properties[defaultPropertyType].isEmpty()) { if (createPropertiesTag) writer->startElement(propertiesElementName); // e.g. paragraph-properties it = m_properties[i].constBegin(); for (; it != m_properties[i].constEnd(); ++it) { if (!parentStyle || parentStyle->property(it.key(), i) != it.value()) writer->addAttribute(it.key().toUtf8(), it.value().toUtf8()); } //write the explicitly-defined properties that are the same type as the default, //but only if defaultPropertyType is Text, Paragraph, or GraphicType if (defaultPropertyType != 0) { it = m_properties[defaultPropertyType].constBegin(); for (; it != m_properties[defaultPropertyType].constEnd(); ++it) { if (!parentStyle || parentStyle->property(it .key(), defaultPropertyType) != it.value()) writer->addAttribute(it.key().toUtf8(), it.value().toUtf8()); } } //write child elements of the properties elements it = m_childProperties[defaultPropertyType].constBegin(); for (; it != m_childProperties[defaultPropertyType].constEnd(); ++it) { if (!parentStyle || parentStyle->childProperty(it.key(), defaultPropertyType) != it.value()) { writer->addCompleteElement(it.value().toUtf8()); } } if (createPropertiesTag) writer->endElement(); } // now write out any other properties elements //start with i=1 to skip the defaultType that we already took care of for (int i = 1; i < s_propertyNamesCount; ++i) { //skip any properties that are the same as the defaultType if (s_propertyTypes[i] != defaultPropertyType) { writeStyleProperties(writer, s_propertyTypes[i], parentStyle); } } //write child elements that aren't in any of the properties elements i = KoGenStyle::StyleChildElement; it = m_properties[i].constBegin(); for (; it != m_properties[i].constEnd(); ++it) { if (!parentStyle || parentStyle->property(it.key(), i) != it.value()) { writer->addCompleteElement(it.value().toUtf8()); } } // And now the style maps for (int i = 0; i < m_maps.count(); ++i) { bool writeit = true; if (parentStyle && compareMap(m_maps[i], parentStyle->m_maps[i]) == 0) writeit = false; if (writeit) { writer->startElement("style:map"); QMap<QString, QString>::const_iterator it = m_maps[i].constBegin(); for (; it != m_maps[i].constEnd(); ++it) { writer->addAttribute(it.key().toUtf8(), it.value().toUtf8()); } writer->endElement(); // style:map } } if (closeElement) writer->endElement(); }