summaryrefslogtreecommitdiff
path: root/navit
diff options
context:
space:
mode:
authorPierre Grandin <grandinp@altern.org>2016-12-01 19:23:13 +0000
committerPierre Grandin <grandinp@altern.org>2016-12-01 19:23:13 +0000
commit5030d911084584f9b37aeaa916ab43130044edbf (patch)
tree0f0e400aa2c575c3fcdfcceaa6012d2f760e525e /navit
parent449e5530c4ee68f77691c811f0670cf90e9e58a4 (diff)
parent59bbe485ba74a6df5ec944275ae28fc1bd98981e (diff)
downloadnavit-5030d911084584f9b37aeaa916ab43130044edbf.tar.gz
Merge branch 'trunk' into trac/1341trac/1341
Conflicts: navit/Makefile.am navit/xpm/Makefile.am po/Makefile.am
Diffstat (limited to 'navit')
-rw-r--r--navit/Doxyfile2582
-rw-r--r--navit/android.c8
-rw-r--r--navit/android/AndroidManifest.xml.cmake6
-rw-r--r--navit/android/AndroidManifest.xml.in3
-rw-r--r--navit/android/CMakeLists.txt1
-rw-r--r--navit/android/res/drawable-hdpi/ic_notify.pngbin0 -> 634 bytes
-rw-r--r--navit/android/res/drawable-hdpi/icon.pngbin6054 -> 5949 bytes
-rw-r--r--navit/android/res/drawable-ldpi/ic_notify.pngbin0 -> 370 bytes
-rw-r--r--navit/android/res/drawable-ldpi/icon.pngbin1966 -> 2208 bytes
-rw-r--r--navit/android/res/drawable-mdpi/ic_notify.pngbin0 -> 462 bytes
-rw-r--r--navit/android/res/drawable-mdpi/icon.pngbin3595 -> 3353 bytes
-rw-r--r--navit/android/res/drawable-xhdpi/ic_notify.pngbin0 -> 832 bytes
-rw-r--r--navit/android/res/drawable-xhdpi/icon.pngbin0 -> 8858 bytes
-rw-r--r--navit/android/res/drawable-xxhdpi/ic_notify.pngbin0 -> 1216 bytes
-rw-r--r--navit/android/res/drawable-xxhdpi/icon.pngbin0 -> 15235 bytes
-rw-r--r--navit/android/res/values-v19/styles.xml31
-rw-r--r--navit/android/res/values-v21/styles.xml46
-rw-r--r--navit/android/res/values/styles.xml42
-rw-r--r--navit/android/src/org/navitproject/navit/Navit.java175
-rw-r--r--navit/android/src/org/navitproject/navit/NavitAndroidOverlay.java239
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java189
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics2.java404
-rw-r--r--navit/attr.c5
-rw-r--r--navit/attr.h1
-rw-r--r--navit/attr_def.h1
-rw-r--r--navit/cache.c6
-rw-r--r--navit/command.c2
-rw-r--r--navit/country.c5
-rw-r--r--navit/event.c2
-rw-r--r--navit/event_glib.c2
-rw-r--r--navit/font/freetype/font_freetype.c2
-rw-r--r--navit/graphics.c213
-rw-r--r--navit/graphics.h73
-rw-r--r--navit/graphics/android/graphics_android.c238
-rw-r--r--navit/graphics/gd/graphics_gd.c8
-rw-r--r--navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c10
-rw-r--r--navit/graphics/null/graphics_null.c6
-rw-r--r--navit/graphics/opengl/graphics_opengl.c10
-rw-r--r--navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp9
-rw-r--r--navit/graphics/sdl/event.c2
-rw-r--r--navit/graphics/sdl/event_sdl.c2
-rw-r--r--navit/graphics/sdl/graphics_sdl.c14
-rw-r--r--navit/graphics/win32/graphics_win32.c10
-rw-r--r--navit/gui.c2
-rw-r--r--navit/gui/gtk/gui_gtk_window.c2
-rw-r--r--navit/gui/internal/gui_internal.c59
-rw-r--r--navit/gui/internal/gui_internal.h5
-rw-r--r--navit/gui/internal/gui_internal_bookmark.c6
-rw-r--r--navit/gui/internal/gui_internal_command.c125
-rw-r--r--navit/gui/internal/gui_internal_html.c7
-rw-r--r--navit/gui/internal/gui_internal_keyboard.c147
-rw-r--r--navit/gui/internal/gui_internal_keyboard.h1
-rw-r--r--navit/gui/internal/gui_internal_menu.c61
-rw-r--r--navit/gui/internal/gui_internal_poi.c2
-rw-r--r--navit/gui/internal/gui_internal_search.c13
-rw-r--r--navit/gui/internal/gui_internal_widget.c41
-rw-r--r--navit/gui/qml/gui_qml.cpp2
-rw-r--r--navit/gui/win32/gui_win32.c2
-rw-r--r--navit/map.c4
-rw-r--r--navit/map/binfile/binfile.c2
-rw-r--r--navit/map/csv/csv.c6
-rw-r--r--navit/map/filter/filter.c2
-rw-r--r--navit/map/garmin/garmin.c2
-rw-r--r--navit/map/garmin_img/garmin_img.c2
-rw-r--r--navit/map/mg/map.c2
-rw-r--r--navit/map/shapefile/shapefile.c2
-rw-r--r--navit/map/textfile/textfile.c2
-rw-r--r--navit/maptool/maptool.h11
-rw-r--r--navit/maptool/osm.c82
-rw-r--r--navit/maptool/osm_o5m.c12
-rw-r--r--navit/maptool/osm_relations.c4
-rw-r--r--navit/navigation.c20
-rw-r--r--navit/navit.c264
-rw-r--r--navit/navit_shipped.xml42
-rw-r--r--navit/osd.c82
-rw-r--r--navit/osd/core/osd_core.c139
-rw-r--r--navit/plugin.c16
-rw-r--r--navit/plugin.h66
-rw-r--r--navit/plugin/j1850/j1850.c2
-rw-r--r--navit/plugin/pedestrian/pedestrian.c4
-rw-r--r--navit/plugin_def.h16
-rw-r--r--navit/route.c11
-rw-r--r--navit/speech.c2
-rw-r--r--navit/speech/android/speech_android.c2
-rw-r--r--navit/speech/cmdline/speech_cmdline.c2
-rw-r--r--navit/speech/dbus/speech_dbus.c2
-rw-r--r--navit/speech/espeak/speak.c2
-rw-r--r--navit/speech/speech_dispatcher/speech_speech_dispatcher.c2
-rw-r--r--navit/track.c2
-rw-r--r--navit/types.h2
-rw-r--r--navit/vehicle.c2
-rw-r--r--navit/vehicle/android/vehicle_android.c2
-rw-r--r--navit/vehicle/demo/vehicle_demo.c2
-rw-r--r--navit/vehicle/file/vehicle_file.c8
-rw-r--r--navit/vehicle/file/vehicle_pipe.c2
-rw-r--r--navit/vehicle/file/vehicle_serial.c2
-rw-r--r--navit/vehicle/file/vehicle_socket.c2
-rw-r--r--navit/vehicle/gpsd/vehicle_gpsd.c2
-rw-r--r--navit/vehicle/gpsd_dbus/vehicle_gpsd_dbus.c2
-rw-r--r--navit/vehicle/gypsy/vehicle_gypsy.c2
-rw-r--r--navit/vehicle/iphone/vehicle_iphone.c2
-rw-r--r--navit/vehicle/maemo/vehicle_maemo.c2
-rw-r--r--navit/vehicle/null/vehicle_null.c2
-rw-r--r--navit/vehicle/webos/vehicle_webos.c2
-rw-r--r--navit/vehicle/wince/vehicle_wince.c4
-rw-r--r--navit/window.h9
-rw-r--r--navit/xpm/gui_android_menu.svg120
-rw-r--r--navit/xpm/gui_heightprofile.svg20
-rw-r--r--navit/xpm/gui_layers.svg33
-rw-r--r--navit/xpm/ic_notify.svg261
-rw-r--r--navit/xslt/android.xslt2
-rw-r--r--navit/xslt/android_all_densities.xslt1471
-rw-r--r--navit/xslt/iphone.xslt1
-rw-r--r--navit/xslt/osd_android.xslt8
-rw-r--r--navit/xslt/osd_android_minimum.xslt30
-rw-r--r--navit/xslt/osd_minimum.xslt7
-rw-r--r--navit/xslt/tomtom.xslt62
117 files changed, 4278 insertions, 3417 deletions
diff --git a/navit/Doxyfile b/navit/Doxyfile
index e21675546..b7e049301 100644
--- a/navit/Doxyfile
+++ b/navit/Doxyfile
@@ -1,1228 +1,2384 @@
-# Doxyfile 1.4.4
+# Doxyfile 1.8.9.1
# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
#
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
PROJECT_NAME = navit
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
PROJECT_NUMBER = 0.0
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
OUTPUT_DIRECTORY = ../doc
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
CREATE_SUBDIRS = NO
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
-# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
-# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
-# Swedish, and Ukrainian.
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
OUTPUT_LANGUAGE = English
-# This tag can be used to specify the encoding used in the generated output.
-# The encoding is not always determined by the language that is chosen,
-# but also whether or not the output is meant for Windows or non-Windows users.
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
-# forces the Windows encoding (this is the default for the Windows binary),
-# whereas setting the tag to NO uses a Unix-style encoding (the default for
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
BRIEF_MEMBER_DESC = YES
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
+# The default value is: YES.
REPEAT_BRIEF = YES
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
-ABBREVIATE_BRIEF =
+ABBREVIATE_BRIEF =
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
# description.
+# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
+# The default value is: NO.
INLINE_INHERITED_MEMB = NO
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
FULL_PATH_NAMES = YES
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-STRIP_FROM_PATH =
+STRIP_FROM_PATH =
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
-STRIP_FROM_INC_PATH =
+STRIP_FROM_INC_PATH =
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
SHORT_NAMES = NO
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
-MULTILINE_CPP_IS_BRIEF = NO
+QT_AUTOBRIEF = NO
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
-DETAILS_AT_TOP = NO
+MULTILINE_CPP_IS_BRIEF = NO
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
INHERIT_DOCS = YES
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 8
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
-ALIASES =
+TCL_SUBST =
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = YES
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
SUBGROUPING = YES
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
EXTRACT_ALL = NO
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
EXTRACT_PRIVATE = NO
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
EXTRACT_STATIC = NO
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
INTERNAL_DOCS = NO
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
CASE_SENSE_NAMES = YES
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
HIDE_SCOPE_NAMES = NO
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
SHOW_INCLUDE_FILES = YES
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
INLINE_INFO = YES
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
SORT_MEMBER_DOCS = YES
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
SORT_BRIEF_DOCS = NO
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
GENERATE_TODOLIST = YES
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
GENERATE_TESTLIST = YES
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
GENERATE_BUGLIST = YES
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
SHOW_USED_FILES = YES
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is YES.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
-SHOW_DIRECTORIES = YES
+SHOW_FILES = YES
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the progam writes to standard output
-# is used as the file version. See the manual for examples.
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
-FILE_VERSION_FILTER =
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
QUIET = NO
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
WARNINGS = YES
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
WARN_IF_DOC_ERROR = YES
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
WARN_NO_PARAMDOC = NO
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT =
-INPUT =
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+INPUT_ENCODING = UTF-8
-FILE_PATTERNS =
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
RECURSIVE = YES
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
-EXCLUDE =
+EXCLUDE =
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
+# The default value is: NO.
EXCLUDE_SYMLINKS = NO
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
-EXAMPLE_PATH =
+EXAMPLE_PATH =
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
-EXAMPLE_PATTERNS =
+EXAMPLE_PATTERNS =
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
EXAMPLE_RECURSIVE = NO
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
-IMAGE_PATH =
+IMAGE_PATH =
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
-INPUT_FILTER =
+INPUT_FILTER =
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
-FILTER_PATTERNS =
+FILTER_PATTERNS =
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
FILTER_SOURCE_FILES = NO
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
SOURCE_BROWSER = NO
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
INLINE_SOURCES = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
STRIP_CODE_COMMENTS = YES
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
REFERENCED_BY_RELATION = YES
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
REFERENCES_RELATION = YES
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
VERBATIM_HEADERS = YES
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS =
+
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
ALPHABETICAL_INDEX = NO
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
GENERATE_HTML = YES
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
-HTML_HEADER =
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
+CHM_FILE =
-HTML_FOOTER =
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+HHC_LOCATION =
-HTML_STYLESHEET =
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
+GENERATE_CHI = NO
-HTML_ALIGN_MEMBERS = YES
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
+CHM_INDEX_ENCODING =
-GENERATE_HTMLHELP = NO
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
+BINARY_TOC = NO
-CHM_FILE =
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+TOC_EXPAND = NO
-HHC_LOCATION =
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+DISABLE_INDEX = NO
-GENERATE_CHI = NO
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+GENERATE_TREEVIEW = YES
-BINARY_TOC = NO
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+ENUM_VALUES_PER_LINE = 4
-TOC_EXPAND = NO
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+TREEVIEW_WIDTH = 250
-DISABLE_INDEX = NO
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+EXT_LINKS_IN_WINDOW = NO
-ENUM_VALUES_PER_LINE = 4
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
+FORMULA_FONTSIZE = 10
-GENERATE_TREEVIEW = YES
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+SEARCHENGINE = NO
-TREEVIEW_WIDTH = 250
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
GENERATE_LATEX = YES
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4wide
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
-EXTRA_PACKAGES =
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+LATEX_EXTRA_STYLESHEET =
-LATEX_HEADER =
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = NO
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = NO
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
GENERATE_RTF = NO
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_EXTENSIONS_FILE =
+RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
GENERATE_MAN = NO
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
GENERATE_XML = NO
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
-XML_SCHEMA =
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+GENERATE_DOCBOOK = NO
-XML_DTD =
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+DOCBOOK_OUTPUT = docbook
-XML_PROGRAMLISTING = YES
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_PERLMOD = NO
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
ENABLE_PREPROCESSING = YES
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-INCLUDE_PATH =
+INCLUDE_PATH =
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-INCLUDE_FILE_PATTERNS =
+INCLUDE_FILE_PATTERNS =
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-PREDEFINED =
+PREDEFINED =
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-EXPAND_AS_DEFINED =
+EXPAND_AS_DEFINED =
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
-TAGFILES =
+TAGFILES =
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
-GENERATE_TAGFILE =
+GENERATE_TAGFILE =
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
EXTERNAL_GROUPS = YES
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
+# The default value is: YES.
CLASS_DIAGRAMS = YES
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
HAVE_DOT = NO
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
-DOT_PATH =
+DOTFILE_DIRS =
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
-DOTFILE_DIRS =
+MSCFILE_DIRS =
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
-MAX_DOT_GRAPH_WIDTH = 1024
+DIAFILE_DIRS =
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
-MAX_DOT_GRAPH_HEIGHT = 1024
+PLANTUML_JAR_PATH =
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that a graph may be further truncated if the graph's
-# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
-# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
-# the graph is not depth-constrained.
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 0
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
diff --git a/navit/android.c b/navit/android.c
index d35c105cf..6e62da1b3 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -118,6 +118,14 @@ Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobj
}
JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitGraphics_PaddingChangedCallback(JNIEnv* env, jobject thiz, int id, int left, int top, int right, int bottom)
+{
+ dbg(lvl_debug,"enter %p %d %d %d %d\n",(struct callback *)id, left, top, right, bottom);
+ if (id)
+ callback_call_4((struct callback *)id, left, top, right, bottom);
+}
+
+JNIEXPORT void JNICALL
Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id, int pressed, int button, int x, int y)
{
dbg(lvl_debug,"enter %p %d %d\n",(struct callback *)id,pressed,button);
diff --git a/navit/android/AndroidManifest.xml.cmake b/navit/android/AndroidManifest.xml.cmake
index 9267f65a3..b5bd757cb 100644
--- a/navit/android/AndroidManifest.xml.cmake
+++ b/navit/android/AndroidManifest.xml.cmake
@@ -17,10 +17,12 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:label="@string/app_name"
android:icon="@drawable/icon"
- android:name=".NavitAppConfig">
+ android:name=".NavitAppConfig"
+ android:theme="@style/NavitBaseTheme">
<activity android:name="Navit"
android:label="@string/app_name"
- android:configChanges="locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale|screenSize">
+ android:configChanges="locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale|screenSize"
+ android:theme="@style/NavitTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
diff --git a/navit/android/AndroidManifest.xml.in b/navit/android/AndroidManifest.xml.in
index 5a43ee277..085276623 100644
--- a/navit/android/AndroidManifest.xml.in
+++ b/navit/android/AndroidManifest.xml.in
@@ -7,7 +7,8 @@
android:installLocation="auto">
<application android:label="@string/app_name"
android:icon="@drawable/icon"
- android:name=".NavitAppConfig">
+ android:name=".NavitAppConfig"
+ android:theme="@style/NavitTheme">
<activity android:name="Navit"
android:label="@string/app_name"
android:configChanges="locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale|screenSize">
diff --git a/navit/android/CMakeLists.txt b/navit/android/CMakeLists.txt
index cd842be06..ca3bdbfa4 100644
--- a/navit/android/CMakeLists.txt
+++ b/navit/android/CMakeLists.txt
@@ -30,7 +30,6 @@ if (ANDROID)
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake
COMMAND ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake
-D DST=${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml
- -D ANDROID_VERSION_INT="0"
-D NAME=ANDROID_VERSION_INT
-D ANDROID_VERSION_NAME=${PACKAGE_STRING}
-D ANDROID_API_VERSION=${ANDROID_API_VERSION}
diff --git a/navit/android/res/drawable-hdpi/ic_notify.png b/navit/android/res/drawable-hdpi/ic_notify.png
new file mode 100644
index 000000000..7516b2fbd
--- /dev/null
+++ b/navit/android/res/drawable-hdpi/ic_notify.png
Binary files differ
diff --git a/navit/android/res/drawable-hdpi/icon.png b/navit/android/res/drawable-hdpi/icon.png
index 3b01b5c3d..311c57b59 100644
--- a/navit/android/res/drawable-hdpi/icon.png
+++ b/navit/android/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/navit/android/res/drawable-ldpi/ic_notify.png b/navit/android/res/drawable-ldpi/ic_notify.png
new file mode 100644
index 000000000..010d55fb3
--- /dev/null
+++ b/navit/android/res/drawable-ldpi/ic_notify.png
Binary files differ
diff --git a/navit/android/res/drawable-ldpi/icon.png b/navit/android/res/drawable-ldpi/icon.png
index b72d1e40b..da2553687 100644
--- a/navit/android/res/drawable-ldpi/icon.png
+++ b/navit/android/res/drawable-ldpi/icon.png
Binary files differ
diff --git a/navit/android/res/drawable-mdpi/ic_notify.png b/navit/android/res/drawable-mdpi/ic_notify.png
new file mode 100644
index 000000000..d6de8d53f
--- /dev/null
+++ b/navit/android/res/drawable-mdpi/ic_notify.png
Binary files differ
diff --git a/navit/android/res/drawable-mdpi/icon.png b/navit/android/res/drawable-mdpi/icon.png
index 33bbab7f6..f8f68e8bc 100644
--- a/navit/android/res/drawable-mdpi/icon.png
+++ b/navit/android/res/drawable-mdpi/icon.png
Binary files differ
diff --git a/navit/android/res/drawable-xhdpi/ic_notify.png b/navit/android/res/drawable-xhdpi/ic_notify.png
new file mode 100644
index 000000000..72371c974
--- /dev/null
+++ b/navit/android/res/drawable-xhdpi/ic_notify.png
Binary files differ
diff --git a/navit/android/res/drawable-xhdpi/icon.png b/navit/android/res/drawable-xhdpi/icon.png
new file mode 100644
index 000000000..649fb32d4
--- /dev/null
+++ b/navit/android/res/drawable-xhdpi/icon.png
Binary files differ
diff --git a/navit/android/res/drawable-xxhdpi/ic_notify.png b/navit/android/res/drawable-xxhdpi/ic_notify.png
new file mode 100644
index 000000000..d47a41154
--- /dev/null
+++ b/navit/android/res/drawable-xxhdpi/ic_notify.png
Binary files differ
diff --git a/navit/android/res/drawable-xxhdpi/icon.png b/navit/android/res/drawable-xxhdpi/icon.png
new file mode 100644
index 000000000..398945c23
--- /dev/null
+++ b/navit/android/res/drawable-xxhdpi/icon.png
Binary files differ
diff --git a/navit/android/res/values-v19/styles.xml b/navit/android/res/values-v19/styles.xml
new file mode 100644
index 000000000..b3ea5c14f
--- /dev/null
+++ b/navit/android/res/values-v19/styles.xml
@@ -0,0 +1,31 @@
+<resources>
+
+ <!--
+ Base application theme for API 19+. This theme completely replaces
+ NavitBaseTheme from BOTH res/values/styles.xml and
+ res/values-v19/styles.xml on API 19+ devices.
+ -->
+ <style name="NavitBaseTheme" parent="android:Theme.Holo">
+
+ <!-- Main theme colors -->
+ <!-- your app branding color for the app bar -->
+ <item name="android:colorPrimary">@color/navitYellow500</item>
+ <!-- darker variant for the status bar and contextual app bars -->
+ <item name="android:colorPrimaryDark">@color/navitYellow700</item>
+ <!-- theme UI controls like checkboxes and text fields -->
+ <item name="android:colorAccent">@color/navitBlue500</item>
+ </style>
+
+ <!--
+ Main Activity theme for API 19+. This theme completely replaces
+ NavitTheme from BOTH res/values/styles.xml and
+ res/values-v19/styles.xml on API 19+ devices.
+ -->
+ <style name="NavitTheme" parent="NavitBaseTheme">
+
+ <!-- API 19 theme customizations can go here. -->
+ <item name="android:windowTranslucentNavigation">true</item>
+ <item name="android:windowTranslucentStatus">true</item>
+ </style>
+
+</resources> \ No newline at end of file
diff --git a/navit/android/res/values-v21/styles.xml b/navit/android/res/values-v21/styles.xml
new file mode 100644
index 000000000..a1d66bb3d
--- /dev/null
+++ b/navit/android/res/values-v21/styles.xml
@@ -0,0 +1,46 @@
+<resources>
+
+ <!--
+ Base application theme for API 21+. This theme completely replaces
+ NavitBaseTheme from BOTH res/values/styles.xml and
+ res/values-v.../styles.xml on API 21+ devices.
+ -->
+ <style name="NavitBaseTheme" parent="android:Theme.Material">
+
+ <!-- Main theme colors -->
+ <!-- your app branding color for the app bar -->
+ <item name="android:colorPrimary">@color/navitYellow500</item>
+ <!-- darker variant for the status bar and contextual app bars -->
+ <item name="android:colorPrimaryDark">@color/navitYellow700</item>
+ <!-- theme UI controls like checkboxes and text fields -->
+ <item name="android:colorAccent">@color/navitBlue500</item>
+ </style>
+
+ <!--
+ Main Activity theme for API 21+. This theme completely replaces
+ NavitTheme from BOTH res/values/styles.xml and
+ res/values-v21/styles.xml on API 21+ devices.
+ -->
+ <style name="NavitTheme" parent="NavitBaseTheme">
+
+ <!-- API 21 theme customizations can go here. -->
+
+ <!--
+ Don't use translucent system bars on API 21 as they are drawn with a semitransparent
+ black background which can't be changed.
+ -->
+ <item name="android:windowTranslucentNavigation">false</item>
+ <item name="android:windowTranslucentStatus">false</item>
+
+ <!--
+ We could set any semi-transparent color here (or change it in code), but this would not
+ be available on API 19/20. Simply specifying full transparency allows us to implement a
+ separate mechanism that will work on all versions.
+ -->
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+ </style>
+
+</resources> \ No newline at end of file
diff --git a/navit/android/res/values/styles.xml b/navit/android/res/values/styles.xml
new file mode 100644
index 000000000..91094e222
--- /dev/null
+++ b/navit/android/res/values/styles.xml
@@ -0,0 +1,42 @@
+<resources>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by NavitBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="NavitBaseTheme" parent="android:Theme.Holo">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Theme for Navit's main Activity. -->
+ <style name="NavitTheme" parent="NavitBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+ <!-- TODO complete list of shades for both colors -->
+ <!--
+ Primary color is derived average of icon colors (500 in Android parlance):
+ 213 164 19 #d5a411 hsl 45 92 84
+
+ Dark color is normally the 600 color (i.e. slightly darker than 500)
+ 209 155 19 #d19b13 hsl 43 91 82
+ -->
+
+
+ <!-- Yellow from Navit icon background (300 and 700 are the extremes of the gradient, 500 is the average, 900 is the line color) -->
+ <color name="navitYellow300">#e9cb14</color>
+ <color name="navitYellow500">#d5a411</color>
+ <!-- <color name="navitYellow600">#d19b13</color> -->
+ <color name="navitYellow700">#c17d11</color>
+ <color name="navitYellow900">#43350f</color>
+
+ <!-- Blue from arrow in Navit icon (500 is the midpoint of the gradient, 300 is the end, 900 is the line color) -->
+ <color name="navitBlue300">#329eff</color>
+ <color name="navitBlue500">#1a6cb6</color>
+ <color name="navitBlue900">#1f3157</color>
+
+</resources> \ No newline at end of file
diff --git a/navit/android/src/org/navitproject/navit/Navit.java b/navit/android/src/org/navitproject/navit/Navit.java
index 90fcbe5eb..c8578df07 100644
--- a/navit/android/src/org/navitproject/navit/Navit.java
+++ b/navit/android/src/org/navitproject/navit/Navit.java
@@ -25,13 +25,18 @@ import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import android.annotation.TargetApi;
import android.app.Activity;
+import android.app.ActivityManager.TaskDescription;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Notification;
@@ -44,9 +49,15 @@ import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.Point;
import android.media.AudioManager;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
@@ -59,6 +70,7 @@ import android.util.Log;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
@@ -75,6 +87,11 @@ public class Navit extends Activity
private NavitActivityResult ActivityResults[];
public static InputMethodManager mgr = null;
public static DisplayMetrics metrics = null;
+ public static int status_bar_height = 0;
+ public static int action_bar_default_height = 0;
+ public static int navigation_bar_height = 0;
+ public static int navigation_bar_height_landscape= 0;
+ public static int navigation_bar_width = 0;
public static Boolean show_soft_keyboard = false;
public static Boolean show_soft_keyboard_now_showing = false;
public static long last_pressed_menu_key = 0L;
@@ -97,7 +114,22 @@ public class Navit extends Activity
static final String NAVIT_DATA_SHARE_DIR = NAVIT_DATA_DIR + "/share";
static final String FIRST_STARTUP_FILE = NAVIT_DATA_SHARE_DIR + "/has_run_once.txt";
public static final String NAVIT_PREFS = "NavitPrefs";
+ Boolean isFullscreen = false;
+
+ /**
+ * @brief A Runnable to restore soft input when the user returns to the activity.
+ *
+ * An instance of this class can be passed to the main message queue in the Activity's
+ * {@code onRestore()} method.
+ */
+ private class SoftInputRestorer implements Runnable {
+ public void run() {
+ Navit.this.showNativeKeyboard();
+ }
+ }
+
+
public void removeFileIfExists(String source) {
File file = new File(source);
@@ -246,6 +278,8 @@ public class Navit extends Activity
super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ else
+ this.getActionBar().hide();
dialogs = new NavitDialogs(this);
@@ -265,12 +299,30 @@ public class Navit extends Activity
// Setup the status bar notification
// This notification is removed in the exit() function
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Grab a handle to the NotificationManager
- Notification NavitNotification = new Notification(R.drawable.icon, getString(R.string.notification_ticker), System.currentTimeMillis()); // Create a new notification, with the text string to show when the notification first appears
+ Notification NavitNotification = new Notification(R.drawable.ic_notify, getString(R.string.notification_ticker), System.currentTimeMillis()); // Create a new notification, with the text string to show when the notification first appears
PendingIntent appIntent = PendingIntent.getActivity(getApplicationContext(), 0, getIntent(), 0);
- NavitNotification.setLatestEventInfo(getApplicationContext(), "Navit", getString(R.string.notification_event_default), appIntent); // Set the text in the notification
+// FIXME : needs a fix for sdk 23
+// NavitNotification.setLatestEventInfo(getApplicationContext(), "Navit", getString(R.string.notification_event_default), appIntent); // Set the text in the notification
NavitNotification.flags|=Notification.FLAG_ONGOING_EVENT; // Ensure that the notification appears in Ongoing
nm.notify(R.string.app_name, NavitNotification); // Set the notification
+ // Status and navigation bar sizes
+ // These are platform defaults and do not change with rotation, but we have to figure out which ones apply
+ // (is the navigation bar visible? on the side or at the bottom?)
+ Resources resources = getResources();
+ int shid = resources.getIdentifier("status_bar_height", "dimen", "android");
+ int adhid = resources.getIdentifier("action_bar_default_height", "dimen", "android");
+ int nhid = resources.getIdentifier("navigation_bar_height", "dimen", "android");
+ int nhlid = resources.getIdentifier("navigation_bar_height_landscape", "dimen", "android");
+ int nwid = resources.getIdentifier("navigation_bar_width", "dimen", "android");
+ status_bar_height = (shid > 0) ? resources.getDimensionPixelSize(shid) : 0;
+ action_bar_default_height = (adhid > 0) ? resources.getDimensionPixelSize(adhid) : 0;
+ navigation_bar_height = (nhid > 0) ? resources.getDimensionPixelSize(nhid) : 0;
+ navigation_bar_height_landscape = (nhid > 0) ? resources.getDimensionPixelSize(nhlid) : 0;
+ navigation_bar_width = (nwid > 0) ? resources.getDimensionPixelSize(nwid) : 0;
+ Log.d(TAG, String.format("status_bar_height=%d, action_bar_default_height=%d, navigation_bar_height=%d, navigation_bar_height_landscape=%d, navigation_bar_width=%d",
+ status_bar_height, action_bar_default_height, navigation_bar_height, navigation_bar_height_landscape, navigation_bar_width));
+
// get the local language -------------
Locale locale = java.util.Locale.getDefault();
String lang = locale.getLanguage();
@@ -380,7 +432,13 @@ public class Navit extends Activity
public void onResume()
{
super.onResume();
- Log.e("Navit", "OnResume");
+ Log.d("Navit", "OnResume");
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+ /* Required to make system bars fully transparent */
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
+ }
//InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// DEBUG
// intent_data = "google.navigation:q=Wien Burggasse 27";
@@ -402,6 +460,26 @@ public class Navit extends Activity
Log.e("Navit", "timestamp for navigate_to expired! not using data");
}
}
+ Log.d(TAG, "onResume");
+ if (show_soft_keyboard_now_showing) {
+ /* Calling showNativeKeyboard() directly won't work here, we need to use the message queue */
+ View cf = getCurrentFocus();
+ if (cf == null)
+ Log.e(TAG, "no view in focus, can't get a handler");
+ else
+ cf.getHandler().post(new SoftInputRestorer());
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ Log.d(TAG, "onPause");
+ if (show_soft_keyboard_now_showing) {
+ Log.d(TAG, "onPause:hiding soft input");
+ this.hideNativeKeyboard();
+ show_soft_keyboard_now_showing = true;
+ }
}
private void parseNavigationURI(String schemeSpecificPart) {
@@ -590,7 +668,68 @@ public class Navit extends Activity
break;
}
}
+
+
+ /**
+ * @brief Shows the Options menu.
+ *
+ * Calling this method has the same effect as pressing the hardware Menu button, where present, or touching
+ * the overflow button in the Action bar.
+ */
+ public void showMenu() {
+ openOptionsMenu();
+ }
+
+ /**
+ * @brief Shows the native keyboard or other input method.
+ *
+ * @return {@code true} if an input method is going to be displayed, {@code false} if not
+ */
+ public int showNativeKeyboard() {
+ /*
+ * Apologies for the huge mess that this function is, but Android's soft input API is a big
+ * nightmare. Its devs have mercifully given us an option to show or hide the keyboard, but
+ * there is no reliable way to figure out if it is actually showing, let alone how much of the
+ * screen it occupies, so our best bet is guesswork.
+ */
+ Configuration config = getResources().getConfiguration();
+ if ((config.keyboard == Configuration.KEYBOARD_QWERTY) && (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO))
+ /* physical keyboard present, exit */
+ return 0;
+
+ /* Use SHOW_FORCED here, else keyboard won't show in landscape mode */
+ mgr.showSoftInput(getCurrentFocus(), InputMethodManager.SHOW_FORCED);
+ show_soft_keyboard_now_showing = true;
+
+ /*
+ * Crude way to estimate the height occupied by the keyboard: for AOSP on KitKat and Lollipop it
+ * is about 62-63% of available screen width (in portrait mode) but no more than slightly above
+ * 46% of height (in landscape mode).
+ */
+ Display display_ = getWindowManager().getDefaultDisplay();
+ int width_ = display_.getWidth();
+ int height_ = display_.getHeight();
+ int maxHeight = height_ * 47 / 100;
+ int inputHeight = width_ * 63 / 100;
+ if (inputHeight > (maxHeight))
+ inputHeight = maxHeight;
+
+ /* the receiver isn't going to fire before the UI thread becomes idle, well after this method returns */
+ Log.d(TAG, "showNativeKeyboard:return (assuming true)");
+ return inputHeight;
+ }
+
+
+ /**
+ * @brief Hides the native keyboard or other input method.
+ */
+ public void hideNativeKeyboard() {
+ mgr.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+ show_soft_keyboard_now_showing = false;
+ }
+
+
void setDestination(float latitude, float longitude, String address) {
Toast.makeText( getApplicationContext(),getString(R.string.address_search_set_destination) + "\n" + address, Toast.LENGTH_LONG).show(); //TRANS
@@ -690,25 +829,33 @@ public class Navit extends Activity
NavitDestroy();
}
- public void fullscreen(int fullscreen)
- {
- if(fullscreen != 0)
- {
+ public void fullscreen(int fullscreen) {
+ int w, h;
+
+ isFullscreen = (fullscreen != 0);
+ if (isFullscreen) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB)
- this.getActionBar().hide();
}
- else
- {
+ else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB)
- this.getActionBar().show();
}
+
+ Display display_ = getWindowManager().getDefaultDisplay();
+ if (Build.VERSION.SDK_INT < 17) {
+ w = display_.getWidth();
+ h = display_.getHeight();
+ } else {
+ Point size = new Point();
+ display_.getRealSize(size);
+ w = size.x;
+ h = size.y;
+ }
+ Log.d(TAG, String.format("Toggle fullscreen, w=%d, h=%d", w, h));
+ N_NavitGraphics.handleResize(w, h);
}
-
public void disableSuspend()
{
wl.acquire();
diff --git a/navit/android/src/org/navitproject/navit/NavitAndroidOverlay.java b/navit/android/src/org/navitproject/navit/NavitAndroidOverlay.java
deleted file mode 100644
index 1db76dca8..000000000
--- a/navit/android/src/org/navitproject/navit/NavitAndroidOverlay.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Navit, a modular navigation system.
- * Copyright (C) 2005-2008 Navit Team
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-package org.navitproject.navit;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.RectF;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.view.MotionEvent;
-import android.widget.ImageView;
-
-public class NavitAndroidOverlay extends ImageView implements Runnable
-{
- public Boolean draw_bubble = false;
- public static Boolean confirmed_bubble = false;
- public static long bubble_max_showing_timespan = 8000L; // 8 secs.
-
- public static class NavitAndroidOverlayBubble
- {
- int x;
- int y;
- String text = null;
- }
-
- private NavitAndroidOverlayBubble bubble_001 = null;
-
- public NavitAndroidOverlay(Context context)
- {
- super(context);
- }
-
- public void show_bubble()
- {
- //Log.e("Navit", "NavitAndroidOverlay -> show_bubble");
- if (!this.draw_bubble)
- {
- Handler handler = new Handler();
- handler.postDelayed(this, bubble_max_showing_timespan);
- NavitAndroidOverlay.confirmed_bubble = false;
- this.draw_bubble = true;
- }
- }
-
- public Boolean get_show_bubble()
- {
- return this.draw_bubble;
- }
-
- public void hide_bubble() {
- confirmed_bubble = false;
- draw_bubble = false;
- Message msg = Message.obtain(Navit.N_NavitGraphics.callback_handler,
- NavitGraphics.msg_type.CLB_REDRAW.ordinal());
- msg.sendToTarget();
- postInvalidate();
- }
-
- public void set_bubble(NavitAndroidOverlayBubble b)
- {
- this.bubble_001 = b;
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event)
- {
- //Log.e("Navit", "NavitAndroidOverlay -> onTouchEvent");
- super.onTouchEvent(event);
-
- int x = (int) event.getX();
- int y = (int) event.getY();
-
- if ((this.draw_bubble) && (!NavitAndroidOverlay.confirmed_bubble))
- {
- // bubble is showing, test if we touch it to confirm destination
- float draw_factor = 1.0f;
- if (Navit.my_display_density.compareTo("mdpi") == 0)
- {
- draw_factor = 1.0f;
- }
- else if (Navit.my_display_density.compareTo("ldpi") == 0)
- {
- draw_factor = 0.7f;
- }
- else if (Navit.my_display_density.compareTo("hdpi") == 0)
- {
- draw_factor = 1.5f;
- }
- int dx = (int) ((20 / 1.5f) * draw_factor);
- int dy = (int) ((-100 / 1.5f) * draw_factor);
- int bubble_size_x = (int) ((150 / 1.5f) * draw_factor);
- int bubble_size_y = (int) ((60 / 1.5f) * draw_factor);
- RectF box_rect = new RectF(this.bubble_001.x + dx, this.bubble_001.y + dy,
- this.bubble_001.x + bubble_size_x + dx, this.bubble_001.y + bubble_size_y + dy);
- if (box_rect.contains(x, y))
- {
- // bubble touched to confirm destination
- NavitAndroidOverlay.confirmed_bubble = true;
- // draw confirmed bubble
- this.postInvalidate();
-
- // set destination
- Message msg = Message.obtain(Navit.N_NavitGraphics.callback_handler,
- NavitGraphics.msg_type.CLB_SET_DISPLAY_DESTINATION.ordinal());
-
- Bundle b = new Bundle();
- b.putInt("x", this.bubble_001.x);
- b.putInt("y", this.bubble_001.y);
- msg.setData(b);
- msg.sendToTarget();
-
- // consume the event
- return true;
- }
- }
-
- // false -> we dont use this event, give it to other layers
- return false;
- }
-
- public void onDraw(Canvas c)
- {
- //Log.e("Navit", "NavitAndroidOverlay -> onDraw");
-
- float draw_factor = 1.0f;
- if (Navit.my_display_density.compareTo("mdpi") == 0)
- {
- draw_factor = 1.0f;
- }
- else if (Navit.my_display_density.compareTo("ldpi") == 0)
- {
- draw_factor = 0.7f;
- }
- else if (Navit.my_display_density.compareTo("hdpi") == 0)
- {
- draw_factor = 1.5f;
- }
-
-
- if (this.draw_bubble)
- {
- //Log.e("Navit", "NavitAndroidOverlay -> onDraw -> bubble");
-
- int dx = (int) ((20 / 1.5f) * draw_factor);
- int dy = (int) ((-100 / 1.5f) * draw_factor);
- Paint bubble_paint = new Paint(0);
-
- int bubble_size_x = (int) ((150 / 1.5f) * draw_factor);
- int bubble_size_y = (int) ((60 / 1.5f) * draw_factor);
-
- // yellow-ish funny lines
- int lx = (int) ((15 / 1.5f) * draw_factor);
- int ly = (int) ((15 / 1.5f) * draw_factor);
- bubble_paint.setStyle(Style.FILL);
- bubble_paint.setAntiAlias(true);
- bubble_paint.setStrokeWidth(8 / 1.5f * draw_factor);
- bubble_paint.setColor(Color.parseColor("#FFF8C6"));
- c.drawLine(this.bubble_001.x + dx, this.bubble_001.y + dy + bubble_size_y - ly,
- this.bubble_001.x, this.bubble_001.y, bubble_paint);
- c.drawLine(this.bubble_001.x + dx + lx, this.bubble_001.y + dy + bubble_size_y,
- this.bubble_001.x, this.bubble_001.y, bubble_paint);
-
- // draw black funny lines to target
- bubble_paint.setStyle(Style.STROKE);
- bubble_paint.setAntiAlias(true);
- bubble_paint.setStrokeWidth(3);
- bubble_paint.setColor(Color.parseColor("#000000"));
- c.drawLine(this.bubble_001.x + dx, this.bubble_001.y + dy + bubble_size_y - ly,
- this.bubble_001.x, this.bubble_001.y, bubble_paint);
- c.drawLine(this.bubble_001.x + dx + lx, this.bubble_001.y + dy + bubble_size_y,
- this.bubble_001.x, this.bubble_001.y, bubble_paint);
-
-
- // filled rect yellow-ish
- bubble_paint.setStyle(Style.FILL);
- bubble_paint.setStrokeWidth(0);
- bubble_paint.setAntiAlias(false);
- bubble_paint.setColor(Color.parseColor("#FFF8C6"));
- RectF box_rect = new RectF(this.bubble_001.x + dx, this.bubble_001.y + dy,
- this.bubble_001.x + bubble_size_x + dx, this.bubble_001.y + bubble_size_y + dy);
- int rx = (int) (20 / 1.5f * draw_factor);
- int ry = (int) (20 / 1.5f * draw_factor);
- c.drawRoundRect(box_rect, rx, ry, bubble_paint);
-
- if (NavitAndroidOverlay.confirmed_bubble)
- {
- // filled red rect (for confirmed bubble)
- //bubble_paint.setStyle(Style.FILL);
- //bubble_paint.setStrokeWidth(0);
- //bubble_paint.setAntiAlias(false);
- bubble_paint.setColor(Color.parseColor("#EC294D"));
- c.drawRoundRect(box_rect, rx, ry, bubble_paint);
- }
-
- // black outlined rect
- bubble_paint.setStyle(Style.STROKE);
- bubble_paint.setStrokeWidth(3);
- bubble_paint.setAntiAlias(true);
- bubble_paint.setColor(Color.parseColor("#000000"));
- c.drawRoundRect(box_rect, rx, ry, bubble_paint);
-
- int inner_dx = (int) (30 / 1.5f * draw_factor);
- int inner_dy = (int) (36 / 1.5f * draw_factor);
- bubble_paint.setAntiAlias(true);
- bubble_paint.setStyle(Style.FILL);
- bubble_paint.setTextSize((int) (20 / 1.5f * draw_factor));
- bubble_paint.setStrokeWidth(3);
- bubble_paint.setColor(Color.parseColor("#3b3131"));
- c.drawText(Navit._("Route to here"), this.bubble_001.x + dx + inner_dx,
- this.bubble_001.y + dy + inner_dy, bubble_paint);
-
- }
- }
-
- public void run() {
- hide_bubble();
- }
-}
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index 728b49878..a41ab52be 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -25,23 +25,31 @@ import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.graphics.Rect;
+import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.util.FloatMath;
import android.util.Log;
import android.view.ContextMenu;
+import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.InputMethodManager;
+import android.widget.FrameLayout;
import android.widget.RelativeLayout;
@@ -55,8 +63,12 @@ public class NavitGraphics
int pos_y;
int pos_wraparound;
int overlay_disabled;
+ int bgcolor;
float trackball_x, trackball_y;
View view;
+ SystemBarTintView navigationTintView;
+ SystemBarTintView statusTintView;
+ FrameLayout frameLayout;
RelativeLayout relativelayout;
NavitCamera camera;
Activity activity;
@@ -68,6 +80,14 @@ public class NavitGraphics
private static long interval_for_long_press = 200L;
private Handler timer_handler = new Handler();
+
+ public void setBackgroundColor(int bgcolor) {
+ this.bgcolor = bgcolor;
+ if (navigationTintView != null)
+ navigationTintView.setBackgroundColor(bgcolor);
+ if (statusTintView != null)
+ statusTintView.setBackgroundColor(bgcolor);
+ }
public void SetCamera(int use_camera)
{
@@ -197,11 +217,8 @@ public class NavitGraphics
Log.e("Navit", "NavitGraphics -> onSizeChanged scaledDensity="
+ Navit.metrics.scaledDensity);
super.onSizeChanged(w, h, oldw, oldh);
- draw_bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- draw_canvas = new Canvas(draw_bitmap);
- bitmap_w = w;
- bitmap_h = h;
- SizeChangedCallback(SizeChangedCallbackID, w, h);
+
+ handleResize(w, h);
}
public void do_longpress_action()
@@ -352,7 +369,7 @@ public class NavitGraphics
{
float x = a.x - b.x;
float y = a.y - b.y;
- return FloatMath.sqrt(x * x + y * y);
+ return (float)Math.sqrt(x * x + y * y);
}
private PointF getFloatValue(Object instance, Object argument)
@@ -685,6 +702,15 @@ public class NavitGraphics
}
+ private class SystemBarTintView extends View {
+
+ public SystemBarTintView(Context context) {
+ super(context);
+ this.setBackgroundColor(bgcolor);
+ }
+
+ }
+
public NavitGraphics(final Activity activity, NavitGraphics parent, int x, int y, int w, int h,
int wraparound, int use_camera)
{
@@ -704,7 +730,22 @@ public class NavitGraphics
}
relativelayout.addView(view);
+ /* The navigational and status bar tinting code is meaningful only on API19+ */
+ if(Build.VERSION.SDK_INT >= 19)
+ {
+ frameLayout = new FrameLayout(activity);
+ frameLayout.addView(relativelayout);
+ navigationTintView = new SystemBarTintView(activity);
+ statusTintView = new SystemBarTintView(activity);
+ frameLayout.addView(navigationTintView);
+ frameLayout.addView(statusTintView);
+ activity.setContentView(frameLayout);
+ }
+ else
+ {
activity.setContentView(relativelayout);
+ }
+
view.requestFocus();
}
else
@@ -781,6 +822,7 @@ public class NavitGraphics
};
public native void SizeChangedCallback(int id, int x, int y);
+ public native void PaddingChangedCallback(int id, int left, int right, int top, int bottom);
public native void KeypressCallback(int id, String s);
public native int CallbackMessageChannel(int i, String s);
public native void ButtonCallback(int id, int pressed, int button, int x, int y);
@@ -789,13 +831,144 @@ public class NavitGraphics
public static native String[][] GetAllCountries();
private Canvas draw_canvas;
private Bitmap draw_bitmap;
- private int SizeChangedCallbackID, ButtonCallbackID, MotionCallbackID, KeypressCallbackID;
+ private int SizeChangedCallbackID, PaddingChangedCallbackID, ButtonCallbackID, MotionCallbackID, KeypressCallbackID;
// private int count;
+
+ /**
+ * @brief Adjust views used to tint navigation and status bars.
+ *
+ * This method is called from handleResize.
+ *
+ * It (re-)evaluates if and where the navigation bar is going to be shown, and calculates the
+ * padding for objects which should not be obstructed.
+ *
+ */
+ private void adjustSystemBarsTintingViews() {
+
+ /* frameLayout is only created on platforms supporting navigation and status bar tinting */
+ if (frameLayout == null)
+ return;
+
+ if (!(activity instanceof Navit)) {
+ Log.e("NavitGraphics", "Main Activity is not a Navit instance, cannot update padding");
+ return;
+ }
+
+ Navit navit = (Navit) activity;
+
+ /*
+ * Determine visibility of status bar.
+ * The status bar is always visible unless we are in fullscreen mode.
+ */
+ final Boolean isStatusShowing = !navit.isFullscreen;
+
+ /*
+ * Determine visibility of navigation bar.
+ * This logic is based on the presence of a hardware menu button and is known to work on
+ * devices which allow switching between hw and sw buttons (OnePlus One running CyanogenMod).
+ */
+ final Boolean isNavShowing = !ViewConfiguration.get(navit.getApplication()).hasPermanentMenuKey();
+ Log.d("NavitGraphics", String.format("isStatusShowing=%b isNavShowing=%b", isStatusShowing, isNavShowing));
+
+ /*
+ * Determine where the navigation bar would be displayed.
+ * Logic is taken from AOSP RenderSessionImpl.findNavigationBar()
+ * (platform/frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java)
+ */
+ final Boolean isLandscape = (navit.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);
+ final Boolean isNavAtBottom = (!isLandscape) || (navit.getResources().getConfiguration().smallestScreenWidthDp >= 600);
+ Log.d("NavitGraphics", String.format("isNavAtBottom=%b (Configuration.smallestScreenWidthDp=%d, isLandscape=%b)",
+ isNavAtBottom, navit.getResources().getConfiguration().smallestScreenWidthDp, isLandscape));
+
+ int left = 0;
+ int top = isStatusShowing ? Navit.status_bar_height : 0;
+ int right = (isNavShowing && !isNavAtBottom) ? Navit.navigation_bar_width : 0;
+ final int bottom = (!(isNavShowing && isNavAtBottom)) ? 0 : isLandscape ? Navit.navigation_bar_height_landscape : Navit.navigation_bar_height;
+
+ /* hide tint bars during update to prevent ugly effects */
+ statusTintView.setVisibility(View.GONE);
+ navigationTintView.setVisibility(View.GONE);
+ frameLayout.post(new Runnable() {
+ @Override
+ public void run() {
+ statusTintView.setVisibility(isStatusShowing ? View.VISIBLE : View.GONE);
+ FrameLayout.LayoutParams statusLayoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, Navit.status_bar_height, Gravity.TOP);
+
+ /* Prevent tint views from overlapping when navigation is on the right */
+ statusLayoutParams.setMargins(0, 0, (isNavShowing && !isNavAtBottom) ? Navit.navigation_bar_width : 0, 0);
+ statusTintView.setLayoutParams(statusLayoutParams);
+ Log.d("NavitGraphics", String.format("statusTintView: width=%d height=%d",
+ statusTintView.getWidth(), statusTintView.getHeight()));
+ navigationTintView.setVisibility(isNavShowing ? View.VISIBLE : View.GONE);
+ LayoutParams navigationLayoutParams = new FrameLayout.LayoutParams(
+ isNavAtBottom ? LayoutParams.MATCH_PARENT : Navit.navigation_bar_width, // X
+ isNavAtBottom ? bottom : LayoutParams.MATCH_PARENT, // Y
+ Gravity.BOTTOM | Gravity.RIGHT);
+ navigationTintView.setLayoutParams(navigationLayoutParams);
+ Log.d("NavitGraphics", String.format("navigationTintView: width=%d height=%d",
+ navigationTintView.getWidth(), navigationTintView.getHeight()));
+ }
+ });
+
+ Log.d("NavitGraphics", String.format("Padding left=%d top=%d right=%d bottom=%d", left, top, right, bottom));
+
+ PaddingChangedCallback(PaddingChangedCallbackID, left, top, right, bottom);
+ }
+
+ /**
+ * @brief Handles resize events.
+ *
+ * This method is called whenever the main View is resized in any way. This is the case when its
+ * {@code onSizeChanged()} event handler fires or when toggling Fullscreen mode.
+ *
+ */
+ public void handleResize(int w, int h) {
+ if (this.parent_graphics != null)
+ this.parent_graphics.handleResize(w, h);
+ else {
+ Log.d("NavitGraphics", String.format("handleResize w=%d h=%d", w, h));
+
+ adjustSystemBarsTintingViews();
+
+ draw_bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+ draw_canvas = new Canvas(draw_bitmap);
+ bitmap_w = w;
+ bitmap_h = h;
+ SizeChangedCallback(SizeChangedCallbackID, w, h);
+ }
+ }
+
+ /**
+ * @brief Returns whether the device has a hardware menu button.
+ *
+ * Only Android versions starting with ICS (API version 14) support the API call to detect the presence of a
+ * Menu button. On earlier Android versions, the following assumptions will be made: On API levels up to 10,
+ * this method will always return {@code true}, as these Android versions relied on devices having a physical
+ * Menu button. On API levels 11 through 13 (Honeycomb releases), this method will always return
+ * {@code false}, as Honeycomb was a tablet-only release and did not require devices to have a Menu button.
+ *
+ * Note that this method is not aware of non-standard mechanisms on some customized builds of Android. For
+ * example, CyanogenMod has an option to add a menu button to the navigation bar. Even with that option,
+ * this method will still return `false`.
+ */
+ public boolean hasMenuButton() {
+ if (Build.VERSION.SDK_INT <= 10)
+ return true;
+ else if (Build.VERSION.SDK_INT <= 13)
+ return false;
+ else
+ return ViewConfiguration.get(activity.getApplication()).hasPermanentMenuKey();
+ }
+
public void setSizeChangedCallback(int id)
{
SizeChangedCallbackID = id;
}
+ public void setPaddingChangedCallback(int id)
+ {
+ PaddingChangedCallbackID = id;
+ }
public void setButtonCallback(int id)
{
ButtonCallbackID = id;
@@ -921,7 +1094,7 @@ public class NavitGraphics
//Log.e("NavitGraphics","draw_image");
// float fx = x;
// float fy = y;
- draw_canvas.drawBitmap(bitmap, x, y, paint);
+ draw_canvas.drawBitmap(bitmap, x, y, null);
}
/* takes an image and draws it on the screen as a prerendered maptile
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics2.java b/navit/android/src/org/navitproject/navit/NavitGraphics2.java
deleted file mode 100644
index ee7b72cce..000000000
--- a/navit/android/src/org/navitproject/navit/NavitGraphics2.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/**
- * Navit, a modular navigation system.
- * Copyright (C) 2005-2008 Navit Team
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-package org.navitproject.navit;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.FloatBuffer;
-import java.util.ArrayList;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.app.Activity;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.opengl.GLSurfaceView;
-import android.opengl.GLU;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.widget.RelativeLayout;
-
-
-
-class ClearRenderer implements GLSurfaceView.Renderer {
- public FloatBuffer flb[];
- public int flb_len;
- boolean busy;
- public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- // Do nothing special.
- }
-
- public void onSurfaceChanged(GL10 gl, int w, int h) {
- gl.glViewport(0, 0, w, h);
- }
- protected static FloatBuffer makeFloatBuffer(float[] arr) {
- ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4);
- bb.order(ByteOrder.nativeOrder());
- FloatBuffer fb = bb.asFloatBuffer();
- fb.put(arr);
- fb.position(0);
- return fb;
- }
-
-
-
- public void onDrawFrame(GL10 gl) {
- if (busy) {
- return;
- }
-
-gl.glClearColor(1.0f, 1.0f, 0.2f, 0.0f);
- gl.glMatrixMode(GL10.GL_PROJECTION);
- gl.glLoadIdentity();
- //GLU.gluOrtho2D(gl, 0.0f,1.3f,0.0f,1.0f);
- GLU.gluOrtho2D(gl, 0.0f,320.0f,480.0f,0.0f);
-
-
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-gl.glShadeModel(GL10.GL_SMOOTH);
-
- gl.glMatrixMode(GL10.GL_MODELVIEW);
- gl.glLoadIdentity();
-
-
- gl.glColor4f(0.25f, 0.25f, 0.75f, 1.0f);
- //gl.glTranslatef(0f, 1f, 0.0f);
- //gl.glScalef(1.0f/320, -1.0f/480, 0.001f);
- //gl.glRotatef(0, 0, 1, 0);
-
-
- Log.e("navit", "flb_len "+flb_len);
- for (int i = 0 ; i < flb_len ; i++) {
- if (flb[i] != null) {
- gl.glVertexPointer(3, GL10.GL_FLOAT, 0, flb[i]);
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, flb[i].capacity()/3);
- }
- }
-// FloatBuffer buf=makeFloatBuffer(square);
-// gl.glVertexPointer(3, GL10.GL_FLOAT, 0, buf);
-// gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
-// Log.e("navit", "capacity "+buf.capacity());
-// gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, buf.capacity()/3);
- }
-}
-
-public class NavitGraphics2 {
- private NavitGraphics2 parent_graphics;
- private ArrayList<NavitGraphics2> overlays=new ArrayList<NavitGraphics2>();
- int bitmap_w;
- int bitmap_h;
- int pos_x;
- int pos_y;
- int pos_wraparound;
- int overlay_disabled;
- float trackball_x,trackball_y;
- GLSurfaceView view;
- FloatBuffer[] flb;
-
- RelativeLayout relativelayout;
- NavitCamera camera;
- Activity activity;
- ClearRenderer renderer;
-
- public void
- SetCamera(int use_camera)
- {
- if (use_camera != 0 && camera == null) {
- // activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
- camera=new NavitCamera(activity);
- relativelayout.addView(camera);
- relativelayout.bringChildToFront(view);
- }
- }
- public NavitGraphics2(Activity activity, NavitGraphics2 parent, int x, int y, int w, int h, int alpha, int wraparound, int use_camera) {
- if (parent == null) {
- this.activity=activity;
- flb=new FloatBuffer[10000];
- view=new GLSurfaceView(activity) {
- @Override protected void onDraw(Canvas canvas)
- {
- super.onDraw(canvas);
- canvas.drawBitmap(draw_bitmap, pos_x, pos_y, null);
- if (overlay_disabled == 0) {
- Object overlays_array[];
- overlays_array=overlays.toArray();
- for (Object overlay : overlays_array) {
- NavitGraphics2 overlay_graphics=(NavitGraphics2)overlay;
- if (overlay_graphics.overlay_disabled == 0) {
- int x=overlay_graphics.pos_x;
- int y=overlay_graphics.pos_y;
- if (overlay_graphics.pos_wraparound != 0 && x < 0)
- x+=bitmap_w;
- if (overlay_graphics.pos_wraparound != 0 && y < 0)
- y+=bitmap_h;
- canvas.drawBitmap(overlay_graphics.draw_bitmap, x, y, null);
- }
- }
- }
- }
- @Override protected void onSizeChanged(int w, int h, int oldw, int oldh)
- {
- super.onSizeChanged(w, h, oldw, oldh);
- draw_bitmap=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- draw_canvas=new Canvas(draw_bitmap);
- bitmap_w=w;
- bitmap_h=h;
- SizeChangedCallback(SizeChangedCallbackID, w, h);
- }
- @Override public boolean onTouchEvent(MotionEvent event)
- {
- super.onTouchEvent(event);
- int action = event.getAction();
- int x=(int)event.getX();
- int y=(int)event.getY();
- if (action == MotionEvent.ACTION_DOWN) {
- // Log.e("NavitGraphics", "onTouch down");
- ButtonCallback(ButtonCallbackID, 1, 1, x, y);
- }
- if (action == MotionEvent.ACTION_UP) {
- // Log.e("NavitGraphics", "onTouch up");
- ButtonCallback(ButtonCallbackID, 0, 1, x, y);
- // if (++count == 3)
- // Debug.stopMethodTracing();
- }
- if (action == MotionEvent.ACTION_MOVE) {
- // Log.e("NavitGraphics", "onTouch move");
- MotionCallback(MotionCallbackID, x, y);
- }
- return true;
- }
- @Override public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- int i;
- String s=null;
- boolean handled=true;
- i=event.getUnicodeChar();
- Log.e("NavitGraphics","onKeyDown "+keyCode+" "+i);
- // Log.e("NavitGraphics","Unicode "+event.getUnicodeChar());
- if (i == 0) {
- if (keyCode == android.view.KeyEvent.KEYCODE_DEL) {
- s=java.lang.String.valueOf((char)8);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_MENU) {
- s=java.lang.String.valueOf((char)1);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_SEARCH) {
- s=java.lang.String.valueOf((char)19);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_BACK) {
- s=java.lang.String.valueOf((char)27);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_CALL) {
- s=java.lang.String.valueOf((char)3);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_VOLUME_UP) {
- s=java.lang.String.valueOf((char)21);
- handled=false;
- } else if (keyCode == android.view.KeyEvent.KEYCODE_VOLUME_DOWN) {
- s=java.lang.String.valueOf((char)4);
- handled=false;
- } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_CENTER) {
- s=java.lang.String.valueOf((char)13);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_DOWN) {
- s=java.lang.String.valueOf((char)16);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_LEFT) {
- s=java.lang.String.valueOf((char)2);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_RIGHT) {
- s=java.lang.String.valueOf((char)6);
- } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_UP) {
- s=java.lang.String.valueOf((char)14);
- }
- } else if (i == 10) {
- s=java.lang.String.valueOf((char)13);
- } else {
- s=java.lang.String.valueOf((char)i);
- }
- if (s != null) {
- KeypressCallback(KeypressCallbackID, s);
- }
- return handled;
- }
- @Override public boolean onKeyUp(int keyCode, KeyEvent event)
- {
- Log.e("NavitGraphics","onKeyUp "+keyCode);
- return true;
- }
- @Override public boolean onTrackballEvent(MotionEvent event)
- {
- Log.e("NavitGraphics","onTrackball "+event.getAction() + " " +event.getX()+" "+event.getY());
- String s=null;
- if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
- s=java.lang.String.valueOf((char)13);
- }
- if (event.getAction() == android.view.MotionEvent.ACTION_MOVE) {
- trackball_x+=event.getX();
- trackball_y+=event.getY();
- Log.e("NavitGraphics","trackball "+trackball_x+" "+trackball_y);
- if (trackball_x <= -1) {
- s=java.lang.String.valueOf((char)2);
- trackball_x+=1;
- }
- if (trackball_x >= 1) {
- s=java.lang.String.valueOf((char)6);
- trackball_x-=1;
- }
- if (trackball_y <= -1) {
- s=java.lang.String.valueOf((char)16);
- trackball_y+=1;
- }
- if (trackball_y >= 1) {
- s=java.lang.String.valueOf((char)14);
- trackball_y-=1;
- }
- }
- if (s != null) {
- KeypressCallback(KeypressCallbackID, s);
- }
- return true;
- }
- @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
- {
- super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
- Log.e("NavitGraphics","FocusChange "+gainFocus);
- }
- };
- view.setFocusable(true);
- view.setFocusableInTouchMode(true);
- renderer=new ClearRenderer();
- renderer.flb=new FloatBuffer[1000];
- renderer.flb_len=0;
- view.setRenderer(renderer);
- view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
- relativelayout=new RelativeLayout(activity);
- if (use_camera != 0) {
- SetCamera(use_camera);
- }
- relativelayout.addView(view);
- activity.setContentView(relativelayout);
- view.requestFocus();
- } else {
- draw_bitmap=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- bitmap_w=w;
- bitmap_h=h;
- pos_x=x;
- pos_y=y;
- pos_wraparound=wraparound;
- draw_canvas=new Canvas(draw_bitmap);
- parent.overlays.add(this);
- }
- parent_graphics=parent;
- }
- public native void SizeChangedCallback(int id, int x, int y);
- public native void ButtonCallback(int id, int pressed, int button, int x, int y);
- public native void MotionCallback(int id, int x, int y);
- public native void KeypressCallback(int id, String s);
- private Canvas draw_canvas;
- private Bitmap draw_bitmap;
- private int SizeChangedCallbackID,ButtonCallbackID,MotionCallbackID,KeypressCallbackID;
- // private int count;
-
- public void setSizeChangedCallback(int id)
- {
- SizeChangedCallbackID=id;
- }
- public void setButtonCallback(int id)
- {
- ButtonCallbackID=id;
- }
- public void setMotionCallback(int id)
- {
- MotionCallbackID=id;
- }
- public void setKeypressCallback(int id)
- {
- KeypressCallbackID=id;
- }
-
- protected void draw_polyline(Paint paint,int c[])
- {
- }
-
- protected void draw_polygon(Paint paint,int c[])
- {
- //float[] square = new float[] { -0.25f, -0.25f, 0.0f,
- // 0.25f, -0.25f, 0.0f,
- // -0.25f, 0.25f, 0.0f,
- // 0.25f, 0.25f, 0.0f };
- int len=c.length/2;
- float[] square = new float[3*len];
- for (int i = 0 ; i < len ; i++) {
- square[i*3]=c[i*2];
- square[i*3+1]=c[i*2+1];
- square[i*3+2]=0;
- }
-// if (renderer.flb_len < 100) {
-// renderer.flb[renderer.flb_len++]=ClearRenderer.makeFloatBuffer(square);
-// }
- if (renderer!=null && renderer.flb_len < 1000) {
- renderer.flb[renderer.flb_len++]=ClearRenderer.makeFloatBuffer(square);
- //renderer.flb_len=1;
- }
-
- }
- protected void draw_rectangle(Paint paint,int x, int y, int w, int h)
- {
- }
- protected void draw_circle(Paint paint,int x, int y, int r)
- {
- }
- protected void draw_text(Paint paint,int x, int y, String text, int size, int dx, int dy)
- {
- }
- protected void draw_image(Paint paint, int x, int y, Bitmap bitmap)
- {
- }
- protected void draw_mode(int mode)
- {
- Log.e("navit", "draw_mode "+mode);
- if (mode == 2 && parent_graphics == null) {
- view.draw(draw_canvas);
- view.invalidate();
- view.requestRender();
- }
- if (mode == 1 || (mode == 0 && parent_graphics != null)) {
- if (renderer!=null) {
- renderer.flb_len=0;
- }
- draw_bitmap.eraseColor(0);
- }
- if (mode == 0 && renderer != null) {
- renderer.flb_len=0;
- }
- }
- protected void draw_drag(int x, int y)
- {
- pos_x=x;
- pos_y=y;
- }
- protected void overlay_disable(int disable)
- {
- overlay_disabled=disable;
- }
- protected void overlay_resize(int x, int y, int w, int h, int alpha, int wraparond)
- {
- pos_x=x;
- pos_y=y;
- }
-}
diff --git a/navit/attr.c b/navit/attr.c
index 2ae4cec65..24b6cbe6a 100644
--- a/navit/attr.c
+++ b/navit/attr.c
@@ -835,7 +835,8 @@ attr_free_content_do(struct attr *attr)
obj->func->unref(obj);
}
if (!(attr->type >= attr_type_int_begin && attr->type <= attr_type_int_end) &&
- !(attr->type >= attr_type_object_begin && attr->type <= attr_type_object_end))
+ !(attr->type >= attr_type_object_begin && attr->type <= attr_type_object_end) &&
+ attr->type != attr_item_type)
g_free(attr->u.data);
}
@@ -860,6 +861,8 @@ attr_dup_content(struct attr *src, struct attr *dst)
dst->type=src->type;
if (src->type >= attr_type_int_begin && src->type <= attr_type_int_end)
dst->u.num=src->u.num;
+ else if (src->type == attr_item_type)
+ dst->u.item_type=src->u.item_type;
else if (src->type >= attr_type_object_begin && src->type <= attr_type_object_end) {
if (HAS_OBJECT_FUNC(src->type)) {
struct navit_object *obj=src->u.data;
diff --git a/navit/attr.h b/navit/attr.h
index 27b37be60..4884ea95b 100644
--- a/navit/attr.h
+++ b/navit/attr.h
@@ -73,6 +73,7 @@ enum attr_format {
#define AF_UNPAVED (1<<12)
#define AF_FORD (1<<13)
#define AF_UNDERGROUND (1<<14)
+#define AF_HIGH_OCCUPANCY_CAR_ONLY (1<<18)
#define AF_DANGEROUS_GOODS (1<<19)
#define AF_EMERGENCY_VEHICLES (1<<20)
#define AF_TRANSPORT_TRUCK (1<<21)
diff --git a/navit/attr_def.h b/navit/attr_def.h
index d5647f2f1..b3f77163b 100644
--- a/navit/attr_def.h
+++ b/navit/attr_def.h
@@ -253,6 +253,7 @@ ATTR(persistent)
ATTR(waypoints_flag) /* toggle for "set as destination" to switch between start a new route or add */
ATTR(no_warning_if_map_file_missing)
ATTR(duplicate)
+ATTR(has_menu_button)
ATTR2(0x0002ffff,type_int_end)
ATTR2(0x00030000,type_string_begin)
ATTR(type)
diff --git a/navit/cache.c b/navit/cache.c
index f1315cd9e..180b165c0 100644
--- a/navit/cache.c
+++ b/navit/cache.c
@@ -8,7 +8,7 @@
struct cache_entry {
int usage;
- int size;
+ unsigned int size;
struct cache_entry_list *where;
struct cache_entry *next;
struct cache_entry *prev;
@@ -24,8 +24,8 @@ struct cache {
struct cache_entry_list t1,b1,t2,b2,*insert;
int size,id_size,entry_size;
int t1_target;
- int misses;
- int hits;
+ unsigned int misses;
+ unsigned int hits;
GHashTable *hash;
};
diff --git a/navit/command.c b/navit/command.c
index 5b8aac910..4208c575c 100644
--- a/navit/command.c
+++ b/navit/command.c
@@ -917,7 +917,7 @@ command_call_function(struct context *ctx, struct result *res)
callback_list_call_attr_4(cbl.u.callback_list, attr_command, function, list, &out, &valid);
if (valid!=1){
dbg(lvl_error, "invalid command ignored: \"%s\"; see http://wiki.navit-project.org/index.php/"
- "The_Navit_Command_Interface for valid commands.\n", function);
+ "OSD#Navit_commands for valid commands.\n", function);
}
if (out && out[0]) {
result_free(res);
diff --git a/navit/country.c b/navit/country.c
index 52f471e17..7d13e69e7 100644
--- a/navit/country.c
+++ b/navit/country.c
@@ -362,9 +362,10 @@ country_search_new(struct attr *search, int partial)
{
struct country_search *ret=g_new(struct country_search, 1);
ret->search=*search;
- ret->search.u.str=linguistics_casefold(ret->search.u.str);
- if (search->type != attr_country_id)
+ if (search->type != attr_country_id) {
+ ret->search.u.str=linguistics_casefold(ret->search.u.str);
ret->len=strlen(ret->search.u.str);
+ }
else
ret->len=0;
ret->partial=partial;
diff --git a/navit/event.c b/navit/event.c
index 96d2e0dd8..667e5bdc3 100644
--- a/navit/event.c
+++ b/navit/event.c
@@ -129,7 +129,7 @@ event_request_system(const char *system, const char *requestor)
}
return 1;
}
- event_type_new=plugin_get_event_type(system);
+ event_type_new=plugin_get_category_event(system);
if (! event_type_new) {
dbg(lvl_error,"unsupported event system '%s' requested from '%s'\n", system, requestor);
return 0;
diff --git a/navit/event_glib.c b/navit/event_glib.c
index 9ffb12cbc..e9bad6c40 100644
--- a/navit/event_glib.c
+++ b/navit/event_glib.c
@@ -196,5 +196,5 @@ event_glib_new(struct event_methods *meth)
void
event_glib_init(void)
{
- plugin_register_event_type("glib", event_glib_new);
+ plugin_register_category_event("glib", event_glib_new);
}
diff --git a/navit/font/freetype/font_freetype.c b/navit/font/freetype/font_freetype.c
index f41eff314..0508c5870 100644
--- a/navit/font/freetype/font_freetype.c
+++ b/navit/font/freetype/font_freetype.c
@@ -658,7 +658,7 @@ font_freetype_new(void *meth)
void
plugin_init(void)
{
- plugin_register_font_type("freetype", font_freetype_new);
+ plugin_register_category_font("freetype", font_freetype_new);
#ifdef HAVE_FONTCONFIG
FcInit();
#endif
diff --git a/navit/graphics.c b/navit/graphics.c
index 97b1c0f69..7680d96ce 100644
--- a/navit/graphics.c
+++ b/navit/graphics.c
@@ -274,7 +274,7 @@ struct graphics * graphics_new(struct attr *parent, struct attr **attrs)
return NULL;
}
- graphicstype_new=plugin_get_graphics_type(type_attr->u.str);
+ graphicstype_new=plugin_get_category_graphics(type_attr->u.str);
if (! graphicstype_new) {
dbg(lvl_error,"Failed to load graphics plugin %s.\n", type_attr->u.str);
return NULL;
@@ -654,11 +654,12 @@ void graphics_gc_set_dashes(struct graphics_gc *gc, int width, int offset, unsig
}
/**
- * Create a new image from file path scaled to w and h pixels
+ * @brief Create a new image from file path, optionally scaled to w and h pixels.
+ *
* @param gra the graphics instance
* @param path path of the image to load
- * @param w width to rescale to
- * @param h height to rescale to
+ * @param w width to rescale to, or IMAGE_W_H_UNSET for original width
+ * @param h height to rescale to, or IMAGE_W_H_UNSET for original height
* @returns <>
* @author Martin Schaller (04/2008)
*/
@@ -684,7 +685,7 @@ image_new_helper(struct graphics *gra, struct graphics_image *this_, char *path,
case 1:
/* The best variant both for cpu usage and quality would be prescaled png of a needed size */
mode++;
- if (width != -1 && height != -1) {
+ if (width != IMAGE_W_H_UNSET && height != IMAGE_W_H_UNSET) {
new_name=g_strdup_printf("%s_%d_%d.png", name, width, height);
}
break;
@@ -782,12 +783,13 @@ image_new_helper(struct graphics *gra, struct graphics_image *this_, char *path,
}
/**
- * Create a new image from file path scaled to w and h pixels and possibly rotated
+ * @brief Create a new image from file path, optionally scaled to w and h pixels and rotated.
+ *
* @param gra the graphics instance
* @param path path of the image to load
- * @param w width to rescale to
- * @param h height to rescale to
- * @param rotate angle to rotate the image. Warning, graphics might only support 90 degree steps here
+ * @param w width to rescale to, or IMAGE_W_H_UNSET for original width
+ * @param h height to rescale to, or IMAGE_W_H_UNSET for original height
+ * @param rotate angle to rotate the image, in 90 degree steps (not supported by all plugins).
* @returns <>
* @author Martin Schaller (04/2008)
*/
@@ -818,7 +820,7 @@ struct graphics_image * graphics_image_new_scaled_rotated(struct graphics *gra,
char *pathi=paths[i];
int len=strlen(pathi);
int i,k;
- int newwidth=-1, newheight=-1;
+ int newwidth=IMAGE_W_H_UNSET, newheight=IMAGE_W_H_UNSET;
ext=g_utf8_strrchr(pathi,-1,'.');
i=pathi-ext+len;
@@ -855,8 +857,8 @@ struct graphics_image * graphics_image_new_scaled_rotated(struct graphics *gra,
}
if(k==1 || s<=pathi || *s!='_') {
- newwidth=-1;
- newheight=-1;
+ newwidth=IMAGE_W_H_UNSET;
+ newheight=IMAGE_W_H_UNSET;
if(ext)
s=ext;
else
@@ -865,15 +867,12 @@ struct graphics_image * graphics_image_new_scaled_rotated(struct graphics *gra,
}
/* If exact h and w values were given as function parameters, they take precedence over values guessed from the image name */
- if(w!=-1)
+ if(w!=IMAGE_W_H_UNSET)
newwidth=w;
- if(h!=-1)
+ if(h!=IMAGE_W_H_UNSET)
newheight=h;
name=g_strndup(pathi,s-pathi);
-#if 0
- if (!strstr(name,"test.zip"))
-#endif
image_new_helper(gra, this_, pathi, name, newwidth, newheight, rotate, 0);
if (!this_->priv && strstr(pathi, ".zip/"))
image_new_helper(gra, this_, pathi, name, newwidth, newheight, rotate, 1);
@@ -902,7 +901,7 @@ struct graphics_image * graphics_image_new_scaled_rotated(struct graphics *gra,
*/
struct graphics_image * graphics_image_new(struct graphics *gra, char *path)
{
- return graphics_image_new_scaled_rotated(gra, path, -1, -1, 0);
+ return graphics_image_new_scaled_rotated(gra, path, IMAGE_W_H_UNSET, IMAGE_W_H_UNSET, 0);
}
/**
@@ -1071,59 +1070,94 @@ graphics_background_gc(struct graphics *this_, struct graphics_gc *gc)
this_->meth.background_gc(this_->priv, gc ? gc->priv : NULL);
}
-#include "attr.h"
-#include "popup.h"
-#include <stdio.h>
-
-#if 0
-//##############################################################################################################
-//# Description:
-//# Comment:
-//# Authors: Martin Schaller (04/2008)
-//##############################################################################################################
-static void popup_view_html(struct popup_item *item, char *file)
-{
- char command[1024];
- sprintf(command,"firefox %s", file);
- system(command);
+/**
+ * @brief Shows the native on-screen keyboard or other input method
+ *
+ * This method is a wrapper around the respective method of the graphics plugin.
+ *
+ * The caller should populate the {@code kbd} argument with appropriate {@code mode} and {@code lang}
+ * members so the graphics plugin can determine the best matching layout.
+ *
+ * If an input method is shown, the graphics plugin should try to select the configuration which best
+ * matches the specified {@code mode}. For example, if {@code mode} specifies a numeric layout, the
+ * graphics plugin should select a numeric keyboard layout (if available), or the equivalent for another
+ * input method (such as setting stroke recognition to identify strokes as numbers). Likewise, when an
+ * alphanumeric-uppercase mode is requested, it should switch to uppercase input.
+ *
+ * Implementations should, however, consider that Navit's internal keyboard allows the user to switch
+ * modes at will (the only exception being degree mode) and thus must not "lock" the user into a limited
+ * layout with no means to switch to a general-purpose one. For example, house number entry in an
+ * address search dialog may default to numeric mode, but since some house numbers may contain
+ * non-numeric characters, a pure numeric keyboard is suitable only if the user has the option to switch
+ * to an alphanumeric layout.
+ *
+ * When multiple alphanumeric layouts are available, the graphics plugin should use the {@code lang}
+ * argument to determine the best layout.
+ *
+ * When selecting an input method, preference should always be given to the default or last selected
+ * input method and configuration if it matches the requested {@code mode} and {@code lang}.
+ *
+ * If the native input method is going to obstruct parts of Navit's UI, the graphics plugin should set
+ * {@code kbd->w} and {@code kbd->h} to the height and width to the appropriate value in pixels. A value
+ * of -1 indicates that the input method fills the entire available width or height of the space
+ * available to Navit. On windowed platforms, where the on-screen input method and Navit's window may be
+ * moved relative to each other as needed and can be displayed alongside each other, the graphics plugin
+ * should report 0 for both dimensions.
+ *
+ * @param this_ The graphics instance
+ * @param kbd The keyboard instance
+ *
+ * @return 1 if the native keyboard is going to be displayed, 0 if not, -1 if the method is not
+ * supported by the plugin
+ */
+int graphics_show_native_keyboard (struct graphics *this_, struct graphics_keyboard *kbd) {
+ int ret;
+ if (!this_->meth.show_native_keyboard)
+ ret = -1;
+ else
+ ret = this_->meth.show_native_keyboard(kbd);
+ dbg(lvl_debug, "return %d\n", ret);
+ return ret;
}
-struct transformatin *tg;
-enum projection pg;
-//##############################################################################################################
-//# Description:
-//# Comment:
-//# Authors: Martin Schaller (04/2008)
-//##############################################################################################################
-static void graphics_popup(struct display_list *list, struct popup_item **popup)
-{
- struct item *item;
- struct attr attr;
- struct map_rect *mr;
- struct coord c;
- struct popup_item *curr_item,*last=NULL;
- item=list->data;
- mr=map_rect_new(item->map, NULL, NULL, 0);
- printf("id hi=0x%x lo=0x%x\n", item->id_hi, item->id_lo);
- item=map_rect_get_item_byid(mr, item->id_hi, item->id_lo);
- if (item) {
- if (item_attr_get(item, attr_name, &attr)) {
- curr_item=popup_item_new_text(popup,attr.u.str,1);
- if (item_attr_get(item, attr_info_html, &attr)) {
- popup_item_new_func(&last,"HTML Info",1, popup_view_html, g_strdup(attr.u.str));
- }
- if (item_attr_get(item, attr_price_html, &attr)) {
- popup_item_new_func(&last,"HTML Preis",2, popup_view_html, g_strdup(attr.u.str));
- }
- curr_item->submenu=last;
- }
- }
- map_rect_destroy(mr);
+/**
+ * @brief Hides the native on-screen keyboard or other input method
+ *
+ * This method is a wrapper around the respective method of the graphics plugin.
+ *
+ * A call to this function indicates that Navit no longer needs the input method and is about to reclaim
+ * any screen real estate it may have previously reserved for the input method.
+ *
+ * On platforms that don't support overlapping windows this means that the on-screen input method should
+ * be hidden, as it may otherwise obstruct parts of Navit's UI.
+ *
+ * On windowed platforms, where on-screen input methods can be displayed alongside Navit or moved around
+ * as needed, the graphics driver should instead notify the on-screen method that it is no longer
+ * expecting user input, allowing the input method to take the appropriate action.
+ *
+ * The graphics plugin must free any data it has stored in {@code kbd->gra_priv} and reset the pointer
+ * to {@code NULL} to indicate it has done so.
+ *
+ * The caller may free {@code kbd} after this function returns.
+ *
+ * @param this The graphics instance
+ * @param kbd The keyboard instance
+ *
+ * @return True if the call was successfully passed to the plugin, false if the method is not supported
+ * by the plugin
+ */
+int graphics_hide_native_keyboard (struct graphics *this_, struct graphics_keyboard *kbd) {
+ if (!this_->meth.hide_native_keyboard)
+ return 0;
+ this_->meth.hide_native_keyboard(kbd);
+ return 1;
}
-#endif
+#include "attr.h"
+#include "popup.h"
+#include <stdio.h>
/**
* FIXME
@@ -1252,9 +1286,6 @@ static void label_line(struct graphics *gra, struct graphics_gc *fg, struct grap
y+=dx*thm/l/64;
p_t.x=x;
p_t.y=y;
-#if 0
- dbg(lvl_debug,"display_text: '%s', %d, %d, %d, %d %d\n", label, x, y, dx*0x10000/l, dy*0x10000/l, l);
-#endif
if (x < gra->r.rl.x && x + tl > gra->r.lu.x && y + tl > gra->r.lu.y && y - tl < gra->r.rl.y)
gra->meth.draw_text(gra->priv, fg->priv, bg?bg->priv:NULL, font->priv, label, &p_t, dx*0x10000/l, dy*0x10000/l);
}
@@ -1310,12 +1341,6 @@ intersection(struct point * a1, int adx, int ady, struct point * b1, int bdx, in
a = -a;
b = -b;
}
-#if 0
- if (a < 0 || b < 0)
- return 0;
- if (a > n || b > n)
- return 0;
-#endif
if (n == 0)
return 0;
res->x = a1->x + a * adx / n;
@@ -1397,10 +1422,6 @@ static void
draw_circle(struct point *pnt, int diameter, int scale, int start, int len, struct point *res, int *pos, int dir)
{
struct circle *c;
-
-#if 0
- dbg(lvl_debug,"diameter=%d start=%d len=%d pos=%d dir=%d\n", diameter, start, len, *pos, dir);
-#endif
int count=64;
int end=start+len;
int i,step;
@@ -1521,32 +1542,6 @@ int_sqrt(unsigned int n)
return p;
}
-#if 0
-static void
-debug_line(struct graphics *gra, struct graphics_gc *gc, struct point *pnt, int dx, int dy)
-{
- struct point p[2];
- p[0]=p[1]=*pnt;
- p[1].x+=dx;
- p[1].y+=dy;
- gra->meth.draw_lines(gra->priv, gc->priv, p, 2);
-}
-
-static void
-debug_point(struct graphics *gra, struct graphics_gc *gc, struct point *pnt, int s)
-{
- struct point p[4];
- p[0]=p[1]=p[2]=*pnt;
- p[0].x-=s;
- p[0].y+=s;
- p[1].x+=s;
- p[1].y+=s;
- p[2].y-=s;
- p[3]=p[0];
- gra->meth.draw_lines(gra->priv, gc->priv, p, 4);
-}
-#endif
-
struct draw_polyline_shape {
int wi;
int step;
@@ -1723,6 +1718,7 @@ graphics_draw_polyline_as_polygon(struct graphics_priv *gra_priv, struct graphic
dbg(lvl_debug,"%d,%d width %d\n",pnt[i].x,pnt[i].y,width[i]);
#endif
ctx.shape.l=0;
+ ctx.shape.wi=0;
ctx.res=g_alloca(sizeof(struct point)*maxpoints);
i=0;
draw_init_ctx(&ctx, maxpoints);
@@ -2104,7 +2100,6 @@ displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc
struct element *e=dc->e;
struct graphics_image *img=dc->img;
struct point p;
- struct coord *c;
char *path;
while (di) {
@@ -2121,7 +2116,6 @@ displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc
count=limit_count(di->c, count);
if (dc->type == type_poly_water_tiled)
mindist=0;
- c=di->c;
#if 0
if (dc->e->type == element_polygon) {
int max=1000;
@@ -2135,9 +2129,9 @@ displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc
}
#endif
if (dc->e->type == element_polyline)
- count=transform(dc->trans, dc->pro, c, pa, count, mindist, e->u.polyline.width, width);
+ count=transform(dc->trans, dc->pro, di->c, pa, count, mindist, e->u.polyline.width, width);
else
- count=transform(dc->trans, dc->pro, c, pa, count, mindist, 0, NULL);
+ count=transform(dc->trans, dc->pro, di->c, pa, count, mindist, 0, NULL);
switch (e->type) {
case element_polygon:
graphics_draw_polygon_clipped(gra, gc, pa, count);
@@ -2232,7 +2226,7 @@ displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc
case element_image:
dbg(lvl_debug,"image: '%s'\n", di->label);
if (gra->meth.draw_image_warp) {
- img=graphics_image_new_scaled_rotated(gra, di->label, -1, -1, 0);
+ img=graphics_image_new_scaled_rotated(gra, di->label, IMAGE_W_H_UNSET, IMAGE_W_H_UNSET, 0);
if (img)
gra->meth.draw_image_warp(gra->priv, gra->gc[0]->priv, pa, count, img->priv);
} else
@@ -3051,3 +3045,4 @@ graphics_process_selection(struct graphics *gra, struct displaylist *dl)
curr=g_list_next(curr);
}
}
+
diff --git a/navit/graphics.h b/navit/graphics.h
index 810355f2d..2ffbd9ab0 100644
--- a/navit/graphics.h
+++ b/navit/graphics.h
@@ -17,6 +17,11 @@
* Boston, MA 02110-1301, USA.
*/
+/** @file
+ *
+ * @brief Exported functions / structures for the graphics subsystem.
+ */
+
#ifndef NAVIT_GRAPHICS_H
#define NAVIT_GRAPHICS_H
@@ -59,6 +64,56 @@ struct graphics_image_buffer {
int len;
};
+struct graphics_keyboard_priv;
+
+/**
+ * Describes an instance of the native on-screen keyboard or other input method.
+ */
+struct graphics_keyboard {
+ int w; /**< The width of the area obscured by the keyboard (-1 for full width) */
+ int h; /**< The height of the area obscured by the keyboard (-1 for full height) */
+ /* TODO mode is currently a copy of the respective value in the internal GUI and uses the same values.
+ * This may need to be changed to something with globally available enum, possibly with revised values.
+ * The Android implementation (the first to support a native on-screen keyboard) does not use this field
+ * due to limitations of the platform. */
+ int mode; /**< Mode flags for the keyboard */
+ char *lang; /**< The preferred language for text input, may be {@code NULL}. */
+ void *gui_priv; /**< Private data determined by the GUI. The GUI may store
+ * a pointer to a data structure of its choice here. It is
+ * the responsibility of the GUI to free the data structure
+ * when it is no longer needed. The graphics plugin should
+ * not access this member. */
+ struct graphics_keyboard_priv *gra_priv; /**< Private data determined by the graphics plugin. The
+ * graphics plugin is responsible for its management. If it
+ * uses this member, it must free the associated data in
+ * its {@code hide_native_keyboard} method. */
+};
+
+/** Magic value for unset/unspecified width/height. */
+#define IMAGE_W_H_UNSET (-1)
+
+/** @brief The functions to be implemented by graphics plugins.
+ *
+ * This struct lists the functions that Navit graphics plugins must implement.
+ * The plugin must supply its list of function implementations from its plugin_init() function.
+ * @see graphics_gtk_drawing_area#plugin_init()
+ * @see graphics_android#plugin_init()
+ */
+
+/**
+ * Describes areas at each edge of the application window which may be obstructed by the system UI.
+ *
+ * This allows the map to use all available space, including areas which may be obscured by system UI
+ * elements, while constraining other elements such as OSDs or UI controls to an area that is guaranteed
+ * to be visible as long as Navit is in the foreground.
+ */
+struct padding {
+ int left;
+ int top;
+ int right;
+ int bottom;
+};
+
struct graphics_methods {
void (*graphics_destroy)(struct graphics_priv *gr);
void (*draw_mode)(struct graphics_priv *gr, enum draw_mode_num mode);
@@ -74,6 +129,19 @@ struct graphics_methods {
struct graphics_gc_priv *(*gc_new)(struct graphics_priv *gr, struct graphics_gc_methods *meth);
void (*background_gc)(struct graphics_priv *gr, struct graphics_gc_priv *gc);
struct graphics_priv *(*overlay_new)(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int wraparound);
+ /** @brief Load an image from a file.
+ *
+ * @param gr graphics object
+ * @param meth output parameter for graphics methods object
+ * @param path file name/path of image to load
+ * @param w In: width to scale image to, or IMAGE_W_H_UNSET for original width.
+ * Out: Actual width of returned image.
+ * @param h heigth; see w
+ * @param hot output parameter for image hotspot
+ * @param rotate angle to rotate the image, in 90 degree steps (not supported by all plugins).
+ * @return pointer to allocated image, to be freed by image_free()
+ * @see image_free()
+ */
struct graphics_image_priv *(*image_new)(struct graphics_priv *gr, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation);
void *(*get_data)(struct graphics_priv *gr, const char *type);
void (*image_free)(struct graphics_priv *gr, struct graphics_image_priv *priv);
@@ -81,6 +149,8 @@ struct graphics_methods {
void (*overlay_disable)(struct graphics_priv *gr, int disable);
void (*overlay_resize)(struct graphics_priv *gr, struct point *p, int w, int h, int wraparound);
int (*set_attr)(struct graphics_priv *gr, struct attr *attr);
+ int (*show_native_keyboard)(struct graphics_keyboard *kbd);
+ void (*hide_native_keyboard)(struct graphics_keyboard *kbd);
};
@@ -210,6 +280,9 @@ int graphics_displayitem_within_dist(struct displaylist *displaylist, struct dis
void graphics_add_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
void graphics_remove_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
void graphics_clear_selection(struct graphics *gra, struct displaylist *dl);
+int graphics_show_native_keyboard (struct graphics *this_, struct graphics_keyboard *kbd);
+int graphics_hide_native_keyboard (struct graphics *this_, struct graphics_keyboard *kbd);
+
/* end of prototypes */
#ifdef __cplusplus
}
diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c
index a543252ce..0d6aa30d2 100644
--- a/navit/graphics/android/graphics_android.c
+++ b/navit/graphics/android/graphics_android.c
@@ -25,6 +25,8 @@
#include "point.h"
#include "graphics.h"
#include "color.h"
+#include "item.h"
+#include "xmlconfig.h"
#include "plugin.h"
#include "event.h"
#include "debug.h"
@@ -32,14 +34,13 @@
#include "android.h"
#include "command.h"
-int dummy;
-
struct graphics_priv {
jclass NavitGraphicsClass;
jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polygon, NavitGraphics_draw_rectangle,
NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image,
NavitGraphics_draw_image_warp, NavitGraphics_draw_mode, NavitGraphics_draw_drag,
- NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera;
+ NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera,
+ NavitGraphics_setBackgroundColor;
jclass PaintClass;
jmethodID Paint_init,Paint_setStrokeWidth,Paint_setARGB;
@@ -64,6 +65,8 @@ struct graphics_priv {
struct callback_list *cbl;
struct window win;
+ struct padding *padding;
+ jint bgcolor;
};
struct graphics_font_priv {
@@ -246,9 +249,9 @@ image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *
if (localBitmap) {
ret->width=(*jnienv)->CallIntMethod(jnienv, localBitmap, gra->Bitmap_getWidth);
ret->height=(*jnienv)->CallIntMethod(jnienv, localBitmap, gra->Bitmap_getHeight);
- if((*w!=-1 && *w!=ret->width) || (*h!=-1 && *w!=ret->height)) {
+ if((*w!=IMAGE_W_H_UNSET && *w!=ret->width) || (*h!=IMAGE_W_H_UNSET && *w!=ret->height)) {
jclass scaledBitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->BitmapClass,
- gra->Bitmap_createScaledBitmap, localBitmap, (*w==-1)?ret->width:*w, (*h==-1)?ret->height:*h, JNI_TRUE);
+ gra->Bitmap_createScaledBitmap, localBitmap, (*w==IMAGE_W_H_UNSET)?ret->width:*w, (*h==IMAGE_W_H_UNSET)?ret->height:*h, JNI_TRUE);
if(!scaledBitmap) {
dbg(lvl_error,"Bitmap scaling to %dx%d failed for %s",*w,*h,path);
} else {
@@ -419,9 +422,11 @@ static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graph
static void *
get_data(struct graphics_priv *this, const char *type)
{
- if (strcmp(type,"window"))
- return NULL;
- return &this->win;
+ if (!strcmp(type,"padding"))
+ return this->padding;
+ if (!strcmp(type,"window"))
+ return &this->win;
+ return NULL;
}
static void image_free(struct graphics_priv *gr, struct graphics_image_priv *priv)
@@ -463,11 +468,29 @@ set_attr(struct graphics_priv *gra, struct attr *attr)
case attr_use_camera:
(*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_SetCamera, attr->u.num);
return 1;
+ case attr_background_color:
+ gra->bgcolor = (attr->u.color->a / 0x101) << 24
+ | (attr->u.color->r / 0x101) << 16
+ | (attr->u.color->g / 0x101) << 8
+ | (attr->u.color->b / 0x101);
+ dbg(lvl_debug, "set attr_background_color %04x %04x %04x %04x (%08x)\n",
+ attr->u.color->r, attr->u.color->g, attr->u.color->b, attr->u.color->a, gra->bgcolor);
+ if (gra->NavitGraphics_setBackgroundColor != NULL)
+ (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_setBackgroundColor, gra->bgcolor);
+ else
+ dbg(lvl_error, "NavitGraphics.setBackgroundColor not found, cannot set background color\n");
+ return 1;
default:
return 0;
}
}
+
+int show_native_keyboard (struct graphics_keyboard *kbd);
+
+void hide_native_keyboard (struct graphics_keyboard *kbd);
+
+
static struct graphics_methods graphics_methods = {
graphics_destroy,
draw_mode,
@@ -490,16 +513,29 @@ static struct graphics_methods graphics_methods = {
overlay_disable,
overlay_resize,
set_attr,
+ show_native_keyboard,
+ hide_native_keyboard,
};
static void
resize_callback(struct graphics_priv *gra, int w, int h)
{
dbg(lvl_debug,"w=%d h=%d ok\n",w,h);
+ dbg(lvl_debug,"gra=%p, %d callbacks in list\n", gra, g_list_length(gra->cbl));
callback_list_call_attr_2(gra->cbl, attr_resize, (void *)w, (void *)h);
}
static void
+padding_callback(struct graphics_priv *gra, int left, int top, int right, int bottom)
+{
+ dbg(lvl_debug, "win.padding left=%d top=%d right=%d bottom=%d ok\n", left, top, right, bottom);
+ gra->padding->left = left;
+ gra->padding->top = top;
+ gra->padding->right = right;
+ gra->padding->bottom = bottom;
+}
+
+static void
motion_callback(struct graphics_priv *gra, int x, int y)
{
struct point p;
@@ -549,6 +585,19 @@ set_activity(jobject graphics)
return 1;
}
+/**
+ * @brief Initializes a new Android graphics instance.
+ *
+ * This initializes a new Android graphics instance, which can either be the main view or an overlay.
+ *
+ * @param ret The new graphics instance
+ * @param parent The graphics instance that contains the new instance ({@code NULL} for the main view)
+ * @param p The position of the overlay in its parent ({@code NULL} for the main view)
+ * @param w The width of the overlay (0 for the main view)
+ * @param h The height of the overlay (0 for the main view)
+ * @param wraparound (0 for the main view)
+ * @param use_camera Whether to use the camera (0 for overlays)
+ */
static int
graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, struct point *pnt, int w, int h, int wraparound, int use_camera)
{
@@ -556,6 +605,8 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s
jmethodID cid, Context_getPackageName;
dbg(lvl_debug,"at 2 jnienv=%p\n",jnienv);
+ if (parent)
+ ret->padding = parent->padding;
if (!find_class_global("android/graphics/Paint", &ret->PaintClass))
return 0;
if (!find_method(ret->PaintClass, "<init>", "(I)V", &ret->Paint_init))
@@ -631,6 +682,14 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s
cb=callback_new_1(callback_cast(resize_callback), ret);
(*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb);
+ cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setPaddingChangedCallback", "(I)V");
+ if (cid == NULL) {
+ dbg(lvl_error,"no SetPaddingCallback method found\n");
+ return 0; /* exception thrown */
+ }
+ cb=callback_new_1(callback_cast(padding_callback), ret);
+ (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb);
+
cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setButtonCallback", "(I)V");
if (cid == NULL) {
dbg(lvl_error,"no SetButtonCallback method found\n");
@@ -686,7 +745,7 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s
}
static jclass NavitClass;
-static jmethodID Navit_disableSuspend, Navit_exit, Navit_fullscreen, Navit_runOptionsItem;
+static jmethodID Navit_disableSuspend, Navit_exit, Navit_fullscreen, Navit_runOptionsItem, Navit_showMenu, Navit_showNativeKeyboard, Navit_hideNativeKeyboard;
static int
graphics_android_fullscreen(struct window *win, int on)
@@ -702,6 +761,17 @@ graphics_android_disable_suspend(struct window *win)
(*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_disableSuspend);
}
+/**
+ * @brief Runs an item from the Android menu.
+ *
+ * This is a callback function which implements multiple API functions.
+ *
+ * @param this The {@code graohics_prov} structure
+ * @param function The API function which was called
+ * @param in Parameters to pass to the API function
+ * @param out Points to a buffer which will receive a pointer to the output of the command
+ * @param valid
+ */
static void
graphics_android_cmd_runMenuItem(struct graphics_priv *this, char *function, struct attr **in, struct attr ***out, int *valid)
{
@@ -717,18 +787,58 @@ graphics_android_cmd_runMenuItem(struct graphics_priv *this, char *function, str
(*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_runOptionsItem, ncmd);
}
+/**
+ * @brief Shows the Android menu.
+ *
+ * This is the callback function associated with the {@code menu()} API function.
+ *
+ * @param this The {@code graohics_prov} structure
+ * @param function The API function which was called
+ * @param in Parameters to pass to the API function
+ * @param out Points to a buffer which will receive a pointer to the output of the command
+ * @param valid
+ */
+static void
+graphics_android_cmd_menu(struct graphics_priv *this, char *function, struct attr **in, struct attr ***out, int *valid)
+{
+ dbg(lvl_debug, "enter\n");
+ (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_showMenu);
+}
+
+/**
+ * The command table. Each entry consists of an API function name and the callback function which implements
+ * this command.
+ */
static struct command_table commands[] = {
{"map_download_dialog",command_cast(graphics_android_cmd_runMenuItem)},
{"set_map_location",command_cast(graphics_android_cmd_runMenuItem)},
{"backup_restore_dialog",command_cast(graphics_android_cmd_runMenuItem)},
+ {"menu", command_cast(graphics_android_cmd_menu)},
};
+/**
+ * @brief Creates a new Android graphics instance.
+ *
+ * This method is called when the graphics plugin is initialized. It creates the main view, i.e. the map view.
+ * Unless overlay mode is enabled, it also holds any OSD items.
+ *
+ * @param nav The navit instance.
+ * @param meth The methods for the new graphics instance
+ * @param attrs The attributes for the new graphics instance
+ * @param cbl The callback list for the new graphics instance
+ *
+ * @return The new graphics instance
+ */
static struct graphics_priv *
graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl)
{
struct graphics_priv *ret;
struct attr *attr;
int use_camera=0;
+ jmethodID cid;
+ jint android_bgcolor;
+
+ dbg(lvl_debug, "enter\n");
if (!event_request_system("android","graphics_android"))
return NULL;
ret=g_new0(struct graphics_priv, 1);
@@ -738,6 +848,23 @@ graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct at
ret->win.priv=ret;
ret->win.fullscreen=graphics_android_fullscreen;
ret->win.disable_suspend=graphics_android_disable_suspend;
+ ret->padding = g_new0(struct padding, 1);
+ ret->padding->left = 0;
+ ret->padding->top = 0;
+ ret->padding->right = 0;
+ ret->padding->bottom = 0;
+ /* attr_background_color is the background color for system bars (API 17+ only) */
+ if ((attr=attr_search(attrs, NULL, attr_background_color))) {
+ ret->bgcolor = (attr->u.color->a / 0x101) << 24
+ | (attr->u.color->r / 0x101) << 16
+ | (attr->u.color->g / 0x101) << 8
+ | (attr->u.color->b / 0x101);
+ dbg(lvl_debug, "attr_background_color %04x %04x %04x %04x (%08x)\n",
+ attr->u.color->r, attr->u.color->g, attr->u.color->b, attr->u.color->a, ret->bgcolor);
+ } else {
+ /* default is the same as for OSD */
+ ret->bgcolor = 0x60000000;
+ }
if ((attr=attr_search(attrs, NULL, attr_use_camera))) {
use_camera=attr->u.num;
}
@@ -746,6 +873,26 @@ graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct at
}
image_cache_hash = g_hash_table_new(g_str_hash, g_str_equal);
if (graphics_android_init(ret, NULL, NULL, 0, 0, 0, use_camera)) {
+ cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "hasMenuButton", "()Z");
+ if (cid != NULL) {
+ attr = g_new0(struct attr, 1);
+ attr->type = attr_has_menu_button;
+ attr->u.num = (*jnienv)->CallBooleanMethod(jnienv, ret->NavitGraphics, cid);
+
+ /*
+ * Although the attribute refers to information obtained by the graphics plugin, we are storing it
+ * with the navit object: the object is easier to access from anywhere in the program, and ultimately
+ * it refers to a configuration value affecting all of Navit, thus users are likely to look for it in
+ * the navit object (as the fact that graphics also handles input devices is not immedately obvious).
+ */
+ navit_object_set_attr((struct navit_object *) nav, attr);
+ dbg(lvl_debug, "attr_has_menu_button=%d\n", attr->u.num);
+ g_free(attr);
+ }
+ ret->NavitGraphics_setBackgroundColor = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setBackgroundColor", "(I)V");
+ if (ret->NavitGraphics_setBackgroundColor != NULL) {
+ (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, ret->NavitGraphics_setBackgroundColor, ret->bgcolor);
+ }
dbg(lvl_debug,"returning %p\n",ret);
return ret;
} else {
@@ -754,6 +901,21 @@ graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct at
}
}
+/**
+ * @brief Creates a new overlay
+ *
+ * This method creates a graphics instance for a new overlay. If overlay mode is enabled, a separate overlay is
+ * created for each OSD item.
+ *
+ * @param gr The parent graphics instance, i.e. the one which will contain the overlay.
+ * @param meth The methods for the new graphics instance
+ * @param p The position of the overlay in its parent
+ * @param w The width of the overlay
+ * @param h The height of the overlay
+ * @param wraparound
+ *
+ * @return The graphics instance for the new overlay
+ */
static struct graphics_priv *
overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int wraparound)
{
@@ -971,6 +1133,11 @@ event_android_new(struct event_methods *meth)
Navit_runOptionsItem = (*jnienv)->GetMethodID(jnienv, NavitClass, "runOptionsItem", "(I)V");
if (Navit_runOptionsItem == NULL)
return NULL;
+ Navit_showMenu = (*jnienv)->GetMethodID(jnienv, NavitClass, "showMenu", "()V");
+ if (Navit_showMenu == NULL)
+ return NULL;
+ Navit_showNativeKeyboard = (*jnienv)->GetMethodID(jnienv, NavitClass, "showNativeKeyboard", "()I");
+ Navit_hideNativeKeyboard = (*jnienv)->GetMethodID(jnienv, NavitClass, "hideNativeKeyboard", "()V");
dbg(lvl_debug,"ok\n");
*meth=event_android_methods;
@@ -978,10 +1145,59 @@ event_android_new(struct event_methods *meth)
}
+/**
+ * @brief Displays the native input method.
+ *
+ * This method decides whether a native on-screen input method, such as a virtual keyboard, needs to be
+ * displayed. A typical case in which there is no need for an on-screen input method is if a hardware
+ * keyboard is present.
+ *
+ * Note that the Android platform lacks reliable means of determining whether an on-screen input method
+ * is going to be displayed or how much screen space it is going to occupy. Therefore this method tries
+ * to guess these values. They have been tested and found to work correctly with the AOSP keyboard, and
+ * are thus expected to be compatible with most on-screen keyboards found on the market, but results may
+ * be unexpected with other input methods.
+ *
+ * @param kbd A {@code struct graphics_keyboard} which describes the requirements for the input method
+ * and will be populated with the data of the input method before the function returns.
+ *
+ * @return True if the input method is going to be displayed, false if not.
+ */
+int show_native_keyboard (struct graphics_keyboard *kbd) {
+ kbd->w = -1;
+ if (Navit_showNativeKeyboard == NULL) {
+ dbg(lvl_error, "method Navit.showNativeKeyboard() not found, cannot display keyboard\n");
+ return 0;
+ }
+ kbd->h = (*jnienv)->CallIntMethod(jnienv, android_activity, Navit_showNativeKeyboard);
+ dbg(lvl_error, "keyboard size is %d x %d px\n", kbd->w, kbd->h);
+ dbg(lvl_error, "return\n");
+ /* zero height means we're not showing a keyboard, therefore normalize height to boolean */
+ return !!(kbd->h);
+}
+
+
+/**
+ * @brief Hides the native input method and frees associated private data.
+ *
+ * @param kbd The {@code struct graphics_keyboard} which was passed to the earlier call to
+ * {@link show_native_keyboard(struct graphics_keyboard *)}. The {@code gra_priv} member of the struct
+ * will be freed by this function.
+ */
+void hide_native_keyboard (struct graphics_keyboard *kbd) {
+ if (Navit_hideNativeKeyboard == NULL) {
+ dbg(lvl_error, "method Navit.hideNativeKeyboard() not found, cannot dismiss keyboard\n");
+ return;
+ }
+ (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_hideNativeKeyboard);
+ g_free(kbd->gra_priv);
+}
+
+
void
plugin_init(void)
{
dbg(lvl_debug,"enter\n");
- plugin_register_graphics_type("android", graphics_android_new);
- plugin_register_event_type("android", event_android_new);
+ plugin_register_category_graphics("android", graphics_android_new);
+ plugin_register_category_event("android", event_android_new);
}
diff --git a/navit/graphics/gd/graphics_gd.c b/navit/graphics/gd/graphics_gd.c
index 47868d622..3ef6c520b 100644
--- a/navit/graphics/gd/graphics_gd.c
+++ b/navit/graphics/gd/graphics_gd.c
@@ -813,6 +813,8 @@ static struct graphics_methods graphics_methods = {
overlay_disable,
overlay_resize,
set_attr,
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
static struct graphics_priv *
@@ -824,7 +826,7 @@ overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct poin
dbg(lvl_debug,"enter\n");
ret=g_new0(struct graphics_priv, 1);
*meth=graphics_methods;
- font_freetype_new=plugin_get_font_type("freetype");
+ font_freetype_new=plugin_get_category_font("freetype");
if (!font_freetype_new)
return NULL;
font_freetype_new(&ret->freetype_methods);
@@ -853,7 +855,7 @@ graphics_gd_new(struct navit *nav, struct graphics_methods *meth, struct attr **
struct font_priv * (*font_freetype_new)(void *meth);
struct graphics_priv *ret;
event_request_system("glib","graphics_gd_new");
- font_freetype_new=plugin_get_font_type("freetype");
+ font_freetype_new=plugin_get_category_font("freetype");
if (!font_freetype_new)
return NULL;
*meth=graphics_methods;
@@ -879,5 +881,5 @@ graphics_gd_new(struct navit *nav, struct graphics_methods *meth, struct attr **
void
plugin_init(void)
{
- plugin_register_graphics_type("gd", graphics_gd_new);
+ plugin_register_category_graphics("gd", graphics_gd_new);
}
diff --git a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
index 6ec67d1c0..387003c40 100644
--- a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
+++ b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
@@ -205,7 +205,7 @@ image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *n
GdkPixbufLoader *loader=gdk_pixbuf_loader_new();
if (!loader)
return NULL;
- if (*w != -1 || *h != -1)
+ if (*w != IMAGE_W_H_UNSET || *h != IMAGE_W_H_UNSET)
gdk_pixbuf_loader_set_size(loader, *w, *h);
gdk_pixbuf_loader_write(loader, buffer->start, buffer->len, NULL);
gdk_pixbuf_loader_close(loader, NULL);
@@ -213,7 +213,7 @@ image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *n
g_object_ref(pixbuf);
g_object_unref(loader);
} else {
- if (*w == -1 && *h == -1)
+ if (*w == IMAGE_W_H_UNSET && *h == IMAGE_W_H_UNSET)
pixbuf=gdk_pixbuf_new_from_file(name, NULL);
else
pixbuf=gdk_pixbuf_new_from_file_at_size(name, *w, *h, NULL);
@@ -1073,13 +1073,15 @@ static struct graphics_methods graphics_methods = {
overlay_disable,
overlay_resize,
set_attr,
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
static struct graphics_priv *
graphics_gtk_drawing_area_new_helper(struct graphics_methods *meth)
{
struct font_priv * (*font_freetype_new)(void *meth);
- font_freetype_new=plugin_get_font_type("freetype");
+ font_freetype_new=plugin_get_category_font("freetype");
if (!font_freetype_new)
return NULL;
struct graphics_priv *this=g_new0(struct graphics_priv,1);
@@ -1148,5 +1150,5 @@ plugin_init(void)
#ifdef HAVE_API_WIN32
setlocale(LC_NUMERIC, "C"); /* WIN32 gtk resets LC_NUMERIC */
#endif
- plugin_register_graphics_type("gtk_drawing_area", graphics_gtk_drawing_area_new);
+ plugin_register_category_graphics("gtk_drawing_area", graphics_gtk_drawing_area_new);
}
diff --git a/navit/graphics/null/graphics_null.c b/navit/graphics/null/graphics_null.c
index e3d617af2..ecac7d528 100644
--- a/navit/graphics/null/graphics_null.c
+++ b/navit/graphics/null/graphics_null.c
@@ -236,6 +236,8 @@ static struct graphics_methods graphics_methods = {
get_text_bbox,
overlay_disable,
overlay_resize,
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
static struct graphics_priv *
@@ -352,6 +354,6 @@ event_null_new(struct event_methods *meth)
void
plugin_init(void)
{
- plugin_register_graphics_type("null", graphics_null_new);
- plugin_register_event_type("null", event_null_new);
+ plugin_register_category_graphics("null", graphics_null_new);
+ plugin_register_category_event("null", event_null_new);
}
diff --git a/navit/graphics/opengl/graphics_opengl.c b/navit/graphics/opengl/graphics_opengl.c
index b6e0fb41a..98230f0dc 100644
--- a/navit/graphics/opengl/graphics_opengl.c
+++ b/navit/graphics/opengl/graphics_opengl.c
@@ -451,7 +451,7 @@ image_new(struct graphics_priv *gr, struct graphics_image_methods *meth,
width = FreeImage_GetWidth(image);
height = FreeImage_GetHeight(image);
- if ((*w != width || *h != height) && 0 < *w && 0 < *h) {
+ if ((*w != width || *h != height) && *w != IMAGE_W_H_UNSET && *h != IMAGE_W_H_UNSET) {
FIBITMAP *image2;
image2 = FreeImage_Rescale(image, *w, *h, FILTER_BOX);
FreeImage_Unload(image);
@@ -1432,13 +1432,15 @@ static struct graphics_methods graphics_methods = {
NULL,
overlay_disable,
overlay_resize,
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
static struct graphics_priv *
graphics_opengl_new_helper(struct graphics_methods *meth)
{
struct font_priv *(*font_freetype_new) (void *meth);
- font_freetype_new = plugin_get_font_type("freetype");
+ font_freetype_new = plugin_get_category_font("freetype");
if (!font_freetype_new) {
return NULL;
@@ -1815,6 +1817,6 @@ event_opengl_new(struct event_methods *meth)
void
plugin_init(void)
{
- plugin_register_graphics_type("opengl", graphics_opengl_new);
- plugin_register_event_type("opengl", event_opengl_new);
+ plugin_register_category_graphics("opengl", graphics_opengl_new);
+ plugin_register_category_event("opengl", event_opengl_new);
}
diff --git a/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp b/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp
index 714f0753e..65163ea9d 100644
--- a/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp
+++ b/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp
@@ -696,7 +696,8 @@ static struct graphics_methods graphics_methods = {
overlay_disable,
NULL,
set_attr,
-
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
//##############################################################################################################
@@ -853,7 +854,7 @@ static struct graphics_priv * graphics_qt_qpainter_new(struct navit *nav, struct
return NULL;
#endif
#ifdef QT_QPAINTER_USE_FREETYPE
- font_freetype_new=(struct font_priv *(*)(void *))plugin_get_font_type("freetype");
+ font_freetype_new=(struct font_priv *(*)(void *))plugin_get_category_font("freetype");
if (!font_freetype_new) {
dbg(lvl_error,"no freetype\n");
return NULL;
@@ -920,9 +921,9 @@ static struct graphics_priv * graphics_qt_qpainter_new(struct navit *nav, struct
//##############################################################################################################
void plugin_init(void)
{
- plugin_register_graphics_type("qt_qpainter", graphics_qt_qpainter_new);
+ plugin_register_category_graphics("qt_qpainter", graphics_qt_qpainter_new);
#ifdef QT_QPAINTER_USE_EVENT_QT
- plugin_register_event_type("qt", event_qt_new);
+ plugin_register_category_event("qt", event_qt_new);
#endif
}
diff --git a/navit/graphics/sdl/event.c b/navit/graphics/sdl/event.c
index cd4b81802..f96b079b3 100644
--- a/navit/graphics/sdl/event.c
+++ b/navit/graphics/sdl/event.c
@@ -377,5 +377,5 @@ event_sdl_new(struct event_methods* methods) {
/* ---------- SDL Eventhandling ---------- */
void sdl_event_init(void) {
- plugin_register_event_type("sdl", event_sdl_new);
+ plugin_register_category_event("sdl", event_sdl_new);
}
diff --git a/navit/graphics/sdl/event_sdl.c b/navit/graphics/sdl/event_sdl.c
index d640d5edb..28fe4fafb 100644
--- a/navit/graphics/sdl/event_sdl.c
+++ b/navit/graphics/sdl/event_sdl.c
@@ -339,5 +339,5 @@ event_sdl_new(struct event_methods* methods)
void
event_sdl_register(void)
{
- plugin_register_event_type("sdl", event_sdl_new);
+ plugin_register_category_event("sdl", event_sdl_new);
}
diff --git a/navit/graphics/sdl/graphics_sdl.c b/navit/graphics/sdl/graphics_sdl.c
index e5d9f7872..b1a9c17b9 100644
--- a/navit/graphics/sdl/graphics_sdl.c
+++ b/navit/graphics/sdl/graphics_sdl.c
@@ -96,8 +96,6 @@ struct graphics_priv {
/* </main> */
};
-static int dummy;
-
#ifdef USE_WEBOS
# define WEBOS_KEY_SHIFT 0x130
# define WEBOS_KEY_SYM 0x131
@@ -875,7 +873,7 @@ get_data(struct graphics_priv *this, char const *type)
win->disable_suspend=NULL;
return win;
} else {
- return &dummy;
+ return NULL;
}
}
@@ -909,6 +907,8 @@ static struct graphics_methods graphics_methods = {
overlay_disable,
NULL, /* overlay_resize */
NULL, /* set_attr */
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
static struct graphics_priv *
@@ -986,7 +986,7 @@ overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct poin
struct font_priv *(*font_freetype_new) (void *meth);
- font_freetype_new = plugin_get_font_type ("freetype");
+ font_freetype_new = plugin_get_category_font ("freetype");
if (!font_freetype_new)
{
@@ -1407,7 +1407,7 @@ graphics_sdl_new(struct navit *nav, struct graphics_methods *meth, struct attr *
this->cbl = cbl;
/* initialize fonts */
- font_freetype_new = plugin_get_font_type("freetype");
+ font_freetype_new = plugin_get_category_font("freetype");
if (!font_freetype_new) {
g_free(this);
@@ -1852,9 +1852,9 @@ void
plugin_init(void)
{
#ifdef USE_WEBOS
- plugin_register_event_type("sdl", event_sdl_new);
+ plugin_register_category_event("sdl", event_sdl_new);
#endif
- plugin_register_graphics_type("sdl", graphics_sdl_new);
+ plugin_register_category_graphics("sdl", graphics_sdl_new);
}
// vim: sw=4 ts=8
diff --git a/navit/graphics/win32/graphics_win32.c b/navit/graphics/win32/graphics_win32.c
index 124832a38..3d8fa351d 100644
--- a/navit/graphics/win32/graphics_win32.c
+++ b/navit/graphics/win32/graphics_win32.c
@@ -1445,9 +1445,9 @@ static struct graphics_image_priv *image_new(struct graphics_priv *gr, struct gr
/* Hash_key will be freed ater the hash table, so set it to NULL here to disable freing it on this function return */
hash_key=NULL;
if(ret) {
- if (*w==-1)
+ if (*w==IMAGE_W_H_UNSET)
*w=ret->width;
- if (*h==-1)
+ if (*h==IMAGE_W_H_UNSET)
*h=ret->height;
if (*w!=ret->width || *h!=ret->height) {
if(ret->png_pixels && ret->hBitmap)
@@ -1582,6 +1582,8 @@ static struct graphics_methods graphics_methods =
get_text_bbox,
overlay_disable,
overlay_resize,
+ NULL, /* show_native_keyboard */
+ NULL, /* hide_native_keyboard */
};
@@ -1843,6 +1845,6 @@ static struct event_priv *
void
plugin_init(void)
{
- plugin_register_graphics_type("win32", graphics_win32_new);
- plugin_register_event_type("win32", event_win32_new);
+ plugin_register_category_graphics("win32", graphics_win32_new);
+ plugin_register_category_event("win32", event_win32_new);
}
diff --git a/navit/gui.c b/navit/gui.c
index ab16d8a9e..9b2ba4971 100644
--- a/navit/gui.c
+++ b/navit/gui.c
@@ -45,7 +45,7 @@ gui_new(struct attr *parent, struct attr **attrs)
return NULL;
}
- guitype_new=plugin_get_gui_type(type_attr->u.str);
+ guitype_new=plugin_get_category_gui(type_attr->u.str);
if (! guitype_new)
return NULL;
diff --git a/navit/gui/gtk/gui_gtk_window.c b/navit/gui/gtk/gui_gtk_window.c
index 71bd26315..1741a54a0 100644
--- a/navit/gui/gtk/gui_gtk_window.c
+++ b/navit/gui/gtk/gui_gtk_window.c
@@ -808,5 +808,5 @@ plugin_init(void)
#endif
- plugin_register_gui_type("gtk", gui_gtk_new);
+ plugin_register_category_gui("gtk", gui_gtk_new);
}
diff --git a/navit/gui/internal/gui_internal.c b/navit/gui/internal/gui_internal.c
index 3affd52e4..fd450b57c 100644
--- a/navit/gui/internal/gui_internal.c
+++ b/navit/gui/internal/gui_internal.c
@@ -88,6 +88,7 @@
#include "gui_internal_gesture.h"
#include "gui_internal_poi.h"
#include "gui_internal_command.h"
+#include "gui_internal_keyboard.h"
/**
@@ -743,9 +744,7 @@ gui_internal_call_linked_on_finish(struct gui_priv *this, struct widget *wm, voi
struct widget * gui_internal_keyboard(struct gui_priv *this, int mode);
-
-
-
+struct widget * gui_internal_keyboard_show_native(struct gui_priv *this, struct widget *w, int mode, char *lang);
static void
@@ -1674,9 +1673,15 @@ gui_internal_keypress_do(struct gui_priv *this, char *key)
dbg(lvl_info,"wi->state=0x%x\n", wi->state);
}
text=g_strdup_printf("%s%s", wi->text ? wi->text : "", key);
+
+ gui_internal_keyboard_to_lower_case(this);
}
g_free(wi->text);
wi->text=text;
+
+ if(!wi->text || !*wi->text)
+ gui_internal_keyboard_to_upper_case(this);
+
if (wi->func) {
wi->reason=gui_internal_reason_keypress;
wi->func(this, wi, wi->data);
@@ -2668,6 +2673,12 @@ static void gui_internal_resize(void *data, int w, int h)
this->root.h=h;
changed=1;
}
+ /*
+ * If we're drawing behind system bars on Android, watching for actual size changes will not catch
+ * fullscreen toggle events. As a workaround, always assume a size change if padding is supplied.
+ */
+ if (!changed && this->gra && graphics_get_data(this->gra, "padding"))
+ changed = 1;
dbg(lvl_debug,"w=%d h=%d children=%p\n", w, h, this->root.children);
navit_handle_resize(this->nav, w, h);
if (this->root.children) {
@@ -2697,7 +2708,9 @@ gui_internal_keynav_point(struct widget *w, int dx, int dy, struct point *p)
static struct widget*
gui_internal_keynav_find_next_sensitive_child(struct widget *wi) {
GList *l=wi->children;
- if (wi && wi->state & STATE_SENSITIVE)
+ if (wi->state & STATE_OFFSCREEN)
+ return NULL;
+ if (wi->state & STATE_SENSITIVE)
return wi;
while (l) {
struct widget* tmp = gui_internal_keynav_find_next_sensitive_child(l->data);
@@ -2742,6 +2755,9 @@ gui_internal_keynav_find_prev(struct widget *wi, struct widget *current_highligh
// Reached current widget; last widget found is the result.
return RESULT_FOUND;
}
+ // If widget is off-screen, do not recurse into it.
+ if (wi->state & STATE_OFFSCREEN)
+ return NO_RESULT_YET;
if (wi->state & STATE_SENSITIVE)
*result= wi;
GList *l=wi->children;
@@ -3102,12 +3118,14 @@ static struct gui_internal_widget_methods gui_internal_widget_methods = {
gui_internal_set_default_background,
};
-
-/*
- * @brief Displays Route information
+/**
+ * @brief finds the intersection point of 2 lines
+ *
+ * @param coord a1, a2, b1, b2 : coords of the start and
+ * end of the first and the second line
+ * @param coord res, will become the coords of the intersection if found
+ * @return : TRUE if intersection found, otherwise FALSE
*/
-/* FIXME where is the implementation? */
-
int
line_intersection(struct coord* a1, struct coord *a2, struct coord * b1, struct coord *b2, struct coord *res)
{
@@ -3125,18 +3143,19 @@ line_intersection(struct coord* a1, struct coord *a2, struct coord * b1, struct
b = -b;
}
if (a < 0 || b < 0)
- return 0;
+ return FALSE;
if (a > n || b > n)
- return 0;
+ return FALSE;
if (n == 0) {
dbg(lvl_info,"a=%d b=%d n=%d\n", a, b, n);
dbg(lvl_info,"a1=0x%x,0x%x ad %d,%d\n", a1->x, a1->y, adx, ady);
dbg(lvl_info,"b1=0x%x,0x%x bd %d,%d\n", b1->x, b1->y, bdx, bdy);
- dbg_assert(n != 0);
+ dbg(lvl_info,"No intersection found, lines assumed parallel ?\n");
+ return FALSE;
}
res->x = a1->x + a * adx / n;
res->y = a1->y + a * ady / n;
- return 1;
+ return TRUE;
}
struct heightline *
@@ -3166,18 +3185,6 @@ item_get_heightline(struct item *item)
return ret;
}
-
-/*
- * @brief Displays Route Height Profile
- *
- * @li The name of the active vehicle
- * @param wm The button that was pressed.
- * @param v Unused
- */
-/* FIXME where is the implementation? */
-
-
-
/**
* @brief Called when the route is updated.
*/
@@ -3445,5 +3452,5 @@ static struct gui_priv * gui_internal_new(struct navit *nav, struct gui_methods
//##############################################################################################################
void plugin_init(void)
{
- plugin_register_gui_type("internal", gui_internal_new);
+ plugin_register_category_gui("internal", gui_internal_new);
}
diff --git a/navit/gui/internal/gui_internal.h b/navit/gui/internal/gui_internal.h
index cbe1e20df..ea5ab79ae 100644
--- a/navit/gui/internal/gui_internal.h
+++ b/navit/gui/internal/gui_internal.h
@@ -1,15 +1,14 @@
-struct widget; // defined in gui_internal.c
+struct widget;
struct graphics_image;
struct gui_priv;
-#define STATE_VISIBLE 1
-#define STATE_SELECTED 2
#define STATE_HIGHLIGHTED 4
#define STATE_SENSITIVE 8
#define STATE_EDIT 16
#define STATE_CLEAR 32
#define STATE_EDITABLE 64
#define STATE_SCROLLABLE 128
+#define STATE_OFFSCREEN 256
#define GESTURE_RINGSIZE 100
diff --git a/navit/gui/internal/gui_internal_bookmark.c b/navit/gui/internal/gui_internal_bookmark.c
index 21102ba1a..eed0de123 100644
--- a/navit/gui/internal/gui_internal_bookmark.c
+++ b/navit/gui/internal/gui_internal_bookmark.c
@@ -104,6 +104,8 @@ gui_internal_cmd_add_bookmark2(struct gui_priv *this, struct widget *wm, void *d
gui_internal_widget_append(w, wl);
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ else
+ gui_internal_keyboard_show_native(this, w, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG")), getenv("LANG"));
gui_internal_menu_render(this);
}
@@ -132,6 +134,8 @@ gui_internal_cmd_add_bookmark_folder2(struct gui_priv *this, struct widget *wm,
gui_internal_widget_append(w, wl);
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ else
+ gui_internal_keyboard_show_native(this, w, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG")), getenv("LANG"));
gui_internal_menu_render(this);
}
@@ -161,6 +165,8 @@ gui_internal_cmd_rename_bookmark(struct gui_priv *this, struct widget *wm, void
gui_internal_widget_append(w, wl);
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ else
+ gui_internal_keyboard_show_native(this, w, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG")), getenv("LANG"));
gui_internal_menu_render(this);
}
diff --git a/navit/gui/internal/gui_internal_command.c b/navit/gui/internal/gui_internal_command.c
index 98a736fb8..d26bd677d 100644
--- a/navit/gui/internal/gui_internal_command.c
+++ b/navit/gui/internal/gui_internal_command.c
@@ -294,6 +294,8 @@ gui_internal_cmd_enter_coord(struct gui_priv *this, char *function, struct attr
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, VKBD_DEGREE));
+ else
+ gui_internal_keyboard_show_native(this, w, VKBD_DEGREE, NULL);
gui_internal_menu_render(this);
}
@@ -444,13 +446,21 @@ gui_internal_cmd2_setting_layout(struct gui_priv *this, char *function, struct a
navit_attr_iter_destroy(iter);
gui_internal_menu_render(this);
}
+
+/*
+ * @brief Displays Route Height Profile
+ *
+ * displays a heightprofile if a route is active and
+ * some heightinfo is provided by means of a map
+ *
+ * the name of the file providing the heightlines must
+ * comply with *.heightlines.bin
+ *
+ */
static void
gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, struct attr **in, struct attr ***out, int *valid)
{
-
-
struct widget * menu, *box;
-
struct map * map=NULL;
struct map_rect * mr=NULL;
struct route * route;
@@ -458,17 +468,18 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
struct mapset *ms;
struct mapset_handle *msh;
int x,i,first=1,dist=0;
+ int diagram_points_count = 0;
struct coord c,last,res;
struct coord_rect rbbox,dbbox;
struct map_selection sel;
struct heightline *heightline,*heightlines=NULL;
struct diagram_point *min,*diagram_point,*diagram_points=NULL;
+ struct point p[2];
sel.next=NULL;
sel.order=18;
sel.range.min=type_height_line_1;
sel.range.max=type_height_line_3;
-
menu=gui_internal_menu(this,_("Height Profile"));
box = gui_internal_box_new(this, gravity_left_top| orientation_vertical | flags_fill | flags_expand);
gui_internal_widget_append(menu, box);
@@ -489,11 +500,24 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
}
}
map_rect_destroy(mr);
+ mr = NULL;
ms=navit_get_mapset(this->nav);
if (!first && ms) {
+ int heightmap_installed = FALSE;
msh=mapset_open(ms);
while ((map=mapset_next(msh, 1))) {
- mr=map_rect_new(map, &sel);
+ struct attr name_attr;
+ if (map_get_attr(map, attr_name, &name_attr, NULL)){
+ dbg(lvl_debug,"map name = %s\n",name_attr.u.str);
+ if (strstr(name_attr.u.str,".heightlines.bin")){
+ dbg(lvl_info,"reading heightlines from map %s\n",name_attr.u.str);
+ mr=map_rect_new(map, &sel);
+ heightmap_installed = TRUE;
+ }
+ else {
+ dbg(lvl_debug,"ignoring map %s\n",name_attr.u.str);
+ }
+ }
if (mr) {
while((item = map_rect_get_item(mr))) {
if (item->type >= sel.range.min && item->type <= sel.range.max) {
@@ -505,9 +529,20 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
}
}
map_rect_destroy(mr);
+ mr = NULL;
}
}
mapset_close(msh);
+ if (!heightmap_installed){
+ char *text;
+ struct widget *w;
+ text=g_strdup_printf("%s",_("please install a map *.heightlines.bin to provide elevationdata"));
+ gui_internal_widget_append(box, w=gui_internal_label_new(this, text));
+ w->flags=gravity_bottom_center|orientation_horizontal|flags_fill;
+ g_free(text);
+ gui_internal_menu_render(this);
+ return;
+ }
}
}
map=NULL;
@@ -537,7 +572,8 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
diagram_point->c.y=heightline->height;
diagram_point->next=diagram_points;
diagram_points=diagram_point;
- dbg(lvl_info,"%d %d\n", diagram_point->c.x, diagram_point->c.y);
+ diagram_points_count ++;
+ dbg(lvl_debug,"%d %d\n", diagram_point->c.x, diagram_point->c.y);
}
}
}
@@ -548,18 +584,30 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
}
last=c;
}
-
}
}
-
+ while (heightlines){
+ heightline=heightlines;
+ heightlines=heightlines->next;
+ g_free(heightline);
+ }
if(mr)
map_rect_destroy(mr);
- gui_internal_menu_render(this);
-
- if(!diagram_points)
+ if(diagram_points_count < 2){
+ char *text;
+ struct widget *w;
+ text=g_strdup_printf("%s",_("The route must cross at least 2 heightlines"));
+ gui_internal_widget_append(box, w=gui_internal_label_new(this, text));
+ w->flags=gravity_bottom_center|orientation_horizontal|flags_fill;
+ g_free(text);
+ gui_internal_menu_render(this);
+ if(diagram_points)
+ g_free(diagram_points);
return;
+ }
+ gui_internal_menu_render(this);
first=1;
diagram_point=diagram_points;
while (diagram_point) {
@@ -571,38 +619,42 @@ gui_internal_cmd2_route_height_profile(struct gui_priv *this, char *function, st
coord_rect_extend(&dbbox, &diagram_point->c);
diagram_point=diagram_point->next;
}
- dbg(lvl_info,"%d %d %d %d\n", dbbox.lu.x, dbbox.lu.y, dbbox.rl.x, dbbox.rl.y);
+ dbg(lvl_debug,"%d %d %d %d\n", dbbox.lu.x, dbbox.lu.y, dbbox.rl.x, dbbox.rl.y);
if (dbbox.rl.x > dbbox.lu.x && dbbox.lu.x*100/(dbbox.rl.x-dbbox.lu.x) <= 25)
dbbox.lu.x=0;
if (dbbox.lu.y > dbbox.rl.y && dbbox.rl.y*100/(dbbox.lu.y-dbbox.rl.y) <= 25)
dbbox.rl.y=0;
- dbg(lvl_info,"%d,%d %dx%d\n", box->p.x, box->p.y, box->w, box->h);
+ dbg(lvl_debug,"%d,%d %dx%d\n", box->p.x, box->p.y, box->w, box->h);
x=dbbox.lu.x;
first=1;
- for (;;) {
- struct point p[2];
- min=NULL;
- diagram_point=diagram_points;
- while (diagram_point) {
- if (diagram_point->c.x >= x && (!min || min->c.x > diagram_point->c.x))
- min=diagram_point;
- diagram_point=diagram_point->next;
+ if (diagram_points_count > 1 && dbbox.rl.x != dbbox.lu.x && dbbox.lu.y != dbbox.rl.y){
+ for (;;) {
+ min=NULL;
+ diagram_point=diagram_points;
+ while (diagram_point) {
+ if (diagram_point->c.x >= x && (!min || min->c.x > diagram_point->c.x))
+ min=diagram_point;
+ diagram_point=diagram_point->next;
+ }
+ if (! min)
+ break;
+ p[1].x=(min->c.x-dbbox.lu.x)*(box->w-10)/(dbbox.rl.x-dbbox.lu.x)+box->p.x+5;
+ p[1].y=(box->h)-5-(min->c.y-dbbox.rl.y)*(box->h-10)/(dbbox.lu.y-dbbox.rl.y)+box->p.y;
+ dbg(lvl_debug,"%d,%d=%d,%d\n",min->c.x, min->c.y, p[1].x,p[1].y);
+ graphics_draw_circle(this->gra, this->foreground, &p[1], 2);
+ if (first)
+ first=0;
+ else
+ graphics_draw_lines(this->gra, this->foreground, p, 2);
+ p[0]=p[1];
+ x=min->c.x+1;
}
- if (! min)
- break;
- p[1].x=(min->c.x-dbbox.lu.x)*(box->w-10)/(dbbox.rl.x-dbbox.lu.x)+box->p.x+5;
- p[1].y=(min->c.y-dbbox.rl.y)*(box->h-10)/(dbbox.lu.y-dbbox.rl.y)+box->p.y+5;
- dbg(lvl_info,"%d,%d=%d,%d\n",min->c.x, min->c.y, p[1].x,p[1].y);
- graphics_draw_circle(this->gra, this->foreground, &p[1], 2);
- if (first)
- first=0;
- else
- graphics_draw_lines(this->gra, this->foreground, p, 2);
- p[0]=p[1];
- x=min->c.x+1;
}
-
-
+ while (diagram_points){
+ diagram_point=diagram_points;
+ diagram_points=diagram_points->next;
+ g_free(diagram_point);
+ }
}
static void
@@ -860,6 +912,8 @@ gui_internal_cmd_log(struct gui_priv *this)
gui_internal_widget_append(w, wl);
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ else
+ gui_internal_keyboard_show_native(this, w, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG")), getenv("LANG"));
gui_internal_menu_render(this);
gui_internal_leave(this);
}
@@ -1075,7 +1129,6 @@ error:
return;
}
-
static void
gui_internal_cmd_img(struct gui_priv * this, char *function, struct attr **in, struct attr ***out, int *valid)
{
diff --git a/navit/gui/internal/gui_internal_html.c b/navit/gui/internal/gui_internal_html.c
index 8350dbdcc..9b42fbdec 100644
--- a/navit/gui/internal/gui_internal_html.c
+++ b/navit/gui/internal/gui_internal_html.c
@@ -491,9 +491,12 @@ gui_internal_html_menu(struct gui_priv *this, const char *document, char *anchor
callback_list_call_attr_2(this->cbl,attr_gui,anchor,&doc);
gui_internal_html_parse_text(this, doc);
g_free(doc);
- if (this->keyboard_required && this->keyboard) {
+ if (this->keyboard_required) {
this->html_container->flags=gravity_center|orientation_vertical|flags_expand|flags_fill;
- gui_internal_widget_append(this->html_container, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ if (this->keyboard)
+ gui_internal_widget_append(this->html_container, gui_internal_keyboard(this, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG"))));
+ else
+ gui_internal_keyboard_show_native(this, this->html_container, VKBD_FLAG_2 | gui_internal_keyboard_init_mode(getenv("LANG")), getenv("LANG"));
}
gui_internal_menu_render(this);
graphics_draw_mode(this->gra, draw_mode_end);
diff --git a/navit/gui/internal/gui_internal_keyboard.c b/navit/gui/internal/gui_internal_keyboard.c
index ea71eb593..3dc6ae556 100644
--- a/navit/gui/internal/gui_internal_keyboard.c
+++ b/navit/gui/internal/gui_internal_keyboard.c
@@ -12,39 +12,61 @@
#include "gui_internal_menu.h"
#include "gui_internal_keyboard.h"
+/**
+ * @brief Switch keyboard mode to uppercase if it's in lowercase mode and {@code VKBD_MODE_2} is set.
+ *
+ * Called when there's no input left in the input field.
+ *
+ * @param this The internal GUI instance
+ */
void
gui_internal_keyboard_to_upper_case(struct gui_priv *this)
{
struct menu_data *md;
+
+ if (!this->keyboard)
+ return;
+
md=gui_internal_menu_data(this);
- // Switch to lowercase after the first key is pressed
- if (md->keyboard_mode == 10) // Latin
- gui_internal_keyboard_do(this, md->keyboard, 2);
- if (md->keyboard_mode == 34) // Umlaut
- gui_internal_keyboard_do(this, md->keyboard, 26);
- if (md->keyboard_mode == 50) // Russian/Ukrainian/Belorussian
- gui_internal_keyboard_do(this, md->keyboard, 42);
+
+ if (md->keyboard_mode == (VKBD_LATIN_LOWER | VKBD_FLAG_2))
+ gui_internal_keyboard_do(this, md->keyboard, VKBD_LATIN_UPPER | VKBD_FLAG_2);
+ if (md->keyboard_mode == (VKBD_UMLAUT_LOWER | VKBD_FLAG_2))
+ gui_internal_keyboard_do(this, md->keyboard, VKBD_UMLAUT_UPPER | VKBD_FLAG_2);
+ if (md->keyboard_mode == (VKBD_CYRILLIC_LOWER | VKBD_FLAG_2))
+ gui_internal_keyboard_do(this, md->keyboard, VKBD_CYRILLIC_UPPER | VKBD_FLAG_2);
}
+/**
+ * @brief Switch keyboard mode to lowercase if it's in uppercase mode and {@code VKBD_MODE_2} is set.
+ *
+ * Called on each alphanumeric input.
+ *
+ * @param this The internal GUI instance
+ */
void
gui_internal_keyboard_to_lower_case(struct gui_priv *this)
{
struct menu_data *md;
+
+ if (!this->keyboard)
+ return;
+
md=gui_internal_menu_data(this);
- // Switch to lowercase after the first key is pressed
- if (md->keyboard_mode == (VKBD_LATIN_UPPER | VKBD_FLAG_2)) // Latin
+
+ if (md->keyboard_mode == (VKBD_LATIN_UPPER | VKBD_FLAG_2))
gui_internal_keyboard_do(this, md->keyboard, VKBD_LATIN_LOWER | VKBD_FLAG_2);
- if (md->keyboard_mode == (VKBD_UMLAUT_UPPER | VKBD_FLAG_2)) // Umlaut
+ if (md->keyboard_mode == (VKBD_UMLAUT_UPPER | VKBD_FLAG_2))
gui_internal_keyboard_do(this, md->keyboard, VKBD_UMLAUT_LOWER | VKBD_FLAG_2);
- if (md->keyboard_mode == (VKBD_CYRILLIC_UPPER | VKBD_FLAG_2)) // Russian/Ukrainian/Belorussian
+ if (md->keyboard_mode == (VKBD_CYRILLIC_UPPER | VKBD_FLAG_2))
gui_internal_keyboard_do(this, md->keyboard, VKBD_CYRILLIC_LOWER | VKBD_FLAG_2);
}
/**
* @brief Processes a key press on the internal GUI keyboard
*
- * If the keyboard is currently in uppercase mode and {@code VKBD_MODE_2} is set, it is then switched to
- * the corresponding lowercase mode.
+ * If the keyboard is currently in uppercase mode and {@code VKBD_MODE_2} is set, it is tswitched to
+ * the corresponding lowercase mode in {@code gui_internal_keypress_do}.
*
* @param this The internal GUI instance
* @param wm
@@ -101,7 +123,7 @@ struct gui_internal_keyb_mode {
/*16: VKBD_NUMERIC */ {"123", 2, VKBD_LATIN_UPPER, VKBD_UMLAUT_UPPER},
/*24: VKBD_UMLAUT_UPPER */ {"ÄÖÜ", 2, VKBD_UMLAUT_LOWER, VKBD_LATIN_UPPER},
/*32: VKBD_UMLAUT_LOWER */ {"äöü", 2, VKBD_UMLAUT_UPPER, VKBD_LATIN_LOWER},
- /*40: VKBD_CYRILLIC_UPPER*/ {"АБВ", 2, VKBD_CYRILLIC_UPPER, VKBD_LATIN_UPPER},
+ /*40: VKBD_CYRILLIC_UPPER*/ {"АБВ", 2, VKBD_CYRILLIC_LOWER, VKBD_LATIN_UPPER},
/*48: VKBD_CYRILLIC_LOWER*/ {"абв", 2, VKBD_CYRILLIC_UPPER, VKBD_LATIN_LOWER},
/*56: VKBD_DEGREE */ {"DEG", 2, VKBD_FLAG_2, VKBD_FLAG_2}
};
@@ -435,3 +457,100 @@ gui_internal_keyboard_init_mode(char *lang)
g_free(lang);
return ret;
}
+
+
+/**
+ * @brief Hides the platform's native on-screen keyboard or other input method
+ *
+ * This function is called as the {@code wfree} method of the placeholder widget for the platform's
+ * native on-screen keyboard. It is a wrapper around the corresponding method of the graphics plugin,
+ * which takes care of all platform-specific actions to hide the on-screen input method it previously
+ * displayed.
+ *
+ * A call to this function indicates that Navit no longer needs the input method and is about to destroy
+ * its placeholder widget. Navit will subsequently reclaim any screen real estate it may have previously
+ * reserved for the input method.
+ *
+ * This function will free the {@code struct graphics_keyboard} pointed to by {@code w->data}
+ *
+ * @param this The internal GUI instance
+ * @param w The placeholder widget
+ */
+void gui_internal_keyboard_hide_native(struct gui_priv *this_, struct widget *w) {
+ struct graphics_keyboard *kbd = (struct graphics_keyboard *) w->data;
+
+ if (kbd) {
+ graphics_hide_native_keyboard(this_->gra, kbd);
+ g_free(kbd->lang);
+ g_free(kbd->gui_priv);
+ } else
+ dbg(lvl_warning, "no graphics_keyboard found, cleanup failed\n");
+ g_free(w);
+}
+
+
+/**
+ * @brief Shows the platform's native on-screen keyboard or other input method
+ *
+ * This method is a wrapper around the corresponding method of the graphics plugin, which takes care of
+ * all platform-specific details. In particular, it is up to the graphics plugin to determine how to
+ * handle the request: it may show its on-screen keyboard or another input method (such as stroke
+ * recognition). It may choose to simply ignore the request, which will typically occur when a hardware
+ * keyboard (or other hardware input) is available.
+ *
+ * The platform's native input method may obstruct parts of Navit's UI. To prevent parts of the UI from
+ * becoming unreachable, this method will insert an empty box widget in the appropriate size at the
+ * appropriate position, provided the graphics plugin reports the correct values. Otherwise a zero-size
+ * widget is inserted. If the graphics driver decides not to display an on-screen input method, no
+ * widget will be created and the return value will be {@code NULL}.
+ *
+ * The widget's {@code wfree} function, to be called when the widget is destroyed, will be used to hide
+ * the platform keyboard when it is no longer needed.
+ *
+ * @param this The internal GUI instance
+ * @param w The parent of the widget requiring text input
+ * @param mode The requested keyboard mode
+ * @param lang The language for text input, used to select a keyboard layout
+ *
+ * @return The placeholder widget for the on-screen keyboard, may be {@code NULL}
+ */
+struct widget * gui_internal_keyboard_show_native(struct gui_priv *this, struct widget *w, int mode, char *lang) {
+ struct widget *ret = NULL;
+ struct menu_data *md = gui_internal_menu_data(this);
+ struct graphics_keyboard *kbd = g_new0(struct graphics_keyboard, 1);
+ int res;
+
+ kbd->mode = mode;
+ if (lang)
+ kbd->lang = g_strdup(lang);
+ res = graphics_show_native_keyboard(this->gra, kbd);
+
+ switch(res) {
+ case -1:
+ dbg(lvl_error, "graphics has no show_native_keyboard method, cannot display keyboard\n");
+ /* no break */
+ case 0:
+ g_free(kbd);
+ return NULL;
+ }
+
+ ret = gui_internal_box_new(this, gravity_center|orientation_horizontal_vertical|flags_fill);
+ md->keyboard = ret;
+ md->keyboard_mode=mode;
+ ret->wfree = gui_internal_keyboard_hide_native;
+ if (kbd->h < 0) {
+ ret->h = w->h;
+ ret->hmin = w->hmin;
+ } else
+ ret->h = kbd->h;
+ if (kbd->w < 0) {
+ ret->w = w->w;
+ ret->wmin = w->wmin;
+ } else
+ ret->w = kbd->w;
+ dbg(lvl_error, "ret->w=%d, ret->h=%d\n", ret->w, ret->h);
+ ret->data = (void *) kbd;
+ gui_internal_widget_append(w, ret);
+ dbg(lvl_error, "return\n");
+ return ret;
+}
diff --git a/navit/gui/internal/gui_internal_keyboard.h b/navit/gui/internal/gui_internal_keyboard.h
index 336ba2c01..9b9039224 100644
--- a/navit/gui/internal/gui_internal_keyboard.h
+++ b/navit/gui/internal/gui_internal_keyboard.h
@@ -24,6 +24,7 @@ struct gui_priv;
struct widget;
struct widget *gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode);
struct widget *gui_internal_keyboard(struct gui_priv *this, int mode);
+struct widget *gui_internal_keyboard_show_native(struct gui_priv *this, struct widget *w, int mode, char *lang);
int gui_internal_keyboard_init_mode(char *lang);
void gui_internal_keyboard_to_upper_case(struct gui_priv *this);
void gui_internal_keyboard_to_lower_case(struct gui_priv *this);
diff --git a/navit/gui/internal/gui_internal_menu.c b/navit/gui/internal/gui_internal_menu.c
index 7769953b9..33def9983 100644
--- a/navit/gui/internal/gui_internal_menu.c
+++ b/navit/gui/internal/gui_internal_menu.c
@@ -91,10 +91,31 @@ gui_internal_prune_menu_count(struct gui_priv *this, int count, int render)
}
}
+
+/**
+ * @brief Initializes a GUI screen
+ *
+ * This method initializes the internal GUI's screen on which all other elements (such as HTML menus,
+ * dialogs or others) are displayed.
+ *
+ * It sets up a view hierarchy, which includes a title bar and a client area to hold widgets defined by
+ * the caller.
+ *
+ * @param this The GUI instance
+ * @param label The label to display in the top bar
+ *
+ * @return The container for caller-defined widgets
+ */
struct widget *
gui_internal_menu(struct gui_priv *this, const char *label)
{
struct widget *menu,*w,*w1,*topbox;
+ struct padding *padding = NULL;
+
+ if (this->gra) {
+ padding = graphics_get_data(this->gra, "padding");
+ } else
+ dbg(lvl_warning, "cannot get padding: this->gra is NULL\n");
gui_internal_search_idle_end(this);
topbox=gui_internal_box_new_with_label(this, 0, label);
@@ -102,8 +123,18 @@ gui_internal_menu(struct gui_priv *this, const char *label)
topbox->h=this->root.h;
gui_internal_widget_append(&this->root, topbox);
menu=gui_internal_box_new(this, gravity_left_center|orientation_vertical);
- menu->w=this->root.w;
- menu->h=this->root.h;
+
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
menu->background=this->background;
gui_internal_apply_config(this);
topbox->menu_data=g_new0(struct menu_data, 1);
@@ -134,8 +165,17 @@ gui_internal_menu(struct gui_priv *this, const char *label)
}
if (this->flags & 192) {
menu=gui_internal_box_new(this, gravity_left_center|orientation_vertical);
- menu->w=this->root.w;
- menu->h=this->root.h;
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
w1=gui_internal_time_help(this);
gui_internal_widget_append(menu, w1);
w1=gui_internal_box_new(this, gravity_center|orientation_horizontal_vertical|flags_expand|flags_fill);
@@ -147,8 +187,17 @@ gui_internal_menu(struct gui_priv *this, const char *label)
gui_internal_widget_reset_pack(this, topbox);
topbox->w=this->root.w;
topbox->h=this->root.h;
- menu->w=this->root.w;
- menu->h=this->root.h;
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
return w;
}
diff --git a/navit/gui/internal/gui_internal_poi.c b/navit/gui/internal/gui_internal_poi.c
index c3eed5e60..d4ffea8b3 100644
--- a/navit/gui/internal/gui_internal_poi.c
+++ b/navit/gui/internal/gui_internal_poi.c
@@ -533,6 +533,8 @@ gui_internal_cmd_pois_filter(struct gui_priv *this, struct widget *wm, void *dat
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, keyboard_mode));
+ else
+ gui_internal_keyboard_show_native(this, w, keyboard_mode, getenv("LANG"));
gui_internal_menu_render(this);
diff --git a/navit/gui/internal/gui_internal_search.c b/navit/gui/internal/gui_internal_search.c
index a0d6a3b2e..e5e137e07 100644
--- a/navit/gui/internal/gui_internal_search.c
+++ b/navit/gui/internal/gui_internal_search.c
@@ -212,6 +212,9 @@ gui_internal_highlight_possible_keys(struct gui_priv *this, char *possible_keys)
{
struct menu_data *md;
+ if (!this->keyboard)
+ return;
+
md=gui_internal_menu_data(this);
if (md && md->keyboard && !(this->flags & 2048)) {
GList *lk=md->keyboard->children;
@@ -225,9 +228,9 @@ gui_internal_highlight_possible_keys(struct gui_priv *this, char *possible_keys)
if (child_->data && strcmp("\b", child_->data)) { // FIXME don't disable special keys
if ( (strlen(possible_keys) == 0) ||
(g_strrstr(possible_keys, child_->data)!=NULL ) ) {
- child_->state|= STATE_HIGHLIGHTED|STATE_VISIBLE|STATE_SENSITIVE|STATE_CLEAR ;
+ child_->state|= STATE_HIGHLIGHTED|STATE_SENSITIVE|STATE_CLEAR ;
} else {
- child_->state&= ~(STATE_HIGHLIGHTED|STATE_VISIBLE|STATE_SELECTED) ;
+ child_->state&= ~STATE_HIGHLIGHTED;
}
gui_internal_widget_render(this,child_);
}
@@ -431,13 +434,9 @@ gui_internal_search_changed(struct gui_priv *this, struct widget *wm, void *data
search_attr.type=attr_house_number;
search_attr.u.str=wm->text;
search_list_search(this->sl, &search_attr, 1);
- // Text is not necessarily entered via the on-screen keyboard,
- // but we now switch it to lower case anyway.
- gui_internal_keyboard_to_lower_case(this);
gui_internal_search_idle_start(this, wm->name, search_list, param);
} else {
// If not enough content is entered, we highlight all keys.
- gui_internal_keyboard_to_upper_case(this);
gui_internal_highlight_possible_keys(this, "");
}
l=g_list_last(this->root.children);
@@ -570,6 +569,8 @@ gui_internal_search(struct gui_priv *this, const char *what, const char *type, i
wk->name=g_strdup(type);
if (this->keyboard)
gui_internal_widget_append(w, gui_internal_keyboard(this, keyboard_mode));
+ else
+ gui_internal_keyboard_show_native(this, w, keyboard_mode, getenv("LANG"));
gui_internal_menu_render(this);
}
diff --git a/navit/gui/internal/gui_internal_widget.c b/navit/gui/internal/gui_internal_widget.c
index e78abb3dd..1dd28837f 100644
--- a/navit/gui/internal/gui_internal_widget.c
+++ b/navit/gui/internal/gui_internal_widget.c
@@ -321,18 +321,18 @@ static void gui_internal_box_render(struct gui_priv *this, struct widget *w)
gui_internal_background_render(this, w);
if (w->foreground && w->border) {
- struct point pnt[5];
- pnt[0]=w->p;
- pnt[1].x=pnt[0].x+w->w;
- pnt[1].y=pnt[0].y;
- pnt[2].x=pnt[0].x+w->w;
- pnt[2].y=pnt[0].y+w->h;
- pnt[3].x=pnt[0].x;
- pnt[3].y=pnt[0].y+w->h;
- pnt[4]=pnt[0];
- graphics_gc_set_linewidth(w->foreground, w->border ? w->border : 1);
- graphics_draw_lines(this->gra, w->foreground, pnt, 5);
- graphics_gc_set_linewidth(w->foreground, 1);
+ struct point pnt[5];
+ pnt[0]=w->p;
+ pnt[1].x=pnt[0].x+w->w;
+ pnt[1].y=pnt[0].y;
+ pnt[2].x=pnt[0].x+w->w;
+ pnt[2].y=pnt[0].y+w->h;
+ pnt[3].x=pnt[0].x;
+ pnt[3].y=pnt[0].y+w->h;
+ pnt[4]=pnt[0];
+ graphics_gc_set_linewidth(w->foreground, w->border ? w->border : 1);
+ graphics_draw_lines(this->gra, w->foreground, pnt, 5);
+ graphics_gc_set_linewidth(w->foreground, 1);
}
l=w->children;
@@ -1226,7 +1226,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
GList * current_desc=NULL;
struct table_data * table_data = (struct table_data*)w->data;
int drawing_space_left=1;
- int is_first_page=1;
+ int is_first_page;
struct table_column_desc * dim=NULL;
dbg_assert(table_data);
@@ -1238,16 +1238,17 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
/*
* Skip rows that are on previous pages.
*/
- cur_row = w->children;
if(table_data->top_row && table_data->top_row != w->children && !table_data->scroll_buttons.button_box_hide)
{
cur_row = table_data->top_row;
is_first_page=0;
} else {
+ cur_row = w->children;
table_data->top_row=NULL;
+ is_first_page=1;
}
- /* First, let's deactivate all columns that are in rows which are *before*
+ /* First, let's mark all columns as off-screen that are in rows which are *before*
* our current page.
* */
GList *row = w->children;
@@ -1263,7 +1264,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
cur_column=g_list_next(cur_column))
{
struct widget * cur_widget = (struct widget*) cur_column->data;
- cur_widget->state &= ~STATE_SENSITIVE;
+ cur_widget->state |= STATE_OFFSCREEN;
}
row = g_list_next(row);
}
@@ -1297,8 +1298,6 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
cur_column=g_list_next(cur_column))
{
struct widget * cur_widget = (struct widget*) cur_column->data;
- dim = (struct table_column_desc*)current_desc->data;
-
if (drawing_space_left) {
cur_widget->p.x=x;
cur_widget->w=dim->width;
@@ -1309,7 +1308,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
/* We pack the widget before rendering to ensure that the x and y
* coordinates get pushed down.
*/
- cur_widget->state |= STATE_SENSITIVE;
+ cur_widget->state &= ~STATE_OFFSCREEN;
gui_internal_widget_pack(this,cur_widget);
gui_internal_widget_render(this,cur_widget);
@@ -1318,8 +1317,8 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w)
max_height = dim->height;
}
} else {
- /* Deactivate contents that we don't have space for. */
- cur_widget->state &= ~STATE_SENSITIVE;
+ /* Mark contents that we don't have space for. */
+ cur_widget->state |= STATE_OFFSCREEN;
}
}
diff --git a/navit/gui/qml/gui_qml.cpp b/navit/gui/qml/gui_qml.cpp
index cee0574bd..7a1016473 100644
--- a/navit/gui/qml/gui_qml.cpp
+++ b/navit/gui/qml/gui_qml.cpp
@@ -473,5 +473,5 @@ static struct gui_priv * gui_qml_new(struct navit *nav, struct gui_methods *meth
}
void plugin_init(void) {
- plugin_register_gui_type("qml",gui_qml_new);
+ plugin_register_category_gui("qml",gui_qml_new);
}
diff --git a/navit/gui/win32/gui_win32.c b/navit/gui/win32/gui_win32.c
index bdbdb357d..8a8cb37b9 100644
--- a/navit/gui/win32/gui_win32.c
+++ b/navit/gui/win32/gui_win32.c
@@ -639,5 +639,5 @@ static struct gui_priv *win32_gui_new( struct navit *nav, struct gui_methods *me
void plugin_init(void)
{
- plugin_register_gui_type("win32", win32_gui_new);
+ plugin_register_category_gui("win32", win32_gui_new);
}
diff --git a/navit/map.c b/navit/map.c
index 51cda59be..2736da9f8 100644
--- a/navit/map.c
+++ b/navit/map.c
@@ -24,7 +24,7 @@
* This file contains the code that makes navit able to load maps. Because
* navit is able to open maps in different formats, this code does not handle
* any map format itself. This is done by map plugins which register to this
- * code by calling plugin_register_map_type().
+ * code by calling plugin_register_category_map().
*
* When opening a new map, the map plugin will return a pointer to a map_priv
* struct, which can be defined by the map plugin and contains whatever private
@@ -99,7 +99,7 @@ map_new(struct attr *parent, struct attr **attrs)
dbg(lvl_error,"missing type\n");
return NULL;
}
- maptype_new=plugin_get_map_type(type->u.str);
+ maptype_new=plugin_get_category_map(type->u.str);
if (! maptype_new) {
dbg(lvl_error,"invalid type '%s'\n", type->u.str);
return NULL;
diff --git a/navit/map/binfile/binfile.c b/navit/map/binfile/binfile.c
index 4ca4c6bf5..6b5108659 100644
--- a/navit/map/binfile/binfile.c
+++ b/navit/map/binfile/binfile.c
@@ -2848,6 +2848,6 @@ plugin_init(void)
if (sizeof(struct zip_cd) != 46) {
dbg(lvl_error,"error: sizeof(struct zip_cd)=%zu\n",sizeof(struct zip_cd));
}
- plugin_register_map_type("binfile", map_new_binfile);
+ plugin_register_category_map("binfile", map_new_binfile);
}
diff --git a/navit/map/csv/csv.c b/navit/map/csv/csv.c
index ea36432d1..2726e8ab9 100644
--- a/navit/map/csv/csv.c
+++ b/navit/map/csv/csv.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <string.h>
#include <math.h>
+#include <errno.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -864,7 +865,8 @@ map_new_csv(struct map_methods *meth, struct attr **attrs, struct callback_list
fclose(fp);
}
else {
- dbg(lvl_error,"Error opening csv map file %s, starting with empty map\n", m->filename);
+ dbg(lvl_error,"Error opening csv map file '%s': %s\n", m->filename, strerror(errno));
+ return NULL;
}
} else {
dbg(lvl_debug,"No data attribute, starting with in-memory map\n");
@@ -878,6 +880,6 @@ void
plugin_init(void)
{
dbg(lvl_debug,"csv: plugin_init\n");
- plugin_register_map_type("csv", map_new_csv);
+ plugin_register_category_map("csv", map_new_csv);
}
diff --git a/navit/map/filter/filter.c b/navit/map/filter/filter.c
index 63817ecc7..cecae7fc0 100644
--- a/navit/map/filter/filter.c
+++ b/navit/map/filter/filter.c
@@ -430,6 +430,6 @@ void
plugin_init(void)
{
dbg(lvl_debug,"filter: plugin_init\n");
- plugin_register_map_type("filter", map_filter_new);
+ plugin_register_category_map("filter", map_filter_new);
}
diff --git a/navit/map/garmin/garmin.c b/navit/map/garmin/garmin.c
index 609bcab0e..d00cb9794 100644
--- a/navit/map/garmin/garmin.c
+++ b/navit/map/garmin/garmin.c
@@ -993,5 +993,5 @@ gmap_new(struct map_methods *meth, struct attr **attrs, struct callback_list *cb
void
plugin_init(void)
{
- plugin_register_map_type("garmin", gmap_new);
+ plugin_register_category_map("garmin", gmap_new);
}
diff --git a/navit/map/garmin_img/garmin_img.c b/navit/map/garmin_img/garmin_img.c
index 58fe489da..f7dccf89c 100644
--- a/navit/map/garmin_img/garmin_img.c
+++ b/navit/map/garmin_img/garmin_img.c
@@ -1508,6 +1508,6 @@ map_new_garmin_img(struct map_methods *meth, struct attr **attrs)
void
plugin_init(void)
{
- plugin_register_map_type("garmin_img", map_new_garmin_img);
+ plugin_register_category_map("garmin_img", map_new_garmin_img);
}
diff --git a/navit/map/mg/map.c b/navit/map/mg/map.c
index 9b0805e2d..13561e154 100644
--- a/navit/map/mg/map.c
+++ b/navit/map/mg/map.c
@@ -609,5 +609,5 @@ map_new_mg(struct map_methods *meth, struct attr **attrs, struct callback_list *
void
plugin_init(void)
{
- plugin_register_map_type("mg", map_new_mg);
+ plugin_register_category_map("mg", map_new_mg);
}
diff --git a/navit/map/shapefile/shapefile.c b/navit/map/shapefile/shapefile.c
index e67aaafee..e3eb4b723 100644
--- a/navit/map/shapefile/shapefile.c
+++ b/navit/map/shapefile/shapefile.c
@@ -682,7 +682,7 @@ void
plugin_init(void)
{
dbg(lvl_debug,"shapefile: plugin_init\n");
- plugin_register_map_type("shapefile", map_new_shapefile);
+ plugin_register_category_map("shapefile", map_new_shapefile);
}
/************************************************************************/
diff --git a/navit/map/textfile/textfile.c b/navit/map/textfile/textfile.c
index d70f989f9..43be12368 100644
--- a/navit/map/textfile/textfile.c
+++ b/navit/map/textfile/textfile.c
@@ -394,6 +394,6 @@ void
plugin_init(void)
{
dbg(lvl_debug,"textfile: plugin_init\n");
- plugin_register_map_type("textfile", map_new_textfile);
+ plugin_register_category_map("textfile", map_new_textfile);
}
diff --git a/navit/maptool/maptool.h b/navit/maptool/maptool.h
index 7fde891dd..eca708591 100644
--- a/navit/maptool/maptool.h
+++ b/navit/maptool/maptool.h
@@ -115,11 +115,11 @@ struct item_bin_sink {
void *priv_data[8];
GList *sink_funcs;
};
-
+#define NODE_ID_BITS 56
struct node_item {
- unsigned int id;
- char ref_way;
struct coord c;
+ unsigned long long int nd_id:NODE_ID_BITS;
+ char ref_way;
};
struct zip_info;
@@ -131,7 +131,7 @@ struct country_table;
* Must be at least 64 bit wide because IDs will soon exceed 32 bit.
*/
typedef unsigned long long int osmid;
-#define OSMID_FMT LONGLONG_FMT
+#define OSMID_FMT ULONGLONG_FMT
/** Files needed for processing a relation. */
struct files_relation_processing {
@@ -418,3 +418,6 @@ int zip_get_zipnum(struct zip_info *info);
void zip_set_zipnum(struct zip_info *info, int num);
void zip_close(struct zip_info *info);
void zip_destroy(struct zip_info *info);
+
+/* Break compilation on 32 bit architectures, as we're going to cast osmid's to gpointer to use them as keys to GHashTable's */
+struct maptool_force_64 {char s[sizeof(gpointer)<sizeof(osmid)?-1:1];};
diff --git a/navit/maptool/osm.c b/navit/maptool/osm.c
index 37c0e7626..f30b06365 100644
--- a/navit/maptool/osm.c
+++ b/navit/maptool/osm.c
@@ -106,6 +106,8 @@ enum attr_strings_type {
attr_string_ref,
attr_string_exit_to,
attr_string_street_destination,
+ attr_string_street_destination_forward,
+ attr_string_street_destination_backward,
attr_string_house_number,
attr_string_label,
attr_string_postal,
@@ -118,10 +120,16 @@ char *attr_strings[attr_string_last];
char *osm_types[]={"unknown","node","way","relation"};
-#define REF_MARKER (1 << 30)
-#define IS_REF(c) ((c).x == REF_MARKER)
-#define GET_REF(c) ((unsigned)(c).y)
-#define SET_REF(c,ref) do { (c).x = REF_MARKER; (c).y = ref ; } while(0)
+/*
+ * These macros are designed to handle maptool internal node id reference representation. This representation does not leak
+ * to binfile, so it's safe to change it without breaking binfile binary compatibility.
+ * Currently it keeps low 31 bits in y coordinate and up to 30 high order bits in x coordinate, allowing for 61 bit osm node id in total.
+ */
+#define REF_MARKER (1ull << 30)
+#define REF_MASK (3ull << 30)
+#define IS_REF(c) (((c).x & REF_MASK)==REF_MARKER)
+#define GET_REF(c) ((((osmid)(c).x & ~REF_MARKER)<<31) + (c).y )
+#define SET_REF(c,ref) do { (c).x = REF_MARKER | ((osmid)(ref)>>31); (c).y = (osmid)(ref) & 0x7fffffffull; } while(0)
/* Table of country codes with possible is_in spellings.
* Note: If you update this list, check also country array in country.c
@@ -395,7 +403,6 @@ struct country_table {
static char *attrmap={
"n *=* point_unkn\n"
-// "n Annehmlichkeit=Hochsitz poi_hunting_stand\n"
"? addr:housenumber=* house_number\n"
"? aeroway=aerodrome poi_airport\n"
"? aeroway=airport poi_airport\n"
@@ -506,7 +513,7 @@ static char *attrmap={
"? shop=car_repair poi_repair_service\n"
"? shop=clothes poi_shop_apparel\n"
"? shop=convenience poi_shop_grocery\n"
- "? shop=drogist poi_shop_drugstore\n"
+ "? shop=chemist poi_shop_drugstore\n"
"? shop=florist poi_shop_florist\n"
"? shop=fruit poi_shop_fruit\n"
"? shop=furniture poi_shop_furniture\n"
@@ -519,6 +526,7 @@ static char *attrmap={
"? shop=photo poi_shop_photo\n"
"? shop=shoes poi_shop_shoes\n"
"? shop=supermarket poi_shopping\n"
+ "? shop=mall poi_mall\n"
"? sport=10pin poi_bowling\n"
"? sport=baseball poi_baseball\n"
"? sport=basketball poi_basketball\n"
@@ -790,7 +798,7 @@ build_attrmap_line(char *line)
kvl=NULL;
if (!(idx=(int)(long)g_hash_table_lookup(attr_hash, kv))) {
idx=attr_present_count++;
- g_hash_table_insert(attr_hash, kv, (gpointer)(long)idx);
+ g_hash_table_insert(attr_hash, kv, (gpointer)(long long)idx);
}
attr_mapping=g_realloc(attr_mapping, sizeof(struct attr_mapping)+(attr_mapping_count+1)*sizeof(int));
attr_mapping->attr_present_idx[attr_mapping_count++]=idx;
@@ -923,7 +931,7 @@ item_bin_get_nodeid(struct item_bin *ib)
osmid
item_bin_get_wayid(struct item_bin *ib)
{
- long long *ret=item_bin_get_attr(ib, attr_osm_wayid, NULL);
+ unsigned long long *ret=item_bin_get_attr(ib, attr_osm_wayid, NULL);
if (ret)
return *ret;
return 0;
@@ -1048,6 +1056,8 @@ osm_add_tag(char *k, char *v)
flagsa[access_value(v)] |= AF_DANGEROUS_GOODS|AF_EMERGENCY_VEHICLES|AF_TRANSPORT_TRUCK|AF_DELIVERY_TRUCK|AF_PUBLIC_BUS|AF_TAXI|AF_HIGH_OCCUPANCY_CAR|AF_CAR|AF_MOTORCYCLE|AF_MOPED|AF_HORSE|AF_BIKE|AF_PEDESTRIAN;
else
flags[0] |= AF_THROUGH_TRAFFIC_LIMIT;
+ if (! strcmp(v,"hov"))
+ flags[0] |= AF_HIGH_OCCUPANCY_CAR_ONLY;
level=5;
}
if (! strcmp(k,"vehicle")) {
@@ -1185,6 +1195,18 @@ osm_add_tag(char *k, char *v)
attr_strings_save(attr_string_street_destination, v);
level=5;
}
+ if (! strcmp(k,"destination:forward"))
+ {
+ if (in_way)
+ attr_strings_save(attr_string_street_destination_forward, v);
+ level=5;
+ }
+ if (! strcmp(k,"destination:backward"))
+ {
+ if (in_way)
+ attr_strings_save(attr_string_street_destination_backward, v);
+ level=5;
+ }
if (! strcmp(k,"exit_to")) {
attr_strings_save(attr_string_exit_to, v);
level=5;
@@ -1308,8 +1330,9 @@ node_buffer_to_hash(void)
{
int i,count=node_buffer.size/sizeof(struct node_item);
struct node_item *ni=(struct node_item *)node_buffer.base;
+
for (i = 0 ; i < count ; i++)
- g_hash_table_insert(node_hash, (gpointer)(long)(ni[i].id), (gpointer)(long)i);
+ g_hash_table_insert(node_hash, (gpointer)(long long)(ni[i].nd_id), (gpointer)(long long)i);
}
void
@@ -1357,23 +1380,24 @@ osm_add_node(osmid id, double lat, double lon)
osmid_attr_value=id;
current_node=allocate_node_item_in_buffer();
- current_node->id=id;
+ dbg_assert(id < ((2ull<<NODE_ID_BITS)-1));
+ current_node->nd_id=id;
current_node->ref_way=0;
current_node->c.x=lon*6371000.0*M_PI/180;
current_node->c.y=log(tan(M_PI_4+lat*M_PI/360))*6371000.0;
if (! node_hash) {
- if (current_node->id > id_last_node) {
- id_last_node=current_node->id;
+ if (current_node->nd_id > id_last_node) {
+ id_last_node=current_node->nd_id;
} else {
fprintf(stderr,"INFO: Nodes out of sequence (new " OSMID_FMT " vs old " OSMID_FMT "), adding hash\n",
- (osmid)current_node->id, id_last_node);
+ (osmid)current_node->nd_id, id_last_node);
node_hash=g_hash_table_new(NULL, NULL);
node_buffer_to_hash();
}
} else
- if (!g_hash_table_lookup(node_hash, (gpointer)(long)(current_node->id)))
- g_hash_table_insert(node_hash, (gpointer)(long)(current_node->id),
- (gpointer)(long)(current_node-(struct node_item *)node_buffer.base));
+ if (!g_hash_table_lookup(node_hash, (gpointer)(long long)(current_node->nd_id)))
+ g_hash_table_insert(node_hash, (gpointer)(long long)(current_node->nd_id),
+ (gpointer)(long long)(current_node-(struct node_item *)node_buffer.base));
else {
remove_last_node_item_from_buffer();
nodeid=0;
@@ -1398,21 +1422,21 @@ node_item_find_index_in_ordered_list(osmid id)
long long node_count=node_buffer.size/sizeof(struct node_item);
long long search_step=node_count>4 ? node_count/4 : 1;
long long search_index=node_count/2;
- if (node_buffer_base[0].id > id)
+ if (node_buffer_base[0].nd_id > id)
return -1;
- if (node_buffer_base[node_count-1].id < id)
+ if (node_buffer_base[node_count-1].nd_id < id)
return -1;
- while (node_buffer_base[search_index].id != id) {
+ while (node_buffer_base[search_index].nd_id != id) {
#if 0
fprintf(stderr,"search_index=%d node_count=%d search_step=%d id=%d node_buffer_base[search_index].id=%d\n",
search_index, node_count, search_step, id, node_buffer_base[search_index].id);
#endif
- if (node_buffer_base[search_index].id < id) {
+ if (node_buffer_base[search_index].nd_id < id) {
search_index+=search_step;
if (search_step == 1) {
if (search_index >= node_count)
return -1;
- if (node_buffer_base[search_index].id > id)
+ if (node_buffer_base[search_index].nd_id > id)
return -1;
} else {
if (search_index >= node_count)
@@ -1423,7 +1447,7 @@ node_item_find_index_in_ordered_list(osmid id)
if (search_step == 1) {
if (search_index < 0)
return -1;
- if (node_buffer_base[search_index].id < id)
+ if (node_buffer_base[search_index].nd_id < id)
return -1;
} else {
if (search_index < 0)
@@ -1444,7 +1468,7 @@ node_item_get(osmid id)
if (node_hash) {
// Use g_hash_table_lookup_extended instead of g_hash_table_lookup
// to distinguish a key with a value 0 from a missing key.
- if (!g_hash_table_lookup_extended (node_hash, (gpointer)(long)(id), NULL,
+ if (!g_hash_table_lookup_extended (node_hash, (gpointer)(id), NULL,
(gpointer)&result_index)) {
result_index=-1;
}
@@ -1738,9 +1762,9 @@ osm_end_way(struct maptool_osm *osm)
return;
if (dedupe_ways_hash) {
- if (g_hash_table_lookup(dedupe_ways_hash, (gpointer)(long)wayid))
+ if (g_hash_table_lookup(dedupe_ways_hash, (gpointer)(long long)wayid))
return;
- g_hash_table_insert(dedupe_ways_hash, (gpointer)(long)wayid, (gpointer)1);
+ g_hash_table_insert(dedupe_ways_hash, (gpointer)(long long)wayid, (gpointer)1);
}
count=attr_longest_match(attr_mapping_way, attr_mapping_way_count, types, sizeof(types)/sizeof(enum item_type));
@@ -1778,6 +1802,8 @@ osm_end_way(struct maptool_osm *osm)
item_bin_add_attr_string(item_bin, attr_street_name_systematic, attr_strings[attr_string_street_name_systematic]);
item_bin_add_attr_string(item_bin, attr_street_name_systematic_nat, attr_strings[attr_string_street_name_systematic_nat]);
item_bin_add_attr_string(item_bin, attr_street_destination, attr_strings[attr_string_street_destination]);
+ item_bin_add_attr_string(item_bin, attr_street_destination_forward, attr_strings[attr_string_street_destination_forward]);
+ item_bin_add_attr_string(item_bin, attr_street_destination_backward, attr_strings[attr_string_street_destination_backward]);
item_bin_add_attr_longlong(item_bin, attr_osm_wayid, osmid_attr_value);
if (debug_attr_buffer[0])
item_bin_add_attr_string(item_bin, attr_debug, debug_attr_buffer);
@@ -2983,8 +3009,8 @@ write_item_way_subsection_index(FILE *out, FILE *out_index, FILE *out_graph, str
idx[0]=item_bin_get_wayid(orig);
idx[1]=ftello(out);
if (way_hash) {
- if (!(g_hash_table_lookup_extended(way_hash, (gpointer)(long)idx[0], NULL, NULL)))
- g_hash_table_insert(way_hash, (gpointer)(long)idx[0], (gpointer)(long)idx[1]);
+ if (!(g_hash_table_lookup_extended(way_hash, (gpointer)(long long)idx[0], NULL, NULL)))
+ g_hash_table_insert(way_hash, (gpointer)(long long)idx[0], (gpointer)(long long)idx[1]);
} else {
if (!last_id || *last_id != idx[0])
dbg_assert(fwrite(idx, sizeof(idx), 1, out_index)==1);
@@ -3048,6 +3074,7 @@ resolve_ways(FILE *in, FILE *out)
c[i].x=ni->c.x;
c[i].y=ni->c.y;
}
+
}
item_bin_write(ib,out);
}
@@ -3103,7 +3130,6 @@ map_resolve_coords_and_split_at_intersections(FILE *in, FILE *out, FILE *out_ind
struct item_bin *ib;
struct node_item *ni;
long long last_id=0;
-
processed_nodes=processed_nodes_out=processed_ways=processed_relations=processed_tiles=0;
sig_alrm(0);
while ((ib=read_item(in))) {
diff --git a/navit/maptool/osm_o5m.c b/navit/maptool/osm_o5m.c
index 1ca3b1c3c..d6957067d 100644
--- a/navit/maptool/osm_o5m.c
+++ b/navit/maptool/osm_o5m.c
@@ -16,7 +16,7 @@ struct o5m {
int error;
int lat, lon, uid, version;
- long long id, rid[3], changeset;
+ unsigned long long id, rid[3], changeset;
time_t timestamp;
char *user;
};
@@ -49,24 +49,24 @@ static unsigned long long
get_uval(unsigned char **p)
{
unsigned char c;
- long long ret=0;
+ unsigned long long ret=0;
int shift=0;
for (;;) {
c=*((*p)++);
- ret+=((long long)c & 0x7f) << shift;
+ ret+=((unsigned long long)c & 0x7f) << shift;
if (!(c & 0x80))
return ret;
shift+=7;
}
}
-static unsigned long long
+static long long
get_sval(unsigned char **p)
{
- long long ret=get_uval(p);
+ unsigned long long ret=get_uval(p);
if (ret & 1) {
- return -((ret >> 1)+1);
+ return -((long long)(ret >> 1)+1);
} else {
return ret >> 1;
}
diff --git a/navit/maptool/osm_relations.c b/navit/maptool/osm_relations.c
index 1ad04a281..591ca7d9d 100644
--- a/navit/maptool/osm_relations.c
+++ b/navit/maptool/osm_relations.c
@@ -135,7 +135,7 @@ relations_process(struct relations *rel, FILE *nodes, FILE *ways)
{
char buffer[128];
struct item_bin *ib=(struct item_bin *)buffer;
- long long *id;
+ osmid *id;
struct coord *c=(struct coord *)(ib+1),cn={0,0};
struct node_item *ni;
GList *l;
@@ -146,7 +146,7 @@ relations_process(struct relations *rel, FILE *nodes, FILE *ways)
item_bin_add_attr_longlong(ib, attr_osm_nodeid, 0);
id=item_bin_get_attr(ib, attr_osm_nodeid, NULL);
while ((ni=read_node_item(nodes))) {
- *id=ni->id;
+ *id=ni->nd_id;
*c=ni->c;
l=g_hash_table_lookup(rel->member_hash[0], id);
while (l) {
diff --git a/navit/navigation.c b/navit/navigation.c
index ba9b5aaeb..cdad6331c 100644
--- a/navit/navigation.c
+++ b/navit/navigation.c
@@ -46,6 +46,10 @@
/* #define DEBUG */
+/** @file
+ *
+ * Generates navigation messages for a calculated route.
+ */
static int roundabout_extra_length=50;
/* TODO: find out if this is being used elsewhere and, if so, move this definition somewhere more generic */
@@ -86,7 +90,7 @@ static int turn_2_limit = 45;
static int sharp_turn_limit = 110;
/** Minimum absolute delta for a U turn.
- * Maneuvers whose absolute delta is less than this (but at least {@code min_turn_limit}) will always be announced as turns.
+ * Maneuvers whose absolute delta is less than this (but at least #min_turn_limit) will always be announced as turns.
* Note that, depending on other conditions, even maneuvers whose delta exceeds the threshold may still be announced as (sharp) turns. */
static int u_turn_limit = 165;
@@ -204,14 +208,14 @@ int distances[]={1,2,3,4,5,10,25,50,75,100,150,200,250,300,400,500,750,-1};
/** Merging into a motorway-like road, direction undefined.
* This value is not intended to be set directly but can be used for
- * comparisons, e.g. {@code merge_or_exit & mex_merge}. */
+ * comparisons, e.g. `merge_or_exit & mex_merge`. */
#define mex_merge 1
/** Exiting from a motorway-like road, direction undefined.
* This should only be used for ramps leading to a non-motorway road.
- * For interchanges, use {@code mex_interchange} instead.
+ * For interchanges, use #mex_interchange instead.
* This value is not intended to be set directly but can be used for
- * comparisons, e.g. {@code merge_or_exit & mex_exit}. */
+ * comparisons, e.g. `merge_or_exit & mex_merge`. */
#define mex_exit 2
/** Motorway-like road splits in two.
@@ -222,14 +226,14 @@ int distances[]={1,2,3,4,5,10,25,50,75,100,150,200,250,300,400,500,750,-1};
#define mex_merge_right 9
/** Exiting from a motorway-like road to the right.
- * See {@code mex_exit} for usage. */
+ * @see mex_exit for usage */
#define mex_exit_right 10
/** Merging into a motorway-like road to the left (coming from the right) */
#define mex_merge_left 17
/** Exiting from a motorway-like road to the left.
- * See {@code mex_exit} for usage. */
+ * @see mex_exit for usage */
#define mex_exit_left 18
/**
@@ -706,7 +710,7 @@ char *nav_status_to_text(int status) {
ret = g_strdup("status_routing");
break;
default:
- ret = g_strdup_printf("status_unknown_%d)", status);
+ ret = g_strdup_printf("status_unknown_%d", status);
}
return ret;
}
@@ -4440,7 +4444,7 @@ navigation_set_route(struct navigation *this_, struct route *route)
void
navigation_init(void)
{
- plugin_register_map_type("navigation", navigation_map_new);
+ plugin_register_category_map("navigation", navigation_map_new);
}
struct object_func navigation_func = {
diff --git a/navit/navit.c b/navit/navit.c
index b130ed967..9e4ea421b 100644
--- a/navit/navit.c
+++ b/navit/navit.c
@@ -144,6 +144,7 @@ struct navit {
int autozoom_min;
int autozoom_max;
int autozoom_active;
+ int autozoom_paused;
struct event_timeout *button_timeout, *motion_timeout;
struct callback *motion_timeout_callback;
int ignore_button;
@@ -176,6 +177,7 @@ struct navit {
int imperial;
int waypoints_flag;
struct coord_geo center;
+ int auto_switch; /*auto switching between day/night layout enabled ?*/
};
struct gui *main_loop_gui;
@@ -199,6 +201,7 @@ static void navit_cmd_set_center_cursor(struct navit *this_);
static void navit_cmd_announcer_toggle(struct navit *this_);
static void navit_set_vehicle(struct navit *this_, struct navit_vehicle *nv);
static int navit_set_vehicleprofile(struct navit *this_, struct vehicleprofile *vp);
+static void navit_cmd_switch_layout_day_night(struct navit *this_, char *function, struct attr **in, struct attr ***out, int valid);
struct object_func navit_func;
struct navit *global_navit;
@@ -659,12 +662,17 @@ navit_autozoom(struct navit *this_, struct coord *center, int speed, int draw)
return;
}
+ if(this_->autozoom_paused){
+ this_->autozoom_paused--;
+ return;
+ }
+
distance = speed * this_->autozoom_secs;
transform_get_size(this_->trans, &w, &h);
transform(this_->trans, transform_get_projection(this_->trans), center, &pc, 1, 0, 0, NULL);
scale = transform_get_scale(this_->trans);
-
+
/* We make sure that the point we want to see is within a certain range
* around the vehicle. The radius of this circle is the size of the
* screen. This doesn't necessarily mean the point is visible because of
@@ -699,6 +707,9 @@ void
navit_zoom_in(struct navit *this_, int factor, struct point *p)
{
long scale=transform_get_scale(this_->trans)/factor;
+ if(this_->autozoom_active){
+ this_->autozoom_paused = 10;
+ }
if (scale < 1)
scale=1;
navit_scale(this_, scale, p, 1);
@@ -716,6 +727,9 @@ void
navit_zoom_out(struct navit *this_, int factor, struct point *p)
{
long scale=transform_get_scale(this_->trans)*factor;
+ if(this_->autozoom_active){
+ this_->autozoom_paused = 10;
+ }
navit_scale(this_, scale, p, 1);
}
@@ -744,6 +758,7 @@ navit_zoom_out_cursor(struct navit *this_, int factor)
static int
navit_cmd_zoom_in(struct navit *this_)
{
+
navit_zoom_in_cursor(this_, 2);
return 0;
}
@@ -770,7 +785,7 @@ static GHashTable *cmd_attr_var_hash = NULL;
* Store key value pair for the command system (for int typed values)
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes in[0] is the key string, in[1] is the integer value to store
* @param out output attributes, unused
* @param valid unused
@@ -799,7 +814,7 @@ navit_cmd_set_int_var(struct navit *this, char *function, struct attr **in, stru
* Store key value pair for the command system (for attr typed values, can be used as opaque handles)
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes in[0] is the key string, in[1] is the attr* value to store
* @param out output attributes, unused
* @param valid unused
@@ -830,7 +845,7 @@ navit_cmd_set_attr_var(struct navit *this, char *function, struct attr **in, str
* command to toggle the active state of a named layer of the current layout
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] is the name of the layer
* @param out output unused
* @param valid unused
@@ -859,7 +874,7 @@ navit_cmd_toggle_layer(struct navit *this, char *function, struct attr **in, str
* adds an item with the current coordinate of the vehicle to a named map
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] is the name of the map
* @param out output attribute, 0 on error or the id of the created item on success
* @param valid unused
@@ -950,7 +965,7 @@ navit_cmd_map_add_curr_pos(struct navit *this, char *function, struct attr **in,
* sets an attribute (name value pair) of a map item specified by map name and item id
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] - name of the map ; in[1] - item ; in[2] - attr name ; in[3] - attr value
* @param out output attribute, 0 on error, 1 on success
* @param valid unused
@@ -1015,7 +1030,7 @@ navit_cmd_map_item_set_attr(struct navit *this, char *function, struct attr **in
* Get attr variable given a key string for the command system (for opaque usage)
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] is the key string
* @param out output attribute, the attr for the given key string if exists or NULL
* @param valid unused
@@ -1053,7 +1068,7 @@ navit_cmd_get_attr_var(struct navit *this, char *function, struct attr **in, str
* Get value given a key string for the command system
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] is the key string
* @param out output attribute, the value for the given key string if exists or 0
* @param valid unused
@@ -1092,7 +1107,7 @@ GList *cmd_int_var_stack = NULL;
* Push an integer to the stack for the command system
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attribute in[0] is the integer attibute to push
* @param out output attributes, unused
* @param valid unused
@@ -1112,7 +1127,7 @@ navit_cmd_push_int(struct navit *this, char *function, struct attr **in, struct
* Pop an integer from the command system's integer stack
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes unused
* @param out output attribute, the value popped if stack isn't empty or 0
* @param valid unused
@@ -1140,7 +1155,7 @@ navit_cmd_pop_int(struct navit *this, char *function, struct attr **in, struct a
* Get current size of command system's integer stack
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes unused
* @param out output attribute, the size of stack
* @param valid unused
@@ -1268,7 +1283,7 @@ navit_cmd_fmt_coordinates(struct navit *this, char *function, struct attr **in,
* Join several string attributes into one
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes in[0] - separator, in[1..] - attributes to join
* @param out output attribute joined attribute as string
* @param valid unused
@@ -1305,7 +1320,7 @@ navit_cmd_strjoin(struct navit *this, char *function, struct attr **in, struct a
* Call external program
*
* @param navit The navit instance
- * @param function unused (needed to match command function signiture)
+ * @param function unused (needed to match command function signature)
* @param in input attributes in[0] - name of executable, in[1..] - parameters
* @param out output attribute unused
* @param valid unused
@@ -1370,6 +1385,7 @@ static struct command_table commands[] = {
{"set_center",command_cast(navit_cmd_set_center)},
{"set_center_cursor",command_cast(navit_cmd_set_center_cursor)},
{"set_destination",command_cast(navit_cmd_set_destination)},
+ {"set_position",command_cast(navit_cmd_set_position)},
{"route_remove_next_waypoint",command_cast(navit_cmd_route_remove_next_waypoint)},
{"route_remove_last_waypoint",command_cast(navit_cmd_route_remove_last_waypoint)},
{"set_position",command_cast(navit_cmd_set_position)},
@@ -1387,6 +1403,7 @@ static struct command_table commands[] = {
{"map_item_set_attr",command_cast(navit_cmd_map_item_set_attr)},
{"set_attr_var",command_cast(navit_cmd_set_attr_var)},
{"get_attr_var",command_cast(navit_cmd_get_attr_var)},
+ {"switch_layout_day_night",command_cast(navit_cmd_switch_layout_day_night)},
};
void
@@ -1424,12 +1441,14 @@ navit_new(struct attr *parent, struct attr **attrs)
this_->autozoom_secs = 10;
this_->autozoom_min = 7;
this_->autozoom_active = 0;
+ this_->autozoom_paused = 0;
this_->zoom_min = 1;
this_->zoom_max = 2097152;
this_->autozoom_max = this_->zoom_max;
this_->follow_cursor = 1;
this_->radius = 30;
this_->border = 16;
+ this_->auto_switch = TRUE;
transform_from_geo(pro, &g, &co);
center.x=co.x;
@@ -2041,22 +2060,22 @@ navit_init(struct navit *this_)
dbg(lvl_info,"enter gui %p graphics %p\n",this_->gui,this_->gra);
if (!this_->gui && !(this_->flags & 2)) {
- dbg(lvl_error,"Warning: No GUI available.\n");
- return;
+ dbg(lvl_error,"FATAL: No GUI available.\n");
+ exit(1);
}
if (!this_->gra && !(this_->flags & 1)) {
- dbg(lvl_error,"Warning: No graphics subsystem available.\n");
- return;
+ dbg(lvl_error,"FATAL: No graphics subsystem available.\n");
+ exit(1);
}
dbg(lvl_info,"Connecting gui to graphics\n");
if (this_->gui && this_->gra && gui_set_graphics(this_->gui, this_->gra)) {
struct attr attr_type_gui, attr_type_graphics;
gui_get_attr(this_->gui, attr_type, &attr_type_gui, NULL);
graphics_get_attr(this_->gra, attr_type, &attr_type_graphics, NULL);
- dbg(lvl_error,"failed to connect graphics '%s' to gui '%s'\n", attr_type_graphics.u.str, attr_type_gui.u.str);
- dbg(lvl_error," Please see http://wiki.navit-project.org/index.php/Failed_to_connect_graphics_to_gui\n");
- dbg(lvl_error," for explanations and solutions\n");
- return;
+ dbg(lvl_error,"FATAL: Failed to connect graphics '%s' to gui '%s'\n", attr_type_graphics.u.str, attr_type_gui.u.str);
+ dbg(lvl_error,"Please see http://wiki.navit-project.org/index.php/Failed_to_connect_graphics_to_gui "
+ "for explanations and solutions\n");
+ exit(1);
}
if (this_->speech && this_->navigation) {
struct attr speech;
@@ -2314,18 +2333,35 @@ navit_set_cursors(struct navit *this_)
return;
}
+
+/**
+ * @brief Calculates the position of the cursor on the screen.
+ *
+ * This method considers padding if supported by the graphics plugin. In that case, the inner rectangle
+ * (i.e. screen size minus padding) will be used to center the cursor and to determine cursor offset (as
+ * specified in `this_->radius`).
+ *
+ * @param this_ The navit object
+ * @param p Receives the screen coordinates for the cursor
+ * @param keep_orientation Whether to maintain the current map orientation. If false, the map will be
+ * rotated so that the bearing of the vehicle is up.
+ * @param dir Receives the new map orientation as requested by `screen_orientation` (can be `NULL`)
+ *
+ * @return Always 1
+ */
static int
navit_get_cursor_pnt(struct navit *this_, struct point *p, int keep_orientation, int *dir)
{
int width, height;
struct navit_vehicle *nv=this_->vehicle;
+ struct padding *padding = NULL;
float offset=this_->radius; // Cursor offset from the center of the screen (percent).
#if 0 /* Better improve track.c to get that issue resolved or make it configurable with being off the default, the jumping back to the center is a bit annoying */
float min_offset = 0.; // Percent offset at min_offset_speed.
float max_offset = 30.; // Percent offset at max_offset_speed.
int min_offset_speed = 2; // Speed in km/h
- int max_offset_speed = 50; // Speed ini km/h
+ int max_offset_speed = 50; // Speed in km/h
// Calculate cursor offset from the center of the screen, upon speed.
if (nv->speed <= min_offset_speed) {
offset = min_offset;
@@ -2336,7 +2372,20 @@ navit_get_cursor_pnt(struct navit *this_, struct point *p, int keep_orientation,
}
#endif
+ if (this_->gra) {
+ padding = graphics_get_data(this_->gra, "padding");
+ } else
+ dbg(lvl_warning, "cannot get padding: this->gra is NULL\n");
+
transform_get_size(this_->trans, &width, &height);
+ dbg(lvl_debug, "width=%d height=%d\n", width, height);
+
+ if (padding) {
+ width -= (padding->left + padding->right);
+ height -= (padding->top + padding->bottom);
+ dbg(lvl_debug, "corrected for padding: width=%d height=%d\n", width, height);
+ }
+
if (this_->orientation == -1 || keep_orientation) {
p->x=50*width/100;
p->y=(50 + offset)*height/100;
@@ -2355,6 +2404,14 @@ navit_get_cursor_pnt(struct navit *this_, struct point *p, int keep_orientation,
if (dir)
*dir=this_->orientation;
}
+
+ if (padding) {
+ p->x += padding->left;
+ p->y += padding->top;
+ }
+
+ dbg(lvl_debug, "x=%d y=%d, offset=%f\n", p->x, p->y, offset);
+
return 1;
}
@@ -3323,24 +3380,27 @@ navit_get_displaylist(struct navit *this_)
return this_->displaylist;
}
+/*todo : make it switch to nightlayout when we are in a tunnel */
void
navit_layout_switch(struct navit *n)
{
- int currTs=0;
- struct attr iso8601_attr,geo_attr,valid_attr,layout_attr;
- double trise,tset,trise_actual;
- struct layout *l;
- int year, month, day;
-
- if (navit_get_attr(n,attr_layout,&layout_attr,NULL)!=1) {
- return; //No layout - nothing to switch
- }
- if (!n->vehicle)
- return;
- l=layout_attr.u.layout;
-
- if (l->dayname || l->nightname) {
+ int currTs=0;
+ struct attr iso8601_attr,geo_attr,valid_attr,layout_attr;
+ double trise,tset,trise_actual;
+ struct layout *l;
+ int year, month, day;
+ int after_sunrise = FALSE;
+ int after_sunset = FALSE;
+
+ if (navit_get_attr(n,attr_layout,&layout_attr,NULL)!=1) {
+ return; //No layout - nothing to switch
+ }
+ if (!n->vehicle)
+ return;
+ l=layout_attr.u.layout;
+
+ if (l->dayname || l->nightname) {
//Ok, we know that we have profile to switch
//Check that we aren't calculating too fast
@@ -3348,10 +3408,13 @@ navit_layout_switch(struct navit *n)
currTs=iso8601_to_secs(iso8601_attr.u.str);
dbg(lvl_debug,"currTs: %u:%u\n",currTs%86400/3600,((currTs%86400)%3600)/60);
}
+ dbg(lvl_debug,"prevTs: %u:%u\n",n->prevTs%86400/3600,((n->prevTs%86400)%3600)/60);
if (currTs-(n->prevTs)<60) {
- //We've have to wait a little
- return;
+ //We've have to wait a little
+ return;
}
+ if (n->auto_switch == FALSE)
+ return;
if (sscanf(iso8601_attr.u.str,"%d-%02d-%02dT",&year,&month,&day) != 3)
return;
if (vehicle_get_attr(n->vehicle->vehicle, attr_position_valid, &valid_attr,NULL) && valid_attr.u.num==attr_position_valid_invalid) {
@@ -3361,47 +3424,112 @@ navit_layout_switch(struct navit *n)
//No position - no sun
return;
}
-
//We calculate sunrise anyway, cause it is needed both for day and for night
- if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) {
+ if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) {
//near the pole sun never rises/sets, so we should never switch profiles
- dbg(lvl_warning,"trise: %u:%u, sun never visible, never switch profile\n",HOURS(trise),MINUTES(trise));
+ dbg(lvl_debug,"trise: %u:%u, sun never visible, never switch profile\n",HOURS(trise),MINUTES(trise));
n->prevTs=currTs;
return;
- }
-
- trise_actual=trise;
- dbg(lvl_debug,"trise: %u:%u\n",HOURS(trise),MINUTES(trise));
- if (l->dayname) {
-
- if ((HOURS(trise)*60+MINUTES(trise)==(currTs%86400)/60) ||
- (n->prevTs==0 && ((HOURS(trise)*60+MINUTES(trise)<(currTs%86400)/60)))) {
- //The sun is rising now!
- if (strcmp(l->name,l->dayname)) {
- navit_set_layout_by_name(n,l->dayname);
}
- }
+ trise_actual=trise;
+ dbg(lvl_debug,"trise: %u:%u\n",HOURS(trise),MINUTES(trise));
+ dbg(lvl_debug,"dayname = %s, name =%s \n",l->dayname, l->name);
+ if (HOURS(trise)*60+MINUTES(trise)<(currTs%86400)/60) {
+ after_sunrise = TRUE;
}
- if (l->nightname) {
- if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) {
+ dbg(lvl_debug,"nightname = %s, name = %s \n",l->nightname, l->name);
+ if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) {
//near the pole sun never rises/sets, so we should never switch profiles
- dbg(lvl_warning,"tset: %u:%u, sun always visible, never switch profile\n",HOURS(tset),MINUTES(tset));
+ dbg(lvl_debug,"tset: %u:%u, sun always visible, never switch profile\n",HOURS(tset),MINUTES(tset));
n->prevTs=currTs;
return;
- }
- dbg(lvl_debug,"tset: %u:%u\n",HOURS(tset),MINUTES(tset));
- if (HOURS(tset)*60+MINUTES(tset)==((currTs%86400)/60)
- || (n->prevTs==0 && (((HOURS(tset)*60+MINUTES(tset)<(currTs%86400)/60)) ||
- ((HOURS(trise_actual)*60+MINUTES(trise_actual)>(currTs%86400)/60))))) {
- //Time to sleep
- if (strcmp(l->name,l->nightname)) {
- navit_set_layout_by_name(n,l->nightname);
- }
- }
}
-
+ dbg(lvl_debug,"tset: %u:%u\n",HOURS(tset),MINUTES(tset));
+ if (((HOURS(tset)*60+MINUTES(tset)<(currTs%86400)/60)) ||
+ ((HOURS(trise_actual)*60+MINUTES(trise_actual)>(currTs%86400)/60))) {
+ after_sunset = TRUE;
+ }
+ if (after_sunrise && !after_sunset && l->dayname) {
+ navit_set_layout_by_name(n,l->dayname);
+ dbg(lvl_debug,"layout set to day\n");
+ }
+ else if (after_sunset && l->nightname) {
+ navit_set_layout_by_name(n,l->nightname);
+ dbg(lvl_debug,"layout set to night\n");
+ }
n->prevTs=currTs;
- }
+ }
+}
+
+/**
+ * @brief this command is used to change the layout and enable/disable the automatic layout switcher
+ *
+ * @param this_ The navit instance
+ * @param function unused
+ * @param in input attributes in[0], a string, see usage below
+ * @param out output attribute unused
+ * @param valid unused
+ *
+ *
+ * usage :
+ * manual : disable autoswitcher
+ * auto : enable autoswitcher
+ * manual_toggle : disable autoswitcher and toggle between day / night layout
+ * manual_day : disable autoswitcher and set to day layout
+ * manual_night : disable autoswitcher and set to night layout
+ *
+ * todo : make it return the state of the autoswitcher and
+ * the version of the active layout (day/night/undefined)
+ */
+static
+void navit_cmd_switch_layout_day_night(struct navit *this_, char *function, struct attr **in, struct attr ***out, int valid)
+{
+
+ if (!(in && in[0] && ATTR_IS_STRING(in[0]->type))) {
+ return;
+ }
+
+ dbg(lvl_debug," called with mode =%s\n",in[0]->u.str);
+
+ if (!this_->layout_current)
+ return;
+
+ if (!this_->vehicle)
+ return;
+
+ if (!strcmp(in[0]->u.str,"manual")) {
+ this_->auto_switch = FALSE;
+ }
+ else if (!strcmp(in[0]->u.str,"auto")) {
+ this_->auto_switch = TRUE;
+ this_->prevTs = 0;
+ navit_layout_switch(this_);
+ }
+ else if (!strcmp(in[0]->u.str,"manual_toggle")) {
+ if (this_->layout_current->dayname) {
+ navit_set_layout_by_name(this_,this_->layout_current->dayname);
+ this_->auto_switch = FALSE;
+ dbg(lvl_debug,"toggeled layout to = %s\n",this_->layout_current->name);
+ }
+ else if (this_->layout_current->nightname) {
+ navit_set_layout_by_name(this_,this_->layout_current->nightname);
+ this_->auto_switch = FALSE;
+ dbg(lvl_debug,"toggeled layout to = %s\n",this_->layout_current->name);
+ }
+ }
+ else if (!strcmp(in[0]->u.str,"manual_day") && this_->layout_current->dayname) {
+ navit_set_layout_by_name(this_,this_->layout_current->dayname);
+ this_->auto_switch = FALSE;
+ dbg(lvl_debug,"switched layout to = %s\n",this_->layout_current->name);
+ }
+ else if (!strcmp(in[0]->u.str,"manual_night") && this_->layout_current->nightname) {
+ navit_set_layout_by_name(this_,this_->layout_current->nightname);
+ this_->auto_switch = FALSE;
+ dbg(lvl_debug,"switched layout to = %s\n",this_->layout_current->name);
+ }
+
+ dbg(lvl_debug,"auto = %i\n",this_->auto_switch);
+ return;
}
int
diff --git a/navit/navit_shipped.xml b/navit/navit_shipped.xml
index 9ac4f0faf..eb2191963 100644
--- a/navit/navit_shipped.xml
+++ b/navit/navit_shipped.xml
@@ -88,13 +88,14 @@ Navigation</text></img>
<img cond='fullscreen==1' src='gui_leave_fullscreen' onclick='fullscreen=0'><text>Window Mode</text></img>
<img cond='navit.pitch==0' src='gui_map' onclick='navit.pitch=pitch;redraw_map();back_to_map()'><text>3D</text></img>
<img cond='navit.pitch!=0' src='gui_map' onclick='navit.pitch=0;redraw_map();back_to_map()'><text>2D</text></img>
+ <a href='#Settings Layers'><img src='gui_layers'><text>Layers</text></img></a>
</a>
<a name='Tools'><text>Tools</text>
<img src='gui_actions' onclick='locale()'><text>Show Locale</text></img>
</a>
<a name='Route'><text>Route</text>
<img src='gui_actions' onclick='route_description()'><text>Description</text></img>
- <img src='gui_actions' onclick='route_height_profile()'><text>Height Profile</text></img>
+ <img src='gui_heightprofile' onclick='route_height_profile()'><text>Height Profile</text></img>
<img cond='navit.waypoints_flag &amp;&amp; (navit.route.route_status&amp;1)' src='cursor_still' onclick='waypoints()'><text>Waypoints</text></img>
<img cond='navit.waypoints_flag &amp;&amp; (navit.route.route_status&amp;1)' src='gui_stop' onclick='navit.route_remove_last_waypoint()'><text>Drop last
Waypoint</text></img>
@@ -122,6 +123,17 @@ Waypoint</text></img>
"","navit.mapset.map[@data==%{se}].active=%{d}*",map.data,!map.active,"redraw_map();refresh();");
</script>
</a>
+ <a name='Settings Layers' class='clist'><text>Layers</text>
+ <script>
+ foreach(layer;navit.layout.layer)
+ if (layer.name)
+ img("centry",layer.active?"gui_active":"gui_inactive",layer.name,
+ "","navit.layout.layer[@name==%{se}].active=%{d}*",layer.name,!layer.active,"redraw_map();refresh();");
+ else
+ img("centry",layer.active?"gui_active":"gui_inactive",
+ "","navit.layout.layer[@name==%{se}].active=%{d}*",layer.name,!layer.active,"redraw_map();refresh();");
+ </script>
+ </a>
<a name='Settings Vehicles' class='clist'><text>Vehicle</text>
<script>
foreach(vehicle;navit.vehicle)
@@ -152,7 +164,9 @@ Waypoint</text></img>
]]></gui>
<!-- for a debug log -->
<log enabled="no" type="textfile_debug" data="debug_%Y%m%d-%i.txt" flush_size="1000" flush_time="30"/>
- <!-- osd items allow to position display and control items directly on top of the map: -->
+ <!-- osd items allow to position display and control items directly on top of the map.
+ You can find a list of all the available OSDs items here:
+ http://wiki.navit-project.org/index.php/OSD -->
<osd enabled="no" type="compass"/>
<osd enabled="no" type="navigation_next_turn"/>
@@ -182,7 +196,7 @@ Waypoint</text></img>
<!-- For the cumulative displacement filter to be enabled, set cdf_histsize="x" here, with x being an integer somewhere around 4 -->
<tracking cdf_histsize="0"/>
- <vehicleprofile name="car" route_depth="4:25%,8:40000,18:10000" flags="0x4000000" flags_forward_mask="0x4000002" flags_reverse_mask="0x4000001" maxspeed_handling="0" route_mode="0" static_speed="5" static_distance="25">
+ <vehicleprofile name="car" route_depth="4:25%,8:40000,18:10000" flags="0x4000000" flags_forward_mask="0x4040002" flags_reverse_mask="0x4040001" maxspeed_handling="0" route_mode="0" static_speed="5" static_distance="25">
<roadprofile item_types="street_0,street_1_city,living_street,street_service,track_gravelled,track_unpaved,street_parking_lane" speed="10" route_weight="10" />
<roadprofile item_types="street_2_city,track_paved" speed="30" route_weight="30" />
<roadprofile item_types="street_3_city" speed="40" route_weight="40" />
@@ -643,14 +657,28 @@ Waypoint</text></img>
<itemgra item_types="border_state" order="0-">
<polyline color="#808080" width="1"/>
</itemgra>
- <itemgra item_types="height_line_1" order="0-">
- <polyline color="#000000" width="4"/>
+ </layer>
+ <layer name="heightlines">
+ <itemgra item_types="height_line_1" order="7">
+ <polyline color="#000000" width="1"/>
</itemgra>
- <itemgra item_types="height_line_2" order="0-">
+ <itemgra item_types="height_line_1" order="8-">
+ <polyline color="#000000" width="3"/>
+ <text text_size="8"/>
+ </itemgra>
+ <itemgra item_types="height_line_2" order="8">
+ <polyline color="#000000" width="1"/>
+ </itemgra>
+ <itemgra item_types="height_line_2" order="9-">
<polyline color="#000000" width="2"/>
+ <text text_size="8"/>
+ </itemgra>
+ <itemgra item_types="height_line_3" order="9-11">
+ <polyline color="#000000" width="1"/>
</itemgra>
- <itemgra item_types="height_line_3" order="0-">
+ <itemgra item_types="height_line_3" order="12-">
<polyline color="#000000" width="1"/>
+ <text text_size="8"/>
</itemgra>
</layer>
<layer name="streets">
diff --git a/navit/osd.c b/navit/osd.c
index 26e8952ee..a0c9183d1 100644
--- a/navit/osd.c
+++ b/navit/osd.c
@@ -52,7 +52,7 @@ osd_new(struct attr *parent, struct attr **attrs)
if (! type)
return NULL;
- new=plugin_get_osd_type(type->u.str);
+ new=plugin_get_category_osd(type->u.str);
if (! new) {
dbg(lvl_error, "invalid OSD type '%s'\n", type->u.str);
return NULL;
@@ -171,15 +171,42 @@ osd_std_resize(struct osd_item *item)
* or relative height is set to 0% (int value is equal to ATTR_REL_RELSHIFT),
* object width (height) is not changed here, for button and image osds it means
* to derive values from the underlying image.
- * @param item
- * @param w Available screen width in pixels (the width that corresponds to
- * 100%)
- * @param h Available screen height in pixels (the height that corresponds to
- * 100%)
+ *
+ * This method considers padding if the graphics plugin supports it (i.e. its `get_data` method returns
+ * a valid pointer if `"padding"` is supplied as its arument): It will offset the origin of the item by
+ * the amount of padding in the left and top edges, and will reduce `w` and `h` by the total amount of
+ * padding in the respective dimension to obtain the equivalent of 100%.
+ *
+ * If the graphics driver does not support padding, none of these corrections take place (this is
+ * equivalent to 0 padding on all sides).
+ *
+ * @param item The item whose size and position are to be calculated
+ * @param w Available screen width in pixels
+ * @param h Available screen height in pixels
*/
void
osd_std_calculate_sizes(struct osd_item *item, int w, int h)
{
+ struct padding *padding = NULL;
+
+ if (item->gr) {
+ padding = graphics_get_data(item->gr, "padding");
+ if (padding) {
+ dbg(lvl_debug, "Got padding=%p for item=%p (item->gr=%p): left=%d top=%d right=%d bottom=%d\n",
+ padding, item, item->gr, padding->left, padding->top, padding->right, padding->bottom);
+ } else {
+ dbg(lvl_debug, "Got padding=%p for item=%p (item->gr=%p)\n",
+ padding, item, item->gr);
+ }
+ } else
+ dbg(lvl_warning, "cannot get padding for item=%p: item->gr is NULL\n", item);
+
+ /* reduce w and h by total padding in the respective dimension */
+ if (padding) {
+ w -= (padding->left + padding->right);
+ h -= (padding->top + padding->bottom);
+ }
+
if(item->rel_w!=ATTR_REL_RELSHIFT)
item->w=attr_rel2real(item->rel_w, w, 1);
if(item->w<0)
@@ -190,13 +217,21 @@ osd_std_calculate_sizes(struct osd_item *item, int w, int h)
item->h=0;
item->p.x=attr_rel2real(item->rel_x, w, 1);
item->p.y=attr_rel2real(item->rel_y, h, 1);
+
+ /* add left and top padding to item->p */
+ if (padding) {
+ item->p.x += padding->left;
+ item->p.y += padding->top;
+ }
}
/**
* @brief Recalculates the size and position of an OSD item and
* triggers a redraw of the item.
*
- * @param item
+ * This is a callback function that can be stored in the `resize_cb` member of an OSD item.
+ *
+ * @param item The OSD item to resize and redraw
* @param priv
* @param w Available screen width in pixels (the width that corresponds to
* 100%)
@@ -393,13 +428,44 @@ osd_set_keypress(struct navit *nav, struct osd_item *item)
}
}
+/**
+ * @brief Sets up the graphics for an item.
+ *
+ * This method creates a new graphics overlay for an item and initializes its attributes (colors, font
+ * and callbacks for resize and key events).
+ *
+ * @param nav The navit object
+ * @param item The OSD item
+ * @param priv The `struct osd_priv` for the OSD item
+ */
void
osd_set_std_graphic(struct navit *nav, struct osd_item *item, struct osd_priv *priv)
{
struct graphics *navit_gr;
+ int w, h;
+ struct padding *padding = NULL;
navit_gr = navit_get_graphics(nav);
- osd_std_calculate_sizes(item, navit_get_width(nav), navit_get_height(nav));
+ w = navit_get_width(nav);
+ h = navit_get_height(nav);
+
+ padding = graphics_get_data(navit_gr, "padding");
+
+ if (padding) {
+ dbg(lvl_debug, "Got padding=%p for item=%p: left=%d top=%d right=%d bottom=%d\n",
+ padding, item, padding->left, padding->top, padding->right, padding->bottom);
+ w -= (padding->left + padding->right);
+ h -= (padding->top + padding->bottom);
+ } else
+ dbg(lvl_debug, "Padding is NULL\n");
+
+ osd_std_calculate_sizes(item, w, h);
+
+ if (padding) {
+ item->p.x += padding->left;
+ item->p.y += padding->top;
+ }
+
item->gr = graphics_overlay_new(navit_gr, &item->p, item->w, item->h, 1);
item->graphic_bg = graphics_gc_new(item->gr);
diff --git a/navit/osd/core/osd_core.c b/navit/osd/core/osd_core.c
index 47fd5e49c..9b43a160b 100644
--- a/navit/osd/core/osd_core.c
+++ b/navit/osd/core/osd_core.c
@@ -156,9 +156,9 @@ format_distance(double distance, char *sep, int imperial)
return g_strdup_printf("%.1f%smi", distance / FEET_PER_MILE, sep);
}
} else {
- if (distance >= 100000)
+ if (distance >= 10000)
return g_strdup_printf("%.0f%skm", distance / 1000, sep);
- else if (distance >= 10000)
+ else if (distance >= 1000)
return g_strdup_printf("%.1f%skm", distance / 1000, sep);
else if (distance >= 300)
return g_strdup_printf("%.0f%sm", round(distance / 25) * 25, sep);
@@ -1412,12 +1412,29 @@ osd_compass_new(struct navit *nav, struct osd_methods *meth,
struct osd_button {
int use_overlay;
+ /* FIXME: do we need navit_init_cb? It is set in two places but never read.
+ * osd_button_new sets it to osd_button_init (init callback), and
+ * osd_button_init sets it to osd_std_click (click callback). */
struct callback *draw_cb,*navit_init_cb;
struct graphics_image *img;
char *src_dir,*src;
};
+/**
+ * @brief Adjusts width and height of an OSD item to fit the image it displays.
+ *
+ * A width or height of 0%, stored in relative attributes as {@code ATTR_REL_RELSHIFT}, is used as a flag
+ * indicating that the respective dimension is unset, i.e. determined by the dimensions of its image.
+ *
+ * If this is the case for height and/or width, the respective dimension will be updated to fit the image.
+ *
+ * Note that this method is used by several OSD items, notably {@code osd_image}, {@code osd_button} and
+ * {@code osd_android_menu}.
+ *
+ * @param opc The OSD item
+ * @param img The image displayed by the item
+ */
static void
osd_button_adjust_sizes(struct osd_priv_common *opc, struct graphics_image *img)
{
@@ -1440,7 +1457,7 @@ osd_button_draw(struct osd_priv_common *opc, struct navit *nav)
if (this->use_overlay) {
struct graphics_image *img;
- img=graphics_image_new(opc->osd_item.gr, this->src);
+ img=graphics_image_new_scaled(opc->osd_item.gr, this->src, opc->osd_item.w, opc->osd_item.h);
osd_button_adjust_sizes(opc, img);
p.x=(opc->osd_item.w-img->width)/2;
p.y=(opc->osd_item.h-img->height)/2;
@@ -1450,7 +1467,7 @@ osd_button_draw(struct osd_priv_common *opc, struct navit *nav)
} else {
struct graphics *gra;
gra = navit_get_graphics(nav);
- this->img = graphics_image_new(gra, this->src);
+ this->img = graphics_image_new_scaled(gra, this->src, opc->osd_item.w, opc->osd_item.h);
if (!this->img) {
dbg(lvl_warning, "failed to load '%s'\n", this->src);
@@ -1477,18 +1494,32 @@ osd_button_init(struct osd_priv_common *opc, struct navit *nav)
struct osd_button *this = (struct osd_button *)opc->data;
struct graphics *gra = navit_get_graphics(nav);
+
+ /* translate properties to real size */
+ osd_std_calculate_sizes(&opc->osd_item, navit_get_width(nav), navit_get_height(nav));
+ /* most graphics plugins cannot accept w=0 or h=0. They require special w=-1 or h=-1 for "no size"*/
+ if((opc->osd_item.w <= 0) || (opc->osd_item.h <=0))
+ {
+ opc->osd_item.w = -1;
+ opc->osd_item.h = -1;
+ }
dbg(lvl_debug, "enter\n");
- this->img = graphics_image_new(gra, this->src);
+ dbg(lvl_debug, "Get: %s, %d, %d, %d, %d\n", this->src, opc->osd_item.rel_w, opc->osd_item.rel_h, opc->osd_item.w, opc->osd_item.h);
+ this->img = graphics_image_new_scaled(gra, this->src, opc->osd_item.w, opc->osd_item.h);
if (!this->img) {
dbg(lvl_warning, "failed to load '%s'\n", this->src);
return;
}
+ else
+ {
+ dbg(lvl_debug,"Got %s: %d, %d\n", this->src, this->img->width, this->img->height);
+ }
osd_button_adjust_sizes(opc, this->img);
if (this->use_overlay) {
struct graphics_image *img;
struct point p;
osd_set_std_graphic(nav, &opc->osd_item, (struct osd_priv *)opc);
- img=graphics_image_new(opc->osd_item.gr, this->src);
+ img=graphics_image_new_scaled(opc->osd_item.gr, this->src, opc->osd_item.w, opc->osd_item.h);
p.x=(opc->osd_item.w-this->img->width)/2;
p.y=(opc->osd_item.h-this->img->height)/2;
osd_fill_with_bgcolor(&opc->osd_item);
@@ -1511,7 +1542,7 @@ osd_button_icon_path(struct osd_button *this_, char *src)
{
if (!this_->src_dir)
return graphics_icon_path(src);
- return g_strdup_printf("%s%s%s",this_->src_dir, G_DIR_SEPARATOR_S, src);
+ return g_strdup_printf("%s%s%s", this_->src_dir, G_DIR_SEPARATOR_S, src);
}
int
@@ -1533,7 +1564,7 @@ osd_button_set_attr(struct osd_priv_common *opc, struct attr* attr)
}
nav = opc->osd_item.navit;
gra = navit_get_graphics(nav);
- this_->img = graphics_image_new(gra, this_->src);
+ this_->img = graphics_image_new_scaled(gra, this_->src, opc->osd_item.w, opc->osd_item.h);
if (!this_->img) {
dbg(lvl_warning, "failed to load '%s'\n", this_->src);
return 0;
@@ -1692,12 +1723,16 @@ struct navigation_status {
/**
- * @brief Draws a {@code navigation_status} OSD.
+ * @brief Draws a `navigation_status` OSD.
+ *
+ * This method performs the actual operation of selecting and drawing the image. It can be called
+ * directly as a callback method for the `navigation.nav_status` attribute, or indirectly through the
+ * draw method.
*
* @param opc The OSD to draw
* @param status The status of the navigation engine (the value of the {@code nav_status} attribute)
*/
-static void osd_navigation_status_draw(struct osd_priv_common *opc, int status) {
+static void osd_navigation_status_draw_do(struct osd_priv_common *opc, int status) {
struct navigation_status *this = (struct navigation_status *)opc->data;
struct point p;
int do_draw = opc->osd_item.do_draw;
@@ -1757,6 +1792,29 @@ static void osd_navigation_status_draw(struct osd_priv_common *opc, int status)
/**
+ * @brief Draws a `navigation_status` OSD.
+ *
+ * This is the draw method for the OSD. It exposes the standard signature for the `draw` method and acts
+ * as a wrapper around `osd_navigation_status_draw_do()`.
+ *
+ * @param osd The OSD to draw.
+ * @param navit The navit instance
+ * @param v The vehicle (not used but part of the prototype)
+ */
+static void osd_navigation_status_draw(struct osd_priv *osd, struct navit *navit, struct vehicle *v) {
+ struct navigation *nav = NULL;
+ struct attr attr;
+
+ if (navit)
+ nav = navit_get_navigation(navit);
+ if (nav) {
+ if (navigation_get_attr(nav, attr_nav_status, &attr, NULL))
+ osd_navigation_status_draw_do((struct osd_priv_common *) osd, attr.u.num);
+ }
+}
+
+
+/**
* @brief Initializes a new {@code navigation_status} OSD.
*
* This function is registered as a callback function in {@link osd_navigation_status_new(struct navit *, struct osd_methods *, struct attr **)}.
@@ -1775,9 +1833,9 @@ static void osd_navigation_status_init(struct osd_priv_common *opc, struct navit
if (navit)
nav = navit_get_navigation(navit);
if (nav) {
- navigation_register_callback(nav, attr_nav_status, callback_new_attr_1(callback_cast(osd_navigation_status_draw), attr_nav_status, opc));
+ navigation_register_callback(nav, attr_nav_status, callback_new_attr_1(callback_cast(osd_navigation_status_draw_do), attr_nav_status, opc));
if (navigation_get_attr(nav, attr_nav_status, &attr, NULL))
- osd_navigation_status_draw(opc, attr.u.num);
+ osd_navigation_status_draw_do(opc, attr.u.num);
}
else
dbg(lvl_error, "navigation instance is NULL, OSD will never update\n");
@@ -2001,6 +2059,7 @@ osd_nav_next_turn_new(struct navit *nav, struct osd_methods *meth,
struct nav_toggle_announcer
{
int w,h;
+ /* FIXME this is actually the click callback, which is set once but never read. Do we need this? */
struct callback *navit_init_cb;
char *icon_src;
int icon_h, icon_w, active, last_state;
@@ -2438,6 +2497,8 @@ struct osd_speed_warner {
int bTextOnly;
struct graphics_image *img_active,*img_passive,*img_off;
char* label_str;
+ int timeout;
+ int wait_before_warn;
};
static void
@@ -2503,9 +2564,16 @@ osd_speed_warner_draw(struct osd_priv_common *opc, struct navit *navit, struct v
if( this->speed_exceed_limit_offset+routespeed<tracking_speed &&
(100.0+this->speed_exceed_limit_percent)/100.0*routespeed<tracking_speed ) {
if(this->announce_state==eNoWarn && this->announce_on) {
- this->announce_state=eWarningTold; //warning told
- navit_say(navit,_("Please decrease your speed"));
+ if(this->wait_before_warn>0){
+ this->wait_before_warn--;
+ }else{
+ this->announce_state=eWarningTold; //warning told
+ navit_say(navit,_("Please decrease your speed"));
+ }
}
+ }else{
+ /* reset speed warning */
+ this->wait_before_warn = this->timeout;
}
if( tracking_speed <= routespeed ) {
this->announce_state=eNoWarn; //no warning
@@ -2560,7 +2628,7 @@ osd_speed_warner_init(struct osd_priv_common *opc, struct navit *nav)
if (opc->osd_item.h < this->d)
this->d=opc->osd_item.h;
this->width=this->d/10;
-
+ this->wait_before_warn = this->timeout;
if(this->label_str && !strncmp("images:",this->label_str,7)) {
char *tok1=NULL, *tok2=NULL, *tok3=NULL;
strtok(this->label_str,":");
@@ -2645,7 +2713,12 @@ osd_speed_warner_new(struct navit *nav, struct osd_methods *meth, struct attr **
this->bTextOnly = 1;
}
}
-
+ attr = attr_search(attrs, NULL, attr_timeout);
+ if (attr)
+ this->timeout = attr->u.num;
+ else
+ this->timeout = 10; // 10s timeout by default
+
attr = attr_search(attrs, NULL, attr_announce_on);
if (attr)
this->announce_on = attr->u.num;
@@ -3807,21 +3880,21 @@ osd_auxmap_new(struct navit *nav, struct osd_methods *meth, struct attr **attrs)
void
plugin_init(void)
{
- plugin_register_osd_type("compass", osd_compass_new);
- plugin_register_osd_type("navigation_next_turn", osd_nav_next_turn_new);
- plugin_register_osd_type("button", osd_button_new);
- plugin_register_osd_type("toggle_announcer", osd_nav_toggle_announcer_new);
- plugin_register_osd_type("speed_warner", osd_speed_warner_new);
- plugin_register_osd_type("speed_cam", osd_speed_cam_new);
- plugin_register_osd_type("text", osd_text_new);
- plugin_register_osd_type("gps_status", osd_gps_status_new);
- plugin_register_osd_type("volume", osd_volume_new);
- plugin_register_osd_type("scale", osd_scale_new);
- plugin_register_osd_type("image", osd_image_new);
- plugin_register_osd_type("stopwatch", osd_stopwatch_new);
- plugin_register_osd_type("odometer", osd_odometer_new);
- plugin_register_osd_type("auxmap", osd_auxmap_new);
- plugin_register_osd_type("cmd_interface", osd_cmd_interface_new);
- plugin_register_osd_type("route_guard", osd_route_guard_new);
- plugin_register_osd_type("navigation_status", osd_navigation_status_new);
+ plugin_register_category_osd("compass", osd_compass_new);
+ plugin_register_category_osd("navigation_next_turn", osd_nav_next_turn_new);
+ plugin_register_category_osd("button", osd_button_new);
+ plugin_register_category_osd("toggle_announcer", osd_nav_toggle_announcer_new);
+ plugin_register_category_osd("speed_warner", osd_speed_warner_new);
+ plugin_register_category_osd("speed_cam", osd_speed_cam_new);
+ plugin_register_category_osd("text", osd_text_new);
+ plugin_register_category_osd("gps_status", osd_gps_status_new);
+ plugin_register_category_osd("volume", osd_volume_new);
+ plugin_register_category_osd("scale", osd_scale_new);
+ plugin_register_category_osd("image", osd_image_new);
+ plugin_register_category_osd("stopwatch", osd_stopwatch_new);
+ plugin_register_category_osd("odometer", osd_odometer_new);
+ plugin_register_category_osd("auxmap", osd_auxmap_new);
+ plugin_register_category_osd("cmd_interface", osd_cmd_interface_new);
+ plugin_register_category_osd("route_guard", osd_route_guard_new);
+ plugin_register_category_osd("navigation_status", osd_navigation_status_new);
}
diff --git a/navit/plugin.c b/navit/plugin.c
index 2edf9ed74..8c61bc9b7 100644
--- a/navit/plugin.c
+++ b/navit/plugin.c
@@ -378,9 +378,9 @@ plugins_destroy(struct plugins *pls)
}
static void *
-find_by_name(enum plugin_type type, const char *name)
+find_by_name(enum plugin_category category, const char *name)
{
- GList *name_list=plugin_types[type];
+ GList *name_list=plugin_categories[category];
while (name_list) {
struct name_val *nv=name_list->data;
if (!g_ascii_strcasecmp(nv->name, name))
@@ -391,23 +391,23 @@ find_by_name(enum plugin_type type, const char *name)
}
void *
-plugin_get_type(enum plugin_type type, const char *type_name, const char *name)
+plugin_get_category(enum plugin_category category, const char *category_name, const char *name)
{
GList *plugin_list;
struct plugin *pl;
char *mod_name, *filename=NULL, *corename=NULL;
void *result=NULL;
- dbg(lvl_debug, "type=\"%s\", name=\"%s\"\n", type_name, name);
+ dbg(lvl_debug, "category=\"%s\", name=\"%s\"\n", category_name, name);
- if ((result=find_by_name(type, name))) {
+ if ((result=find_by_name(category, name))) {
return result;
}
if (!pls)
return NULL;
plugin_list=pls->list;
- filename=g_strjoin("", "lib", type_name, "_", name, NULL);
- corename=g_strjoin("", "lib", type_name, "_", "core", NULL);
+ filename=g_strjoin("", "lib", category_name, "_", name, NULL);
+ corename=g_strjoin("", "lib", category_name, "_", "core", NULL);
while (plugin_list) {
pl=plugin_list->data;
if ((mod_name=g_strrstr(pl->name, "/")))
@@ -421,7 +421,7 @@ plugin_get_type(enum plugin_type type, const char *type_name, const char *name)
plugin_set_active(pl, 0);
if (plugin_get_active(pl))
plugin_call_init(pl);
- if ((result=find_by_name(type, name))) {
+ if ((result=find_by_name(category, name))) {
g_free(filename);
g_free(corename);
return result;
diff --git a/navit/plugin.h b/navit/plugin.h
index 23901b4ed..4687a6460 100644
--- a/navit/plugin.h
+++ b/navit/plugin.h
@@ -25,16 +25,32 @@ extern "C" {
struct plugin;
-enum plugin_type {
- plugin_type_graphics,
- plugin_type_gui,
- plugin_type_map,
- plugin_type_osd,
- plugin_type_speech,
- plugin_type_vehicle,
- plugin_type_event,
- plugin_type_font,
- plugin_type_last,
+/**
+ * @brief All existing plugin categories.
+ *
+ * Plugins are grouped into categories. Plugins within one category offer the same
+ * functionality (GUI, graphics, map etc.). Consequently the category determines the API
+ * offered by a plugin.
+ */
+enum plugin_category {
+ /** Category for plugins which implement a graphics backend. */
+ plugin_category_graphics,
+ /** Category for plugins which implement a GUI frontend. */
+ plugin_category_gui,
+ /** Category for plugins which implement a driver for providing/loading map data. */
+ plugin_category_map,
+ /** Category for plugins which implement an OSD. */
+ plugin_category_osd,
+ /** Category for plugins which implement speech output. */
+ plugin_category_speech,
+ /** Category for plugins which supply position data (typically from a GPS receiver). */
+ plugin_category_vehicle,
+ /** Category for plugins which implement/wrap an event subsystem. */
+ plugin_category_event,
+ /** Category for plugins which load fonts. */
+ plugin_category_font,
+ /** Dummy for last entry. */
+ plugin_category_last,
};
#endif
@@ -44,7 +60,7 @@ struct popup_item;
#undef PLUGIN_FUNC1
#undef PLUGIN_FUNC3
#undef PLUGIN_FUNC4
-#undef PLUGIN_TYPE
+#undef PLUGIN_CATEGORY
#define PLUGIN_PROTO(name,...) void name(__VA_ARGS__)
#ifdef PLUGIN_C
@@ -81,25 +97,25 @@ struct name_val {
void *val;
};
-GList *plugin_types[plugin_type_last];
+GList *plugin_categories[plugin_category_last];
-#define PLUGIN_TYPE(type,newargs) \
-struct type##_priv; \
-struct type##_methods; \
+#define PLUGIN_CATEGORY(category,newargs) \
+struct category##_priv; \
+struct category##_methods; \
void \
-plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs) \
+plugin_register_category_##category(const char *name, struct category##_priv *(*new_) newargs) \
{ \
struct name_val *nv; \
nv=g_new(struct name_val, 1); \
nv->name=g_strdup(name); \
nv->val=new_; \
- plugin_types[plugin_type_##type]=g_list_append(plugin_types[plugin_type_##type], nv); \
+ plugin_categories[plugin_category_##category]=g_list_append(plugin_categories[plugin_category_##category], nv); \
} \
\
void * \
-plugin_get_##type##_type(const char *name) \
+plugin_get_category_##category(const char *name) \
{ \
- return plugin_get_type(plugin_type_##type, #type, name); \
+ return plugin_get_category(plugin_category_##category, #category, name); \
}
#else
@@ -115,11 +131,11 @@ void plugin_call_##name(t1 p1,t2 p2,t3 p3);
void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
-#define PLUGIN_TYPE(type,newargs) \
-struct type##_priv; \
-struct type##_methods; \
-void plugin_register_##type##_type(const char *name, struct type##_priv *(*new_) newargs); \
-void *plugin_get_##type##_type(const char *name);
+#define PLUGIN_CATEGORY(category,newargs) \
+struct category##_priv; \
+struct category##_methods; \
+void plugin_register_category_##category(const char *name, struct category##_priv *(*new_) newargs); \
+void *plugin_get_category_##category(const char *name);
#endif
@@ -148,7 +164,7 @@ struct plugins *plugins_new(void);
struct plugin *plugin_new(struct attr *parent, struct attr ** attrs);
void plugins_init(struct plugins *pls);
void plugins_destroy(struct plugins *pls);
-void *plugin_get_type(enum plugin_type type, const char *type_name, const char *name);
+void *plugin_get_category(enum plugin_category category, const char *category_name, const char *name);
/* end of prototypes */
#ifdef __cplusplus
diff --git a/navit/plugin/j1850/j1850.c b/navit/plugin/j1850/j1850.c
index b4648bcfe..26e18057d 100644
--- a/navit/plugin/j1850/j1850.c
+++ b/navit/plugin/j1850/j1850.c
@@ -502,5 +502,5 @@ plugin_init(void)
struct attr callback,navit;
struct attr_iter *iter;
- plugin_register_osd_type("j1850", osd_j1850_new);
+ plugin_register_category_osd("j1850", osd_j1850_new);
}
diff --git a/navit/plugin/pedestrian/pedestrian.c b/navit/plugin/pedestrian/pedestrian.c
index 444543694..7e5a4361d 100644
--- a/navit/plugin/pedestrian/pedestrian.c
+++ b/navit/plugin/pedestrian/pedestrian.c
@@ -1369,8 +1369,8 @@ plugin_init(void)
(*jnienv)->CallVoidMethod(jnienv, android_activity, Activity_setRequestedOrientation, 0);
#endif
- plugin_register_osd_type("marker", osd_marker_new);
- plugin_register_map_type("route_occluded", map_route_occluded_new);
+ plugin_register_category_osd("marker", osd_marker_new);
+ plugin_register_category_map("route_occluded", map_route_occluded_new);
callback.type=attr_callback;
callback.u.callback=callback_new_attr_0(callback_cast(pedestrian_navit), attr_navit);
config_add_attr(config, &callback);
diff --git a/navit/plugin_def.h b/navit/plugin_def.h
index 01acea7bf..985160e6f 100644
--- a/navit/plugin_def.h
+++ b/navit/plugin_def.h
@@ -23,11 +23,11 @@ struct callback_list;
struct gui;
PLUGIN_FUNC1(draw, struct container *, co)
PLUGIN_FUNC3(popup, struct container *, map, struct popup *, p, struct popup_item **, list)
-PLUGIN_TYPE(graphics, (struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl))
-PLUGIN_TYPE(gui, (struct navit *nav, struct gui_methods *meth, struct attr **attrs, struct gui *gui))
-PLUGIN_TYPE(map, (struct map_methods *meth, struct attr **attrs, struct callback_list *cbl))
-PLUGIN_TYPE(osd, (struct navit *nav, struct osd_methods *meth, struct attr **attrs))
-PLUGIN_TYPE(speech, (struct speech_methods *meth, struct attr **attrs, struct attr *parent))
-PLUGIN_TYPE(vehicle, (struct vehicle_methods *meth, struct callback_list *cbl, struct attr **attrs))
-PLUGIN_TYPE(event, (struct event_methods *meth))
-PLUGIN_TYPE(font, (void *meth))
+PLUGIN_CATEGORY(graphics, (struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl))
+PLUGIN_CATEGORY(gui, (struct navit *nav, struct gui_methods *meth, struct attr **attrs, struct gui *gui))
+PLUGIN_CATEGORY(map, (struct map_methods *meth, struct attr **attrs, struct callback_list *cbl))
+PLUGIN_CATEGORY(osd, (struct navit *nav, struct osd_methods *meth, struct attr **attrs))
+PLUGIN_CATEGORY(speech, (struct speech_methods *meth, struct attr **attrs, struct attr *parent))
+PLUGIN_CATEGORY(vehicle, (struct vehicle_methods *meth, struct callback_list *cbl, struct attr **attrs))
+PLUGIN_CATEGORY(event, (struct event_methods *meth))
+PLUGIN_CATEGORY(font, (void *meth))
diff --git a/navit/route.c b/navit/route.c
index 37d1282a8..e367c3855 100644
--- a/navit/route.c
+++ b/navit/route.c
@@ -2831,11 +2831,12 @@ static void
route_graph_clone_segment(struct route_graph *this, struct route_graph_segment *s, struct route_graph_point *start, struct route_graph_point *end, int flags)
{
struct route_graph_segment_data data;
- data.flags=s->data.flags|flags;
- data.offset=1;
- data.maxspeed=-1;
data.item=&s->data.item;
+ data.offset=1;
+ data.flags=s->data.flags|flags;
data.len=s->data.len+1;
+ data.maxspeed=-1;
+ data.dangerous_goods=0;
if (s->data.flags & AF_SPEED_LIMIT)
data.maxspeed=RSD_MAXSPEED(&s->data);
if (s->data.flags & AF_SEGMENTED)
@@ -4201,8 +4202,8 @@ route_attr_iter_destroy(struct attr_iter *iter)
void
route_init(void)
{
- plugin_register_map_type("route", route_map_new);
- plugin_register_map_type("route_graph", route_graph_map_new);
+ plugin_register_category_map("route", route_map_new);
+ plugin_register_category_map("route_graph", route_graph_map_new);
}
void
diff --git a/navit/speech.c b/navit/speech.c
index d3b09ae3a..cabd998dc 100644
--- a/navit/speech.c
+++ b/navit/speech.c
@@ -45,7 +45,7 @@ speech_new(struct attr *parent, struct attr **attrs)
return NULL;
}
dbg(lvl_debug,"type='%s'\n", attr->u.str);
- speech_new=plugin_get_speech_type(attr->u.str);
+ speech_new=plugin_get_category_speech(attr->u.str);
dbg(lvl_debug,"new=%p\n", speech_new);
if (! speech_new) {
dbg(lvl_error,"wrong type '%s'\n", attr->u.str);
diff --git a/navit/speech/android/speech_android.c b/navit/speech/android/speech_android.c
index 3323245aa..2b3f2612c 100644
--- a/navit/speech/android/speech_android.c
+++ b/navit/speech/android/speech_android.c
@@ -145,5 +145,5 @@ speech_android_new(struct speech_methods *meth, struct attr **attrs, struct attr
void
plugin_init(void)
{
- plugin_register_speech_type("android", speech_android_new);
+ plugin_register_category_speech("android", speech_android_new);
}
diff --git a/navit/speech/cmdline/speech_cmdline.c b/navit/speech/cmdline/speech_cmdline.c
index 49252f346..490811ce5 100644
--- a/navit/speech/cmdline/speech_cmdline.c
+++ b/navit/speech/cmdline/speech_cmdline.c
@@ -261,5 +261,5 @@ speechd_new(struct speech_methods *meth, struct attr **attrs, struct attr *paren
void
plugin_init(void)
{
- plugin_register_speech_type("cmdline", speechd_new);
+ plugin_register_category_speech("cmdline", speechd_new);
}
diff --git a/navit/speech/dbus/speech_dbus.c b/navit/speech/dbus/speech_dbus.c
index 53ab46f03..0fdfb71ab 100644
--- a/navit/speech/dbus/speech_dbus.c
+++ b/navit/speech/dbus/speech_dbus.c
@@ -73,5 +73,5 @@ speech_dbus_new(struct speech_methods *meth, struct attr **attrs, struct attr *p
void
plugin_init(void)
{
- plugin_register_speech_type("dbus", speech_dbus_new);
+ plugin_register_category_speech("dbus", speech_dbus_new);
}
diff --git a/navit/speech/espeak/speak.c b/navit/speech/espeak/speak.c
index 523679b38..329a05d01 100644
--- a/navit/speech/espeak/speak.c
+++ b/navit/speech/espeak/speak.c
@@ -514,5 +514,5 @@ espeak_new(struct speech_methods *meth, struct attr **attrs, struct attr *parent
void
plugin_init(void)
{
- plugin_register_speech_type("espeak", espeak_new);
+ plugin_register_category_speech("espeak", espeak_new);
}
diff --git a/navit/speech/speech_dispatcher/speech_speech_dispatcher.c b/navit/speech/speech_dispatcher/speech_speech_dispatcher.c
index 05228187c..d22b3f795 100644
--- a/navit/speech/speech_dispatcher/speech_speech_dispatcher.c
+++ b/navit/speech/speech_dispatcher/speech_speech_dispatcher.c
@@ -77,5 +77,5 @@ speechd_new(struct speech_methods *meth, struct attr **attrs, struct attr *attr)
void
plugin_init(void)
{
- plugin_register_speech_type("speech_dispatcher", speechd_new);
+ plugin_register_category_speech("speech_dispatcher", speechd_new);
}
diff --git a/navit/track.c b/navit/track.c
index 7e9f6fdff..5c16e4261 100644
--- a/navit/track.c
+++ b/navit/track.c
@@ -1227,5 +1227,5 @@ tracking_map_new(struct map_methods *meth, struct attr **attrs, struct callback_
void
tracking_init(void)
{
- plugin_register_map_type("tracking", tracking_map_new);
+ plugin_register_category_map("tracking", tracking_map_new);
}
diff --git a/navit/types.h b/navit/types.h
index 987b42a71..b91e01bd8 100644
--- a/navit/types.h
+++ b/navit/types.h
@@ -29,9 +29,11 @@ typedef int32_t s32;
typedef uint32_t u32;
#ifdef HAVE_API_WIN32_BASE
+#define ULONGLONG_FMT "%I64u"
#define LONGLONG_FMT "%I64d"
#define LONGLONG_HEX_FMT "%I64x"
#else
+#define ULONGLONG_FMT "%llu"
#define LONGLONG_FMT "%lld"
#define LONGLONG_HEX_FMT "%llx"
#endif
diff --git a/navit/vehicle.c b/navit/vehicle.c
index a280fb024..33cecb0e9 100644
--- a/navit/vehicle.c
+++ b/navit/vehicle.c
@@ -122,7 +122,7 @@ vehicle_new(struct attr *parent, struct attr **attrs)
*colon = '\0';
dbg(lvl_debug, "source='%s' type='%s'\n", source->u.str, type);
- vehicletype_new = plugin_get_vehicle_type(type);
+ vehicletype_new = plugin_get_category_vehicle(type);
if (!vehicletype_new) {
dbg(lvl_error, "invalid source '%s': unknown type '%s'\n", source->u.str, type);
g_free(type);
diff --git a/navit/vehicle/android/vehicle_android.c b/navit/vehicle/android/vehicle_android.c
index d4b784a0e..89882d048 100644
--- a/navit/vehicle/android/vehicle_android.c
+++ b/navit/vehicle/android/vehicle_android.c
@@ -292,5 +292,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("android", vehicle_android_new_android);
+ plugin_register_category_vehicle("android", vehicle_android_new_android);
}
diff --git a/navit/vehicle/demo/vehicle_demo.c b/navit/vehicle/demo/vehicle_demo.c
index c5cf7e045..59a119204 100644
--- a/navit/vehicle/demo/vehicle_demo.c
+++ b/navit/vehicle/demo/vehicle_demo.c
@@ -298,5 +298,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("demo", vehicle_demo_new);
+ plugin_register_category_vehicle("demo", vehicle_demo_new);
}
diff --git a/navit/vehicle/file/vehicle_file.c b/navit/vehicle/file/vehicle_file.c
index f7a0024b9..bb6134042 100644
--- a/navit/vehicle/file/vehicle_file.c
+++ b/navit/vehicle/file/vehicle_file.c
@@ -1046,8 +1046,8 @@ vehicle_file_new_file(struct vehicle_methods
void plugin_init(void)
{
dbg(lvl_debug, "vehicle_file:plugin_init:enter\n");
- plugin_register_vehicle_type("file", vehicle_file_new_file);
- plugin_register_vehicle_type("pipe", vehicle_file_new_file);
- plugin_register_vehicle_type("socket", vehicle_file_new_file);
- plugin_register_vehicle_type("serial", vehicle_file_new_file);
+ plugin_register_category_vehicle("file", vehicle_file_new_file);
+ plugin_register_category_vehicle("pipe", vehicle_file_new_file);
+ plugin_register_category_vehicle("socket", vehicle_file_new_file);
+ plugin_register_category_vehicle("serial", vehicle_file_new_file);
}
diff --git a/navit/vehicle/file/vehicle_pipe.c b/navit/vehicle/file/vehicle_pipe.c
index 0750edef3..420390d4e 100644
--- a/navit/vehicle/file/vehicle_pipe.c
+++ b/navit/vehicle/file/vehicle_pipe.c
@@ -23,5 +23,5 @@
void
plugin_init(void)
{
- plugin_get_vehicle_type("file");
+ plugin_get_category_vehicle("file");
}
diff --git a/navit/vehicle/file/vehicle_serial.c b/navit/vehicle/file/vehicle_serial.c
index 0750edef3..420390d4e 100644
--- a/navit/vehicle/file/vehicle_serial.c
+++ b/navit/vehicle/file/vehicle_serial.c
@@ -23,5 +23,5 @@
void
plugin_init(void)
{
- plugin_get_vehicle_type("file");
+ plugin_get_category_vehicle("file");
}
diff --git a/navit/vehicle/file/vehicle_socket.c b/navit/vehicle/file/vehicle_socket.c
index 0750edef3..420390d4e 100644
--- a/navit/vehicle/file/vehicle_socket.c
+++ b/navit/vehicle/file/vehicle_socket.c
@@ -23,5 +23,5 @@
void
plugin_init(void)
{
- plugin_get_vehicle_type("file");
+ plugin_get_category_vehicle("file");
}
diff --git a/navit/vehicle/gpsd/vehicle_gpsd.c b/navit/vehicle/gpsd/vehicle_gpsd.c
index 73d9e648d..a8c29cd97 100644
--- a/navit/vehicle/gpsd/vehicle_gpsd.c
+++ b/navit/vehicle/gpsd/vehicle_gpsd.c
@@ -471,5 +471,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("gpsd", vehicle_gpsd_new_gpsd);
+ plugin_register_category_vehicle("gpsd", vehicle_gpsd_new_gpsd);
}
diff --git a/navit/vehicle/gpsd_dbus/vehicle_gpsd_dbus.c b/navit/vehicle/gpsd_dbus/vehicle_gpsd_dbus.c
index dda774e35..fa5eb8780 100644
--- a/navit/vehicle/gpsd_dbus/vehicle_gpsd_dbus.c
+++ b/navit/vehicle/gpsd_dbus/vehicle_gpsd_dbus.c
@@ -244,5 +244,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("gpsd_dbus", vehicle_gpsd_dbus_new);
+ plugin_register_category_vehicle("gpsd_dbus", vehicle_gpsd_dbus_new);
}
diff --git a/navit/vehicle/gypsy/vehicle_gypsy.c b/navit/vehicle/gypsy/vehicle_gypsy.c
index 2ff9389f7..589e53a3f 100644
--- a/navit/vehicle/gypsy/vehicle_gypsy.c
+++ b/navit/vehicle/gypsy/vehicle_gypsy.c
@@ -493,5 +493,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("gypsy", vehicle_gypsy_new_gypsy);
+ plugin_register_category_vehicle("gypsy", vehicle_gypsy_new_gypsy);
}
diff --git a/navit/vehicle/iphone/vehicle_iphone.c b/navit/vehicle/iphone/vehicle_iphone.c
index 4c25c0235..94fec114a 100644
--- a/navit/vehicle/iphone/vehicle_iphone.c
+++ b/navit/vehicle/iphone/vehicle_iphone.c
@@ -161,5 +161,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("iphone", vehicle_iphone_new);
+ plugin_register_category_vehicle("iphone", vehicle_iphone_new);
}
diff --git a/navit/vehicle/maemo/vehicle_maemo.c b/navit/vehicle/maemo/vehicle_maemo.c
index 661202d67..d686a6a03 100644
--- a/navit/vehicle/maemo/vehicle_maemo.c
+++ b/navit/vehicle/maemo/vehicle_maemo.c
@@ -325,5 +325,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("maemo", vehicle_maemo_new_maemo);
+ plugin_register_category_vehicle("maemo", vehicle_maemo_new_maemo);
}
diff --git a/navit/vehicle/null/vehicle_null.c b/navit/vehicle/null/vehicle_null.c
index 134538cc3..643945c71 100644
--- a/navit/vehicle/null/vehicle_null.c
+++ b/navit/vehicle/null/vehicle_null.c
@@ -179,5 +179,5 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("null", vehicle_null_new_null);
+ plugin_register_category_vehicle("null", vehicle_null_new_null);
}
diff --git a/navit/vehicle/webos/vehicle_webos.c b/navit/vehicle/webos/vehicle_webos.c
index e0a849b97..a5bba4bce 100644
--- a/navit/vehicle/webos/vehicle_webos.c
+++ b/navit/vehicle/webos/vehicle_webos.c
@@ -381,6 +381,6 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("webos", vehicle_webos_new);
+ plugin_register_category_vehicle("webos", vehicle_webos_new);
}
diff --git a/navit/vehicle/wince/vehicle_wince.c b/navit/vehicle/wince/vehicle_wince.c
index 8dd3e40db..38cab3f1c 100644
--- a/navit/vehicle/wince/vehicle_wince.c
+++ b/navit/vehicle/wince/vehicle_wince.c
@@ -949,6 +949,6 @@ void
plugin_init(void)
{
dbg(lvl_debug, "enter\n");
- plugin_register_vehicle_type("wince", vehicle_wince_new);
- plugin_register_vehicle_type("file", vehicle_wince_new);
+ plugin_register_category_vehicle("wince", vehicle_wince_new);
+ plugin_register_category_vehicle("file", vehicle_wince_new);
}
diff --git a/navit/window.h b/navit/window.h
index b2e2acb7a..706bea798 100644
--- a/navit/window.h
+++ b/navit/window.h
@@ -17,8 +17,11 @@
* Boston, MA 02110-1301, USA.
*/
+/**
+ * Describes the Navit application window or equivalent.
+ */
struct window {
- void *priv;
- int (*fullscreen)(struct window *win, int on);
- void (*disable_suspend)(struct window *win);
+ void *priv; /**< Private data of the graphics implementation */
+ int (*fullscreen)(struct window *win, int on); /**< Method to toggle fullscreen mode */
+ void (*disable_suspend)(struct window *win); /**< Method to disable suspend mode or screen savers */
};
diff --git a/navit/xpm/gui_android_menu.svg b/navit/xpm/gui_android_menu.svg
new file mode 100644
index 000000000..b47eae076
--- /dev/null
+++ b/navit/xpm/gui_android_menu.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ viewBox="0 0 48 48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gui_android_menu.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:zoom="9.8333333"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ fit-margin-top="16"
+ fit-margin-bottom="16"
+ fit-margin-left="22"
+ fit-margin-right="22"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ position="0,12"
+ orientation="0,1"
+ id="guide4284"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="0,36"
+ orientation="0,1"
+ id="guide4286"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="0,16"
+ orientation="0,1"
+ id="guide4288"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="0,32"
+ orientation="0,1"
+ id="guide4290"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="12,0"
+ orientation="1,0"
+ id="guide4292"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="16,0"
+ orientation="1,0"
+ id="guide4294"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="32,0"
+ orientation="1,0"
+ id="guide4296"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="36,0"
+ orientation="1,0"
+ id="guide4298"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid4300" />
+ </sodipodi:namedview>
+ <circle
+ style="fill:#1a6cb6;stroke:none;stroke-width:0.79100001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;fill-opacity:1"
+ id="path4302"
+ cx="24"
+ cy="24"
+ r="24" />
+ <path
+ d="m 24,20 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 z m 0,2 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z m 0,6 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" />
+</svg>
diff --git a/navit/xpm/gui_heightprofile.svg b/navit/xpm/gui_heightprofile.svg
new file mode 100644
index 000000000..0d80b5c12
--- /dev/null
+++ b/navit/xpm/gui_heightprofile.svg
@@ -0,0 +1,20 @@
+<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ for Navit -->
+ <defs>
+ <linearGradient y2="0%" x2="100%" y1="0%" x1="0%" id="grad1">
+ <stop stop-color="rgb(90,90,90)" offset="0%"/>
+ <stop stop-color="rgb(175,175,175)" offset="100%"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <polygon transform="translate(0, -3)" id="svg_2" fill="url(#grad1)" points="10,165 30,165 60,80 75,120 85,120 115,20 160,180 190,180 190,190 10,190"/>
+ <line id="svg_3" fill="none" stroke="gainsboro" stroke-width="6" y2="165" x2="30" y1="165" x1="10"/>
+ <line id="svg_4" fill="none" stroke="gainsboro" stroke-width="6" y2="80" x2="60" y1="165" x1="30" stroke-linecap="round"/>
+ <line id="svg_5" fill="none" stroke="gainsboro" stroke-width="6" y2="120" x2="75" y1="80" x1="60" stroke-linecap="round"/>
+ <line id="svg_6" fill="none" stroke="gainsboro" stroke-width="6" y2="120" x2="85" y1="120" x1="75" stroke-linecap="round"/>
+ <line id="svg_7" fill="none" stroke="gainsboro" stroke-width="6" y2="20" x2="115" y1="120" x1="85" stroke-linecap="round"/>
+ <line id="svg_8" fill="none" stroke="gainsboro" stroke-width="6" y2="180" x2="160" y1="20" x1="115" stroke-linecap="round"/>
+ <line id="svg_9" fill="none" stroke="gainsboro" stroke-width="6" y2="180" x2="190" y1="180" x1="160"/>
+ </g>
+</svg>
diff --git a/navit/xpm/gui_layers.svg b/navit/xpm/gui_layers.svg
new file mode 100644
index 000000000..810b5a1d6
--- /dev/null
+++ b/navit/xpm/gui_layers.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="18.02128" height="18" id="svg5952">
+ <defs id="defs5954">
+ <linearGradient id="linearGradient2485-94">
+ <stop id="stop2486-7" style="stop-color:#ffffff;stop-opacity:1" offset="0"/>
+ <stop id="stop2487-83" style="stop-color:#aaaaaa;stop-opacity:1" offset="1"/>
+ </linearGradient>
+ <linearGradient id="linearGradient5704-5">
+ <stop id="stop5706-120" style="stop-color:#5a5a5a;stop-opacity:1" offset="0"/>
+ <stop id="stop5708-16" style="stop-color:#000000;stop-opacity:1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="974.19751" y1="182.46863" x2="979.80444" y2="184.8026" id="linearGradient4351" xlink:href="#linearGradient2485-94" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-173.95451)"/>
+ <linearGradient x1="968.88806" y1="178.31856" x2="977.93347" y2="181.70978" id="linearGradient4353" xlink:href="#linearGradient5704-5" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-173.95451)"/>
+ <linearGradient x1="974.19751" y1="182.46863" x2="979.80444" y2="184.8026" id="linearGradient4356" xlink:href="#linearGradient2485-94" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-170.95451)"/>
+ <linearGradient x1="968.88806" y1="178.31856" x2="977.93347" y2="181.70978" id="linearGradient4358" xlink:href="#linearGradient5704-5" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-170.95451)"/>
+ <linearGradient x1="974.19751" y1="182.46863" x2="979.80444" y2="184.8026" id="linearGradient4362" xlink:href="#linearGradient2485-94" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-167.95454)"/>
+ <linearGradient x1="968.88806" y1="178.31856" x2="977.93347" y2="181.70978" id="linearGradient4364" xlink:href="#linearGradient5704-5" gradientUnits="userSpaceOnUse" gradientTransform="translate(-963.97872,-167.95454)"/>
+ </defs>
+ <metadata id="metadata5957">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <use transform="translate(-961.86731,-168.04527)" id="use13602" x="0" y="0" width="1250" height="1250" xlink:href="#rect12856"/>
+ <path d="m 5.5212776,14.545453 11.0000004,0 -4,-4.9999999 -11.0000004,0 4,4.9999999 z" id="use8977" style="color:#000000;fill:url(#linearGradient4362);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4364);stroke-width:0.99994743;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"/>
+ <path d="m 5.5212776,11.545483 11.0000004,0 -4,-4.9999999 -11.0000004,0 4,4.9999999 z" id="use8059" style="color:#000000;fill:url(#linearGradient4356);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4358);stroke-width:0.99994743;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"/>
+ <path d="m 5.5212776,8.5454831 11.0000004,0 -4,-5 -11.0000004,0 4,5 z" id="use8061" style="color:#000000;fill:url(#linearGradient4351);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4353);stroke-width:0.99994743;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"/>
+</svg> \ No newline at end of file
diff --git a/navit/xpm/ic_notify.svg b/navit/xpm/ic_notify.svg
new file mode 100644
index 000000000..8bf846dae
--- /dev/null
+++ b/navit/xpm/ic_notify.svg
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.91 r13725"
+ version="1.0"
+ sodipodi:docname="ic_notify.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/michael/src/navit/navit/android/res/drawable-hdpi/ic_notify.png"
+ inkscape:export-xdpi="147.27"
+ inkscape:export-ydpi="147.27">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3365">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.61904764;"
+ offset="0"
+ id="stop3367" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3369" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3320">
+ <stop
+ style="stop-color:#116cbf;stop-opacity:1;"
+ offset="0"
+ id="stop3322" />
+ <stop
+ id="stop3354"
+ offset="0.08"
+ style="stop-color:#116cbf;stop-opacity:1;" />
+ <stop
+ id="stop3352"
+ offset="0.4893617"
+ style="stop-color:#1a6cb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#329eff;stop-opacity:1;"
+ offset="1"
+ id="stop3324" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3308">
+ <stop
+ style="stop-color:#062643;stop-opacity:1;"
+ offset="0"
+ id="stop3310" />
+ <stop
+ style="stop-color:#0d5799;stop-opacity:1;"
+ offset="1"
+ id="stop3312" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3235">
+ <stop
+ style="stop-color:#c17d11;stop-opacity:1;"
+ offset="0"
+ id="stop3237" />
+ <stop
+ style="stop-color:#e9cb14;stop-opacity:1;"
+ offset="1"
+ id="stop3239" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3227">
+ <stop
+ style="stop-color:#76650c;stop-opacity:1;"
+ offset="0"
+ id="stop3229" />
+ <stop
+ style="stop-color:#76650c;stop-opacity:0;"
+ offset="1"
+ id="stop3231" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="15.556349 : 133.02972 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3308"
+ id="linearGradient3314"
+ x1="-7.7781754"
+ y1="4.2563133"
+ x2="43.133514"
+ y2="4.2563133"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="33.636364"
+ inkscape:cx="10.429299"
+ inkscape:cy="11"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ showborder="true"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-bbox="false"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:object-nodes="true"
+ showguides="false" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Calque 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="lignes"
+ style="display:inline">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79098374;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 3.1845705,2.9140622 c -1.0886716,0 -1.9765625,0.8878909 -1.9765625,1.9765625 l 0,5.6269533 C 2.9051239,9.2613772 5.0602154,8.3513287 7.0419924,8.0273435 l -2.625,-0.9511719 0.056641,-0.4589844 c 2.9757823,-0.3155887 5.8357996,0.1963758 8.5898436,1.375 l 0.216797,0.091797 -2.070313,4.9648438 -0.955078,-2.207031 c -2.0698525,1.111236 -3.5135663,3.176209 -4.333984,6.246094 l -0.089844,0.333984 -4.6230469,-3.347656 0,3.035156 c 0,1.088672 0.8878909,1.976563 1.9765625,1.976563 l 15.6289064,0 c 1.088671,0 1.978515,-0.887891 1.978515,-1.976563 l 0,-12.2187502 c 0,-1.0886716 -0.889844,-1.9765625 -1.978515,-1.9765625 l -15.6289064,0 z"
+ id="path4971"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="bulle"
+ style="display:none">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#linearGradient3314);fill-opacity:1;stroke:#1f3157;stroke-width:5.30526352;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3305"
+ sodipodi:cx="17.67767"
+ sodipodi:cy="4.2563133"
+ sodipodi:rx="25.455845"
+ sodipodi:ry="25.455845"
+ d="m 43.133514,4.2563133 a 25.455845,25.455845 0 1 1 -50.9116894,0 25.455845,25.455845 0 1 1 50.9116894,0 z"
+ transform="matrix(1.3194444,0,0,1.3194444,18.394598,29.399489)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="rose des vents"
+ style="display:none">
+ <g
+ id="g3256"
+ transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,36.903806,-19.093669)"
+ style="opacity:0.5">
+ <path
+ transform="translate(67.5,7)"
+ d="m -25.999999,61.185085 -5.673657,-27.511429 -27.511429,-5.673655 27.511429,-5.673657 5.673655,-27.5114293 5.673657,27.5114293 27.5114293,5.673655 -27.5114293,5.673657 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="2.3561945"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="8.0237608"
+ sodipodi:r1="33.185085"
+ sodipodi:cy="28"
+ sodipodi:cx="-26"
+ sodipodi:sides="4"
+ id="path3258"
+ style="fill:#167bd9;fill-opacity:1;stroke:none"
+ sodipodi:type="star" />
+ <path
+ transform="translate(67.5,7)"
+ d="m -25.999999,61.185085 6.826343,-33.011429 -40.011429,-0.173655 33.011429,6.826343 0.173655,-40.0114293 -6.826343,33.0114293 40.0114293,0.173655 -33.0114293,-6.826343 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="0.025433549"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="6.8285527"
+ sodipodi:r1="33.185085"
+ sodipodi:cy="28"
+ sodipodi:cx="-26"
+ sodipodi:sides="4"
+ id="path3260"
+ style="fill:#c3dff9;fill-opacity:1;stroke:none"
+ sodipodi:type="star" />
+ </g>
+ <g
+ id="g3252">
+ <path
+ transform="translate(67.5,7)"
+ d="m -25.999999,61.185085 -5.673657,-27.511429 -27.511429,-5.673655 27.511429,-5.673657 5.673655,-27.5114293 5.673657,27.5114293 27.5114293,5.673655 -27.5114293,5.673657 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="2.3561945"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="8.0237608"
+ sodipodi:r1="33.185085"
+ sodipodi:cy="28"
+ sodipodi:cx="-26"
+ sodipodi:sides="4"
+ id="path3248"
+ style="fill:#167bd9;fill-opacity:1;stroke:none"
+ sodipodi:type="star" />
+ <path
+ transform="translate(67.5,7)"
+ d="m -25.999999,61.185085 6.826343,-33.011429 -40.011429,-0.173655 33.011429,6.826343 0.173655,-40.0114293 -6.826343,33.0114293 40.0114293,0.173655 -33.0114293,-6.826343 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="0.025433549"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="6.8285527"
+ sodipodi:r1="33.185085"
+ sodipodi:cy="28"
+ sodipodi:cx="-26"
+ sodipodi:sides="4"
+ id="path3250"
+ style="fill:#c3dff9;fill-opacity:1;stroke:none"
+ sodipodi:type="star" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="ondes"
+ style="display:inline" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="flèche"
+ style="display:inline" />
+</svg>
diff --git a/navit/xslt/android.xslt b/navit/xslt/android.xslt
index 28b9d8245..19b0855f8 100644
--- a/navit/xslt/android.xslt
+++ b/navit/xslt/android.xslt
@@ -4,11 +4,13 @@
<xsl:param name="ICON_SMALL" select="32"/>
<xsl:param name="ICON_MEDIUM" select="32"/>
<xsl:param name="ICON_BIG" select="64"/>
+ <xsl:param name="OSD_USE_OVERLAY">yes</xsl:param>
<xsl:output method="xml" doctype-system="navit.dtd" cdata-section-elements="gui"/>
<xsl:include href="default_plugins.xslt"/>
<xsl:include href="map_sdcard_navitmap_bin.xslt"/>
<xsl:include href="osd_minimum.xslt"/>
+ <xsl:include href="osd_android.xslt"/>
<xsl:include href="cursor_scale.xslt"/>
<xsl:template match="/config/plugins/plugin[1]" priority="100">
<plugin path="$NAVIT_PREFIX/lib/lib*.so" ondemand="yes"/>
diff --git a/navit/xslt/android_all_densities.xslt b/navit/xslt/android_all_densities.xslt
deleted file mode 100644
index 8ec64d330..000000000
--- a/navit/xslt/android_all_densities.xslt
+++ /dev/null
@@ -1,1471 +0,0 @@
-<?xml version="1.0"?>
-<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
- <xsl:output method="xml" doctype-system="navit.dtd" cdata-section-elements="gui"/>
- <xsl:variable name="OSD_FACTOR_">
- <xsl:choose>
- <xsl:when test="string-length($OSD_FACTOR)"><xsl:value-of select="$OSD_FACTOR"/></xsl:when>
- <xsl:otherwise>1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="CAR_FACTOR_">
- <xsl:choose>
- <xsl:when test="string-length($CAR_FACTOR)"><xsl:value-of select="$CAR_FACTOR"/></xsl:when>
- <xsl:otherwise>1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:include href="default_plugins.xslt"/>
- <!--<xsl:include href="map_sdcard_navitmap_bin.xslt"/>-->
- <xsl:include href="map_secondary_sdcard_navitmap_bin.xslt"/>
- <xsl:include href="osd_android_minimum.xslt"/>
- <xsl:template match="/config/plugins/plugin[1]" priority="100">
- <plugin path="$NAVIT_PREFIX/lib/libgraphics_android.so" ondemand="no"/>
- <xsl:text>&#x0A; </xsl:text>
- <plugin path="$NAVIT_PREFIX/lib/libvehicle_android.so" ondemand="no"/>
- <xsl:text>&#x0A; </xsl:text>
- <plugin path="$NAVIT_PREFIX/lib/libspeech_android.so" ondemand="no"/>
- <xsl:text>&#x0A; </xsl:text>
- <xsl:next-match/>
- </xsl:template>
- <xsl:template match="/config/navit/graphics">
- <graphics type="android" />
- </xsl:template>
- <!-- make gui fonts bigger -->
- <xsl:template match="/config/navit/gui[2]">
- <xsl:copy><xsl:copy-of select="@*[not(name()='font_size')]"/>
- <xsl:attribute name="font_size"><xsl:value-of select="$MENU_VALUE_FONTSIZE"/></xsl:attribute>
- <xsl:attribute name="icon_xs"><xsl:value-of select="$MENU_VALUE_ICONS_XS"/></xsl:attribute>
- <xsl:attribute name="icon_s"><xsl:value-of select="$MENU_VALUE_ICONS_S"/></xsl:attribute>
- <xsl:attribute name="icon_l"><xsl:value-of select="$MENU_VALUE_ICONS_L"/></xsl:attribute>
- <xsl:attribute name="spacing"><xsl:value-of select="$MENU_VALUE_SPACING"/></xsl:attribute>
- <xsl:apply-templates/></xsl:copy>
- </xsl:template>
- <!-- make gui fonts bigger -->
- <!-- after map drag jump to position, initial zoom -->
- <xsl:template match="/config/navit[1]">
- <xsl:copy><xsl:copy-of select="@*"/>
- <!--<xsl:attribute name="timeout">0</xsl:attribute>-->
- <xsl:attribute name="zoom">32</xsl:attribute>
- <xsl:apply-templates/></xsl:copy>
- </xsl:template>
- <!-- after map drag jump to position, initial zoom -->
- <xsl:template match="/config/navit/vehicle[1]">
- <xsl:copy><xsl:copy-of select="@*[not(name()='gpsd_query')]"/>
- <xsl:attribute name="source">android:</xsl:attribute>
- <xsl:attribute name="follow">1</xsl:attribute>
- <xsl:apply-templates/></xsl:copy>
- </xsl:template>
- <!-- add new default look-and-feel for android -->
- <xsl:template match="/config/navit/layout[1]">
-<layout name="Android-Car" color="#fef9ee" font="Liberation Sans">
- <xsl:text>&#x0A; </xsl:text>
- <cursor w="{round(30*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" h="{round(32*number($CAR_FACTOR_)*number($OSD_FACTOR_))}">
- <xsl:text>&#x0A; </xsl:text>
- <itemgra speed_range="-2">
- <polyline color="#00BC00" radius="{round(0*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" width="{round(3*number($CAR_FACTOR_)*number($OSD_FACTOR_))}">
- <coord x="0" y="0"/>
- </polyline>
- <circle color="#008500" radius="{round(6*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" width="{round(2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}">
- <coord x="0" y="0"/>
- </circle>
- <circle color="#00BC00" radius="{round(9*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" width="{round(2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}">
- <coord x="0" y="0"/>
- </circle>
- <circle color="#008500" radius="{round(13*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" width="{round(2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}">
- <coord x="0" y="0"/>
- </circle>
- </itemgra>
- <xsl:text>&#x0A; </xsl:text>
- <itemgra speed_range="3-">
- <polygon color="#00000066">
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-18*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(8*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-18*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(-8*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-18*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- </polygon>
- <polygon color="#008500">
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(-2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- </polygon>
- <polygon color="#00BC00">
- <coord x="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(-2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- </polygon>
- <polyline color="#008500" width="2">
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(-2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(-14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- </polyline>
- <polyline color="#008500" width="2">
- <coord x="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="0" y="{round(-2*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- <coord x="{round(14*number($CAR_FACTOR_)*number($OSD_FACTOR_))}" y="{round(-12*number($CAR_FACTOR_)*number($OSD_FACTOR_))}"/>
- </polyline>
- </itemgra>
- <xsl:text>&#x0A; </xsl:text>
- </cursor>
- <xsl:text>&#x0A; </xsl:text>
- <!-- android layout -->
- <!-- android layout -->
- <!-- android layout -->
- <layer name="polygons">
- <itemgra item_types="poly_wood" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#8ec78d"/>
- <text text_size="5"/>
- </itemgra>
-
- <!-- ocean -->
- <itemgra item_types="poly_water_tiled">
- <polygon color="#82c8ea"/>
- </itemgra>
- <!-- ocean -->
-
- <!-- rivers with text -->
- <itemgra item_types="poly_water" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#82c8ea"/>
- <polyline color="#5096b8"/>
- <text text_size="5"/>
- </itemgra>
- <!-- rivers with text -->
-
-
- <itemgra item_types="poly_flats,poly_scrub,poly_military_zone,poly_marine,plantation,tundra" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#a0a0a0"/>
- <text text_size="5"/>
- </itemgra>
- <itemgra item_types="poly_park" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#7cc334"/>
- <text text_size="5"/>
- </itemgra>
- <itemgra item_types="poly_pedestrian" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="13"/>
- <polyline color="#dddddd" width="9"/>
- <polygon color="#dddddd"/>
- </itemgra>
- <itemgra item_types="poly_pedestrian" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="18"/>
- <polyline color="#dddddd" width="14"/>
- <polygon color="#dddddd"/>
- </itemgra>
- <itemgra item_types="poly_pedestrian" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="21"/>
- <polyline color="#dddddd" width="17"/>
- <polygon color="#dddddd"/>
- </itemgra>
- <itemgra item_types="poly_pedestrian" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="25"/>
- <polyline color="#dddddd" width="21"/>
- <polygon color="#dddddd"/>
- </itemgra>
- <itemgra item_types="poly_pedestrian" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="40"/>
- <polyline color="#dddddd" width="34"/>
- <polygon color="#dddddd"/>
- </itemgra>
- <itemgra item_types="poly_airport" order="{round(5-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#a0a0a0"/>
- </itemgra>
-
- <!--
- <itemgra item_types="poly_sport,poly_sports_pitch" order="0-">
- <polygon color="#4af04f"/>
- </itemgra>
- <itemgra item_types="poly_industry,poly_place" order="0-">
- <polygon color="#e6e6e6"/>
- </itemgra>
- -->
-
- <!--
- <itemgra item_types="poly_street_1" order="{round(8-number($LAYOUT_001_ORDER_DELTA_1))}-{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#ffffff"/>
- <polyline color="#d2d2d2" width="1"/>
- </itemgra>
- <itemgra item_types="poly_street_1" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#ffffff"/>
- <polyline color="#d2d2d2" width="2"/>
- </itemgra>
- <itemgra item_types="poly_street_1" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#ffffff"/>
- <polyline color="#d2d2d2" width="3"/>
- </itemgra>
- -->
-
-
- <!--
- <itemgra item_types="poly_street_2" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#c0c0c0" width="1"/>
- </itemgra>
- <itemgra item_types="poly_street_2" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#c0c0c0" width="2"/>
- </itemgra>
- <itemgra item_types="poly_street_2" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#c0c0c0" width="3"/>
- </itemgra>
- -->
-
- <!--
- <itemgra item_types="poly_street_3" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#a0a0a0" width="1"/>
- </itemgra>
- <itemgra item_types="poly_street_3" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#a0a0a0" width="2"/>
- </itemgra>
- <itemgra item_types="poly_street_3" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polygon color="#fefc8c"/>
- <polyline color="#a0a0a0" width="3"/>
- </itemgra>
- -->
-
-
-
- <!--
- <itemgra item_types="water_line" order="0-">
- <polyline color="#5096b8" width="2"/>
- <text text_size="5"/>
- </itemgra>
- -->
-
- <!--
- <itemgra item_types="water_river" order="0-{round(5-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#82c8ea" width="2"/>
- </itemgra>
- -->
- <itemgra item_types="water_river" order="{round(6-number($LAYOUT_001_ORDER_DELTA_1))}-{round(7-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#82c8ea" width="3"/>
- </itemgra>
- <itemgra item_types="water_river" order="{round(8-number($LAYOUT_001_ORDER_DELTA_1))}-{round(9-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#82c8ea" width="4"/>
- </itemgra>
- <itemgra item_types="water_river" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#82c8ea" width="4"/>
- <text text_size="10"/>
- </itemgra>
- <itemgra item_types="water_canal" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#82c8ea" width="3"/>
- <text text_size="10"/>
- </itemgra>
- <itemgra item_types="water_stream" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#82c8ea" width="2"/>
- <text text_size="7"/>
- </itemgra>
- <itemgra item_types="water_drain" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#82c8ea" width="1"/>
- <text text_size="5"/>
- </itemgra>
- <itemgra item_types="poly_apron" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#d0d0d0"/>
- </itemgra>
- <itemgra item_types="poly_terminal" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#e3c6a6"/>
- </itemgra>
- <itemgra item_types="poly_car_parking" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#e7cf87"/>
- </itemgra>
- <itemgra item_types="poly_building" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polygon color="#b6a6a6"/>
- </itemgra>
- <itemgra item_types="rail" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#696969" width="3"/>
- <polyline color="#ffffff" width="1" dash="5,5"/>
- </itemgra>
- <itemgra item_types="ferry" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1" dash="10"/>
- </itemgra>
-
-
- <itemgra item_types="border_country" order="0-{round(4-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#9b1199" width="8" />
- </itemgra>
- <itemgra item_types="border_country" order="{round(5-number($LAYOUT_001_ORDER_DELTA_1))}-{round(7-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#9b1199" width="12" />
- </itemgra>
- <itemgra item_types="border_country" order="{round(8-number($LAYOUT_001_ORDER_DELTA_1))}-{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#9b1199" width="20" dash="10,5"/>
- </itemgra>
- <itemgra item_types="border_country" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#9b1199" width="30" dash="10,5,2,1"/>
- </itemgra>
-
-
- </layer>
- <layer name="streets">
-
- <!-- route -->
- <itemgra item_types="street_route" order="{round(2-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="8"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(3-number($LAYOUT_001_ORDER_DELTA_1))}-{round(5-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="10"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(6-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="12"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="16"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}-{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="20"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="28"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="32"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="52"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="64"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="68"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="132"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="268"/>
- </itemgra>
- <itemgra item_types="street_route" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#69e068" width="530"/>
- </itemgra>
- <!-- route -->
-
-
-
- <itemgra item_types="selected_line" order="{round(2-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="4"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(3-number($LAYOUT_001_ORDER_DELTA_1))}-{round(5-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="8"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(6-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="10"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="16"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}-{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="20"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="28"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="32"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="52"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="64"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="68"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="132"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="268"/>
- </itemgra>
- <itemgra item_types="selected_line" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ba00b8" width="530"/>
- </itemgra>
- <itemgra item_types="forest_way_1" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#0070c0" width="6"/>
- </itemgra>
- <itemgra item_types="forest_way_2" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#ff0000" width="3"/>
- </itemgra>
- <itemgra item_types="forest_way_3" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#ff0000" width="1" dash="2,4"/>
- </itemgra>
- <itemgra item_types="forest_way_4" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#119a2e" width="1" dash="4,10"/>
- </itemgra>
- <itemgra item_types="street_nopass" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="track_paved" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="track_gravelled" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ffffff" width="4" dash="4,8"/>
- <polyline color="#800000" width="2" dash="4,8"/>
- </itemgra>
- <itemgra item_types="track_gravelled" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ffffff" width="5" dash="5,10"/>
- <polyline color="#800000" width="3" dash="5,10"/>
- </itemgra>
- <itemgra item_types="track_gravelled" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#ffffff" width="7" dash="7,15"/>
- <polyline color="#800000" width="5" dash="7,15"/>
- </itemgra>
- <itemgra item_types="track_unpaved" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="bridleway" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="cycleway" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="lift_cable_car" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#696969" width="1" dash="5"/>
- </itemgra>
- <itemgra item_types="lift_chair" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#696969" width="1" dash="5"/>
- </itemgra>
- <itemgra item_types="lift_drag" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#696969" width="1" dash="5"/>
- </itemgra>
- <itemgra item_types="footway" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ffffff" width="5" dash="5,10"/>
- <polyline color="#ff0000" width="3" dash="5,10"/>
- </itemgra>
- <itemgra item_types="footway" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#ffffff" width="7" dash="7,15"/>
- <polyline color="#ff0000" width="5" dash="7,15"/>
- </itemgra>
- <itemgra item_types="steps" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#000000" width="1"/>
- </itemgra>
- <itemgra item_types="street_pedestrian,living_street" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="13"/>
- <polyline color="#dddddd" width="9"/>
- </itemgra>
- <itemgra item_types="street_pedestrian,living_street" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="18"/>
- <polyline color="#dddddd" width="14"/>
- </itemgra>
- <itemgra item_types="street_pedestrian,living_street" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="21"/>
- <polyline color="#dddddd" width="17"/>
- </itemgra>
- <itemgra item_types="street_pedestrian,living_street" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="25"/>
- <polyline color="#dddddd" width="21"/>
- </itemgra>
- <itemgra item_types="street_pedestrian,living_street" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="40"/>
- <polyline color="#dddddd" width="34"/>
- </itemgra>
- <itemgra item_types="street_service" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="7"/>
- <polyline color="#fefefe" width="5"/>
- </itemgra>
- <itemgra item_types="street_service" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="8"/>
- <polyline color="#fefefe" width="6"/>
- </itemgra>
- <itemgra item_types="street_service" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="9"/>
- <polyline color="#fefefe" width="7"/>
- </itemgra>
- <itemgra item_types="street_service" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="10"/>
- <polyline color="#fefefe" width="8"/>
- </itemgra>
- <itemgra item_types="street_service" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="11"/>
- <polyline color="#fefefe" width="9"/>
- </itemgra>
- <itemgra item_types="street_parking_lane" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="6"/>
- <polyline color="#fefefe" width="4"/>
- </itemgra>
- <itemgra item_types="street_parking_lane" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="7"/>
- <polyline color="#fefefe" width="5"/>
- </itemgra>
- <itemgra item_types="street_parking_lane" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="8"/>
- <polyline color="#fefefe" width="6"/>
- </itemgra>
- <itemgra item_types="street_parking_lane" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="9"/>
- <polyline color="#fefefe" width="7"/>
- </itemgra>
-
- <!-- very small "white" street -->
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="1"/>
- </itemgra>
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="17"/>
- <polyline color="#ffffff" width="13"/>
- </itemgra>
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="18"/>
- <polyline color="#ffffff" width="14"/>
- </itemgra>
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="30"/>
- <polyline color="#ffffff" width="26"/>
- </itemgra>
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="67"/>
- <polyline color="#ffffff" width="61"/>
- </itemgra>
- <itemgra item_types="street_0,street_1_city,street_1_land" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#d2d2d2" width="132"/>
- <polyline color="#ffffff" width="126"/>
- </itemgra>
-
-
- <!-- small -->
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}-{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="9"/>
- <polyline color="#fefc8c" width="7"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="13"/>
- <polyline color="#fefc8c" width="11"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="19"/>
- <polyline color="#fefc8c" width="15"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="30"/>
- <polyline color="#fefc8c" width="26"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="63"/>
- <polyline color="#fefc8c" width="57"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,ramp" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#c0c0c0" width="100"/>
- <polyline color="#fefc8c" width="90"/>
- </itemgra>
-
-
- <!-- little bigger -->
- <!--
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#e0e0e0" width="2"/>
- </itemgra>
- -->
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}-{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="9"/>
- <polyline color="#fefc8c" width="7"/>
- </itemgra>
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="21"/>
- <polyline color="#fefc8c" width="17"/>
- </itemgra>
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="25"/>
- <polyline color="#fefc8c" width="21"/>
- </itemgra>
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="40"/>
- <polyline color="#fefc8c" width="34"/>
- </itemgra>
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="79"/>
- <polyline color="#fefc8c" width="73"/>
- </itemgra>
- <itemgra item_types="street_3_city,street_3_land,roundabout" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a0a0a0" width="156"/>
- <polyline color="#fefc8c" width="150"/>
- </itemgra>
-
-
- <!-- big -->
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(2-number($LAYOUT_001_ORDER_DELTA_1))}-{round(6-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#f8dc79" width="4"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#404040" width="3"/>-->
- <polyline color="#f8dc79" width="4"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#000000" width="5"/>-->
- <polyline color="#f8dc79" width="5"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#000000" width="6"/>-->
- <polyline color="#f8dc79" width="6"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="9"/>
- <polyline color="#f8dc79" width="7"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="13"/>
- <polyline color="#f8dc79" width="9"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="18"/>
- <polyline color="#f8dc79" width="14"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="21"/>
- <polyline color="#f8dc79" width="17"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="24"/>
- <polyline color="#f8dc79" width="20"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="39"/>
- <polyline color="#f8dc79" width="33"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="78"/>
- <polyline color="#f8dc79" width="72"/>
- </itemgra>
- <itemgra item_types="street_4_city,street_4_land,street_n_lanes" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#000000" width="156"/>
- <polyline color="#f8dc79" width="150"/>
- </itemgra>
-
-
- <!-- autobahn / highway -->
- <itemgra item_types="highway_city,highway_land" order="0-{round(1-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#fc843b" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(2-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#fc843b" width="3"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(3-number($LAYOUT_001_ORDER_DELTA_1))}-{round(5-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#fc843b" width="6"/>
- <!--<polyline color="#fc843b" width="3"/>-->
- <!--<polyline color="#fc843b" width="1"/>-->
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(6-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#a8aab3" width="4"/>-->
- <polyline color="#fc843b" width="6"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#a8aab3" width="7"/>-->
- <polyline color="#fc843b" width="6"/>
- <!--<polyline color="#a8aab3" width="1"/>-->
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#fc843b" width="7"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <!--<polyline color="#a8aab3" width="9"/>-->
- <polyline color="#fc843b" width="9"/>
- <!--<polyline color="#a8aab3" width="1"/>-->
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="13"/>
- <polyline color="#fc843b" width="9"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="15"/>
- <polyline color="#fc843b" width="10"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="25"/>
- <polyline color="#fc843b" width="17"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="31"/>
- <polyline color="#fc843b" width="24"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="33"/>
- <polyline color="#fc843b" width="27"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="65"/>
- <polyline color="#fc843b" width="59"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="133"/>
- <polyline color="#fc843b" width="127"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
- <itemgra item_types="highway_city,highway_land" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#a8aab3" width="264"/>
- <polyline color="#fc843b" width="258"/>
- <polyline color="#a8aab3" width="1"/>
- </itemgra>
-
-
-
-
-
- <itemgra item_types="highway_exit_label" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
-
-
- <itemgra item_types="highway_city,highway_land,street_4_city,street_4_land,street_n_lanes" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <text text_size="8"/>
- </itemgra>
- <itemgra item_types="street_2_city,street_2_land,street_3_city,street_3_land,ramp" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <text text_size="9"/>
- </itemgra>
- <itemgra item_types="street_nopass,street_0,street_1_city,street_1_land" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <text text_size="9"/>
- </itemgra>
-
- <itemgra item_types="traffic_distortion" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="8"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}-{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="10"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="14"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="16"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="26"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="32"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="34"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(16-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="66"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(17-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="134"/>
- </itemgra>
- <itemgra item_types="traffic_distortion" order="{round(18-number($LAYOUT_001_ORDER_DELTA_1))}">
- <polyline color="#ff9000" width="265"/>
- </itemgra>
- </layer>
- <layer name="polylines">
- <itemgra item_types="rail_tram" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#606060" width="2"/>
- </itemgra>
- </layer>
- <layer name="labels">
- <itemgra item_types="house_number" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
-
-
- <itemgra item_types="town_label,district_label,town_label_0e0,town_label_1e0,town_label_2e0,town_label_5e0,town_label_1e1,town_label_2e1,town_label_5e1,town_label_1e2,town_label_2e2,town_label_5e2,district_label_0e0,district_label_1e0,district_label_2e0,district_label_5e0,district_label_1e1,district_label_2e1,district_label_5e1,district_label_1e2,district_label_2e2,district_label_5e2" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
-
-
- <itemgra item_types="district_label_1e3,district_label_2e3,district_label_5e3" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
- <itemgra item_types="town_label_1e3,place_label" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="district_label_1e4,district_label_2e4,district_label_5e4" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
- <itemgra item_types="town_label_2e3" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="town_label_5e3,town_label_1e4,town_label_2e4,town_label_5e4" order="{round(11-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="15"/>
- </itemgra>
- <itemgra item_types="district_label_1e5,district_label_2e5,district_label_5e5" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
- <itemgra item_types="town_label_2e3" order="{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
- <itemgra item_types="district_label_1e6,district_label_2e6,district_label_5e6,district_label_1e7" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="7"/>
- </itemgra>
- <itemgra item_types="town_label_5e3" order="{round(9-number($LAYOUT_001_ORDER_DELTA_1))}-{round(10-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="town_label_1e4" order="{round(8-number($LAYOUT_001_ORDER_DELTA_1))}-{round(9-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="town_label_2e4,town_label_5e4" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-{round(8-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="town_label_1e5,town_label_2e5,town_label_5e5" order="{round(5-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="15"/>
- </itemgra>
- <itemgra item_types="town_label_1e6,town_label_2e6,town_label_5e6,town_label_1e7" order="{round(5-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#000000" radius="3" text_size="20"/>
- </itemgra>
- <itemgra item_types="town_label_1e5,town_label_2e5,town_label_5e5" order="{round(4-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- <itemgra item_types="town_label_1e6,town_label_2e6,town_label_5e6,town_label_1e7" order="{round(4-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="15"/>
- </itemgra>
- <itemgra item_types="town_label_1e6,town_label_2e6,town_label_5e6,town_label_1e7" order="0-{round(3-number($LAYOUT_001_ORDER_DELTA_1))}">
- <circle color="#000000" radius="3" text_size="10"/>
- </itemgra>
- </layer>
-
-
- <layer name="Internal">
- <itemgra item_types="track" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#3f3f3f" width="1"/>
- </itemgra>
- <itemgra item_types="track_tracked" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#3f3fff" width="3"/>
- </itemgra>
- <itemgra item_types="rg_segment" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <polyline color="#FF089C" width="1"/>
- <arrows color="#FF089C" width="1"/>
- </itemgra>
- <itemgra item_types="rg_point" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#FF089C" radius="10" text_size="7"/>
- </itemgra>
- <itemgra item_types="nav_left_1" order="0-">
- <icon src="nav_left_1_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_left_2" order="0-">
- <icon src="nav_left_2_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_left_3" order="0-">
- <icon src="nav_left_3_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_right_1" order="0-">
- <icon src="nav_right_1_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_right_2" order="0-">
- <icon src="nav_right_2_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_right_3" order="0-">
- <icon src="nav_right_3_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_straight" order="0-">
- <icon src="nav_straight_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_turnaround" order="0-">
- <icon src="nav_turnaround_left_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l1" order="0-">
- <icon src="nav_roundabout_l1_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r1" order="0-">
- <icon src="nav_roundabout_r1_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l2" order="0-">
- <icon src="nav_roundabout_l2_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r2" order="0-">
- <icon src="nav_roundabout_r2_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l3" order="0-">
- <icon src="nav_roundabout_l3_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r3" order="0-">
- <icon src="nav_roundabout_r3_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l4" order="0-">
- <icon src="nav_roundabout_l4_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r4" order="0-">
- <icon src="nav_roundabout_r4_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l5" order="0-">
- <icon src="nav_roundabout_l5_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r5" order="0-">
- <icon src="nav_roundabout_r5_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l6" order="0-">
- <icon src="nav_roundabout_l6_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r6" order="0-">
- <icon src="nav_roundabout_r6_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l7" order="0-">
- <icon src="nav_roundabout_l7_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r7" order="0-">
- <icon src="nav_roundabout_r7_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_l8" order="0-">
- <icon src="nav_roundabout_l8_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_roundabout_r8" order="0-">
- <icon src="nav_roundabout_r8_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="route_end" order="0-">
- <icon src="nav_destination_bk.png" w="32" h="32"/>
- </itemgra>
- <itemgra item_types="nav_none" order="0-">
- <icon src="unknown.png"/>
- </itemgra>
- <itemgra item_types="announcement" order="{round(7-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="gui_sound_32_32.png"/>
- <circle color="#FF089C" radius="10" text_size="7"/>
- </itemgra>
- </layer>
-
-
- <layer name="POI Symbols" active="1">
- <itemgra item_types="mini_roundabout" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="mini_roundabout.png"/>
- </itemgra>
- <itemgra item_types="turning_circle" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="mini_roundabout.png"/>
- </itemgra>
- <itemgra item_types="poi_airport" order="{round(6-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="airport.png"/>
- </itemgra>
- <itemgra item_types="poi_fuel" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="fuel.png"/>
- </itemgra>
- <itemgra item_types="poi_bridge" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="bridge.png"/>
- </itemgra>
- <itemgra item_types="highway_exit" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="exit.png"/>
- </itemgra>
- <itemgra item_types="poi_auto_club" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="auto_club.png"/>
- </itemgra>
- <itemgra item_types="poi_bank" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="bank.png"/>
- </itemgra>
- <itemgra item_types="poi_danger_area" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="danger_16_16.png"/>
- </itemgra>
- <itemgra item_types="poi_forbidden_area" order="{round(13-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="forbiden_area.png"/>
- </itemgra>
- <itemgra item_types="poi_tunnel" order="{round(12-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="tunnel.png"/>
- </itemgra>
- <itemgra item_types="traffic_signals" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <icon src="traffic_signals.png"/>
- </itemgra>
- </layer>
- <layer name="POI Labels" active="1">
- <itemgra item_types="poi_airport,town_ghost,poi_hotel,poi_car_parking,poi_car_dealer_parts,poi_fuel,poi_shopping,poi_attraction,poi_cafe,poi_bar,highway_exit,poi_camp_rv,poi_museum_history,poi_hospital,poi_dining,poi_fastfood,poi_police,poi_autoservice,poi_bank,poi_bus_station,poi_bus_stop,poi_business_service,poi_car_rent,poi_church,poi_cinema,poi_concert,poi_drinking_water,poi_emergency,poi_fair,poi_fish,poi_government_building,poi_hotspring,poi_information,poi_justice,poi_landmark,poi_library,poi_mall,poi_manmade_feature,poi_marine,poi_marine_type,poi_mark,poi_oil_field,poi_peak,poi_personal_service,poi_pharmacy,poi_post_office,poi_public_office,poi_rail_halt,poi_rail_station,poi_rail_tram_stop,poi_repair_service,poi_resort,poi_restaurant,poi_restricted_area,poi_sailing,poi_scenic_area,poi_school,poi_service,poi_shop_retail,poi_skiing,poi_social_service,poi_sport,poi_stadium,poi_swimming,poi_theater,poi_townhall,poi_trail,poi_truck_stop,poi_tunnel,poi_worship,poi_wrecker,poi_zoo,poi_biergarten,poi_castle,poi_ruins,poi_memorial,poi_monument,poi_shelter,poi_fountain,poi_viewpoint,vehicle" order="{round(15-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#606060" radius="0" width="0" text_size="10"/>
- </itemgra>
- <!--
- <itemgra item_types="poi_custom0,poi_custom1,poi_custom2,poi_custom3,poi_custom4,poi_custom5,poi_custom6,poi_custom7,poi_custom8,poi_custom9,poi_customa,poi_customb,poi_customc,poi_customd,poi_custome,poi_customf" order="{round(14-number($LAYOUT_001_ORDER_DELTA_1))}-">
- <circle color="#606060" radius="0" width="0" text_size="10"/>
- </itemgra>
- -->
- </layer>
-
-
- <layer name="Android-POI-Icons-full" active="0">
- <itemgra item_types="mini_roundabout" order="12-">
- <icon src="mini_roundabout.png"/>
- </itemgra>
- <itemgra item_types="turning_circle" order="12-">
- <icon src="mini_roundabout.png"/>
- </itemgra>
- <itemgra item_types="poi_airport" order="5-">
- <icon src="airport.png"/>
- </itemgra>
- <itemgra item_types="town_ghost" order="10-">
- <icon src="ghost_town.png"/>
- </itemgra>
- <itemgra item_types="poi_hotel" order="12-">
- <icon src="hotel.png"/>
- </itemgra>
- <itemgra item_types="poi_car_parking" order="11-">
- <icon src="parking.png"/>
- </itemgra>
- <itemgra item_types="poi_car_dealer_parts" order="12-">
- <icon src="car_dealer.png"/>
- </itemgra>
- <itemgra item_types="poi_fuel" order="12-">
- <icon src="fuel.png"/>
- </itemgra>
- <itemgra item_types="poi_shopping" order="12-">
- <icon src="shopping.png"/>
- </itemgra>
- <itemgra item_types="poi_attraction" order="11-">
- <icon src="attraction.png"/>
- </itemgra>
- <itemgra item_types="poi_cafe" order="12-">
- <icon src="cafe.png"/>
- </itemgra>
- <itemgra item_types="poi_bar" order="12-">
- <icon src="bar.png"/>
- </itemgra>
- <itemgra item_types="poi_bridge" order="12-">
- <icon src="bridge.png"/>
- </itemgra>
- <itemgra item_types="highway_exit" order="11-">
- <icon src="exit.png"/>
- </itemgra>
- <itemgra item_types="poi_camp_rv" order="12-">
- <icon src="camping.png"/>
- </itemgra>
- <itemgra item_types="poi_museum_history" order="12-">
- <icon src="museum.png"/>
- </itemgra>
- <itemgra item_types="poi_hospital" order="12-">
- <icon src="hospital.png"/>
- </itemgra>
- <itemgra item_types="poi_dining" order="12-">
- <icon src="dining.png"/>
- </itemgra>
- <itemgra item_types="poi_fastfood" order="12-">
- <icon src="fastfood.png"/>
- </itemgra>
- <itemgra item_types="poi_police" order="12-">
- <icon src="police.png"/>
- </itemgra>
- <itemgra item_types="poi_auto_club" order="12-">
- <icon src="auto_club.png"/>
- </itemgra>
- <itemgra item_types="poi_autoservice" order="12-">
- <icon src="car_dealer.png"/>
- </itemgra>
- <itemgra item_types="poi_bank" order="12-">
- <icon src="bank.png"/>
- </itemgra>
- <itemgra item_types="poi_bay" order="12-">
- <icon src="bay.png"/>
- </itemgra>
- <itemgra item_types="poi_bend" order="12-">
- <icon src="bend.png"/>
- </itemgra>
- <itemgra item_types="poi_boat_ramp" order="12-">
- <icon src="boat_ramp.png"/>
- </itemgra>
- <itemgra item_types="poi_border_station" order="12-">
- <icon src="border_station.png"/>
- </itemgra>
- <itemgra item_types="poi_bowling" order="12-">
- <icon src="bowling.png"/>
- </itemgra>
- <itemgra item_types="poi_bus_station" order="11-">
- <icon src="bus.png"/>
- </itemgra>
- <itemgra item_types="poi_bus_stop" order="12-">
- <icon src="bus.png"/>
- </itemgra>
- <itemgra item_types="poi_business_service" order="12-">
- <icon src="bussines_service.png"/>
- </itemgra>
- <itemgra item_types="poi_car_rent" order="12-">
- <icon src="car_rent.png"/>
- </itemgra>
- <itemgra item_types="poi_car_wash" order="12-">
- <icon src="car_wash.png"/>
- </itemgra>
- <itemgra item_types="poi_casino" order="12-">
- <icon src="casino.png"/>
- </itemgra>
- <itemgra item_types="poi_cemetery" order="12-">
- <icon src="cemetery.png"/>
- </itemgra>
- <itemgra item_types="poi_church" order="11-">
- <icon src="church.png"/>
- </itemgra>
- <itemgra item_types="poi_cinema" order="12-">
- <icon src="cinema.png"/>
- </itemgra>
- <itemgra item_types="poi_communication" order="12-">
- <icon src="communication.png"/>
- </itemgra>
- <itemgra item_types="poi_concert" order="12-">
- <icon src="concert.png"/>
- </itemgra>
- <itemgra item_types="poi_cove" order="12-">
- <icon src="cove.png"/>
- </itemgra>
- <itemgra item_types="poi_crossing" order="12-">
- <icon src="crossing.png"/>
- </itemgra>
- <itemgra item_types="poi_dam" order="12-">
- <icon src="dam.png"/>
- </itemgra>
- <itemgra item_types="poi_danger_area" order="12-">
- <icon src="danger_16_16.png"/>
- </itemgra>
- <itemgra item_types="poi_danger_sea_wreck" order="12-">
- <icon src="dangerous.png"/>
- </itemgra>
- <itemgra item_types="poi_daymark" order="12-">
- <icon src="daymark.png"/>
- </itemgra>
- <itemgra item_types="poi_diving" order="12-">
- <icon src="diving.png"/>
- </itemgra>
- <itemgra item_types="poi_drinking_water" order="13-">
- <icon src="drinking_water.png"/>
- </itemgra>
- <itemgra item_types="poi_emergency" order="12-">
- <icon src="emergency.png"/>
- </itemgra>
- <itemgra item_types="poi_fair" order="12-">
- <icon src="fair.png"/>
- </itemgra>
- <itemgra item_types="poi_firebrigade" order="12-">
- <icon src="firebrigade.png"/>
- </itemgra>
- <itemgra item_types="poi_fish" order="9-">
- <icon src="fish.png"/>
- </itemgra>
- <itemgra item_types="poi_forbidden_area" order="12-">
- <icon src="forbiden_area.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_gps" order="15-">
- <icon src="garmin.png"/>
- </itemgra>
- <itemgra item_types="poi_golf" order="12-">
- <icon src="golf.png"/>
- </itemgra>
- <itemgra item_types="poi_government_building" order="12-">
- <icon src="goverment_building.png"/>
- </itemgra>
- <itemgra item_types="poi_height" order="12-">
- <icon src="height.png"/>
- </itemgra>
- <itemgra item_types="poi_heliport" order="8-">
- <icon src="heliport.png"/>
- </itemgra>
- <itemgra item_types="poi_hotspring" order="12-">
- <icon src="hotspring.png"/>
- </itemgra>
- <itemgra item_types="poi_icesport" order="12-">
- <icon src="icesport.png"/>
- </itemgra>
- <itemgra item_types="poi_information" order="12-">
- <icon src="information.png"/>
- </itemgra>
- <itemgra item_types="poi_justice" order="12-">
- <icon src="justice.png"/>
- </itemgra>
- <itemgra item_types="poi_landmark" order="11-">
- <icon src="landmark.png"/>
- </itemgra>
- <itemgra item_types="poi_levee" order="12-">
- <icon src="levee.png"/>
- </itemgra>
- <itemgra item_types="poi_level_crossing" order="11-">
- <icon src="level_crossing.png"/>
- </itemgra>
- <itemgra item_types="poi_library" order="12-">
- <icon src="library.png"/>
- </itemgra>
- <itemgra item_types="poi_locale" order="12-">
- <icon src="locale.png"/>
- </itemgra>
- <itemgra item_types="poi_loudspeaker" order="12-">
- <icon src="loudspeaker.png"/>
- </itemgra>
- <itemgra item_types="poi_mall" order="12-">
- <icon src="mall.png"/>
- </itemgra>
- <itemgra item_types="poi_manmade_feature" order="12-">
- <icon src="manmade_feature.png"/>
- </itemgra>
- <itemgra item_types="poi_marine" order="12-">
- <icon src="marine.png"/>
- </itemgra>
- <itemgra item_types="poi_marine_type" order="12-">
- <icon src="marine_type.png"/>
- </itemgra>
- <itemgra item_types="poi_mark" order="12-">
- <icon src="mark.png"/>
- </itemgra>
- <itemgra item_types="poi_military" order="11-">
- <icon src="military.png"/>
- </itemgra>
- <itemgra item_types="poi_mine" order="12-">
- <icon src="mine.png"/>
- </itemgra>
- <itemgra item_types="poi_nondangerous" order="12-">
- <icon src="nondangerous.png"/>
- </itemgra>
- <itemgra item_types="poi_oil_field" order="12-">
- <icon src="oil_field.png"/>
- </itemgra>
- <itemgra item_types="poi_peak" order="7-">
- <icon src="peak.png"/>
- </itemgra>
- <itemgra item_types="poi_personal_service" order="12-">
- <icon src="personal_service.png"/>
- </itemgra>
- <itemgra item_types="poi_pharmacy" order="12-">
- <icon src="pharmacy.png"/>
- </itemgra>
- <itemgra item_types="poi_post_office,poi_post_box" order="13-">
- <icon src="post.png"/>
- </itemgra>
- <itemgra item_types="poi_public_office" order="12-">
- <icon src="public_office.png"/>
- </itemgra>
- <itemgra item_types="poi_rail_halt" order="11-">
- <circle color="#ff0000" radius="3" width="3"/>
- <circle color="#000000" radius="5" width="2" text_size="8"/>
- </itemgra>
- <itemgra item_types="poi_rail_station" order="9-">
- <circle color="#ff0000" radius="3" width="3"/>
- <circle color="#000000" radius="6" width="2" text_size="8"/>
- </itemgra>
- <itemgra item_types="poi_rail_tram_stop" order="10-11">
- <circle color="#ff0000" radius="2" width="2"/>
- </itemgra>
- <itemgra item_types="poi_rail_tram_stop" order="12-">
- <circle color="#ff0000" radius="3" width="3"/>
- <circle color="#606060" radius="5" width="2" text_size="8"/>
- </itemgra>
- <itemgra item_types="poi_repair_service" order="12-">
- <icon src="repair_service.png"/>
- </itemgra>
- <itemgra item_types="poi_resort" order="12-">
- <icon src="resort.png"/>
- </itemgra>
- <itemgra item_types="poi_restaurant" order="12-">
- <icon src="restaurant.png"/>
- </itemgra>
- <itemgra item_types="poi_restricted_area" order="12-">
- <icon src="restricted_area.png"/>
- </itemgra>
- <itemgra item_types="poi_restroom" order="13-">
- <icon src="restroom.png"/>
- </itemgra>
- <itemgra item_types="poi_sailing" order="12-">
- <icon src="sailing.png"/>
- </itemgra>
- <itemgra item_types="poi_scenic_area" order="12-">
- <icon src="scenic_area.png"/>
- </itemgra>
- <itemgra item_types="poi_school" order="12-">
- <icon src="school.png"/>
- </itemgra>
- <itemgra item_types="poi_service" order="12-">
- <icon src="service.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_apparel" order="12-">
- <icon src="shop_apparel.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_computer" order="12-">
- <icon src="shop_computer.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_department" order="12-">
- <icon src="shop_department.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_furniture" order="12-">
- <icon src="shop_furnish.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_grocery" order="12-">
- <icon src="shop_grocery.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_handg" order="12-">
- <icon src="shop_handg.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_merchandise" order="12-">
- <icon src="shop_merchandise.png"/>
- </itemgra>
- <itemgra item_types="poi_shop_retail" order="12-">
- <icon src="shop_retail.png"/>
- </itemgra>
- <itemgra item_types="poi_shower" order="13-">
- <icon src="shower.png"/>
- </itemgra>
- <itemgra item_types="poi_skiing" order="11-">
- <icon src="skiing.png"/>
- </itemgra>
- <itemgra item_types="poi_social_service" order="12-">
- <icon src="social_service.png"/>
- </itemgra>
- <itemgra item_types="poi_sounding" order="12-">
- <icon src="sounding.png"/>
- </itemgra>
- <itemgra item_types="poi_sport" order="12-">
- <icon src="sport.png"/>
- </itemgra>
- <itemgra item_types="poi_stadium" order="11-">
- <icon src="stadium.png"/>
- </itemgra>
- <itemgra item_types="poi_swimming" order="12-">
- <icon src="swimming.png"/>
- </itemgra>
- <itemgra item_types="poi_telephone" order="13-">
- <icon src="telephone.png"/>
- </itemgra>
- <itemgra item_types="poi_theater" order="12-">
- <icon src="theater.png"/>
- </itemgra>
- <itemgra item_types="poi_tide" order="12-">
- <icon src="tide.png"/>
- </itemgra>
- <itemgra item_types="poi_tower" order="13-">
- <icon src="tower.png"/>
- </itemgra>
- <itemgra item_types="poi_townhall" order="12-">
- <icon src="townhall.png"/>
- </itemgra>
- <itemgra item_types="poi_trail" order="12-">
- <icon src="trail.png"/>
- </itemgra>
- <itemgra item_types="poi_truck_stop" order="12-">
- <icon src="truck_stop.png"/>
- </itemgra>
- <itemgra item_types="poi_tunnel" order="12-">
- <icon src="tunnel.png"/>
- </itemgra>
- <itemgra item_types="poi_wine" order="12-">
- <icon src="wine.png"/>
- </itemgra>
- <itemgra item_types="poi_worship" order="8-">
- <icon src="worship.png"/>
- </itemgra>
- <itemgra item_types="poi_wrecker" order="12-">
- <icon src="wrecker.png"/>
- </itemgra>
- <itemgra item_types="poi_zoo" order="9-">
- <icon src="zoo.png"/>
- </itemgra>
- <itemgra item_types="poi_picnic" order="12-">
- <icon src="picnic.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_multi" order="12-">
- <icon src="gc_multi.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_tradi" order="12-">
- <icon src="gc_tradi.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_event" order="12-">
- <icon src="gc_event.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_mystery" order="12-">
- <icon src="gc_mystery.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_question" order="12-">
- <icon src="gc_question.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_stages" order="12-">
- <icon src="gc_stages.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_reference" order="12-">
- <icon src="gc_reference.png"/>
- </itemgra>
- <itemgra item_types="poi_gc_webcam" order="12-">
- <icon src="gc_webcam.png"/>
- </itemgra>
- <itemgra item_types="traffic_signals" order="13-">
- <icon src="traffic_signals.png"/>
- </itemgra>
- <itemgra item_types="poi_wifi" order="13-">
- <icon src="wifi.png"/>
- </itemgra>
- <itemgra item_types="poi_image" order="12-">
- <image/>
- </itemgra>
- <!-- I'm not sure if the following stuff should appear in any layout. Maybe portions should only apply to the bicyle layout. -->
- <itemgra item_types="poi_bench" order="13-">
- <icon src="bench.png"/>
- </itemgra>
- <itemgra item_types="poi_biergarten" order="12-">
- <icon src="biergarten.png"/>
- </itemgra>
- <itemgra item_types="poi_boundary_stone" order="13-">
- <icon src="boundary_stone.png"/>
- </itemgra>
- <itemgra item_types="poi_castle" order="11-">
- <icon src="castle.png"/>
- </itemgra>
- <itemgra item_types="poi_ruins" order="11-">
- <icon src="ruins.png"/>
- </itemgra>
- <itemgra item_types="poi_hunting_stand" order="12-">
- <icon src="hunting_stand.png"/>
- </itemgra>
- <itemgra item_types="poi_memorial" order="12-">
- <icon src="memorial.png"/>
- </itemgra>
- <itemgra item_types="poi_monument" order="12-">
- <icon src="memorial.png"/>
- </itemgra>
- <itemgra item_types="poi_shelter" order="11-">
- <icon src="shelter.png"/>
- </itemgra>
- <itemgra item_types="poi_fountain" order="13-">
- <icon src="fountain.png"/>
- </itemgra>
- <itemgra item_types="poi_potable_water" order="13-">
- <icon src="potable_water.png"/>
- </itemgra>
- <itemgra item_types="poi_toilets" order="12-">
- <icon src="toilets.png"/>
- </itemgra>
- <itemgra item_types="poi_viewpoint" order="10-">
- <icon src="viewpoint.png"/>
- </itemgra>
- <itemgra item_types="tec_common" order="11-">
- <icon src="tec_common.png" w="24" h="24"/>
- </itemgra>
- <itemgra item_types="vehicle" order="0-">
- <icon src="gui_vehicle_16_16.png"/>
- </itemgra>
- <itemgra item_types="vehicle_pedestrian" order="0-">
- <icon src="gui_vehicle_pedestrian_16_16.png"/>
- </itemgra>
- <itemgra item_types="poi_custom0,poi_custom1,poi_custom2,poi_custom3,poi_custom4,poi_custom5,poi_custom6,poi_custom7,poi_custom8,poi_custom9,poi_customa,poi_customb,poi_customc,poi_customd,poi_custome,poi_customf" order="10-">
- <icon src="%s"/>
- </itemgra>
- </layer>
- <layer name="Android-POI-Labels-full" active="0">
- <itemgra item_types="poi_airport,town_ghost,poi_hotel,poi_car_parking,poi_car_dealer_parts,poi_fuel,poi_shopping,poi_attraction,poi_cafe,poi_bar,highway_exit,poi_camp_rv,poi_museum_history,poi_hospital,poi_dining,poi_fastfood,poi_police,poi_autoservice,poi_bank,poi_bus_station,poi_bus_stop,poi_business_service,poi_car_rent,poi_church,poi_cinema,poi_concert,poi_drinking_water,poi_emergency,poi_fair,poi_fish,poi_government_building,poi_hotspring,poi_information,poi_justice,poi_landmark,poi_library,poi_mall,poi_manmade_feature,poi_marine,poi_marine_type,poi_mark,poi_oil_field,poi_peak,poi_personal_service,poi_pharmacy,poi_post_office,poi_public_office,poi_rail_halt,poi_rail_station,poi_rail_tram_stop,poi_repair_service,poi_resort,poi_restaurant,poi_restricted_area,poi_sailing,poi_scenic_area,poi_school,poi_service,poi_shop_retail,poi_skiing,poi_social_service,poi_sport,poi_stadium,poi_swimming,poi_theater,poi_townhall,poi_trail,poi_truck_stop,poi_tunnel,poi_worship,poi_wrecker,poi_zoo,poi_biergarten,poi_castle,poi_ruins,poi_memorial,poi_monument,poi_shelter,poi_fountain,poi_viewpoint,vehicle" order="14-">
- <circle color="#606060" radius="0" width="0" text_size="10"/>
- </itemgra>
- <itemgra item_types="poi_custom0,poi_custom1,poi_custom2,poi_custom3,poi_custom4,poi_custom5,poi_custom6,poi_custom7,poi_custom8,poi_custom9,poi_customa,poi_customb,poi_customc,poi_customd,poi_custome,poi_customf" order="14-">
- <circle color="#606060" radius="0" width="0" text_size="10"/>
- </itemgra>
- </layer>
-
-
-
- <!-- android layout -->
- <!-- android layout -->
- <!-- android layout -->
- <xsl:text>&#x0A; </xsl:text>
-</layout>
- <xsl:text>&#x0A; </xsl:text>
- <xsl:copy><xsl:copy-of select="@*|node()"/></xsl:copy>
- </xsl:template>
- <xsl:template match="/config/navit/layout[@name='XXRouteXX']">
-<xsl:text>&#x0A; </xsl:text>
- <layout name="Route">
-<xsl:text>&#x0A; </xsl:text>
- <layer name="streets">
-<xsl:text>&#x0A; </xsl:text>
- <itemgra item_types="street_route_occluded" order="0-">
-<xsl:text>&#x0A; </xsl:text>
- <polyline color="#69e068" width="20"/>
-<xsl:text>&#x0A; </xsl:text>
- </itemgra>
-<xsl:text>&#x0A; </xsl:text>
- </layer>
-<xsl:text>&#x0A; </xsl:text>
- </layout>
-<xsl:text>&#x0A; </xsl:text>
- </xsl:template>
- <!-- add new default look-and-feel for android -->
- <xsl:template match="/config/navit/speech">
- <xsl:copy><xsl:copy-of select="@*[not(name()='data')]"/><xsl:attribute name="type">android</xsl:attribute><xsl:apply-templates/></xsl:copy>
- </xsl:template>
- <xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
-</xsl:transform>
diff --git a/navit/xslt/iphone.xslt b/navit/xslt/iphone.xslt
index f15d04938..1e9540503 100644
--- a/navit/xslt/iphone.xslt
+++ b/navit/xslt/iphone.xslt
@@ -4,6 +4,7 @@
<xsl:param name="ICON_SMALL" select="32"/>
<xsl:param name="ICON_MEDIUM" select="32"/>
<xsl:param name="ICON_BIG" select="64"/>
+ <xsl:param name="OSD_USE_OVERLAY">yes</xsl:param>
<xsl:output method="xml" doctype-system="navit.dtd" cdata-section-elements="gui"/>
<xsl:include href="osd_minimum.xslt"/>
diff --git a/navit/xslt/osd_android.xslt b/navit/xslt/osd_android.xslt
new file mode 100644
index 000000000..a15d4f34d
--- /dev/null
+++ b/navit/xslt/osd_android.xslt
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xsl:template match="/config/navit/osd[last()]">
+ <xsl:copy><xsl:copy-of select="@*|node()"/></xsl:copy>
+ <xsl:text>&#x0A; </xsl:text>
+ <osd type="button" src="gui_android_menu_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="graphics.menu()" x="{round(-60*number($OSD_SIZE))}" y="{round(48*number($OSD_SIZE))}" enable_expression="!has_menu_button" use_overlay="yes"/>
+ </xsl:template>
+</xsl:transform>
diff --git a/navit/xslt/osd_android_minimum.xslt b/navit/xslt/osd_android_minimum.xslt
deleted file mode 100644
index 063e3b08f..000000000
--- a/navit/xslt/osd_android_minimum.xslt
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
- <xsl:template match="/config/navit/osd[1]">
- <xsl:variable name="OSD_SIZE_">
- <xsl:choose>
- <xsl:when test="string-length($OSD_SIZE)"><xsl:value-of select="$OSD_SIZE"/></xsl:when>
- <xsl:otherwise>1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="OSD_FACTOR_">
- <xsl:choose>
- <xsl:when test="string-length($OSD_FACTOR)"><xsl:value-of select="$OSD_FACTOR"/></xsl:when>
- <xsl:otherwise>1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <osd type="compass" enabled="yes" x="{round(-60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" y="{round(-80*number($OSD_SIZE_)*number($OSD_FACTOR_))}" w="{round(60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" h="{round(80*number($OSD_SIZE_)*number($OSD_FACTOR_))}" font_size="{round(200*number($OSD_SIZE_)*number($OSD_FACTOR_))}" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <osd type="text" label="${{navigation.item.destination_length[named]}}\n${{navigation.item.destination_time[arrival]}}" x="{round(-60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" y="0" w="{round(60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" h="{round(40*number($OSD_SIZE_)*number($OSD_FACTOR_))}" font_size="{round(200*number($OSD_SIZE_)*number($OSD_FACTOR_))}" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <osd type="navigation_next_turn" x="0" y="{round(-60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" w="{round(60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" h="{round(60*number($OSD_SIZE_)*number($OSD_FACTOR_))-round(20*number($OSD_SIZE_))}" icon_src="%s_wh_{round(44*number($OSD_SIZE_))}_{round(44*number($OSD_SIZE_))}.png" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <osd type="text" label="${{navigation.item[1].length[named]}}" x="0" y="{round(-20*number($OSD_SIZE_))}" w="{round(60*number($OSD_SIZE_)*number($OSD_FACTOR_))}" h="{round(20*number($OSD_SIZE_))}" font_size="{round(200*number($OSD_SIZE_))}" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <osd type="button" src="gui_zoom_in_{round(48*number($OSD_SIZE_))}_{round(48*number($OSD_SIZE_))}.png" command="zoom_in()" x="0" y="0" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <osd type="button" src="gui_zoom_out_{round(48*number($OSD_SIZE_))}_{round(48*number($OSD_SIZE_))}.png" command="zoom_out()" x="0" y="{ round(round(53*number($OSD_SIZE_))*number($OSD_FACTOR_))}" osd_configuration="1"/>
- <xsl:text>&#x0A; </xsl:text>
- <xsl:copy><xsl:copy-of select="@*|node()"/></xsl:copy>
- </xsl:template>
-</xsl:transform>
diff --git a/navit/xslt/osd_minimum.xslt b/navit/xslt/osd_minimum.xslt
index cda88dc88..d392a7cce 100644
--- a/navit/xslt/osd_minimum.xslt
+++ b/navit/xslt/osd_minimum.xslt
@@ -3,6 +3,7 @@
<xsl:template match="/config/navit/osd[1]">
<xsl:param name="NEXT_TURN_SIZE"><xsl:value-of select="round(12*number($OSD_SIZE)+number($ICON_BIG))"/></xsl:param>
<xsl:param name="NEXT_TURN_TEXT_HIGHT"><xsl:value-of select="round(20*number($OSD_SIZE))"/></xsl:param>
+ <xsl:param name="OSD_USE_OVERLAY"><xsl:value-of select="$OSD_USE_OVERLAY='yes' or $OSD_USE_OVERLAY='true' or $OSD_USE_OVERLAY='1'"/></xsl:param>
<osd type="compass" enabled="yes" x="{round(-60*number($OSD_SIZE))}" y="{round(-80*number($OSD_SIZE))}" w="{round(60*number($OSD_SIZE))}" h="{round(80*number($OSD_SIZE))}" font_size="{round(200*number($OSD_SIZE))}" enable_expression="vehicle.position_valid"/>
<xsl:text>&#x0A; </xsl:text>
@@ -14,11 +15,11 @@
<xsl:text>&#x0A; </xsl:text>
<osd type="text" label="${{navigation.item[1].length[named]}}" x="0" y="{-$NEXT_TURN_TEXT_HIGHT}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_TEXT_HIGHT}" font_size="{round(200*number($OSD_SIZE))}" enable_expression="navigation.nav_status>=3"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="button" src="gui_zoom_in_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="zoom_in()" x="0" y="0" osd_configuration="1"/>
+ <osd type="button" src="gui_zoom_in_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="zoom_in()" x="0" y="0" osd_configuration="1" use_overlay="{$OSD_USE_OVERLAY}"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="button" src="gui_zoom_out_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="zoom_out()" x="0" y="{round(number($ICON_BIG)+8*number($OSD_SIZE))}" osd_configuration="1"/>
+ <osd type="button" src="gui_zoom_out_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="zoom_out()" x="0" y="{round(number($ICON_BIG)+8*number($OSD_SIZE))}" osd_configuration="1" use_overlay="{$OSD_USE_OVERLAY}"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="button" src="cursor_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="follow=0;set_center_cursor()" x="{round(-60*number($OSD_SIZE))}" y="{round(40*number($OSD_SIZE))}" enable_expression="follow>1"/>
+ <osd type="button" src="cursor_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="follow=0;set_center_cursor()" x="{round(number($ICON_BIG)+8*number($OSD_SIZE))}" y="0" enable_expression="follow>1" use_overlay="{$OSD_USE_OVERLAY}"/>
<xsl:text>&#x0A; </xsl:text>
<xsl:copy><xsl:copy-of select="@*|node()"/></xsl:copy>
</xsl:template>
diff --git a/navit/xslt/tomtom.xslt b/navit/xslt/tomtom.xslt
new file mode 100644
index 000000000..3e34d9224
--- /dev/null
+++ b/navit/xslt/tomtom.xslt
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude" version="1.0">
+
+ <xsl:output method="xml" indent="yes" cdata-section-elements="gui" doctype-system="navit.dtd"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates select="config"/>
+ </xsl:template>
+
+ <xsl:template match="config">
+ <xsl:copy>
+ <xsl:apply-templates select="navit"/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="navit">
+ <xsl:copy>
+ <xsl:attribute name="zoom">32</xsl:attribute>
+ <xsl:attribute name="tracking">1</xsl:attribute>
+ <xsl:attribute name="orientation">-1</xsl:attribute>
+ <xsl:attribute name="autozoom_active">1</xsl:attribute>
+ <xsl:attribute name="recent_dest">25</xsl:attribute>
+ <graphics type="sdl" w="480" h="272" bpp="16" frame="0" flags="1"/>
+ <xsl:copy-of select="gui[@type='internal']"/>
+ <osd enabled="yes" type="text" x="80" y="0" w="320" h="40" font_size="360" align="0" label="${{tracking.item.street_name}} ${{tracking.item.street_name_systematic}}" background_color="#00008080"/>
+ <osd enabled="yes" type="text" x="80" y="232" w="80" h="40" font_size="360" align="0" label="${{navigation.item[1].length[named]}}" background_color="#00008080"/>
+ <osd enabled="yes" type="text" x="160" y="232" w="240" h="40" font_size="360" align="0" label="${{vehicle.position_speed}} / ${{tracking.item.route_speed}}" background_color="#00008080"/>
+ <osd enabled="yes" type="text" x="400" y="232" w="80" h="40" font_size="360" align="0" label="${{navigation.item.destination_length[named]}}" background_color="#00008080"/>
+ <osd enabled="yes" type="text" x="400" y="192" w="80" h="40" font_size="360" align="0" label="${{navigation.item.destination_time[arrival]}}" background_color="#00008080"/>
+ <osd enabled="yes" type="compass" x="400" y="80" w="80" h="112" background_color="#00008080" font_size="300"/>
+ <osd enabled="yes" type="gps_status" x="0" y="80" w="80" h="40" background_color="#00008080"/>
+ <osd enabled="yes" type="speed_warner" x="0" y="120" w="80" h="72" background_color="#00008080" font_size="300"/>
+ <osd enabled="yes" type="navigation_next_turn" x="0" y="192" w="80" h="80" icon_w="48" icon_h="48" icon_src="%s_wh_48_48.png" background_color="#00008080"/>
+ <osd enabled="yes" type="button" x="400" y="0" command="zoom_in()" src="tomtom_plus_80_80.png"/>
+ <osd enabled="yes" type="button" x="0" y="0" command="zoom_out()" src="tomtom_minus_80_80.png"/>
+ <vehicle name="Local GPS" profilename="car" enabled="yes" active="yes" follow="1" source="file:/var/run/gpspipe">
+ <!-- Navit can write a tracklog in several formats (gpx, nmea or textfile): -->
+ <log enabled="no" type="gpx" attr_types="position_time_iso8601,position_direction,position_speed,position_radius" data="/mnt/sdcard/navit/track_%Y%m%d-%%i.gpx" flush_size="1000" flush_time="30"/>
+ </vehicle>
+ <vehicle name="Demo" profilename="car" enabled="yes" active="no" follow="1" source="demo://" speed="100"/>
+ <xsl:copy-of select="tracking"/>
+
+ <xsl:copy-of select="vehicleprofile[@name='car']"/>
+ <xsl:copy-of select="vehicleprofile[@name='car_shortest']"/>
+ <xsl:copy-of select="vehicleprofile[@name='car_avoid_tolls']"/>
+ <xsl:copy-of select="vehicleprofile[@name='bike']"/>
+ <xsl:copy-of select="vehicleprofile[@name='pedestrian']"/>
+
+ <xsl:copy-of select="route"/>
+ <xsl:copy-of select="navigation"/>
+
+ <xsl:comment>Use espeak.</xsl:comment>
+ <speech type="cmdline" data="/mnt/sdcard/navit/bin/espeakdsp -v en '%s'"/>
+
+ <mapset enabled="yes">
+ <map type="binfile" enabled="yes" data="$NAVIT_SHAREDIR/maps/*.bin"/>
+ </mapset>
+ <xsl:copy-of select="layer"/>
+ <xsl:copy-of select="layout"/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:transform>