Architecture Refactor Suggestion: Bigger reorganization

Inge Wallin inge at lysator.liu.se
Mon Oct 22 08:30:33 BST 2012


On Sunday, October 21, 2012 18:11:18 Yue Liu wrote:
> 2012/10/21 Boudewijn Rempt <boud at valdyas.org>:
> > On Sunday 21 October 2012 Oct, Yue Liu wrote:
> >> Hi,
> >> 
> >> Currently filters are loaded based on application's native mime-type.
> >> And now we have multiple applications with same native format, such as
> >> Karbon and Flow, Words and Authors. Applications with same native
> >> format should have same set of format filters, but format filter codes
> >> are sorted under application categories.
> >> 
> >> So I suggest change it from current structure
> >> 
> >> filters/xxx_app/[im,ex]port/xxx_filter
> > 
> > It's even messier in some places, where the odf2html filter is embedded
> > in the epub filter.
> > 
> >> to
> >> 
> >> filters/xxx2xxx
> > 
> > I wouldn't mind that change, but then, for Krita, we moved all the
> > filters to the Krita folter anyway.
> > 
> >> And tell distributions package filters as one component, not with
> >> apps, to avoid conflicts between same-format apps. At least Arch and
> >> Chakra is already doing it this way.
> > 
> > Fedora also did/does that already, which meant lots of bug reports since
> > people only installed the app, not the filter component and then
> > complained that they couldn't even open a simple jpeg in Krita!
> > 
> > There's a complication here with the Tables filters: some of them link
> > directly to Tables and actually don't go though an ODS intermediate.
> > Those probably should be moved to the tables folder itself.
> 
> We can keep the dependency on App and involve new mime-types for those
> filters. Just like Friedrich suggested before:
> http://mail.kde.org/pipermail/calligra-devel/2012-May/005041.html
> 
> For example, if karbon filter depends on KarbonPart, we can make a
> mime-type calligra/karbon.document and use it in the filter, so Flow
> won't load this filter since karon.document is not supported by Flow.
> 
> And we can place the codes of this kind of app-dependent filters under
> app/filters/xxx2xxx, and place those general filters under
> filters/xxx2xxx, when packaging, app-dependent filters are packaged
> with apps, general filters are packaged as a single package and every
> app depends on it.

I think we need to make a bigger reorganization. There are two things that are 
currently a problem:

1. The applications themselves have more than one UI, e.g. Calligra 
Words/Sheets/Stage and Calligra Active.

2. Filters sometimes use application internals as the data model.

So I suggest the following overall architecture:

calligra
  core
    libs
    words
    sheets
    stage
    ...
  ui (or view)
    suite (or desktop)
      libs
      words
      sheets
      ....
    active
    ...
  filters
    libs
    xxx2yyy
    yyy2zzz
    ...
  tools
    ...

In the core/ directory the parts of the applications that are UI independent 
should reside. It should be basically loading, storage, saving (i.e. the 
document), painting, an API for data manipulation and all commands.

All views under ui/ will of course link to core/*. The filters should be 
allowed to link to core/* for loading, storage model or saving. 

I understand that this is a big task. So if we just want to solve the Karbon 
filters then they should be fixed to use only the Karbon document, not the 
part. But I think that this reorganization needs to be done in the long run.

> >> Note: this is a problem for some Karbon filters, since they used
> >> KarbonPart to access shapes for shape painting. We can modify
> >> KoDocument::paintContent(painter, rect) to do that instead.
> > 
> > Ah, so Karbon has the same problem already, too.

Why would a filter need painting at all? Unless it's a filter to, say, PNG. 
But even so, painting is part of the document, it doesn't need a view.




More information about the calligra-devel mailing list