From kde-commits Thu Feb 03 19:10:19 2011 From: Matus Uzak Date: Thu, 03 Feb 2011 19:10:19 +0000 To: kde-commits Subject: =?utf-8?q?=5Bcalligra=5D_filters/kpresenter/powerpoint=3A_PPT=3A?= Message-Id: <20110203191019.0D967A609B () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129676101414501 Git commit c52c55a1b1f7790a1d6caa8959f1be6aafe6a3d7 by Matus Uzak. Committed on 03/02/11 at 20:05. Pushed by uzak into branch 'master'. PPT: Removed the deprecated defineTextProperties function. * Now we have to reuse the super great defineTextProperties function to create the text style for the bullet/number of a list. * Rewrote some code in order to remove to deprecated function. M +28 -188 filters/kpresenter/powerpoint/PptToOdp.cpp M +8 -12 filters/kpresenter/powerpoint/PptToOdp.h M +11 -17 filters/kpresenter/powerpoint/pptstyle.cpp M +13 -0 filters/kpresenter/powerpoint/pptstyle.h http://commits.kde.org/calligra/c52c55a1b1f7790a1d6caa8959f1be6aafe6a3d7 diff --git a/filters/kpresenter/powerpoint/PptToOdp.cpp b/filters/kpresenter/powerpoint/PptToOdp.cpp index 10d18c3..161dcde 100644 --- a/filters/kpresenter/powerpoint/PptToOdp.cpp +++ b/filters/kpresenter/powerpoint/PptToOdp.cpp @@ -378,8 +378,10 @@ KoGenStyle PptToOdp::DrawClient::createGraphicStyle( quint32 textType = ppttoodp->getTextType(tb, cd); bool isPlaceholder = cd && cd->placeholderAtom; if (isPlaceholder) { // type is presentation - bool canBeParentStyle = textType != 99 && out.stylesxml - && dc_data->masterSlide; + bool canBeParentStyle = false; + if ( (textType != 99) && out.stylesxml && dc_data->masterSlide) { + canBeParentStyle = true; + } bool isAutomatic = !canBeParentStyle; // if this object has a placeholder type, it defines a presentation style, @@ -396,8 +398,8 @@ KoGenStyle PptToOdp::DrawClient::createGraphicStyle( QString parent; // for now we only set parent styles on presentation styled elements if (dc_data->masterSlide) { - parent = getMasterStyle( - ppttoodp->masterPresentationStyles[dc_data->masterSlide], textType); + parent = getMasterStyle(ppttoodp->masterPresentationStyles[dc_data->masterSlide], + textType); } if (!parent.isEmpty()) { style.setParentName(parent); @@ -434,17 +436,20 @@ void PptToOdp::DrawClient::addTextStyles( if (clientTextbox) { tb = clientTextbox->anon.get(); } - quint32 textType = ppttoodp->getTextType(tb, cd); - const TextMasterStyleAtom* listStyle = 0; if (out.stylesxml) { - listStyle = getTextMasterStyleAtom(dc_data->masterSlide, textType); - } - if (listStyle && listStyle->lstLvl1) { + const TextContainer* tc = ppttoodp->getTextContainer(tb, cd); + + //TODO: provide the corresponding TextRulerAtom PptTextPFRun pf(ppttoodp->p->documentContainer, + dc_data->slideTexts, dc_data->masterSlide, - textType); + cd, tc); ppttoodp->defineParagraphProperties(style, pf, 0); - ppttoodp->defineTextProperties(style, &listStyle->lstLvl1->cf, 0, 0, 0); + + QList mh; + mh.append(dc_data->masterSlide); + PptTextCFRun cf(ppttoodp->p->documentContainer, mh, &tc, 0); + ppttoodp->defineTextProperties(style, &cf, 0, 0, 0); } bool isPlaceholder = cd && cd->placeholderAtom; if (isPlaceholder) { @@ -470,8 +475,11 @@ void PptToOdp::DrawClient::addTextStyles( } else { out.xml.addAttribute("draw:style-name", styleName); } - bool canBeParentStyle = isPlaceholder && textType != 99 && out.stylesxml - && dc_data->masterSlide; + quint32 textType = ppttoodp->getTextType(tb, cd); + bool canBeParentStyle = false; + if (isPlaceholder && (textType != 99) && out.stylesxml && dc_data->masterSlide) { + canBeParentStyle = true; + } if (canBeParentStyle) { ppttoodp->masterPresentationStyles[dc_data->masterSlide][textType] = styleName; } @@ -818,14 +826,11 @@ void PptToOdp::defineDefaultChartStyle(KoGenStyles& styles) } void PptToOdp::defineDefaultTextProperties(KoGenStyle& style) { - const TextCFException* cf = 0; + const PptTextCFRun cf(p->documentContainer); const TextCFException9* cf9 = 0; const TextCFException10* cf10 = 0; const TextSIException* si = 0; if (p->documentContainer) { - if (p->documentContainer->documentTextInfo.textCFDefaultsAtom) { - cf = &p->documentContainer->documentTextInfo.textCFDefaultsAtom->cf; - } const PP9DocBinaryTagExtension* pp9 = getPP( p->documentContainer); const PP10DocBinaryTagExtension* pp10 = getPP( @@ -838,7 +843,7 @@ void PptToOdp::defineDefaultTextProperties(KoGenStyle& style) { } si = &p->documentContainer->documentTextInfo.textSIDefaultsAtom.textSIException; } - defineTextProperties(style, cf, cf9, cf10, si); + defineTextProperties(style, &cf, cf9, cf10, si); } void PptToOdp::defineDefaultParagraphProperties(KoGenStyle& style) { @@ -850,6 +855,7 @@ void PptToOdp::defineDefaultParagraphProperties(KoGenStyle& style) { pf9 = &pp9->textDefaultsAtom->pf9; } } + //TODO: provide the default TextRulerAtom PptTextPFRun pf(p->documentContainer); defineParagraphProperties(style, pf, 0); } @@ -978,174 +984,6 @@ void PptToOdp::defineTextProperties(KoGenStyle& style, // style:use-window-font-color } -//NOTE: required by defineDefaultTextProperties and addTextStyles -void PptToOdp::defineTextProperties(KoGenStyle& style, - const MSO::TextCFException* cf, - const TextCFException9* /*cf9*/, - const TextCFException10* /*cf10*/, - const TextSIException* si, - const TextContainer* tc) -{ - const KoGenStyle::PropertyType text = KoGenStyle::TextType; - /* We try to get information for all the possible attributes in - style:text-properties for clarity we handle them in alphabetical order */ - // fo:background-color - // fo:color - if (cf && cf->masks.color && cf->color) { - QColor color = toQColor(*cf->color); - if (color.isValid()) { - style.addProperty("fo:color", color.name(), text); - } - } - - // NOTE: TOTALLY WRONG APPROACH !!!!!!! You have to check the corresponding - // master shape if you don't have a color!!! And check if there's a master - // slide for it!!! Check the implementation of defineTextProperties above. - // - // Use the color defined by the corresponding color scheme. Let's create a - // temporary OfficeArtCOLORREF to reuse the toQColor function. The red - // value will be treated as an index into the current color scheme table. - else { - OfficeArtCOLORREF tmp; - quint32 tt = Text::Other; - QColor color; - - tmp.fSchemeIndex = true; - if (tc) { - tt = tc->textHeaderAtom.textType; - } - //TODO: check TextTypeEnum (2.13.33) for all text types to be handled - //or provide TextCFException. - switch (tt) { - case Text::Title: - case Text::CenterTitle: - tmp.red = Color::TitleText; - break; - default: - tmp.red = Color::Text; - break; - } - - const MSO::MasterOrSlideContainer* m = m_currentMaster; - const MSO::MainMasterContainer* mm = NULL; - const MSO::SlideContainer* tm = NULL; - - if (m) { - if (m->anon.is()) { - mm = m->anon.get(); - color = toQColor(tmp, mm, m_currentSlide); - } else if (m->anon.is()) { - tm = m->anon.get(); - color = toQColor(tmp, tm, m_currentSlide); - } - } - //TODO: handle the case of a notes master slide/notes slide pair - - style.addProperty("fo:color", color.name(), text); - } - // fo:country - // fo:font-family - if (cf && cf->masks.typeface) { - const FontEntityAtom* font = getFont(cf->fontRef); - if (font) { - const QString name= QString::fromUtf16(font->lfFaceName.data(), - font->lfFaceName.size()); - style.addProperty("fo:font-family", name, text); - } - } - // fo:font-size - if (cf && cf->masks.size) { - style.addProperty("fo:font-size", pt(cf->fontSize), text); - } - // fo:font-style: "italic", "normal" or "oblique - if (cf && cf->masks.italic && cf->fontStyle) { - style.addProperty("fo:font-style", - cf->fontStyle->italic ?"italic" :"normal", text); - } - // fo:font-variant: "normal" or "small-caps" - // fo:font-weight: "100", "200", "300", "400", "500", "600", "700", "800", "900", "bold" or "normal" - if (cf && cf->masks.bold && cf->fontStyle) { - style.addProperty("fo:font-weight", - cf->fontStyle->bold ?"bold" :"normal", text); - } - // fo:hyphenate - // fo:hyphenation-push-char - // fo:hyphenation-remain-char-count - // fo:language - if (si && si->lang) { - // TODO: get mapping from lid to language code - } - // fo:letter-spacing - // fo:text-shadow - if (cf && cf->masks.shadow) { - style.addProperty("fo:text-shadow", - cf->fontStyle->shadow ?"1pt 1pt" :"none", text); - } - // fo:text-transform: "capitalize", "lowercase", "none" or "uppercase" - // style:country-asian - // style:country-complex - // style:font-charset - // style:font-family-asian - // style:font-family-complex - // style:font-family-generic - // style:font-family-generic-asian - // style:font-family-generic-complex - // style:font-name - // style:font-name-asian - // style:font-name-complex - // style:font-pitch - // style:font-pitch-asian - // style:font-pitch-complex - // style:font-relief: "embossed", "engraved" or "none" - if (cf && cf->masks.emboss) { - style.addProperty("style:font-relief", - cf->fontStyle->emboss ?"embossed" :"none", text); - } - // style:font-size-asian - // style:font-size-complex - // style:font-size-rel - // style:font-size-rel-asian - // style:font-size-rel-complex - // style:font-style-asian - // style:font-style-complex - // style:font-style-name - // style:font-style-name-asian - // style:font-style-name-complex - // style:font-weight-asian - // style:font-weight-complex - // style:language-asian - // style:language-complex - // style:letter-kerning - // style:script-type - // style:text-blinking - // style:text-combine - // style:text-combine-end-char - // style:text-combine-start-char - // style:text-emphasize - // style:text-line-through-color - // style:text-line-through-mode - // style:text-line-through-style - // style:text-line-through-text - // style:text-line-through-text-style - // style:text-line-through-type - // style:text-line-through-width - // style:text-outline - // style:text-position - // style:text-rotation-angle - // style:text-rotation-scale - // style:text-scale - // style:text-underline-color - // style:text-underline-mode - // style:text-underline-style - // style:text-underline-type: "double", "none" or "single" - if (cf && cf->masks.underline) { - style.addProperty("style:text-underline-type", - cf->fontStyle->underline ?"single" :"none", text); - } - // style:text-underline-width - // style:use-window-font-color -} - void PptToOdp::defineParagraphProperties(KoGenStyle& style, const PptTextPFRun& pf, quint16 fs) { @@ -1521,8 +1359,10 @@ void PptToOdp::defineListStyle(KoGenStyle& style, quint8 depth, if (!imageBullet) { KoGenStyle ls(KoGenStyle::TextStyle); - defineTextProperties(ls, p.cf, p.cf9, p.cf10, p.si); - defineTextProperties(ls, i.cf, i.cf9, i.cf10, i.si); + + //FIXME: PptTextCFRun required!!!!! +// defineTextProperties(ls, p.cf, p.cf9, p.cf10, p.si); +// defineTextProperties(ls, i.cf, i.cf9, i.cf10, i.si); // override some properties with information from the paragraph if (hasIndent) { diff --git a/filters/kpresenter/powerpoint/PptToOdp.h b/filters/kpresenter/powerpoint/PptToOdp.h index 68c740b..7fd9fdc 100644 --- a/filters/kpresenter/powerpoint/PptToOdp.h +++ b/filters/kpresenter/powerpoint/PptToOdp.h @@ -267,23 +267,19 @@ private: void defineDefaultParagraphProperties(KoGenStyle& style); void defineDefaultGraphicProperties(KoGenStyle& style, KoGenStyles& styles); - /* Extract data from TextCFException into the style */ - - void defineTextProperties(KoGenStyle& style, - const PptTextCFRun* cf, - const MSO::TextCFException9* cf9, - const MSO::TextCFException10* cf10, - const MSO::TextSIException* si); - /** - * Deprecated + * Extract data from TextCFException into the style + * @param KoGenStyle of type TextStyle + * @param PptTextCFRun address + * @param TextCFException9 address + * @param TextCFException10 address + * @param TextSIException address */ void defineTextProperties(KoGenStyle& style, - const MSO::TextCFException* cf, + const PptTextCFRun* cf, const MSO::TextCFException9* cf9, const MSO::TextCFException10* cf10, - const MSO::TextSIException* si, - const MSO::TextContainer* tc = NULL); + const MSO::TextSIException* si); /** * Extract data from TextPFException into the style diff --git a/filters/kpresenter/powerpoint/pptstyle.cpp b/filters/kpresenter/powerpoint/pptstyle.cpp index 65872cd..0bf0e09 100644 --- a/filters/kpresenter/powerpoint/pptstyle.cpp +++ b/filters/kpresenter/powerpoint/pptstyle.cpp @@ -427,22 +427,6 @@ getTextCFException(const MSO::TextContainer* tc, const int start) return &cfs[i].cf; } -PptTextPFRun::PptTextPFRun(const MSO::DocumentContainer* d, - const MSO::MasterOrSlideContainer* m, - quint32 textType) -{ - m_level = 0; - *pfs = 0; - addStyle(pfs, getLevelPF(m, textType, 0)); - addStyle(pfs, getDefaultLevelPF(d, 0)); - addStyle(pfs, getDefaultPF(d)); - - *pf9s = 0; - addStyle(pf9s, getLevelPF9(m, textType, 0)); - addStyle(pf9s, getDefaultLevelPF9(d, textType, 0)); - addStyle(pf9s, getDefaultPF9(d)); -} - PptTextPFRun::PptTextPFRun(const DocumentContainer* d, const SlideListWithTextSubContainerOrAtom* texts, const MasterOrSlideContainer* m, @@ -530,6 +514,16 @@ PptTextCFRun::PptTextCFRun(const MSO::DocumentContainer* d, cfrun_rm = false; } +PptTextCFRun::PptTextCFRun(const MSO::DocumentContainer* d) +{ + //check DocumentContainer/DocumentTextInfoContainer/textCFDefaultsAtom + cfs.append(getDefaultCF(d)); + cfrun_rm = false; + + //It MUST be less than or equal to 0x0005 (not required here) + m_level = 99; +} + int PptTextCFRun::addCurrentCFRun(const MSO::TextContainer& tc, quint32 start) { int n = 0; @@ -607,7 +601,7 @@ TYPE PptTextPFRun::NAME() const \ const MSO::TextPFException* const * p = pfs; \ while (*p) { \ if ((*p)->masks.TEST) { \ - if (VALID()) { \ + if (VALID()) { \ return PRE (*p)->NAME; \ } \ } \ diff --git a/filters/kpresenter/powerpoint/pptstyle.h b/filters/kpresenter/powerpoint/pptstyle.h index 40b5531..bffc4de 100644 --- a/filters/kpresenter/powerpoint/pptstyle.h +++ b/filters/kpresenter/powerpoint/pptstyle.h @@ -96,12 +96,25 @@ class PptTextCFRun { quint16 m_level; bool cfrun_rm; public: + /** + * All TextCFExceptions are required. + * @param DocumentContainer + * @param MasterOrSlideContainer hierarchy + * @param TextContainer + * @param level specifies the indentation level of the paragraph + */ PptTextCFRun(const MSO::DocumentContainer* d, QList &mh, const MSO::TextContainer& tc, quint16 level); /** + * Only default TextCFExceptions are required. + * @param DocumentContainer + */ + PptTextCFRun(const MSO::DocumentContainer* d); + + /** * Add the TextCFException structure present in the current TextContainer, * which specifies character-level style and formatting, font information, * coloring and positioninghe for the given run of text.