QML gui is designed to be a modern and flexible replacement of internal gui. It is based on Qt's Declarative UI framework, therefore it could be run on ant Qt platform, including mobile platforms with touchscreens etc
First of all - you have to install Qt 4.6 and a SNAPSHOT of a Declarative UI With snapshot mentioned above you have to use exactly Qt version 4.6.0, for other 4.6.x releases you have to manually checkout Declarative UI from git. Qt version 4.7 is unsupported yet.
When you have prepared your Qt environment, it's time to build Navit:
At the script output you should have the following lines:
Graphics types: yes (default) qt_qpainter: yes (default) GUI types: qml: yes (configure parameter)
both of them are required for gui qml. So if those lines present, do your usual make && make install/dpkg-buildpackage/your platform specific thing.
Right now QML gui is compatible only with qt_qpainter graphics type. I hope there will be more graphics types in the future, but now you have to switch to qt_qpainter:
And enable qml gui:
<gui type="qml" enabled="yes"/>
All other gui modules MUST be disabled by setting
in their configuration stanzas.
QML gui doesn't requires any special configuration, but it could be tuned. It support the following parameters:
* fullscreen - "1"-Default is fullscreen mode,"0"-Default is windows mode * menu_on_map_click - "1"-single click on map will switch to gui,"0"-Gui could be switched only by command (not yet implemented) * signal_on_map_click - "1"-DBus signal will be sent on single click on map,"0"-map click processing will be controlled bu menu_on_map_click * radius - Distance in meters for searching point name. Default is 10 * pitch - Initial pitch for 3D view. Default is 20 * lazy - "1"-Gui should be lazy and keep it state between calls,"0"-Gui is always reset to main page when called * width #height - Width and height for gui window. Default values are 800 and 600 * source - Directory with qml skins. Default value is NAVIT_SHAREDIR/gui/qml/skins * skin - Skin for gui. Default skin is navit * icon_src - Directory with icons for gui.Default value is NAVIT_SHAREDIR/xpm/
I can't give any advices on using this gui, cause it is very flexible by it's nature, so there could be a lot of variations and customizations on it, but there are exists some hardcoded things. With LEFT click on map (or touchscreen tap) gui is usually switched on. This behavior could be controlled by two attributes:
* menu_on_map_click - controls whether menu should be called on map click or not
* signal_on_map_click - controls whether signal should be sent on map click or usual click processing should be used
RIGHT click on map (or loooong tap on touch screen) turns on the gui with special point screen.
The gui qml skin is just a directory containing qml applcation of any kind of complexity (yes, you CAN add twitter client into gui, no problem at all). Navit requires that qml app to contain two files:
* main.qml * point.qml
main.qml will be instantiated when calling a gui for the first time (or every time when "lazy" set to "0") and point.qml used for a special point screen mentioned above. Every other aspect of gui structure and desing is controlled by you, but gui qml module provides some helper functions.
Gui qml module injects a 'gui' object into global qml namespace. This object contains following properties:
* width - current width of gui's window * height - current height of gui's window * localeName *langName *ctryName - Name of POSIX locale and WIN32 language and country names (READ ONLY) * iconPath - Directory for icons (READ ONLY) * returnSource - Tree of visited pages (see below)
gui object also have some slots:
* setPage * backToMap * backToPrevPage
All of those slots and returnSource property are related to 'page switch helper'. The idea behind them is to encapsulate every dialog into different qml file and switch them programatically directly from qml. So you may define a button for maps and call gui.setPage("maps.qml") when it is clicked. Every setPage call modifies returnSource property, storing the history of your setPage calls, so when you done with your maps.qml from the example aboe, you could just call gui.backToPrevPage() in it (in maps.qml) and it will work like a back button. gui.backToMap() switch from gui to map, it's obvious. But what if you want to return to your starting point? You could use the following code:
in you qml application. Even more - you could use returnSource any way you like - for returning to the every odd page for exmaple or inserting some new pages into history on some even. You may also not use this functionality at all and implement everything right in the QML app.