KoGenStyles::StyleMap::iterator KoGenStyles::Private::insertStyle(const KoGenStyle &style, const QString& baseName, InsertionFlags flags) { QString styleName(baseName); if (styleName.isEmpty()) { switch (style.type()) { case KoGenStyle::ParagraphAutoStyle: styleName = 'P'; break; case KoGenStyle::ListAutoStyle: styleName = 'L'; break; case KoGenStyle::TextAutoStyle: styleName = 'T'; break; default: styleName = 'A'; // for "auto". } flags &= ~DontAddNumberToName; // i.e. force numbering } styleName = makeUniqueName(styleName, style.m_familyName, flags); if (style.autoStyleInStylesDotXml()) autoStylesInStylesDotXml[style.m_familyName].insert(styleName); else styleNames[style.m_familyName].insert(styleName); KoGenStyles::StyleMap::iterator it = styleMap.insert(style, styleName); NamedStyle s; s.style = &it.key(); s.name = styleName; styleList.append(s); return it; }
QString KoGenStyles::insert(const KoGenStyle& style, const QString& baseName, InsertionFlags flags) { // if it is a default style it has to be saved differently if (style.isDefaultStyle()) { // we can have only one default style per type Q_ASSERT(!d->defaultStyles.contains(style.type())); // default style is only possible for style:style in office:style types Q_ASSERT(style.type() == KoGenStyle::TextStyle || style.type() == KoGenStyle::ParagraphStyle || style.type() == KoGenStyle::SectionStyle || style.type() == KoGenStyle::RubyStyle || style.type() == KoGenStyle::TableStyle || style.type() == KoGenStyle::TableColumnStyle || style.type() == KoGenStyle::TableRowStyle || style.type() == KoGenStyle::TableCellStyle || style.type() == KoGenStyle::GraphicStyle || style.type() == KoGenStyle::PresentationStyle || style.type() == KoGenStyle::DrawingPageStyle || style.type() == KoGenStyle::ChartStyle); d->defaultStyles.insert(style.type(), style); // default styles don't have a name return QString(); } if (flags & AllowDuplicates) { StyleMap::iterator it = d->insertStyle(style, baseName, flags); return it.value(); } StyleMap::iterator it = d->styleMap.find(style); if (it == d->styleMap.end()) { // Not found, try if this style is in fact equal to its parent (the find above // wouldn't have found it, due to m_parentName being set). if (!style.parentName().isEmpty()) { KoGenStyle testStyle(style); const KoGenStyle* parentStyle = this->style(style.parentName(), style.familyName()); // ## linear search if (!parentStyle) { kDebug(30003) << "baseName=" << baseName << "parent style" << style.parentName() << "not found in collection"; } else { // TODO remove if (testStyle.m_familyName != parentStyle->m_familyName) { kWarning(30003) << "baseName=" << baseName << "family=" << testStyle.m_familyName << "parent style" << style.parentName() << "has a different family:" << parentStyle->m_familyName; } testStyle.m_parentName = parentStyle->m_parentName; // Exclude the type from the comparison. It's ok for an auto style // to have a user style as parent; they can still be identical testStyle.m_type = parentStyle->m_type; // Also it's ok to not have the display name of the parent style // in the auto style QMap<QString, QString>::const_iterator it = parentStyle->m_attributes.find("style:display-name"); if (it != parentStyle->m_attributes.end()) testStyle.addAttribute("style:display-name", *it); if (*parentStyle == testStyle) return style.parentName(); } } it = d->insertStyle(style, baseName, flags); } return it.value(); }
void KoOdfGraphicStyles::saveOdfFillStyle(KoGenStyle &styleFill, KoGenStyles& mainStyles, const QBrush & brush) { KoGenStyle::Type type = styleFill.type(); KoGenStyle::PropertyType propertyType = (type == KoGenStyle::GraphicStyle || type == KoGenStyle::GraphicAutoStyle || type == KoGenStyle::DrawingPageStyle || type == KoGenStyle::DrawingPageAutoStyle ) ? KoGenStyle::DefaultType : KoGenStyle::GraphicType; switch (brush.style()) { case Qt::Dense1Pattern: styleFill.addProperty("draw:opacity", "6%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense2Pattern: styleFill.addProperty("draw:opacity", "12%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense3Pattern: styleFill.addProperty("draw:opacity", "37%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense4Pattern: styleFill.addProperty("draw:opacity", "50%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense5Pattern: styleFill.addProperty("draw:opacity", "63%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense6Pattern: styleFill.addProperty("draw:opacity", "88%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::Dense7Pattern: styleFill.addProperty("draw:opacity", "94%", propertyType); styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); break; case Qt::LinearGradientPattern: case Qt::RadialGradientPattern: case Qt::ConicalGradientPattern: styleFill.addProperty("draw:fill", "gradient", propertyType); styleFill.addProperty("draw:fill-gradient-name", saveOdfGradientStyle(mainStyles, brush), propertyType); break; case Qt::HorPattern: case Qt::VerPattern: case Qt::CrossPattern: case Qt::BDiagPattern: case Qt::FDiagPattern: case Qt::DiagCrossPattern: styleFill.addProperty("draw:fill", "hatch", propertyType); styleFill.addProperty("draw:fill-hatch-name", saveOdfHatchStyle(mainStyles, brush), propertyType); break; case Qt::SolidPattern: styleFill.addProperty("draw:fill", "solid", propertyType); styleFill.addProperty("draw:fill-color", brush.color().name(), propertyType); if (! brush.isOpaque()) styleFill.addProperty("draw:opacity", QString("%1%").arg(brush.color().alphaF() * 100.0), propertyType); break; case Qt::NoBrush: default: styleFill.addProperty("draw:fill", "none", propertyType); break; } }