Jump to content

Marble/Marble 2.0: Difference between revisions

From KDE Community Wiki
Earthwings (talk | contribs)
No edit summary
Ochurlaud (talk | contribs)
m Ochurlaud moved page Marble 2.0 to Marble/Marble 2.0
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
== Marble Library Split ==
== Marble Library Split ==
Split libmarblewidget into several libraries:
Split libmarblewidget into several libraries:
* libMarbleCore
* libMarbleCore (or libMarbleMap?)
** Non-interactive classes, e.g. geodata, file parsing
** Non-interactive classes, e.g. geodata, file parsing
** No dependency to QWidgets or Qt Quick
* libMarbleMap
** Interactive, UI toolkit independent classes, e.g. layers, graphicsview
** Interactive, UI toolkit independent classes, e.g. layers, graphicsview
** Dependency to MarbleCore
** No dependency to QWidgets or Qt Quick
** No dependency to QWidgets or Qt Quick
* libMarbleWidgets
* libMarbleWidgets
** QWidget related interactive classes
** QWidget related interactive classes
** Dependency to QWidget, libMarbleMap, libMarbleCore
** Dependency to QWidget, libMarbleCore
* libMarbleQuick
* libMarbleQuick
** Qt Quick 2.0 related interactive classes
** Qt Quick 2.0 related interactive classes
** Dependency to QtQuick, libMarbleMap, libMarbleCore
** Dependency to QtQuick, libMarbleCore
* Further possible ones (see also plugins below): MarbleRouting, MarbleTours, MarbleMapEditor
* Further possible ones (see also plugins below): MarbleRouting, MarbleTours, MarbleMapEditor


== Header Normalization ==
== Header Normalization ==
* The header structure in src/lib/ should match the exported headers in include/. No "flattening" as it happens currently where e.g. marble/geodata/* is copied to /marble/.
* During compilation, the subdirectories of marble/ are not added to the compiler search path anymore, so #include statements need to use the full path marble/$module/$class.h for files outside their directory.
* During compilation, the subdirectories of marble/ are not added to the compiler search path anymore, so #include statements need to use the full path marble/$module/$class.h for files outside their directory.
* Headers follow the directory structure marble/$module/$path, where $path is either a filename or a directory + filename, but not deeper nested
* Headers follow the directory structure marble/$module/$path, where $path is either a filename or a directory + filename, but not deeper nested
== Build System Improvements ==
* The header structure in src/lib/ should match the exported headers in include/. No "flattening" as it happens currently where e.g. marble/geodata/* is copied to /marble/.
* <s>KDE as a dependency is only used in src/apps/marble-kde and KDE related things like plasmoids. No KDE usage in the library. As a side effect, QTONLY will go away (replaced by a less restrictive WITH_KDE)</s> Implemented since Applications/15.08
* Provide a sane FindMarble.cmake, possibly using COMPONENTS similar to Qt, Boost (each library would be a component)


== Qt Version Dependency Bump ==
== Qt Version Dependency Bump ==
* Require at least Qt 5.0 to avoid a maintenance nightmare
* Require at least Qt 5.0 to avoid a maintenance nightmare
* Require KDE Frameworks 5 (optional, but kdelibs 4.x not supported)
* <s>Require KDE Frameworks 5 (optional, but kdelibs 4.x not supported)</s> Implemented since Applications/15.08
* Require Qt Quick 2.0 (optional, but Qt Quick 1.1 not supported)
* Require Qt Quick 2.0 (optional, but Qt Quick 1.1 not supported)
* Provide a long term support stable branch with Qt 4.x / KDE 4.x / Qt Quick 1.1 support
* <s>Provide a long term support stable branch with Qt 4.x / KDE 4.x / Qt Quick 1.1 support</s> Please use Applications/15.04 for that


== Plugin Sanitization ==
== Plugin Sanitization ==

Latest revision as of 08:06, 21 October 2016

Refactoring goals towards a Marble 2.0 version.

Marble Library Split

Split libmarblewidget into several libraries:

  • libMarbleCore (or libMarbleMap?)
    • Non-interactive classes, e.g. geodata, file parsing
    • Interactive, UI toolkit independent classes, e.g. layers, graphicsview
    • No dependency to QWidgets or Qt Quick
  • libMarbleWidgets
    • QWidget related interactive classes
    • Dependency to QWidget, libMarbleCore
  • libMarbleQuick
    • Qt Quick 2.0 related interactive classes
    • Dependency to QtQuick, libMarbleCore
  • Further possible ones (see also plugins below): MarbleRouting, MarbleTours, MarbleMapEditor

Header Normalization

  • During compilation, the subdirectories of marble/ are not added to the compiler search path anymore, so #include statements need to use the full path marble/$module/$class.h for files outside their directory.
  • Headers follow the directory structure marble/$module/$path, where $path is either a filename or a directory + filename, but not deeper nested

Build System Improvements

  • The header structure in src/lib/ should match the exported headers in include/. No "flattening" as it happens currently where e.g. marble/geodata/* is copied to /marble/.
  • KDE as a dependency is only used in src/apps/marble-kde and KDE related things like plasmoids. No KDE usage in the library. As a side effect, QTONLY will go away (replaced by a less restrictive WITH_KDE) Implemented since Applications/15.08
  • Provide a sane FindMarble.cmake, possibly using COMPONENTS similar to Qt, Boost (each library would be a component)

Qt Version Dependency Bump

  • Require at least Qt 5.0 to avoid a maintenance nightmare
  • Require KDE Frameworks 5 (optional, but kdelibs 4.x not supported) Implemented since Applications/15.08
  • Require Qt Quick 2.0 (optional, but Qt Quick 1.1 not supported)
  • Provide a long term support stable branch with Qt 4.x / KDE 4.x / Qt Quick 1.1 support Please use Applications/15.04 for that

Plugin Sanitization

  • Clearly split between the loading mechanism and the interface (API) such that extensions can be realized both inside a library and via plugins without hassles (emphasis on without hassles)
  • Deleting plugins should be possible and remove the feature provided by it, but it should not be advertized as a feature
  • No mandatory plugins (e.g. KML parsing). Mandatory "plugins" must be part of a library
  • Decide on criteria what to realize as plugins and what as modules (libraries). E.g. only do plugins where a common API is easily identified and at least three plugins of that type are provided by Marble itself