Editing ModRana Roadmap

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 31: Line 31:
*** clickable in text links [easy with QML]
*** clickable in text links [easy with QML]
*** multiline text editing for POI descriptions, etc. [very easy with QML]
*** multiline text editing for POI descriptions, etc. [very easy with QML]
-
 
-
=== Planed enhancements ===
 
-
* an option for forcing screen redraw interval (might improve Android chroot performance)
 
-
* more efficient centering
 
-
** just redraw the position cursor and only redraw the map once it nears the screen edge
 
-
** this should improve performance while moving at high speed on slow devices and in Android chroot
 
== What needs to be done to get the Qt GUI in a usable state ==
== What needs to be done to get the Qt GUI in a usable state ==
-
=== Separating the GUI logic to a GUI module - DONE ===
+
=== Separating the GUI logic to a GUI module ===
Most of the core GUI logic currently resides in the modRana "kernel" the ''modrana.py'' file. This logic needs to be transfered to a separate GUI module tat can be loaded by modRana at startup, either by providing a CLI parameter or automatically (once implemented).
Most of the core GUI logic currently resides in the modRana "kernel" the ''modrana.py'' file. This logic needs to be transfered to a separate GUI module tat can be loaded by modRana at startup, either by providing a CLI parameter or automatically (once implemented).
Line 47: Line 41:
'''What needs to be done ?'''
'''What needs to be done ?'''
-
* add pluggable GUI module support '''DONE'''
+
* add pluggable GUI module support
-
* move the current GTK logic to a GTK GUI module '''DONE'''
+
* move the current GTK logic to a GTK GUI module
-
** make sure the modularized GTK GUI works with all the changes '''DONE'''
+
* add proper CLI argument handling
-
* add proper CLI argument handling '''DONE'''
+
** -d, --device - set device module
-
** -d, --device - set device module '''DONE'''
+
** -u, --ui - set which GUI to use
-
** -u, --ui - set which GUI to use '''DONE'''
+
-
* optional
+
** --lat, --lon, --zoom, --layer - set a given map screen parameters at startup
** --lat, --lon, --zoom, --layer - set a given map screen parameters at startup
** --no_gps - don't start GPS on startup
** --no_gps - don't start GPS on startup
Line 60: Line 52:
** something else ?
** something else ?
-
=== Writing a Qt GUI module - DONE ===
+
=== Writing a Qt GUI module ===
The Qt GUI module needs to start the interface on startup - create the application window, fullscreen it and start displaying the modRana interface.
The Qt GUI module needs to start the interface on startup - create the application window, fullscreen it and start displaying the modRana interface.
'''What needs to be done ?'''
'''What needs to be done ?'''
* Qt GUI module
* Qt GUI module
-
** create application window and fullscreen it '''DONE'''
+
** create application window and fullscreen it
-
** fullscreen toggle '''DONE'''
+
** fullscreen toggle
-
** automatic rotation '''DONE'''
+
** automatic rotation & rotation lock
-
** shutdown support '''DONE'''
+
-
* TODO
+
-
** rotation lock
+
** set window title (if applicable)
** set window title (if applicable)
-
 
+
** shutdown support
-
=== Connecting the tile handling subsystem with QML - 50% DONE ===
+
-
ModRana currently uses tile based maps, individual map tiles need to be downloaded & stored so that they are downloaded only once.
+
-
* using the modRana tile handling subsystem in QML '''DONE'''
+
-
** modifying PinchMap to load tiles from local resources '''DONE'''
+
-
** implementing a localhost tileserver (yeah, really - it runs on port 9009 :D) '''DONE'''
+
-
** implementing a tile ImageProvider as a fallback for the unlikely possibility that the server won't start '''DONE'''
+
-
* create a batch-tile-download UI in QML
+
-
 
+
-
 
+
-
 
+
=== Getting data from modules to the Qt GUI ===
=== Getting data from modules to the Qt GUI ===
Line 124: Line 103:
** tracklogs
** tracklogs
-
<del>* implement the ''simple data API''</del>
+
* implement the ''simple data API''
-
<del>** add the mGet method to the options module and export it to modules</del>
+
** add the mGet method to the options module and export it to modules
-
<del>** add the getData method to the base_module API</del>
+
** add the getData method to the base_module API
-
* super-seeded by directly calling Python module methods
+
-
** currently only for methods that don't take any arguments and return a single string, boolean, integer or float
+
-
** exported through the[https://github.com/M4rtinK/modrana/blob/67f43044ded31472d04613fe5a402832c7f71b99/modules/gui_modules/gui_qml/gui_qml.py#L308 ''modules''] property to QML
+
-
** QML code just uses the respective call (''getS'', ''getB'', ''getI'', ''getF'') with two strings as arguments:
+
-
*** module name
+
-
*** function name
+
-
** example (get main forum URL from mod_info):
+
-
modules.getS('info', 'getForumUrl')
+
=== Writing the various GUI views ===
=== Writing the various GUI views ===
Line 141: Line 112:
The most important view is the '''map view''' which shows the map, this is normally the view shown at startup. Other important views: menu, options, POI, search, tracklogs.
The most important view is the '''map view''' which shows the map, this is normally the view shown at startup. Other important views: menu, options, POI, search, tracklogs.
-
==== Map view ====
+
=== Map view ===
-
Map view shows the map layer, map overlay layer and the screen overlay layer.
+
-
Fortunately, the [http://www.danielfett.de/privat,blog,agtl-n9-meego-alpha-2 recent AGTL release for Harmattan] has a nice QML map component that appears usable. In the future QGraphicsView based map widget is preferable, do to probable performance improvements and easier pseudo-3D handling.
+
=== Menu view ===
-
Also a "navigation mode" with an opaque side/bottom bar might be needed while turn-by-turn navigation is in progress.
+
=== Options view ===
-
'''Tasks:'''
+
=== POI view ===
-
* port the AGTL QML map component to modRana
+
-
** make it work with QML 1.0 in non-CSSU Fremantle (no pinch area, etc.)
+
-
* get tiles from mod_tiles
+
-
* progressive tile loading display (like in AGTL)
+
-
* better zoom feedback
+
-
* map overlay support
+
-
* map rotation
+
-
==== Menu view ====
+
=== Search view ===
-
The current icon grid works quite nicely in both portrait and landscape and scales quite nicely to different (mobile) screen sizes. The big icons also help to easily navigate the icon grids. Generally all buttons should be fairly large so that it can be easily used while traveling/driving or in averse lighting conditions.
+
-
'''Tasks:'''
+
=== Tracklogs view ===
-
* icon grid menu
+
-
** should probably support kinetic scrolling with a small brightly colored "more" arrow near the border once there are more items displayed than visible
+
-
** where to place the "escape" button ?
+
-
* listable menu
+
-
** a bar at bottom with the escape button and various context button/menu triggers
+
-
*** item count, search, delete, etc.
+
-
** type-to-search on devices with keyboard
+
-
** on devices without keyboard the user needs to first press to search icon to trigger the VKB
+
-
** kinetic scrolling
+
-
==== Options view ====
+
=== Module provided views ===
-
It might not be a bad idea to reimplement the Options menu structure using Qt Components. The main benefit would be in presenting more options at the screen and more usable components (switches, sliders, entry boxes, selection dialogs, etc.). On the other hand - how to handle this in QML-only environments ? This might not be an issue as Qt Components are now also available on Fremantle.
+
-
 
+
-
'''Tasks:'''
+
-
* recreate the options menu structure using Qt Components
+
-
 
+
-
* optional: QML only fallback ?
+
-
 
+
-
==== POI view ====
+
-
The POI view serves for display & management of the stored POI information. The view basically just needs to use the API of the current store_POI module.
+
-
 
+
-
POI currently have a name,description,latitude&longitude and a category. It might be sensible to add more items to the POI database (also Mappero appears to be defunct and there are no other users of the POI database format):
+
-
* URL's, emails and phone numbers
+
-
* address string
+
-
* an icon
+
-
* tags (user generated ?)
+
-
* added timestamp
+
-
 
+
-
'''Tasks:'''
+
-
* list stored POI
+
-
* add/edit/delete a POI
+
-
* search POI (combine with the search menu ?)
+
-
* batch import (from OSM extracts and elsewhere)
+
-
* sharing
+
-
 
+
-
==== Search view ====
+
-
The search view provides search on online and offline resources. It might be good to provide a unified online & offline search interface that labels each result depending on source (online-nominatim, offline-POI database, offline OSM POI catalog, etc.). It should be also still possible to just search one online/offline category only.
+
-
 
+
-
Mostly the view just needs to use the already implemented module APIs. Some advanced features described in the previous paragraph might also need some backend work.
+
-
 
+
-
Also, routing might probably be rolled into search as it is just searching for a route from one place to another.
+
-
 
+
-
'''Tasks:'''
+
-
* online POI search
+
-
* online Address and Wikipedia search
+
-
* local POI database search
+
-
* unified search
+
-
* offline POI catalog search
+
-
** larger catalogs might need some indexing before use
+
-
* online and offline route search
+
-
 
+
-
==== Tracklogs view ====
+
-
The tracklgos view provides the track logging view and also a view for management of locally stored tracklogs.
+
-
 
+
-
'''Tasks:'''
+
-
* track logging view
+
-
* track management view
+
-
** edit/delete tracklogs
+
-
** show tracklog information and statistics
+
-
** also show route profile, where available
+
-
 
+
-
==== Module provided views ====
+
-
It might be a good idea to provide a way for modules to provided their own view in some standardized way. Eq. a new (possibly user provided/third party) module might just add its own view and register it in the main menu structure.
+
== Other GUI modules ==
== Other GUI modules ==
Line 229: Line 130:
=== PyGame ===
=== PyGame ===
-
The most interesting at the moment is PyGame, which basically provides Python bindings for SDL. I don't have any personal experience with SDL so far but I'd guess it might be a little more lowlevel than GTK or Qt. On the plus side PyGamse is [http://thp.io/2011/webos/ available for WebOS], being the only graphics toolkit with Python bindings on this platform so far. There is also a [https://market.android.com/details?id=org.renpy.pygame PyGame port for Android].
+
The most interesting at the moment is PyGame, which basically provides Python bindings for SDL. I don't have any personal experience with SDL so far but I'd guess it might be a little more lowlevel than GTK or Qt. On the plus side PyGamse is available for WebOS, being the only graphics toolkit with Python bindings on this platform so far. There is also a PyGame port for Android.
=== EFL ===
=== EFL ===
-
[http://www.enlightenment.org/p.php?p=about/efl EFL] seems to have [http://trac.enlightenment.org/e/wiki/Python some Python bindings] and looks to be the only non-HTML5 toolkit available on Tizen out of the box (provided that a device running Tizen is ever released). SHR also uses EFL.
+
EFL seems to have some Python bindings and looks to be the only non-HTML5 toolkit available on Tizen out of the box (provided that a device running Tizen is ever released). SHR also uses EFL.
= Non-GUI work =
= Non-GUI work =
This section should contain a roadmap for work not directly depending on the GUI.
This section should contain a roadmap for work not directly depending on the GUI.
-
 
-
The modRana project Trac has [http://modrana.org/trac/report/1 quite a large list] a feature requests and bugs already.
 
-
 
-
== Packaging ==
 
-
* create an automated packaging script '''DONE'''
 
-
** get source from Github '''DONE'''
 
-
** build on OBS '''DONE'''
 
-
** build packages locally without OBS
 
-
 
-
 
-
=== Fremantle @ N900 - DONE===
 
-
* create an installable package '''DONE'''
 
-
** package installs additional icon for the QML version '''DONE'''
 
-
 
-
* upload the package to Extras-devel once it's stabile enough '''DONE''' - since May 2012
 
-
 
-
=== Harmattan @ N9,N950 ===
 
-
Having a proper package is very important on Harmattan due to Aegis restrictions. If an application needs to use location and other ''priviledged'' services, it needs to be properly packaged with an aegis manifest.
 
-
 
-
* create an installable package with a working Aegis manifest '''DONE'''
 
-
* add portrait and landscape splash-screens
 
-
 
-
== Configuration file upgrade - DONE ==
 
-
ModRana installs configuration files to ~/.modrana, so that they are writable & can be easily edited by the user (the configuration files are extensively commented for this reason). But when something changes in the default configuration file (say - a map layer URL) modRana needs to replace the installed configuration file and backup the existing one (so that any user-provided modifications are not lost).
 
-
 
-
'''Tasks:'''
 
-
* only run upgrade check if modRana version changes '''DONE'''
 
-
* add "revision" field to the configuration files '''DONE'''
 
-
** stores current configuration file revision as an integer
 
-
** the lowest valid value is 1
 
-
* if an installed configuration file has a lower revision number than the default one, upgrade it '''DONE'''
 
-
** rename it
 
-
** copy default configuration file in its place
 
-
 
-
== Idle loop & timers - 50% DONE ==
 
-
MoDrana uses the idle loop to execute some workloads that are not time critical and uses timers to schedule actions that need to happen in the future. ModRana uses the cron module (it dosn't use the cron demon in any way) to provide an abstract API for this. The cron module currently uses GTK for the idle loop and timers.
 
-
 
-
=== Connecting to the Qt Idle loop ===
 
-
When the Qt GUI is used, the cron module needs to use Qt for the idle loop.
 
-
 
-
'''Tasks:'''
 
-
* use the Qt idle loop
 
-
 
-
=== Using Qt timers - DONE ===
 
-
When the Qt GUI is used, the cron module needs to use Qt for timers.
 
-
 
-
'''Tasks:'''
 
-
* use Qt timers '''DONE'''
 
-
 
-
== Improved hardware & platform support ==
 
-
While most parts of modRana are device independent and improvements translate to usage on most devices, modRana also needs to support hardware and features that are only available on a limited range of devices.
 
-
 
-
=== Harmattan @ Nokia N9/N950 ===
 
-
* zooming with volume keys
 
-
 
-
=== Maemo 5 Fremantle @ Nokia N900 ===
 
-
* app menu improvements
 
-
** map layer selection
 
-
** zoom slider
 
-
** more shortcuts
 
-
 
-
=== Nemo @ N900 ===
 
-
* check how modRana runs on [http://wiki.merproject.org/wiki/Nemo Nemo]
 
-
* since September 2012, PySide packages needed for the modRana QML GUI are available from the main Nemo repo
 
-
** there are also unofficial and untested PyGTK packages for Nemo in [https://build.pub.meego.com/project/show?project=home%3AMartinK%3Anemo this OBS repository]
 
-
* packaging
 
-
 
-
=== SHR @ OpenMoko Neo FreeRunner ===
 
-
* navigation board support
 
-
* OpenEmbeaded recipe
 
-
 
-
 
-
=== Android ===
 
-
* get modRana running on Android
 
-
** [http://thp.io/2011/pyside-android/ Qt + PySide] & [http://redmine.semperpax.com/projects/qt-components-android QtComponents ] should be available
 
-
* packaging
 
-
 
-
=== WebOs ===
 
-
* compile [http://www.webos-internals.org/wiki/HowtoQt Qt] & [http://thp.io/2011/webos/ Python]
 
-
* port PySide
 
-
* port QtComponents
 
-
* get modRana running
 
-
* packaging
 
-
 
-
[[Category:ModRana]]
 
-
[[Category:Development]]
 

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)