Question about loading and default list/bib/ToC styles
C. Boemann
cbo at boemann.dk
Tue May 28 10:34:38 BST 2013
On Tuesday 28 May 2013 11:25:40 Elvis Stansvik wrote:
> 2013/5/28 Gopalakrishna Bhat <gopalakbhat at gmail.com>
>
> > On Tue, May 28, 2013 at 8:56 AM, Thorsten Zachmann
<t.zachmann at zagge.de>wrote:
> >> On Monday 27 May 2013 21:19:56 Elvis Stansvik wrote:
> >> > Hi all,
> >> >
> >> > Currently trying to track down a bug and realized I'm a little unsure
> >>
> >> about
> >>
> >> > something.
> >> >
> >> > The style manager creates a bunch of default list/bibliography/ToC
> >>
> >> styles
> >>
> >> > upon construction. What should we do if, during loading, we encounter
> >> > a style who's name clashes with one of these default styles?
> >> >
> >> > Intuitively I think we should replace the default style with the one
> >>
> >> found
> >>
> >> > in the ODT, but since the code doesn't seem to do this currently, I
> >>
> >> thought
> >>
> >> > I'd ask.
> >>
> >> I think so too. Maybe rename the one found in the defaults.
> >
> > +1 to this but there is a catch here. If we do it this way there will be
> > more default styles that is created on each roundtrip
> > viz
> > DefaultStyle
> > DefaultStyle_Save1
> > DefaultStyle_Save2.....
> > which is unused.
> >
> > What we could do is save the DefaultStyle only if it used in the
> > document.
>
> Right. But that would not help with documents already out there, or
> documents not produced by us.
>
> What Camilla suggested to me on IRC, and which I think sounds sensible, is
> to make the creation of the default styles happen lazily.
>
> If I understand her right, instead of the style manager creating the
> default ToC/bibliography styles in its constructor, it would be given an
> API like:
>
> /**
> * Returns a table of contents entry style for the given @a outlineLevel.
> *
> * If there's no such style in the manager, a default one will be created
> and returned.
> */
> KoParagraphStyle *tableOfContentsEntryStyle(int outlineLevel);
>
> /**
> * Returns a bibliography entry style for the given @a bibliographyType.
> *
> * If there's no such style in the manager, a default one will be created
> and returned.
> */
> KoParagraphStyle *bibliographyEntryStyle(const QString &bibliographyType);
>
> As en example, the first one would be something like:
>
> KoParagraphStyle *KoStyleManager::tableOfContentsEntryStyle(int
> outlineLevel) {
> ParagraphStyle *tocStyle = paragraphStyle(QString("Contents
> %1").arg(outlineLevel));
> if (!tocStyle) {
> tocStyle = new KoParagraphStyle();
> tocStyle->setName(QString("Contents %1").arg(outlineLevel));
> tocStyle->setLeftMargin(QTextLength(QTextLength::FixedLength,
> (outlineLevel - 1) * 8));
> add(tocStyle);
> }
> return tocStyle;
> }
>
> And the code that uses the existing defaultTableOfContentsEntryStyle(int)/
> defaultBibliographyEntryStyle(QString) API would then be updated to use the
> new API. From a brief search, this seems to be ToCGenerator,
> TableOfContentsEntryModel, TableOfContentsTemplate, BibliographyGenerator
> and BibliographyTemplate.
>
> Was this what you had in mind Camilla? What do others think?
>
> Then the default styles would not be in the manager at loading time, so no
> clash would occur. And if the ODF has styles named e.g. "Contents N", they
> would be the ones picked up.
>
> Regards,
> Elvis
>
Yes that is exactly what I had in mind (didn't think about the api or
sourcecode, but yes that was the idea)
More information about the calligra-devel
mailing list