GSoC/GCI Archive
Google Code-in 2010 KDE

Research ways to replace the QXmlStreamWriter approach in the Map Wizard using GeoScene classes.

completed by: Utku Aydın

mentors: tackat

This is an architectual task which requires a deep understanding of Marble's architecture and of the Map Wizard patch. In order to qualify for working on this patch you should have worked extensively on the Map Wizard already.

Currently the Map Creation Wizard is making use of QXmlStreamWriter and feeds bare hardcoded strings into the dgml file.

This approach was fine for a start. However it has a few drawbacks and doesn't scale in the longterm.

Usually when Marble loads a dgml file it gets instantiated in memory as a GeoSceneDocument with lots of GeoScene classes being instantiated which hold the data that is used.

It would be nice if this GeoSceneDocument could get created while the wizard is executed. The general meta information and all the other properties (layers, legends) would get added on the fly step by step.

This would have the advantage that during the last step a full valid dgml document would exist inside memory (and could even possibly get displayed right away). Using GeoSceneTagWriters the document could then get written into a dgml file.

Advantages of this approach:

* the map could get previewed while going through the wizard already.

* If the tags used in the dgml would get changed by the Marble developers the strings used inside the Wizard would need to get adjusted. With the new approach everything would be handled inside the GeoScene classes. This eases maintainership

* The new approach would ease the introduction of layers inside the wizard. It would also allow for a legend WYSIWYG preview and advanced legend customization.


This task is not about implementing this solution.

* It's about understanding the code involved (GeoScene* classes, GeoData classes and GeoDataTagWriter classes which already exist for the GeoData classes and probably need to get created likewise for the GeoScene classes) .

* As a result the steps that are required for this refactoring need to get identified.

* You need to estimate how much time each step would take

* Possible tasks (that might consist of several steps) need to get identified


The result should get delivered as a short text document with bullet points that mention each step and an estimation of the duration.