summaryrefslogtreecommitdiff
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
parent449e5530c4ee68f77691c811f0670cf90e9e58a4 (diff)
parent59bbe485ba74a6df5ec944275ae28fc1bd98981e (diff)
downloadnavit-trac/1341.tar.gz
Merge branch 'trunk' into trac/1341trac/1341
Conflicts: navit/Makefile.am navit/xpm/Makefile.am po/Makefile.am
-rwxr-xr-xCMakeLists.txt8
-rw-r--r--README.md76
-rwxr-xr-xToolchain/arm-eabi.cmake2
-rw-r--r--Toolchain/arm-linux.cmake14
-rwxr-xr-xToolchain/i686-android.cmake6
-rw-r--r--ci/build.sh7
-rw-r--r--ci/build_android.sh12
-rw-r--r--ci/build_android_x86.sh32
-rw-r--r--ci/build_linux.sh20
-rw-r--r--ci/build_tomtom_minimal.sh211
-rw-r--r--ci/build_tomtom_plugin.sh498
-rw-r--r--ci/build_win32.sh8
-rw-r--r--ci/submit_i18n_pr.sh4
-rw-r--r--ci/update_version.sh2
-rw-r--r--circle.yml34
-rw-r--r--cmake/navit_macros.cmake4
-rw-r--r--config.h.cmake1
-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
-rw-r--r--po/CMakeLists.txt1
-rw-r--r--po/af.po.in19
-rw-r--r--po/ar.po.in19
-rw-r--r--po/ast.po.in19
-rw-r--r--po/be.po.in19
-rw-r--r--po/ca.po.in50
-rw-r--r--po/cs.po.in109
-rw-r--r--po/cy.po.in25
-rw-r--r--po/da.po.in69
-rw-r--r--po/de.po.in23
-rw-r--r--po/de_CH.po.in19
-rw-r--r--po/el.po.in19
-rw-r--r--po/en_AU.po.in19
-rw-r--r--po/en_CA.po.in19
-rw-r--r--po/en_GB.po.in25
-rw-r--r--po/eo.po.in19
-rw-r--r--po/es.po.in89
-rw-r--r--po/et.po.in19
-rw-r--r--po/eu.po.in19
-rw-r--r--po/fa.po.in19
-rw-r--r--po/fi.po.in21
-rw-r--r--po/fil.po.in19
-rw-r--r--po/fo.po.in19
-rw-r--r--po/fr.po.in56
-rw-r--r--po/fr_CH.po.in19
-rw-r--r--po/gl.po.in19
-rw-r--r--po/he.po.in20
-rw-r--r--po/hi.po.in19
-rw-r--r--po/hr.po.in19
-rw-r--r--po/hu.po.in241
-rw-r--r--po/id.po.in19
-rw-r--r--po/it.po.in25
-rw-r--r--po/ja.po.in19
-rw-r--r--po/jv.po.in19
-rw-r--r--po/kk.po.in21
-rw-r--r--po/kn.po.in19
-rw-r--r--po/ko.po.in19
-rw-r--r--po/ku.po.in19
-rw-r--r--po/lb.po.in20
-rw-r--r--po/lt.po.in172
-rw-r--r--po/lv.po.in19
-rw-r--r--po/mk.po.in19
-rw-r--r--po/ml.po.in19
-rw-r--r--po/mn.po.in19
-rw-r--r--po/nb.po.in44
-rw-r--r--po/nds.po.in31
-rw-r--r--po/nl.po.in17
-rw-r--r--po/pl.po.in83
-rw-r--r--po/pt.po.in22
-rw-r--r--po/ru.po.in16
-rw-r--r--po/zh_TW.po.in2756
185 files changed, 9032 insertions, 4070 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a08365d1f..d154e1e6c 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -579,6 +579,10 @@ if (APPLE OR USE_UIKIT)
set(BUILD_BUNDLE TRUE CACHE BOOLEAN "build an osx bundle")
endif()
+if(CMAKE_SIZEOF_VOID_P LESS 8)
+ set_with_reason(BUILD_MAPTOOL "maptool works only on 64 bit architectures" FALSE)
+endif()
+
set(LOCALEDIR "${LOCALE_DIR}/locale")
find_program(BZCAT NAMES bzcat)
@@ -589,6 +593,9 @@ if (SAMPLE_MAP)
elseif(NOT BZCAT)
cfg_feature(SAMPLE_MAP "downloading binary map because of missing bzcat" TRUE)
set(DOWNLOAD_SAMPLE_MAP TRUE)
+ elseif(NOT BUILD_MAPTOOL)
+ cfg_feature(SAMPLE_MAP "downloading binary map because maptool compilation is disabled" TRUE)
+ set(DOWNLOAD_SAMPLE_MAP TRUE)
endif(CMAKE_CROSSCOMPILING)
endif(SAMPLE_MAP)
@@ -615,7 +622,6 @@ if(ANDROID)
set_with_reason(graphics/android "Android detected" TRUE)
set_with_reason(speech/android "Android detected" TRUE)
set_with_reason(vehicle/android "Android detected" TRUE)
- set_with_reason(plugin/pedestrian "Android detected" TRUE)
set(SHARED_LIBNAVIT TRUE)
add_feature(XPM2PNG "Android detected" TRUE)
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..568255875
--- /dev/null
+++ b/README.md
@@ -0,0 +1,76 @@
+[![Build Status](https://img.shields.io/circleci/project/github/navit-gps/navit/trunk.svg)](https://circleci.com/gh/navit-gps/navit)
+
+NavIT
+=====
+
+Navit is a open source (GPL) car navigation system with routing engine.
+
+It's modular design is capable of using vector maps of various formats
+for routing and rendering of the displayed map. It's even possible to
+use multiple maps at a time.
+
+The GTK+ or SDL user interfaces are designed to work well with touch
+screen displays. Points of Interest of various formats are displayed
+on the map.
+
+The current vehicle position is either read from gpsd or directly from
+NMEA GPS sensors.
+
+The routing engine not only calculates an optimal route to your
+destination, but also generates directions and even speaks to you.
+
+Navit currently speaks over 70 languages!
+
+You can help translating via our web based translation page :
+ http://translations.launchpad.net/navit/trunk/+pots/navit
+
+
+For help or more information, please refer to the wiki :
+ http://wiki.navit-project.org
+
+If you don't know where to start, we recommend you to read the
+Interactive Help : http://wiki.navit-project.org/index.php/Interactive_help
+
+
+Maps:
+=====
+
+The best navigation system is useless without maps. Those three maps
+are known to work:
+
+- OpenStreetMaps : display, routing, but street name search isn't complete
+ (see http://wiki.navit-project.org/index.php/OpenStreetMaps )
+
+- Grosser Reiseplaner and compliant maps : full support
+ (see http://wiki.navit-project.org/index.php/European_maps )
+
+- Garmin maps : display, routing, search is being worked on
+ (see http://wiki.navit-project.org/index.php/Garmin_maps )
+
+
+GPS Support:
+============
+
+Navit read the current vehicle position :
+- directly from a file
+- from gpsd (local or remote)
+- from udp server (friends tracking) (experimental)
+
+
+Routing algorithm
+=================
+
+NavIt uses a Dijkstra algorithm for routing. The routing starts at the
+destination by assigning a value to each point directly connected to
+destination point. The value represents the estimated time needed to
+pass this distance.
+
+Now the point with the lowest value is choosen using the Fibonacci
+heap and a value is assigned to connected points whos are
+unevaluated or whos current value ist greater than the new one.
+
+The search is repeated until the origin is found.
+
+Once the origin is reached, all that needs to be done is to follow the
+points with the lowest values to the destination.
+
diff --git a/Toolchain/arm-eabi.cmake b/Toolchain/arm-eabi.cmake
index 9f5473b4b..7c8190667 100755
--- a/Toolchain/arm-eabi.cmake
+++ b/Toolchain/arm-eabi.cmake
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME GNU)
set(ANDROID TRUE)
-set(ANDROID_API_VERSION 8 CACHE STRING "Andriod API Version")
+set(ANDROID_API_VERSION 9 CACHE STRING "Andriod API Version")
set(ANDROID_NDK_API_VERSION ${ANDROID_API_VERSION} CACHE STRING "Andriod NDK API Version")
set(ANDROID_ARCH "armeabi" CACHE STRING "Android architecture")
diff --git a/Toolchain/arm-linux.cmake b/Toolchain/arm-linux.cmake
new file mode 100644
index 000000000..c85a8a6dc
--- /dev/null
+++ b/Toolchain/arm-linux.cmake
@@ -0,0 +1,14 @@
+set ( CMAKE_SYSTEM_NAME GNU )
+
+# specify the cross compiler
+find_program ( CMAKE_C_COMPILER NAMES arm-linux-gcc )
+find_program ( CMAKE_CXX_COMPILER NAMES arm-linux-g++ )
+
+set ( TOMTOM_SDK_DIR /opt/tomtom-sdk )
+set ( CMAKE_FIND_ROOT_PATH ${TOMTOM_SDK_DIR} )
+
+set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
+set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+set ( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
+add_definitions(-D_GNU_SOURCE)
diff --git a/Toolchain/i686-android.cmake b/Toolchain/i686-android.cmake
index 94c6197e5..2b6e8a177 100755
--- a/Toolchain/i686-android.cmake
+++ b/Toolchain/i686-android.cmake
@@ -5,8 +5,8 @@ set(ANDROID_API_VERSION 9 CACHE STRING "Andriod API Version")
set(ANDROID_NDK_API_VERSION ${ANDROID_API_VERSION} CACHE STRING "Andriod NDK API Version")
set(ANDROID_ARCH "x86" CACHE STRING "Android architecture")
-find_program(CMAKE_C_COMPILER NAMES i686-android-linux-gcc i686-android-linux-gcc.exe)
-find_program(CMAKE_CXX_COMPILER NAMES i686-android-linux-g++ i686-android-linux-g++.exe)
+find_program(CMAKE_C_COMPILER NAMES i686-linux-android-gcc i686-linux-android-gcc.exe)
+find_program(CMAKE_CXX_COMPILER NAMES i686-linux-android-g++ i686-linux-android-g++.exe)
set(PKG_CONFIG_EXECUTABLE "i686-android-pkg-config")
get_filename_component(COMPILER_PATH ${CMAKE_C_COMPILER} PATH)
@@ -16,7 +16,7 @@ set(ANDROID_NDK "${COMPILER_PATH}/../../../../.." CACHE STRING "PATH to Andriod
set(NDK_ARCH_DIR "${ANDROID_NDK}/platforms/android-${ANDROID_NDK_API_VERSION}/arch-x86")
set(CMAKE_FIND_ROOT_PATH ${NDK_ARCH_DIR})
-set(CMAKE_REQUIRED_FLAGS "-nostdlib -lc -ldl -lgcc -L${NDK_ARCH_DIR}/usr/lib")
+set(CMAKE_REQUIRED_FLAGS "-ldl --sysroot=${NDK_ARCH_DIR} ${EXTRA_COMPILER_FLAGS}")
set(CMAKE_REQUIRED_INCLUDES "${NDK_ARCH_DIR}/usr/include")
set(NAVIT_COMPILE_FLAGS "-I${NDK_ARCH_DIR}/usr/include -g -D_GNU_SOURCE -DANDROID -fno-short-enums ${CMAKE_REQUIRED_FLAGS}")
diff --git a/ci/build.sh b/ci/build.sh
new file mode 100644
index 000000000..7f8f46279
--- /dev/null
+++ b/ci/build.sh
@@ -0,0 +1,7 @@
+echo "$# build script (s) to run"
+
+for i in $(seq 1 $#); do
+ eval s=\$$i
+ echo "Starting build script #$i : $s"
+ bash -e $s
+done
diff --git a/ci/build_android.sh b/ci/build_android.sh
index 553a1aaf1..a0a4659c8 100644
--- a/ci/build_android.sh
+++ b/ci/build_android.sh
@@ -4,12 +4,15 @@ grn='\e[0;32m'
yel='\e[1;33m'
off='\e[0m'
+wget -nv -c http://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip
+unzip -q -d ~ android-ndk-r13-linux-x86_64.zip
+
# setup var's to perform environment setup and cmake
export START_PATH=~/
export SOURCE_PATH=$START_PATH"/"${CIRCLE_PROJECT_REPONAME}"/"
export CMAKE_FILE=$SOURCE_PATH"/Toolchain/arm-eabi.cmake"
-export ANDROID_NDK="/usr/local/android-ndk/"
+export ANDROID_NDK=~/android-ndk-r13
export ANDROID_NDK_BIN=$ANDROID_NDK"/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin"
export ANDROID_SDK="/usr/local/android-sdk-linux/"
@@ -39,17 +42,14 @@ else
echo
fi
-mkdir -p $BUILD_PATH
+[ -d $BUILD_PATH ] || mkdir -p $BUILD_PATH
cd $BUILD_PATH
export PATH=$ANDROID_NDK_BIN:$ANDROID_SDK_TOOLS:$ANDROID_SDK_PLATFORM_TOOLS:$PATH
android list targets
-# The value comes from ( last_svn_rev - max_build_id ) at the time of the git migration
-svn_rev=$(( 5658 + $CIRCLE_BUILD_NUM ))
-sed -i -e "s/ANDROID_VERSION_INT=\"0\"/ANDROID_VERSION_INT=\"${svn_rev}\"/g" ~/navit/navit/android/CMakeLists.txt
mkdir $CIRCLE_ARTIFACTS/android/
cp ~/navit/navit/android/CMakeLists.txt $CIRCLE_ARTIFACTS/android/
-cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_FILE -DCACHE_SIZE='(20*1024*1024)' -DAVOID_FLOAT=1 -DSAMPLE_MAP=n -DBUILD_MAPTOOL=n -DANDROID_API_VERSION=19 $SOURCE_PATH
+cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_FILE -DCACHE_SIZE='(20*1024*1024)' -DAVOID_FLOAT=1 -DSAMPLE_MAP=n -DBUILD_MAPTOOL=n -DANDROID_API_VERSION=23 -DANDROID_NDK_API_VERSION=19 $SOURCE_PATH
make || exit 1
if [[ "${CIRCLE_BRANCH}" == "master" ]]; then
make apkg-release && mv navit/android/bin/Navit-release-unsigned.apk $CIRCLE_ARTIFACTS/navit-$CIRCLE_SHA1-release-unsigned.apk || exit 1
diff --git a/ci/build_android_x86.sh b/ci/build_android_x86.sh
new file mode 100644
index 000000000..022b7f5af
--- /dev/null
+++ b/ci/build_android_x86.sh
@@ -0,0 +1,32 @@
+export START_PATH=~/
+export SOURCE_PATH=$START_PATH"/"${CIRCLE_PROJECT_REPONAME}"/"
+export CMAKE_FILE=$SOURCE_PATH"/Toolchain/i686-android.cmake"
+export ANDROID_NDK=~/android-ndk-r13
+export ANDROID_NDK_BIN=$ANDROID_NDK"/toolchains/x86-4.9/prebuilt/linux-x86_64/bin"
+export ANDROID_SDK="/usr/local/android-sdk-linux/"
+export ANDROID_SDK_PLATFORM_TOOLS=$ANDROID_SDK"/platform-tools"
+export PATH=$ANDROID_NDK_BIN:$ANDROID_SDK_PLATFORM_TOOLS:$PATH
+export BUILD_PATH=$START_PATH"/android-x86"
+
+wget -nv -c http://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip
+unzip -q -d ~ android-ndk-r13-linux-x86_64.zip
+
+[ -d $BUILD_PATH ] || mkdir -p $BUILD_PATH
+cd $BUILD_PATH
+
+android list targets
+
+cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_FILE -DAVOID_FLOAT=1 -DSAMPLE_MAP=n -DBUILD_MAPTOOL=n -DANDROID_API_VERSION=23 -DANDROID_NDK_API_VERSION=19 -DDISABLE_CXX=1 -DDISABLE_QT=1 $SOURCE_PATH || exit -1
+make || exit -1
+
+if [[ "${CIRCLE_BRANCH}" == "master" ]]; then
+ make apkg-release && mv navit/android/bin/Navit-release-unsigned.apk $CIRCLE_ARTIFACTS/navit-$CIRCLE_SHA1-x86-release-unsigned.apk || exit 1
+else
+ make apkg && mv navit/android/bin/Navit-debug.apk $CIRCLE_ARTIFACTS/navit-$CIRCLE_SHA1-x86-debug.apk || exit 1
+fi
+
+#cp ~/android-build/navit/*.xml $CIRCLE_ARTIFACTS/android/
+
+echo
+echo "Build leftovers :"
+ls navit/android/bin/
diff --git a/ci/build_linux.sh b/ci/build_linux.sh
index a85540e47..5cbd2039a 100644
--- a/ci/build_linux.sh
+++ b/ci/build_linux.sh
@@ -1,9 +1,15 @@
+sudo apt-get install cmake libpng12-dev librsvg2-bin libfreetype6-dev libdbus-glib-1-dev g++ libgtk2.0-dev
+
+cmake_opts="-Dgraphics/qt_qpainter:BOOL=FALSE -Dgui/qml:BOOL=FALSE -DSVG2PNG:BOOL=FALSE -DSAMPLE_MAP=n -Dgraphics/gtk_drawing_area:BOOL=TRUE"
+
if [[ "${CIRCLE_PROJECT_USERNAME}" == "navit-gps" && "${CIRCLE_BRANCH}" == "trunk" ]]; then
+ # If we are building the official trunk code, push an update to coverity
+ wget -nv -c -O ~/assets/cov-analysis-linux64-7.6.0.tar.gz http://sd-55475.dedibox.fr/cov-analysis-linux64-7.6.0.tar.gz
tar xfz ~/assets/cov-analysis-linux64-7.6.0.tar.gz
export PATH=~/navit/cov-analysis-linux64-7.6.0/bin:$PATH
mkdir bin && cd bin
- cov-build --dir cov-int cmake ../ -Dgraphics/qt_qpainter:BOOL=FALSE -Dgui/qml:BOOL=FALSE -DSVG2PNG:BOOL=FALSE -DSAMPLE_MAP=n
+ cov-build --dir cov-int cmake ../ ${cmake_opts}
cov-build --dir cov-int make || exit -1
tar czvf navit.tgz cov-int
@@ -13,8 +19,18 @@ if [[ "${CIRCLE_PROJECT_USERNAME}" == "navit-gps" && "${CIRCLE_BRANCH}" == "trun
--form version="${CIRCLE_BRANCH}-$CIRCLE_SHA1" \
--form description="${CIRCLE_BRANCH}-$CIRCLE_SHA1" \
https://scan.coverity.com/builds?project=$CIRCLE_PROJECT_USERNAME
+
+ # Then update the translation template on launchpad
+ sed -i '/INTEGER/d' po/navit.pot
+ cp po/navit.pot $CIRCLE_ARTIFACTS/
+ curl "https://translations.launchpad.net/navit/${CIRCLE_BRANCH}/+translations-upload" -H "$lp_cookie" -H "Referer: https://translations.launchpad.net/navit/${CIRCLE_BRANCH}/+translations-upload" -F file=@po/navit.pot | grep title
+
else
mkdir bin && cd bin
- cmake ../ -Dgraphics/qt_qpainter:BOOL=FALSE -Dgui/qml:BOOL=FALSE -DSVG2PNG:BOOL=FALSE -DSAMPLE_MAP=n|| exit -1
+ cmake ../ ${cmake_opts} || exit -1
make || exit -1
fi
+
+if [[ "$CIRCLE_ARTIFACTS" != "" ]]; then
+ cp -r navit/xpm $CIRCLE_ARTIFACTS
+fi
diff --git a/ci/build_tomtom_minimal.sh b/ci/build_tomtom_minimal.sh
new file mode 100644
index 000000000..6a8582be1
--- /dev/null
+++ b/ci/build_tomtom_minimal.sh
@@ -0,0 +1,211 @@
+#!/bin/sh
+# this builds navit for tomtom
+# in case you want to build a plugin for tomtom use build_tomtom_plugin.sh instead
+# in case you want to build a standalone system
+# https://github.com/george-hopkins/opentom
+# https://github.com/gefin/opentom
+
+set -e
+
+export ARCH=arm-linux
+cp Toolchain/$ARCH.cmake /tmp
+
+# toolchain
+export TOMTOM_SDK_DIR=/opt/tomtom-sdk
+mkdir -p $TOMTOM_SDK_DIR >/dev/null 2>&1 || export TOMTOM_SDK_DIR=$HOME/tomtom-sdk
+export PREFIX=$TOMTOM_SDK_DIR/gcc-3.3.4_glibc-2.3.2/$ARCH/sys-root
+export PATH=$TOMTOM_SDK_DIR/gcc-3.3.4_glibc-2.3.2/bin:$PREFIX/bin/:$PATH
+export CFLAGS="-O2 -I$PREFIX/include -I$PREFIX/usr/include"
+export CPPFLAGS="-I$PREFIX/include -I$PREFIX/usr/include"
+export LDFLAGS="-L$PREFIX/lib -L$PREFIX/usr/lib"
+export CC=$ARCH-gcc
+export CXX=$ARCH-g++
+export LD=$ARCH-ld
+export NM="$ARCH-nm -B"
+export AR=$ARCH-ar
+export RANLIB=$ARCH-ranlib
+export STRIP=$ARCH-strip
+export OBJCOPY=$ARCH-objcopy
+export LN_S="ln -s"
+export PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig
+JOBS=`getconf _NPROCESSORS_ONLN`
+
+echo "Jobs"
+echo $JOBS
+
+mkdir -p ~/tomtom_assets
+
+if ! [ -e "~/tomtom_assets/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz" ]
+ then
+ wget -nv -c http://www.tomtom.com/gpl/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz -P ~/tomtom_assets
+fi
+
+if ! test -f "~/tomtom_assets/libpng-1.6.26.tar.gz"
+ then
+ wget -nv -c ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.26.tar.gz -P ~/tomtom_assets
+fi
+
+# toolchain
+cd /tmp
+mkdir -p $TOMTOM_SDK_DIR
+tar xzf ~/tomtom_assets/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz -C $TOMTOM_SDK_DIR
+
+
+# zlib
+cd /tmp
+wget -nv -c http://zlib.net/zlib-1.2.8.tar.gz
+tar xzf zlib-1.2.8.tar.gz
+cd zlib-1.2.8
+./configure --prefix=$PREFIX
+make -j$JOBS
+make install
+
+# libxml
+cd /tmp/
+wget -nv -c http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz
+tar xzf libxml2-2.7.8.tar.gz
+cd libxml2-2.7.8/
+./configure --prefix=$PREFIX --host=$ARCH --without-python
+make -j$JOBS
+make install
+
+# libpng
+cd /tmp/
+tar xzf ~/tomtom_assets/libpng-1.6.26.tar.gz
+cd libpng-1.6.26/
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+cd /tmp
+wget -nv -c http://download.savannah.gnu.org/releases/freetype/freetype-2.5.0.tar.gz
+tar xzf freetype-2.5.0.tar.gz
+cd freetype-2.5.0
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+freetype-config --cflags
+
+# glib
+cd /tmp
+wget -nv -c http://ftp.gnome.org/pub/gnome/sources/glib/2.25/glib-2.25.17.tar.gz
+tar xzf glib-2.25.17.tar.gz
+cd glib-2.25.17
+cat > tomtom.cache << EOF
+glib_cv_long_long_format=ll
+glib_cv_stack_grows=no
+glib_cv_uscore=no
+ac_cv_func_posix_getgrgid_r=yes
+ac_cv_func_posix_getpwuid_r=yes
+EOF
+chmod a-w tomtom.cache
+./configure --prefix=$PREFIX --host=$ARCH --cache-file=tomtom.cache
+sed -i "s|cp xgen-gmc gmarshal.c |cp xgen-gmc gmarshal.c \&\& sed -i \"s\|g_value_get_schar\|g_value_get_char\|g\" gmarshal.c |g" gobject/Makefile
+make -j$JOBS
+make install
+
+
+# tslib
+cd /tmp
+rm -rf tslib-svn
+git clone https://github.com/playya/tslib-svn.git
+cd tslib-svn
+sed -i "s|AM_CONFIG_HEADER|AC_CONFIG_HEADERS|g" configure.ac
+sed -i "119i\#ifdef EVIOCGRAB" plugins/input-raw.c
+sed -i "124i\#endif" plugins/input-raw.c
+sed -i "290i\#ifdef EVIOCGRAB" plugins/input-raw.c
+sed -i "294i\#endif" plugins/input-raw.c
+sed -i "s|# module_raw h3600|module_raw h3600|g" etc/ts.conf # tomtom go 710
+./autogen.sh
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+cd /tmp
+wget -nv -c http://www.libsdl.org/release/SDL-1.2.15.tar.gz
+tar xzf SDL-1.2.15.tar.gz
+cd SDL-1.2.15
+wget -nv -c http://tracks.yaina.de/source/sdl-fbcon-notty.patch
+patch -p0 -i sdl-fbcon-notty.patch
+./configure --prefix=$PREFIX --host=$ARCH \
+ --disable-esd --disable-cdrom --disable-joystick --disable-video-x11 \
+ --disable-x11-vm --disable-dga --disable-video-x11-dgamouse \
+ --disable-video-x11-xv --disable-video-x11-xinerama --disable-video-directfb \
+ --enable-video-fbcon --disable-audio CFLAGS="$CFLAGS -DFBCON_NOTTY"
+make -j$JOBS
+make install
+
+# to find sdl-config
+export PATH=$PREFIX/bin:$PATH
+
+# sdl image
+cd /tmp
+wget -nv -c http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.12.tar.gz
+tar xzf SDL_image-1.2.12.tar.gz
+cd SDL_image-1.2.12
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+# in the end we only want Navit locale
+rm -r $PREFIX/share/locale
+
+
+# navit
+cd ~/navit
+sed -i "s|set ( TOMTOM_SDK_DIR /opt/tomtom-sdk )|set ( TOMTOM_SDK_DIR $TOMTOM_SDK_DIR )|g" /tmp/$ARCH.cmake
+mkdir -p build
+cd build
+cmake ../ -DCMAKE_INSTALL_PREFIX=$PREFIX -DFREETYPE_INCLUDE_DIRS=$PREFIX/include/freetype2/ -Dsupport/gettext_intl=TRUE \
+-DHAVE_API_TOMTOM=TRUE -DXSLTS=tomtom -DAVOID_FLOAT=TRUE -Dmap/mg=FALSE -DUSE_PLUGINS=0 -DCMAKE_TOOLCHAIN_FILE=/tmp/$ARCH.cmake \
+-DDISABLE_QT=ON -DSAMPLE_MAP=n -DBUILD_MAPTOOL=n
+make -j$JOBS
+make install
+cd ..
+
+
+# creating directories
+OUT_PATH="/tmp/tomtom/sdcard"
+rm -rf $OUT_PATH
+mkdir -p $OUT_PATH
+cd $OUT_PATH
+mkdir -p navit
+cd navit
+mkdir -p bin share
+cd share
+mkdir -p fonts
+cd ..
+
+
+# navit executable
+cp $PREFIX/bin/navit bin/
+
+
+# fonts
+cp -r ~/navit/navit/fonts/*.ttf $OUT_PATH/navit/share/fonts
+
+# images and xml
+cd share
+mkdir xpm
+cd xpm
+cp $PREFIX/share/navit/xpm/*16.png ./
+cp $PREFIX/share/navit/xpm/*32.png ./
+cp $PREFIX/share/navit/xpm/*48.png ./
+cp $PREFIX/share/navit/xpm/*64.png ./
+cp $PREFIX/share/navit/xpm/nav*.* ./
+cp $PREFIX/share/navit/xpm/country*.png ./
+cd ..
+cp $PREFIX/share/navit/navit.xml ./tomtom480.xml
+mkdir -p maps
+
+
+# locale
+cp -r $PREFIX/share/locale ./
+
+
+cd $OUT_PATH
+zip -r $CIRCLE_ARTIFACTS/navitom_minimal.zip navit
diff --git a/ci/build_tomtom_plugin.sh b/ci/build_tomtom_plugin.sh
new file mode 100644
index 000000000..3080b39c1
--- /dev/null
+++ b/ci/build_tomtom_plugin.sh
@@ -0,0 +1,498 @@
+#!/bin/sh
+# this builds a plugin for tomtom
+# in case you want to build a standalone system
+# https://github.com/george-hopkins/opentom
+# https://github.com/gefin/opentom
+
+set -e
+
+export ARCH=arm-linux
+cp Toolchain/$ARCH.cmake /tmp
+
+# toolchain
+export TOMTOM_SDK_DIR=/opt/tomtom-sdk
+mkdir -p $TOMTOM_SDK_DIR >/dev/null 2>&1 || export TOMTOM_SDK_DIR=$HOME/tomtom-sdk
+export PREFIX=$TOMTOM_SDK_DIR/gcc-3.3.4_glibc-2.3.2/$ARCH/sys-root
+export PATH=$TOMTOM_SDK_DIR/gcc-3.3.4_glibc-2.3.2/bin:$PREFIX/bin/:$PATH
+export CFLAGS="-O2 -I$PREFIX/include -I$PREFIX/usr/include"
+export CPPFLAGS="-I$PREFIX/include -I$PREFIX/usr/include"
+export LDFLAGS="-L$PREFIX/lib -L$PREFIX/usr/lib"
+export CC=$ARCH-gcc
+export CXX=$ARCH-g++
+export LD=$ARCH-ld
+export NM="$ARCH-nm -B"
+export AR=$ARCH-ar
+export RANLIB=$ARCH-ranlib
+export STRIP=$ARCH-strip
+export OBJCOPY=$ARCH-objcopy
+export LN_S="ln -s"
+export PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig
+JOBS=`getconf _NPROCESSORS_ONLN`
+
+echo "Jobs"
+echo $JOBS
+
+mkdir -p ~/tomtom_assets
+
+if ! [ -e "~/tomtom_assets/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz" ]
+ then
+ wget -c http://www.tomtom.com/gpl/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz -P ~/tomtom_assets
+fi
+
+if ! test -f "~/tomtom_assets/libpng-1.6.26.tar.gz"
+then
+ wget -c ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.26.tar.gz -P ~/tomtom_assets
+fi
+
+# toolchain
+cd /tmp
+mkdir -p $TOMTOM_SDK_DIR
+tar xzf ~/tomtom_assets/toolchain_redhat_gcc-3.3.4_glibc-2.3.2-20060131a.tar.gz -C $TOMTOM_SDK_DIR
+
+# espeak
+cd /tmp
+# this one includes the precompiled voices
+wget -c http://freefr.dl.sourceforge.net/project/espeak/espeak/espeak-1.48/espeak-1.48.04-source.zip
+unzip espeak-1.48.04-source.zip
+cd espeak-1.48.04-source
+sed -i "s/PREFIX=\/usr//g" src/Makefile
+sed -i "s/DATADIR=\/usr\/share\/espeak-data/DATADIR=~\/share\/espeak-data/g" src/Makefile
+sed -i "s/AUDIO = portaudio/#AUDIO = portaudio/g" src/Makefile
+sed -i "s/-fvisibility=hidden//g" src/Makefile
+cat src/Makefile
+make -C src
+cd src
+make install
+
+# http://forum.navit-project.org/viewtopic.php?f=17&t=568
+cd /tmp
+cat > /tmp/espeakdsp.c << EOF
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/soundcard.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#define IBUFFERLEN 1024
+#define MAXARGC 30
+
+
+int main(int argc, char *argv[],char *envp[])
+{
+ int pipefd[2];
+ pid_t cpid;
+ char buf;
+ int co,wp,l,fh;
+ short bufi[IBUFFERLEN],bufo[IBUFFERLEN*2];
+ int rate=22050;
+
+ char *newargv[MAXARGC+2];
+
+ for(co=0;co<argc;co++)
+ {
+ if(co>=MAXARGC)break;
+ newargv[co]=argv[co];
+ }
+ newargv[co++]="--stdout";
+ newargv[co++]=NULL;
+
+ if (pipe(pipefd) == -1)
+ {
+ perror("pipe");
+ exit(EXIT_FAILURE);
+ }
+
+ if(setpriority(PRIO_PROCESS,0,-10))
+ perror ("setpriority");
+
+ cpid = fork();
+ if (cpid == -1)
+ {
+ perror("fork");
+ exit(EXIT_FAILURE);
+ }
+
+ if (cpid == 0)
+ { /* Child writes to pipe */
+
+ close(pipefd[0]); /* Close unused read end */
+ dup2(pipefd[1],1);
+ execve("/mnt/sdcard/navit/bin/espeak",newargv,envp);
+ perror("exec /mnt/sdcard/navit/bin/espeak");
+ close(pipefd[1]); /* Reader will see EOF */
+ wait(NULL); /* Wait for child */
+ exit(EXIT_SUCCESS);
+
+ } else { /* Parent read from pipe */
+
+ close(pipefd[1]); /* Close unused write end */
+
+ l=read(pipefd[0],bufi,64);
+ if(memcmp(bufi,"RIFF",4))
+ {
+ while(l>0)
+ {
+ write(1,bufi,l);
+ l=read(pipefd[0],bufi,IBUFFERLEN);
+ }
+ exit(EXIT_SUCCESS);
+ }
+ l=read(pipefd[0],bufi,IBUFFERLEN);
+ if(l<500)
+ {
+ printf("espeakdsp: avoid noise speaking a empty string\n");
+ exit(EXIT_SUCCESS);
+ }
+ usleep (50000);
+
+ fh=open("/dev/dsp",O_WRONLY);
+ if(fh<0)
+ {
+ perror("open /dev/dsp");
+ exit(EXIT_FAILURE);
+ }
+ ioctl(fh, SNDCTL_DSP_SPEED , &rate);
+ ioctl(fh, SNDCTL_DSP_SYNC, 0);
+ while(l)
+ {
+ for(co=0,wp=0;co<IBUFFERLEN;co++)
+ {
+ bufo[wp++]=bufi[co]; /* mono->stereo */
+ bufo[wp++]=bufi[co];
+ }
+ write (fh,bufo,wp);
+ l=read(pipefd[0],bufi,IBUFFERLEN);
+ }
+ ioctl(fh, SNDCTL_DSP_SYNC, 0);
+ close(pipefd[0]);
+ exit(EXIT_SUCCESS);
+ }
+}
+EOF
+arm-linux-gcc -O2 -I$PREFIX/include -I$PREFIX/usr/include espeakdsp.c -o espeakdsp
+
+# zlib
+cd /tmp
+wget -c http://zlib.net/zlib-1.2.8.tar.gz
+tar xzf zlib-1.2.8.tar.gz
+cd zlib-1.2.8
+./configure --prefix=$PREFIX
+make -j$JOBS
+make install
+
+# libxml
+cd /tmp/
+wget -c http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz
+tar xzf libxml2-2.7.8.tar.gz
+cd libxml2-2.7.8/
+./configure --prefix=$PREFIX --host=$ARCH --without-python
+make -j$JOBS
+make install
+
+# libpng
+cd /tmp/
+tar xzf ~/tomtom_assets/libpng-1.6.26.tar.gz
+cd libpng-1.6.26/
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+cd /tmp
+wget -c http://download.savannah.gnu.org/releases/freetype/freetype-2.5.0.tar.gz
+tar xzf freetype-2.5.0.tar.gz
+cd freetype-2.5.0
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+freetype-config --cflags
+
+# glib
+cd /tmp
+wget -c http://ftp.gnome.org/pub/gnome/sources/glib/2.25/glib-2.25.17.tar.gz
+tar xzf glib-2.25.17.tar.gz
+cd glib-2.25.17
+cat > tomtom.cache << EOF
+glib_cv_long_long_format=ll
+glib_cv_stack_grows=no
+glib_cv_uscore=no
+ac_cv_func_posix_getgrgid_r=yes
+ac_cv_func_posix_getpwuid_r=yes
+EOF
+chmod a-w tomtom.cache
+./configure --prefix=$PREFIX --host=$ARCH --cache-file=tomtom.cache
+sed -i "s|cp xgen-gmc gmarshal.c |cp xgen-gmc gmarshal.c \&\& sed -i \"s\|g_value_get_schar\|g_value_get_char\|g\" gmarshal.c |g" gobject/Makefile
+make -j$JOBS
+make install
+
+
+# tslib
+cd /tmp
+rm -rf tslib-svn
+git clone https://github.com/playya/tslib-svn.git
+cd tslib-svn
+sed -i "s|AM_CONFIG_HEADER|AC_CONFIG_HEADERS|g" configure.ac
+sed -i "119i\#ifdef EVIOCGRAB" plugins/input-raw.c
+sed -i "124i\#endif" plugins/input-raw.c
+sed -i "290i\#ifdef EVIOCGRAB" plugins/input-raw.c
+sed -i "294i\#endif" plugins/input-raw.c
+sed -i "s|# module_raw h3600|module_raw h3600|g" etc/ts.conf # tomtom go 710
+./autogen.sh
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+cd /tmp
+wget -c http://www.libsdl.org/release/SDL-1.2.15.tar.gz
+tar xzf SDL-1.2.15.tar.gz
+cd SDL-1.2.15
+wget -c http://tracks.yaina.de/source/sdl-fbcon-notty.patch
+patch -p0 -i sdl-fbcon-notty.patch
+./configure --prefix=$PREFIX --host=$ARCH \
+ --disable-esd --disable-cdrom --disable-joystick --disable-video-x11 \
+ --disable-x11-vm --disable-dga --disable-video-x11-dgamouse \
+ --disable-video-x11-xv --disable-video-x11-xinerama --disable-video-directfb \
+ --enable-video-fbcon --disable-audio CFLAGS="$CFLAGS -DFBCON_NOTTY"
+make -j$JOBS
+make install
+
+# sdl test utilities
+cd test
+./configure --prefix=$PREFIX --host=$ARCH
+make testvidinfo
+cp testvidinfo $PREFIX/usr/bin/
+
+# to find sdl-config
+export PATH=$PREFIX/bin:$PATH
+
+# sdl image
+cd /tmp
+wget -c http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.12.tar.gz
+tar xzf SDL_image-1.2.12.tar.gz
+cd SDL_image-1.2.12
+./configure --prefix=$PREFIX --host=$ARCH
+make -j$JOBS
+make install
+
+
+# in the end we only want Navit locale
+rm -r $PREFIX/share/locale
+
+cat > ~/navit/navit/xpm/tomtom_minus.svg << EOF
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="64px" height="64px" viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1">
+<rect x="-110" y="-110" width="220" height="220" fill="#000080" stroke="none" opacity="0.5"/>
+<path fill="none" stroke="#ffffff" stroke-width="20" stroke-linecap="round" d="M 60 0 L -60 0"/>
+</svg>
+EOF
+
+cat > ~/navit/navit/xpm/tomtom_plus.svg << EOF
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="64px" height="64px" viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1">
+<rect x="-110" y="-110" width="220" height="220" fill="#000080" stroke="none" opacity="0.5"/>
+<path fill="none" stroke="#ffffff" stroke-width="20" stroke-linecap="round" d="M 0 60 L 0 -60 M 60 0 L -60 0"/>
+</svg>
+EOF
+
+
+# navit
+cd ~/navit
+sed -i "s|set ( TOMTOM_SDK_DIR /opt/tomtom-sdk )|set ( TOMTOM_SDK_DIR $TOMTOM_SDK_DIR )|g" /tmp/$ARCH.cmake
+mkdir -p build
+cd build
+cmake ../ -DCMAKE_INSTALL_PREFIX=$PREFIX -DFREETYPE_INCLUDE_DIRS=$PREFIX/include/freetype2/ -Dsupport/gettext_intl=TRUE \
+-DHAVE_API_TOMTOM=TRUE -DXSLTS=tomtom -DAVOID_FLOAT=TRUE -Dmap/mg=FALSE -DUSE_PLUGINS=0 -DCMAKE_TOOLCHAIN_FILE=/tmp/$ARCH.cmake \
+-DDISABLE_QT=ON -DSAMPLE_MAP=n -DBUILD_MAPTOOL=n
+make -j$JOBS
+make install
+cd ..
+
+
+# creating directories
+OUT_PATH="/tmp/tomtom/sdcard"
+rm -rf $OUT_PATH
+mkdir -p $OUT_PATH
+cd $OUT_PATH
+mkdir -p navit SDKRegistry
+cd navit
+mkdir -p bin lib share sdl ts
+cd share
+mkdir -p fonts
+cd ..
+
+
+cp $PREFIX/lib/libfreetype.so.6 lib
+cp $PREFIX/lib/libSDL-1.2.so.0 lib
+cp $PREFIX/lib/libSDL_image-1.2.so.0 lib
+cp $PREFIX/lib/libfreetype.so.6 lib
+cp $PREFIX/lib/libgio-2.0.so lib
+cp $PREFIX/lib/libglib-2.0.so lib/libglib-2.0.so.0
+cp $PREFIX/lib/libgmodule-2.0.so lib/libgmodule-2.0.so.0
+cp $PREFIX/lib/libgobject-2.0.so lib/libgobject-2.0.so.0
+cp $PREFIX/lib/libgthread-2.0.so lib/libgthread-2.0.so.0
+cp $PREFIX/lib/libpng16.so.16 lib
+cp $PREFIX/lib/libts-1.0.so.0 lib
+cp $PREFIX/lib/libxml2.so.2 lib
+cp $PREFIX/lib/libz.so.1 lib
+cp $PREFIX/etc/ts.conf ts
+cp $TOMTOM_SDK_DIR/gcc-3.3.4_glibc-2.3.2/$ARCH/lib/libstdc++.so.5 lib
+
+# flite
+# cp $PREFIX/bin/flite* bin/
+
+# SDL testvidinfo
+cp $PREFIX/usr/bin/testvidinfo sdl/
+
+# navit executable and wrapper
+cp $PREFIX/bin/navit bin/
+cat > bin/navit-wrapper << 'EOF'
+#!/bin/sh
+
+cd /mnt/sdcard/navit/bin
+
+# Set some paths.
+export PATH=$PATH:/mnt/sdcard/navit/bin
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/sdcard/navit/lib:/mnt/sdcard/LoquendoTTS/lib
+export HOME=/mnt/sdcard/navit
+export NAVIT_LIBDIR=/mnt/sdcard/navit/lib/navit
+export NAVIT_SHAREDIR=/mnt/sdcard/navit/share
+export NAVIT_LOCALEDIR=/mnt/sdcard/navit/share/locale
+
+# tslib requirements.
+export TSLIB_CONSOLEDEVICE=none
+export TSLIB_FBDEVICE=/dev/fb
+export TSLIB_TSDEVICE=/dev/ts
+export TSLIB_CALIBFILE=/mnt/sdcard/navit/ts/pointercal
+export TSLIB_CONFFILE=/mnt/sdcard/navit/ts/ts.conf
+export TSLIB_PLUGINDIR=/mnt/sdcard/navit/lib/ts
+
+# SDL requirements.
+export SDL_MOUSEDRV=TSLIB
+export SDL_MOUSEDEV=$TSLIB_TSDEVICE
+export SDL_NOMOUSE=1
+export SDL_FBDEV=/dev/fb
+export SDL_VIDEODRIVER=fbcon
+export SDL_AUDIODRIVER=dsp
+
+# Set time zone.
+export TZ="CEDT-01:00:00CEST-02:00:00,M3.4.0,M10.4.0"
+
+# Set language.
+export LANG=en_US
+
+export ESPEAK_DATA_PATH=/mnt/sdcard/navit/share
+
+# Run Navit.
+if /mnt/sdcard/navit/sdl/testvidinfo | grep 480x272
+then
+ /mnt/sdcard/navit/bin/navit /mnt/sdcard/navit/share/tomtom480.xml 2>/mnt/sdcard/navit/navit.log&
+# tomtom320xml is not provided yet
+# elif /mnt/sdcard/navit/sdl/testvidinfo | grep 320x240
+# then
+# /mnt/sdcard/navit/bin/navit /mnt/sdcard/navit/share/config/tomtom320.xml 2>/mnt/sdcard/navit/navit.log&
+else
+ exit 1
+fi
+
+# Kill TTN while Navit is running.
+killall ttn
+
+while [ $? -eq 0 ]
+do
+echo "\0" > /dev/watchdog
+sleep 10
+ps | grep -v grep | grep -v wrapper | grep navit
+done
+
+/sbin/reboot
+
+EOF
+chmod a+rx bin/navit-wrapper
+
+# fonts
+cp -r ~/navit/navit/fonts/*.ttf $OUT_PATH/navit/share/fonts
+
+# ts
+cp -r $PREFIX/lib/ts $OUT_PATH/navit/lib/
+cp $PREFIX/bin/ts_* $OUT_PATH/navit/ts/
+
+# images and xml
+cd share
+mkdir xpm
+cd xpm
+cp $PREFIX/share/navit/xpm/*16.png ./
+cp $PREFIX/share/navit/xpm/*32.png ./
+cp $PREFIX/share/navit/xpm/*48.png ./
+cp $PREFIX/share/navit/xpm/*64.png ./
+cp $PREFIX/share/navit/xpm/nav*.* ./
+cp $PREFIX/share/navit/xpm/country*.png ./
+cd ..
+cp $PREFIX/share/navit/navit.xml ./tomtom480.xml
+mkdir -p maps
+
+
+# locale
+cp -r $PREFIX/share/locale ./
+
+# espeak
+cp -r ~/share/espeak-data ./
+cp $PREFIX/bin/espeak $OUT_PATH/navit/bin/
+cp $PREFIX/lib/libespeak.so.1 $OUT_PATH/navit/lib
+
+mv /tmp/espeakdsp $OUT_PATH/navit/bin/
+
+# add a menu button
+cat > $OUT_PATH/SDKRegistry/navit.cap << EOF
+Version|100|
+AppName|navit-wrapper|
+AppPath|/mnt/sdcard/navit/bin/|
+AppIconFile|navit.bmp|
+AppMainTitle|Navit|
+AppPort|2001|
+COMMAND|CMD|hallo|navit.bmp|Navit|
+EOF
+
+
+convert $PREFIX/share/icons/hicolor/128x128/apps/navit.png -type truecolor -crop 100x100+12+28 -resize 48x48 $OUT_PATH/SDKRegistry/navit.bmp
+convert -background none ~/navit/navit/xpm/tomtom_plus.svg -resize 80x80 $OUT_PATH/navit/share/xpm/tomtom_plus_80_80.png
+convert -background none ~/navit/navit/xpm/tomtom_minus.svg -resize 80x80 $OUT_PATH/navit/share/xpm/tomtom_minus_80_80.png
+
+cat > $OUT_PATH/SDKRegistry/ts.cap << EOF
+Version|100|
+AppName|ts-wrapper|
+AppPath|/mnt/sdcard/navit/ts/|
+AppIconFile||
+AppMainTitle|Touchscreen|
+AppPort||
+COMMAND|CMD|hallo||Touchscreen|
+EOF
+
+
+cat > $OUT_PATH/navit/ts/ts-wrapper << EOF
+#!/bin/sh
+
+cd /mnt/sdcard
+
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/sdcard/navit/lib
+
+export TSLIB_CONSOLEDEVICE=none
+export TSLIB_FBDEVICE=/dev/fb
+export TSLIB_TSDEVICE=/dev/ts
+export TSLIB_CALIBFILE=/mnt/sdcard/navit/ts/pointercal
+export TSLIB_CONFFILE=/mnt/sdcard/navit/ts/ts.conf
+export TSLIB_PLUGINDIR=/mnt/sdcard/navit/lib/ts
+
+/mnt/sdcard/navit/ts/ts_calibrate
+/mnt/sdcard/navit/ts/ts_test
+EOF
+
+cd $OUT_PATH
+zip -r $CIRCLE_ARTIFACTS/navitom.zip navit SDKRegistry
diff --git a/ci/build_win32.sh b/ci/build_win32.sh
new file mode 100644
index 000000000..de5156843
--- /dev/null
+++ b/ci/build_win32.sh
@@ -0,0 +1,8 @@
+sudo apt-get install mingw32 mingw32-binutils mingw32-runtime default-jdk nsis
+
+mkdir win32
+pushd win32
+cmake -Dbinding/python:BOOL=FALSE -DSAMPLE_MAP=n -DCMAKE_TOOLCHAIN_FILE=../Toolchain/mingw32.cmake ../ && make && make package
+popd
+
+cp win32/*.exe $CIRCLE_ARTIFACTS/
diff --git a/ci/submit_i18n_pr.sh b/ci/submit_i18n_pr.sh
index 517740a7c..7ae5ae9cb 100644
--- a/ci/submit_i18n_pr.sh
+++ b/ci/submit_i18n_pr.sh
@@ -11,4 +11,6 @@ github.com:
protocol: https
EOF
-hub pull-request -b trunk -m "Automatic translation import"
+message=`git log -1 --pretty=%B`
+
+echo "Automatic translation import" | hub pull-request -b trunk -m "$message" -F -
diff --git a/ci/update_version.sh b/ci/update_version.sh
index ea1d70d71..b34b0da73 100644
--- a/ci/update_version.sh
+++ b/ci/update_version.sh
@@ -2,7 +2,7 @@ if [ -z "$CIRCLE_BUILD_NUM" -o "$CIRCLE_PROJECT_USERNAME" != "navit-gps" ] ; the
exit
fi
-if ! git log -n 1 --oneline ; then
+if ! git --no-pager log -n 1 ; then
echo "This script should be run from the versioned directory"
exit 1
fi
diff --git a/circle.yml b/circle.yml
index 419899bd0..04470f87e 100644
--- a/circle.yml
+++ b/circle.yml
@@ -6,42 +6,30 @@ dependencies:
- ~/.android
- ~/android
- "~/assets/"
+ - ~/tomtom_assets
pre:
- "[ -d ~/assets ] || mkdir ~/assets"
- "[ -d ~/android ] || mkdir ~/android"
- - wget -c -O ~/assets/cov-analysis-linux64-7.6.0.tar.gz http://sd-55475.dedibox.fr/cov-analysis-linux64-7.6.0.tar.gz
- sudo apt-get update
- - sudo apt-get install cmake
- - sudo apt-get install libpng12-dev
- - sudo apt-get install librsvg2-bin
- - sudo apt-get install libfreetype6-dev
- - sudo apt-get install libdbus-glib-1-dev
- - sudo apt-get install g++
- bash ci/update_version.sh prepare
- - bash ci/import_translations.sh
- - bash ci/build_linux.sh
- - sed -i '/INTEGER/d' bin/po/navit.pot
- - cp bin/po/navit.pot $CIRCLE_ARTIFACTS/
- - "[ $CIRCLE_PROJECT_USERNAME != navit-gps ] || curl \"https://translations.launchpad.net/navit/${CIRCLE_BRANCH}/+translations-upload\" -H \"$lp_cookie\" -H \"Referer: https://translations.launchpad.net/navit/${CIRCLE_BRANCH}/+translations-upload\" -F file=@bin/po/navit.pot | grep title"
# Android build
- sudo apt-get install gettext
- sudo apt-get install libsaxonb-java
# for aapt
- sudo apt-get install lib32stdc++6
- sudo apt-get install lib32z1
- - bash ci/build_android.sh
-# Windows build
- - sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
- - sudo apt-get install default-jdk nsis
-# for sys/select.h
-# - sudo apt-get install -y libc6-dev
- - mkdir win32
- - cmake -Dbinding/python:BOOL=FALSE -DSAMPLE_MAP=n -DCMAKE_TOOLCHAIN_FILE=../Toolchain/mingw32.cmake ../ && make && make package:
- pwd: win32/
- - cp win32/*.exe $CIRCLE_ARTIFACTS/
# For python testing with junit reporting
- - sudo pip install junit-xml
+ - sudo apt-get install python-gobject libdbus-glib-1-dev python-dev
+ - pip install junit-xml dbus-python
+ - ln -s /usr/lib/python2.7/dist-packages/gobject /opt/circleci/python/2.7.11/lib/python2.7/site-packages/
+ - ln -s /usr/lib/python2.7/dist-packages/glib /opt/circleci/python/2.7.11/lib/python2.7/site-packages/
test:
+
+ override:
+ - bash ci/build.sh:
+ parallel: true
+ files:
+ - ci/build_*.sh
post:
- sed -i -e 's@name="Local GPS" profilename="car" enabled="yes" active="1"@name="Local GPS" profilename="car" enabled="no" active="0"@' navit.xml:
pwd: bin/navit/
diff --git a/cmake/navit_macros.cmake b/cmake/navit_macros.cmake
index d1b4359fb..3baf5c9ed 100644
--- a/cmake/navit_macros.cmake
+++ b/cmake/navit_macros.cmake
@@ -15,9 +15,9 @@ macro(set_with_reason VARIABLE REASON ENABLE)
if (DEFINED ${VARIABLE}_REASON AND NOT ${VARIABLE}_REASON STREQUAL "User defined")
set(${VARIABLE} ${ENABLE} CACHE BOOL "feature switch" FORCE)
set(${VARIABLE}_REASON ${REASON})
- string(REPLACE "/" "_" VARIABLE_NAMES ${VARIABLE})
- set(${VARIABLE_NAMES}_LIBS ${ARGN})
endif()
+ string(REPLACE "/" "_" VARIABLE_NAMES ${VARIABLE})
+ set(${VARIABLE_NAMES}_LIBS ${ARGN})
set(${VARIABLE}_AUTODETECTED_VALUE ${ENABLE} CACHE INTERNAL "value autodetected by build script")
endmacro()
diff --git a/config.h.cmake b/config.h.cmake
index abc3d0ebc..4774efbaf 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -6,6 +6,7 @@
#cmakedefine HAVE_API_WIN32_BASE 1
#cmakedefine HAVE_API_WIN32 1
#cmakedefine HAVE_API_WIN32_CE 1
+#cmakedefine HAVE_API_TOMTOM 1
#cmakedefine HAVE_GLIB 1
#cmakedefine HAVE_GMODULE 1
#cmakedefine HAVE_GETCWD 1
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>
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index e2579d590..de83bb52b 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -24,7 +24,6 @@ set(POTFILES
${PROJECT_SOURCE_DIR}/navit/gui/internal/gui_internal_widget.c
${PROJECT_SOURCE_DIR}/navit/osd/core/osd_core.c
${PROJECT_SOURCE_DIR}/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java
- ${PROJECT_SOURCE_DIR}/navit/android/src/org/navitproject/navit/NavitAndroidOverlay.java
${PROJECT_SOURCE_DIR}/navit/android/src/org/navitproject/navit/NavitDialogs.java
${PROJECT_SOURCE_DIR}/navit/android/src/org/navitproject/navit/NavitDownloadSelectMapActivity.java
${PROJECT_SOURCE_DIR}/navit/android/src/org/navitproject/navit/NavitGraphics.java
diff --git a/po/af.po.in b/po/af.po.in
index 1db7d22aa..04af45fca 100644
--- a/po/af.po.in
+++ b/po/af.po.in
@@ -1,5 +1,5 @@
# Afrikaans translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Andre Hugo https://launchpad.net/~cortexhugo
@@ -1968,6 +1968,12 @@ msgstr "Uitleg"
msgid "Height Profile"
msgstr "Hoë profiel"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Roete Beskrywing"
@@ -2023,10 +2029,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2044,6 +2046,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2504,6 +2510,9 @@ msgstr "Volskerm"
msgid "Window Mode"
msgstr "Venster Modus"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Beskrywing"
diff --git a/po/ar.po.in b/po/ar.po.in
index 83acf2b97..51655456e 100644
--- a/po/ar.po.in
+++ b/po/ar.po.in
@@ -1,5 +1,5 @@
# Arabic translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1983,6 +1983,12 @@ msgstr "التصميم"
msgid "Height Profile"
msgstr "لمحة عن الإرتفاع"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "وصف الطريق"
@@ -2038,10 +2044,6 @@ msgstr "إبحث"
msgid "Towns"
msgstr "البلدات"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "الطريق إلى هنا"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2059,6 +2061,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "الطريق إلى هنا"
+
msgid "Cancel"
msgstr "إلغاء"
@@ -2519,6 +2525,9 @@ msgstr "ملء الشاشة"
msgid "Window Mode"
msgstr "نمط النافذة"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "الوصف"
diff --git a/po/ast.po.in b/po/ast.po.in
index 42ecf6209..02fe9cb07 100644
--- a/po/ast.po.in
+++ b/po/ast.po.in
@@ -1,5 +1,5 @@
# Asturian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Xuacu Saturio https://launchpad.net/~xuacusk8
@@ -1962,6 +1962,12 @@ msgstr "Disposición"
msgid "Height Profile"
msgstr "Perfil d'altures"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Descripción de ruta"
@@ -2017,10 +2023,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2038,6 +2040,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2498,6 +2504,9 @@ msgstr "Pantalla completa"
msgid "Window Mode"
msgstr "Mou ventana"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Descripción"
diff --git a/po/be.po.in b/po/be.po.in
index e02daf6bc..561f630f7 100644
--- a/po/be.po.in
+++ b/po/be.po.in
@@ -1,5 +1,5 @@
# Belarusian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Anatoli Putseyeu https://launchpad.net/~st-shadow-by
@@ -1965,6 +1965,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2020,10 +2026,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2041,6 +2043,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2497,6 +2503,9 @@ msgstr "Поўнаэкранны рэжым"
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Апісанне"
diff --git a/po/ca.po.in b/po/ca.po.in
index 1e3295650..4c41bcd79 100644
--- a/po/ca.po.in
+++ b/po/ca.po.in
@@ -1,5 +1,5 @@
# Catalan translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Ferran Roig https://launchpad.net/~ferro9
@@ -8,18 +8,19 @@
# KaZeR https://launchpad.net/~kazer
# Marc Coll Carrillo https://launchpad.net/~marc-coll-carrillo
# Sergi Gomis https://launchpad.net/~paloky3
-# Xevib https://launchpad.net/~xbarnada
+# Xavier Barnada https://launchpad.net/~xbarnada
# beamspot https://launchpad.net/~benrouravkg
# juliwoodbcn https://launchpad.net/~julianlozano
# kualsevol https://launchpad.net/~ojuanv
+# pataquets https://launchpad.net/~pataquets
# peremayol@gmail.com https://launchpad.net/~peremayol
msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:57+0000\n"
-"Last-Translator: Sergi Gomis <paloky3@gmail.com>\n"
+"PO-Revision-Date: 2016-01-01 20:32+0000\n"
+"Last-Translator: pataquets <Unknown>\n"
"Language-Team: Catalan <ca@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -272,22 +273,22 @@ msgstr "a la sortida"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then continue straight%1$s"
-msgstr ""
+msgstr "després continueu tot recte%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
msgid "Continue straight %1$s%2$s%3$s"
-msgstr ""
+msgstr "Continueu tot recte %1$s%2$s%3$s"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then keep right%1$s"
-msgstr ""
+msgstr "després manteniu-vos a la dreta%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
msgid "Keep right %1$s%2$s%3$s"
-msgstr ""
+msgstr "Manteniu-vos a la dreta %1$s%2$s%3$s"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
@@ -1472,7 +1473,7 @@ msgstr ""
#. Safe cast: attr_generic_set_attr does not modify its parameter.
msgid "Unnamed vehicle"
-msgstr ""
+msgstr "Vehicle sense nom"
msgid "Failed to write bookmarks file"
msgstr ""
@@ -1630,16 +1631,16 @@ msgid "Data"
msgstr "Dades"
msgid "Pharmacy"
-msgstr ""
+msgstr "Farmàcia"
msgid "Restaurant"
-msgstr ""
+msgstr "Restaurant"
msgid "Restaurant. Fast food"
msgstr ""
msgid "Hotel"
-msgstr ""
+msgstr "Hotel"
msgid "Car parking"
msgstr ""
@@ -1651,10 +1652,10 @@ msgid "Bank"
msgstr ""
msgid "Hospital"
-msgstr ""
+msgstr "Hospital"
msgid "Cinema"
-msgstr ""
+msgstr "Cinema"
msgid "Train station"
msgstr ""
@@ -1663,7 +1664,7 @@ msgid "School"
msgstr ""
msgid "Police"
-msgstr ""
+msgstr "Comissaria de Policia"
msgid "Justice"
msgstr "Jutjats"
@@ -1697,7 +1698,7 @@ msgid "POI search"
msgstr ""
msgid "Select a category"
-msgstr ""
+msgstr "Seleccioneu una categoria"
msgid "Select a distance to look for (km)"
msgstr ""
@@ -1972,6 +1973,12 @@ msgstr "Disposició"
msgid "Height Profile"
msgstr "Perfil d'alçada"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Descripció de la ruta"
@@ -2027,10 +2034,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2048,6 +2051,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2508,6 +2515,9 @@ msgstr "Pantalla completa"
msgid "Window Mode"
msgstr "Mode de la finestra"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Descripció"
diff --git a/po/cs.po.in b/po/cs.po.in
index db0cbba29..ab05a9c48 100644
--- a/po/cs.po.in
+++ b/po/cs.po.in
@@ -1,5 +1,5 @@
# Čeština translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# 72ka https://launchpad.net/~2hp
@@ -7,7 +7,9 @@
# Ivan Kološ https://launchpad.net/~ivan-kolos
# Jakuje https://launchpad.net/~jakuje
# MMlosh https://launchpad.net/~mmlosh
+# Marc0 https://launchpad.net/~z-ubuntuone-y
# Mike Crash https://launchpad.net/~mike-mikecrash
+# Pavel Borecki https://launchpad.net/~pavel-borecki
# T.lama https://launchpad.net/~klacl
# Tomas Kukol https://launchpad.net/~tomas-kukol
# Vaclav Cerny https://launchpad.net/~vatoz
@@ -20,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:57+0000\n"
-"Last-Translator: Jakuje <jakuje@gmail.com>\n"
+"PO-Revision-Date: 2016-07-12 16:13+0000\n"
+"Last-Translator: Pavel Borecki <Unknown>\n"
"Language-Team: Čeština\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -216,7 +218,7 @@ msgid "Enter the roundabout %s"
msgstr ""
msgid "then enter the roundabout"
-msgstr ""
+msgstr "poté vjeďte na kruhový objezd"
#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
#, c-format
@@ -253,32 +255,32 @@ msgid "Merge %1$s%2$s|left"
msgstr ""
msgid "on your left"
-msgstr ""
+msgstr "na levé straně"
msgid "on your right"
-msgstr ""
+msgstr "na pravé straně"
#. TRANSLATORS: the first arg. is exit ref and/or name, the second is the direction of exit and the third is distance
#, c-format
msgid "Take exit %1$s %2$s %3$s"
-msgstr ""
+msgstr "Opusťte komunikaci na sjezdu %1$s %2$s %3$s"
#. TRANSLATORS: the first arg. is the direction of exit, the second is distance, the third is destination
#, c-format
msgid "Take the exit %1$s %2$s%3$s"
-msgstr ""
+msgstr "Opusťte komunikaci na sjezdu %1$s %2$s%3$s"
#. TRANSLATORS: as in "Keep right at interchange 42 Greenmond-West"
msgid "at interchange"
msgstr ""
msgid "at exit"
-msgstr ""
+msgstr "na konci"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then continue straight%1$s"
-msgstr ""
+msgstr "poté pokračujte přímo %1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
@@ -288,7 +290,7 @@ msgstr ""
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then keep right%1$s"
-msgstr ""
+msgstr "poté se držte vpravo%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
@@ -298,7 +300,7 @@ msgstr ""
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then keep left%1$s"
-msgstr ""
+msgstr "poté se držte vlevo%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
@@ -319,11 +321,11 @@ msgstr "mírně "
#. TRANSLATORS: as in "turn strongly right"
msgid "strongly "
-msgstr "silně "
+msgstr "ostře "
#, c-format
msgid "then take the %1$s road to the %2$s"
-msgstr ""
+msgstr "poté jeďte %1$s silnici %2$s"
#, c-format
msgid "Take the %1$s road to the %2$s"
@@ -340,7 +342,7 @@ msgstr "Zabočte %1$s%2$s %3$s%4$s"
#. TRANSLATORS: Left U-turn, the stuff after | doesn't have to be included.
msgid "then make a U-turn|left"
-msgstr "pak otočte se"
+msgstr "poté se otočte"
#. TRANSLATORS: the arg. is distance. Left U-turn, the stuff after | doesn't have to be included.
#, c-format
@@ -349,7 +351,7 @@ msgstr "Otočte se %1$s"
#. TRANSLATORS: Right U-turn, the stuff after | doesn't have to be included.
msgid "then make a U-turn|right"
-msgstr "pak otočte se"
+msgstr "poté se otočte"
#. TRANSLATORS: the arg. is distance. Right U-turn, the stuff after | doesn't have to be included.
#, c-format
@@ -409,7 +411,7 @@ msgid "Destination Length"
msgstr "Cílová vzdálenost"
msgid "Destination Time"
-msgstr "Cílový čas"
+msgstr "Čas dojezdu do cíle"
msgid "Roadbook"
msgstr "Itinerář"
@@ -425,10 +427,10 @@ msgid "Set as position"
msgstr "Použít jako pozici"
msgid "Set as destination"
-msgstr "Nastavit jako cíl"
+msgstr "Použít jako cíl"
msgid "Add as bookmark"
-msgstr "Použít jako záložku"
+msgstr "Přidat jako záložku"
#, c-format
msgid "Point 0x%x 0x%x"
@@ -1683,7 +1685,7 @@ msgid "Shopping"
msgstr "Nakupování"
msgid "Distance from screen center (km)"
-msgstr ""
+msgstr "Vzdálenost od středu mapy (km)"
#, c-format
msgid "POI %s. %s"
@@ -1980,6 +1982,12 @@ msgstr "Rozvržení"
msgid "Height Profile"
msgstr "Výškový profil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Popis trasy"
@@ -2002,7 +2010,7 @@ msgid "Back to map"
msgstr "Zpět na mapu"
msgid "Main Menu"
-msgstr "Hlavní menu"
+msgstr "Hlavní nabídka"
msgid "House number"
msgstr "Číslo domu"
@@ -2014,15 +2022,15 @@ msgid "Prev"
msgstr "Předchozí"
msgid "Return to route!"
-msgstr "Vraťte se zpět!"
+msgstr "Vraťte se na komunikaci!"
#. warning told
msgid "Look out! Camera!"
-msgstr "Podívejte se! Kamera!"
+msgstr "Pozor! Kamera!"
#. warning told
msgid "Please decrease your speed"
-msgstr "Prosím snižte rychlost"
+msgstr "Zpomalte"
msgid "partial match"
msgstr "Částečná shoda"
@@ -2035,10 +2043,6 @@ msgstr "Vyhledat"
msgid "Towns"
msgstr "Města"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Cestovat sem"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Mapová data (c) přispěvatelé OpenStreetMap, ODBL"
@@ -2055,6 +2059,12 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Omlouváme se, ale na systému Android tato aplikace v současnosti nepodporuje "
+"mapy větší, než 3,8 GiB – vyberte takovou, která nepřekračuje tuto hranici."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Cestovat sem"
msgid "Cancel"
msgstr "Storno"
@@ -2206,7 +2216,7 @@ msgid "Unterfranken"
msgstr "Dolní Franky"
msgid "Berlin"
-msgstr "Berlin"
+msgstr "Berlín"
msgid "Brandenburg"
msgstr "Braniborsko"
@@ -2425,13 +2435,13 @@ msgid "Washington State"
msgstr "Stát Washington"
msgid "South+Middle America"
-msgstr "Jižní+Střední Amerika"
+msgstr "Jižní a Střední Amerika"
msgid "Guyane Francaise"
msgstr "Francouzská Guyana"
msgid "downloading"
-msgstr "stahuji"
+msgstr "stahování…"
#. Android resource: @strings/map_download_ready
msgid "ready"
@@ -2465,13 +2475,13 @@ msgid "Vehicle Position"
msgstr "Poloha vozidla"
msgid "Main menu"
-msgstr "Hlavní menu"
+msgstr "Hlavní nabídka"
msgid ""
"Show\n"
"Map"
msgstr ""
-"Ukázat\n"
+"Zobrazit\n"
"mapu"
msgid "Settings"
@@ -2484,10 +2494,10 @@ msgid "Route"
msgstr "Trasa"
msgid "About"
-msgstr "O programu"
+msgstr "O aplikaci"
msgid "Quit"
-msgstr "Konec"
+msgstr "Ukončit"
msgid "Actions"
msgstr "Akce"
@@ -2506,8 +2516,8 @@ msgid ""
"Stop\n"
"Navigation"
msgstr ""
-"Ukonči\n"
-"Navigaci"
+"Ukončit\n"
+"navigaci"
msgid "Display"
msgstr "Zobrazit"
@@ -2518,6 +2528,9 @@ msgstr "Celá obrazovka"
msgid "Window Mode"
msgstr "V okně"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Popis"
@@ -2539,7 +2552,7 @@ msgid "Satellite Status"
msgstr "Stav satelitu"
msgid "NMEA Data"
-msgstr "NMEA Data"
+msgstr "NMEA údaje"
msgid "car_shortest"
msgstr "auto nejkratší"
@@ -2554,7 +2567,7 @@ msgid "horse"
msgstr "kůň"
msgid "Truck"
-msgstr "kamión"
+msgstr "Nákladní vůz"
#. Strings from android/res/values/strings.xml
#. Android resource: @strings/yes
@@ -2567,7 +2580,7 @@ msgstr "Startuje Navit"
#. Android resource: @strings/notification_event_default
msgid "Navit running"
-msgstr "Navit běží"
+msgstr "Navit je spuštěný"
#. Android resource: @strings/initial_info_box_title
msgid "Welcome to Navit"
@@ -2636,7 +2649,7 @@ msgstr "Smazat tuto mapu?"
#. Android resource: @strings/map_download_downloading
msgid "Downloading:"
-msgstr "Stahuji:"
+msgstr "Stahování:"
#. Android resource: @strings/map_download_download_error
msgid "Error downloading map."
@@ -2668,7 +2681,7 @@ msgstr "Shoda částí adresy"
#. Android resource: @strings/address_search_searching
msgid "Searching..."
-msgstr "Vyhledávám..."
+msgstr "Vyhledávání…"
#. Android resource: @strings/address_search_not_found
msgid "Address not found"
@@ -2688,11 +2701,11 @@ msgstr "Výsledky nenalezeny."
#. Android resource: @strings/address_search_no_text_entered
msgid "No text entered"
-msgstr "Text nebyl zadán"
+msgstr "Nebyl zadán žádný text"
#. Android resource: @strings/address_search_set_destination
msgid "Setting destination to:"
-msgstr "Nastavení cíle v:"
+msgstr "Nastavování cíle na:"
#. Android resource: @strings/choose_an_action
msgid "Choose an action"
@@ -2700,15 +2713,15 @@ msgstr "Vyberte akci"
#. Android resource: @strings/please_insert_an_sd_card
msgid "Please insert an SD Card"
-msgstr "Prosím vložte SD kartu"
+msgstr "Vložte SD kartu"
#. Android resource: @strings/backing_up
msgid "Backing up..."
-msgstr "Zálohuji..."
+msgstr "Zálohování…"
#. Android resource: @strings/restoring
msgid "Restoring..."
-msgstr "Obnovuji..."
+msgstr "Obnovování…"
#. Android resource: @strings/failed_to_create_backup_directory
msgid "Failed to create backup directory"
@@ -2760,7 +2773,7 @@ msgstr "Obnova"
#. Android resource: @strings/TTS_title_data_missing
msgid "System text to speech engine data is missing"
-msgstr ""
+msgstr "Chybí data systémového převodníku textu na řeč"
#. Android resource: @strings/TTS_qery_install_data
msgid ""
diff --git a/po/cy.po.in b/po/cy.po.in
index 2703fd1c1..9171574a7 100644
--- a/po/cy.po.in
+++ b/po/cy.po.in
@@ -1,5 +1,5 @@
# Welsh translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Michael von Glasow https://launchpad.net/~michael-vonglasow
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:57+0000\n"
-"Last-Translator: Michael von Glasow <Unknown>\n"
+"PO-Revision-Date: 2016-06-14 23:55+0000\n"
+"Last-Translator: Padi Phillips <Unknown>\n"
"Language-Team: Welsh <cy@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -73,7 +73,7 @@ msgstr "allanfa chweched"
#, c-format
msgid "%d feet"
-msgstr ""
+msgstr "%d troedfedd"
#, c-format
msgid "in %d feet"
@@ -1966,6 +1966,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2021,10 +2027,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2042,6 +2044,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2498,6 +2504,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/da.po.in b/po/da.po.in
index 4100c8f30..2bd2cee87 100644
--- a/po/da.po.in
+++ b/po/da.po.in
@@ -1,9 +1,11 @@
# Danish translation for Navit translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
+# Esben Aaberg https://launchpad.net/~esben-aaberg
# Fennek https://launchpad.net/~ng-fennek
# Glenn https://launchpad.net/~glenn-mh-dk
+# Glenn Sommer https://launchpad.net/~glemsom
# Jørgen Elgaard Larsen https://launchpad.net/~jel-elgaard
# Kennet https://launchpad.net/~kharpsoe
# Lasse Luttermann https://launchpad.net/~lasse-luttermann
@@ -16,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:57+0000\n"
-"Last-Translator: Lasse Luttermann <luttermann@silenzio.dk>\n"
+"PO-Revision-Date: 2016-01-29 16:53+0000\n"
+"Last-Translator: Esben Aaberg <esben_aaberg@yahoo.com>\n"
"Language-Team: Glenn Sommer <glemsom@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -79,11 +81,11 @@ msgstr "sjette afkørsel"
#, c-format
msgid "%d feet"
-msgstr ""
+msgstr "%d fod"
#, c-format
msgid "in %d feet"
-msgstr ""
+msgstr "om %d fod"
#, c-format
msgid "%d.%d miles"
@@ -604,7 +606,7 @@ msgstr "Congo"
#. 756
msgid "Switzerland"
-msgstr "Svejts"
+msgstr "Schweiz"
#. 384
msgid "Cote d'Ivoire"
@@ -976,7 +978,7 @@ msgstr "Letland"
#. 434
msgid "Libya"
-msgstr ""
+msgstr "Libyen"
#. 504
msgid "Morocco"
@@ -1628,40 +1630,40 @@ msgid "Data"
msgstr "Data"
msgid "Pharmacy"
-msgstr ""
+msgstr "Apotek"
msgid "Restaurant"
-msgstr ""
+msgstr "Restaurant"
msgid "Restaurant. Fast food"
msgstr ""
msgid "Hotel"
-msgstr ""
+msgstr "Hotel"
msgid "Car parking"
msgstr ""
msgid "Fuel station"
-msgstr ""
+msgstr "Tankstation"
msgid "Bank"
-msgstr ""
+msgstr "Bank"
msgid "Hospital"
-msgstr ""
+msgstr "Hospital"
msgid "Cinema"
-msgstr ""
+msgstr "Biograf"
msgid "Train station"
msgstr ""
msgid "School"
-msgstr ""
+msgstr "Skole"
msgid "Police"
-msgstr ""
+msgstr "Politi"
msgid "Justice"
msgstr ""
@@ -1695,7 +1697,7 @@ msgid "POI search"
msgstr ""
msgid "Select a category"
-msgstr ""
+msgstr "Vælg en kategori"
msgid "Select a distance to look for (km)"
msgstr ""
@@ -1704,10 +1706,10 @@ msgid "Select a POI"
msgstr ""
msgid " "
-msgstr ""
+msgstr " "
msgid "Category"
-msgstr ""
+msgstr "Kategori"
msgid "Direction"
msgstr ""
@@ -1716,7 +1718,7 @@ msgid "Distance(m)"
msgstr ""
msgid "Name"
-msgstr ""
+msgstr "Navn"
msgid "Visit Before"
msgstr ""
@@ -1970,6 +1972,12 @@ msgstr "Layout"
msgid "Height Profile"
msgstr "Lodret profil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Route Beskrivelse"
@@ -2025,10 +2033,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2046,6 +2050,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2506,6 +2514,9 @@ msgstr "Fuldskærm"
msgid "Window Mode"
msgstr "Vinduestilstand"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Beskrivelse"
@@ -2538,7 +2549,7 @@ msgid "horse"
msgstr "hest"
msgid "Truck"
-msgstr ""
+msgstr "Lastbil"
#. Strings from android/res/values/strings.xml
#. Android resource: @strings/yes
@@ -2745,3 +2756,11 @@ msgstr ""
#, c-format
#~ msgid "then leave the roundabout at the %1$s %2$s"
#~ msgstr "forlad så rundkørslen ved den %1$s %2$s"
+
+#, c-format
+#~ msgid "in %d m"
+#~ msgstr "om %d m"
+
+#, c-format
+#~ msgid "%d m"
+#~ msgstr "%d m"
diff --git a/po/de.po.in b/po/de.po.in
index 0972a361d..3ff969ec8 100644
--- a/po/de.po.in
+++ b/po/de.po.in
@@ -1,5 +1,5 @@
# German translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Achim Behrens https://launchpad.net/~k1l
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-09-14 07:17+0000\n"
+"PO-Revision-Date: 2016-08-25 22:29+0000\n"
"Last-Translator: Mathias Klein <ma_klein@gmx.de>\n"
"Language-Team: Martin Schaller <martin-s@sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -1730,7 +1730,7 @@ msgstr "Setze Karte auf %ld, %ld \n"
#, c-format
msgid "Set next visit to %ld, %ld \n"
-msgstr ""
+msgstr "Setze nächsten Besuch auf %ld, %ld \n"
msgid "POI search"
msgstr "POI Suche"
@@ -2011,6 +2011,12 @@ msgstr "Erscheinungsbild"
msgid "Height Profile"
msgstr "Höhenprofil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Wegbeschreibung"
@@ -2066,10 +2072,6 @@ msgstr "Suche"
msgid "Towns"
msgstr "Städte"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Ziel setzen"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Kartendaten (c) von OpenStreetMap unter ODbL"
@@ -2092,6 +2094,10 @@ msgstr ""
"Entschuldigung. Derzeit untestützen wir auf Android keine Karten die größer "
"als 3,8Gigabyte sind. Bitte wählen Sie eine kleinere Karte aus."
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Ziel setzen"
+
msgid "Cancel"
msgstr "Abbrechen"
@@ -2557,6 +2563,9 @@ msgstr "Vollbildmodus"
msgid "Window Mode"
msgstr "Fenstermodus"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Beschreibung"
diff --git a/po/de_CH.po.in b/po/de_CH.po.in
index 84f3abf63..d30c18584 100644
--- a/po/de_CH.po.in
+++ b/po/de_CH.po.in
@@ -1,5 +1,5 @@
# German (Switzerland) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/el.po.in b/po/el.po.in
index f85f6d63e..9da1b8087 100644
--- a/po/el.po.in
+++ b/po/el.po.in
@@ -1,5 +1,5 @@
# Greek translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1968,6 +1968,12 @@ msgstr "Διάταξη"
msgid "Height Profile"
msgstr "Ύψος προφίλ"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Περιγραφή Διαδρομής"
@@ -2023,10 +2029,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2044,6 +2046,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2502,6 +2508,9 @@ msgstr "Πλήρης Οθόνη"
msgid "Window Mode"
msgstr "Λειτουργία παραθύρων"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Περιγραφή"
diff --git a/po/en_AU.po.in b/po/en_AU.po.in
index e6e8a2c61..50842f620 100644
--- a/po/en_AU.po.in
+++ b/po/en_AU.po.in
@@ -1,5 +1,5 @@
# English (Australia) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Athol Mullen https://launchpad.net/~athol-mullen
@@ -1964,6 +1964,12 @@ msgstr "Layout"
msgid "Height Profile"
msgstr "Height Profile"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Route Description"
@@ -2019,10 +2025,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2040,6 +2042,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2500,6 +2506,9 @@ msgstr "FullScreen"
msgid "Window Mode"
msgstr "Window Mode"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Description"
diff --git a/po/en_CA.po.in b/po/en_CA.po.in
index 67b3066e1..fa624bc71 100644
--- a/po/en_CA.po.in
+++ b/po/en_CA.po.in
@@ -1,5 +1,5 @@
# English (Canada) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Frank Bax https://launchpad.net/~drw06g0w-qaens-52bk9e55
@@ -1961,6 +1961,12 @@ msgstr "Layout"
msgid "Height Profile"
msgstr "Height Profile"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Route Description"
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr "Fullscreen"
msgid "Window Mode"
msgstr "Window Mode"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Description"
diff --git a/po/en_GB.po.in b/po/en_GB.po.in
index 993dffe48..fec19d509 100644
--- a/po/en_GB.po.in
+++ b/po/en_GB.po.in
@@ -1,5 +1,5 @@
# English (United Kingdom) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Andi Chandler https://launchpad.net/~bing
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-08-29 12:36+0000\n"
+"PO-Revision-Date: 2016-02-17 14:43+0000\n"
"Last-Translator: Andi Chandler <Unknown>\n"
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
"MIME-Version: 1.0\n"
@@ -208,7 +208,7 @@ msgid "Enter the roundabout %s"
msgstr "Enter the roundabout %s"
msgid "then enter the roundabout"
-msgstr ""
+msgstr "then enter the roundabout"
#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
#, c-format
@@ -315,7 +315,7 @@ msgstr "strongly "
#, c-format
msgid "then take the %1$s road to the %2$s"
-msgstr ""
+msgstr "then take the %1$s road to the %2$s"
#, c-format
msgid "Take the %1$s road to the %2$s"
@@ -1980,6 +1980,12 @@ msgstr "Layout"
msgid "Height Profile"
msgstr "Height Profile"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Route Description"
@@ -2035,10 +2041,6 @@ msgstr "Search"
msgid "Towns"
msgstr "Towns"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Route to here"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Map data (c) OpenStreetMap contributors, ODBL"
@@ -2061,6 +2063,10 @@ msgstr ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Route to here"
+
msgid "Cancel"
msgstr "Cancel"
@@ -2521,6 +2527,9 @@ msgstr "Fullscreen"
msgid "Window Mode"
msgstr "Window Mode"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Description"
diff --git a/po/eo.po.in b/po/eo.po.in
index 265ed1601..62a0a7128 100644
--- a/po/eo.po.in
+++ b/po/eo.po.in
@@ -1,5 +1,5 @@
# Esperanto translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1966,6 +1966,12 @@ msgstr "Aranĝo"
msgid "Height Profile"
msgstr "Altimetrio"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Priskribo de irvojo"
@@ -2021,10 +2027,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2042,6 +2044,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2502,6 +2508,9 @@ msgstr "Tutekrane"
msgid "Window Mode"
msgstr "Fenestra reĝimo"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Priskribo"
diff --git a/po/es.po.in b/po/es.po.in
index 09a91ae6f..4946a6233 100644
--- a/po/es.po.in
+++ b/po/es.po.in
@@ -1,5 +1,5 @@
# Spanish translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Benjamín Valero Espinosa https://launchpad.net/~benjavalero
@@ -10,6 +10,7 @@
# Inaki Saez https://launchpad.net/~inaki-saez
# Jonay https://launchpad.net/~jonay-santana
# KaZeR https://launchpad.net/~kazer
+# Kenneth Belitzky https://launchpad.net/~r-kenny
# Luis Alejandro Rangel Sánchez https://launchpad.net/~xlarsx
# Michael von Glasow https://launchpad.net/~michael-vonglasow
# Paco Molinero https://launchpad.net/~franciscomol
@@ -25,8 +26,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:58+0000\n"
-"Last-Translator: Michael von Glasow <Unknown>\n"
+"PO-Revision-Date: 2016-06-21 22:51+0000\n"
+"Last-Translator: Kenneth Belitzky <kenny@belitzky.com>\n"
"Language-Team: Chris Eubank <cteubank@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -213,10 +214,10 @@ msgstr "Entre en la próxima rotonda"
#. TRANSLATORS: %s is the distance to the roundabout
#, c-format
msgid "Enter the roundabout %s"
-msgstr ""
+msgstr "Entrar en la rotonda de %s"
msgid "then enter the roundabout"
-msgstr ""
+msgstr "luego entrar en la rotonda"
#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
#, c-format
@@ -323,7 +324,7 @@ msgstr "bruscamente "
#, c-format
msgid "then take the %1$s road to the %2$s"
-msgstr ""
+msgstr "luego tomar la carretera de %1$s a la %2$s"
#, c-format
msgid "Take the %1$s road to the %2$s"
@@ -1594,7 +1595,7 @@ msgid "_POI search"
msgstr ""
msgid "Opens POI search dialog"
-msgstr ""
+msgstr "Abre la búsqueda de puntos de interés"
msgid "_Stop Navigation"
msgstr "_Detener navegación"
@@ -1645,7 +1646,7 @@ msgid "Restaurant"
msgstr "Restaurante"
msgid "Restaurant. Fast food"
-msgstr ""
+msgstr "Restaurante. Comida rápida"
msgid "Hotel"
msgstr "Hotel"
@@ -1654,19 +1655,19 @@ msgid "Car parking"
msgstr "Estacionamiento"
msgid "Fuel station"
-msgstr ""
+msgstr "Estación de Combustibles"
msgid "Bank"
-msgstr ""
+msgstr "Banco"
msgid "Hospital"
-msgstr ""
+msgstr "Hospital"
msgid "Cinema"
msgstr "Cine"
msgid "Train station"
-msgstr ""
+msgstr "Estación de trenes"
msgid "School"
msgstr "Escuela"
@@ -1678,59 +1679,59 @@ msgid "Justice"
msgstr "Juzgado"
msgid "Taxi"
-msgstr ""
+msgstr "Taxi"
msgid "Shopping"
-msgstr ""
+msgstr "Shopping"
msgid "Distance from screen center (km)"
-msgstr ""
+msgstr "Distancia del centro de la pantalla (km)"
#, c-format
msgid "POI %s. %s"
-msgstr ""
+msgstr "POI %s. %s"
#, c-format
msgid "Set destination to %ld, %ld \n"
-msgstr ""
+msgstr "Cambiar destino a %ld, %ld \n"
#, c-format
msgid "Set map to %ld, %ld \n"
-msgstr ""
+msgstr "Cambiar mapa a % ld, %ld \n"
#, c-format
msgid "Set next visit to %ld, %ld \n"
-msgstr ""
+msgstr "Conjunto siguiente visita a %ld, %ld \n"
msgid "POI search"
-msgstr ""
+msgstr "Búsqueda de puntos de interés"
msgid "Select a category"
-msgstr ""
+msgstr "Elige una categoría"
msgid "Select a distance to look for (km)"
-msgstr ""
+msgstr "Seleccione una distancia para buscar (km)"
msgid "Select a POI"
-msgstr ""
+msgstr "Seleccionar un POI"
msgid " "
msgstr ""
msgid "Category"
-msgstr ""
+msgstr "Categoría"
msgid "Direction"
-msgstr ""
+msgstr "Dirección"
msgid "Distance(m)"
-msgstr ""
+msgstr "Distancia(m)"
msgid "Name"
-msgstr ""
+msgstr "Nombre"
msgid "Visit Before"
-msgstr ""
+msgstr "Visita Antes"
msgid "N"
msgstr "N"
@@ -1949,7 +1950,7 @@ msgstr "Introduzca coordenadas"
#. we=gui_internal_box_new(this, gravity_left_center|orientation_horizontal|flags_fill)
#. gui_internal_widget_append(w, we)
msgid "Latitude Longitude"
-msgstr ""
+msgstr "Latitud Longitud"
msgid "Enter coordinates, for example:"
msgstr "Introduzca coordenadas, por ejemplo:"
@@ -1981,6 +1982,12 @@ msgstr "Diseño"
msgid "Height Profile"
msgstr "Perfil de altura"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Descripción de ruta"
@@ -2023,7 +2030,7 @@ msgstr "¡Atención! Radar"
#. warning told
msgid "Please decrease your speed"
-msgstr "Reduzca velocidad por favor"
+msgstr "Por favor, disminuya su velocidad"
msgid "partial match"
msgstr "Coincidencia parcial"
@@ -2036,10 +2043,6 @@ msgstr "Búsqueda"
msgid "Towns"
msgstr "Ciudades"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Ruta hasta aquí"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Datos de Mapa (c) contribuyentes de OpenStreetMap, ODBL"
@@ -2048,6 +2051,9 @@ msgid ""
"Please restart Navit after you attach an SD card or select a different map "
"location."
msgstr ""
+"Ubicación actual del mapa %s no se encuentra disponible\n"
+"Por favor reiniciar Navit después de conectar una tarjeta SD o seleccione "
+"una ubicación del mapa diferente."
msgid "Downloaded maps"
msgstr "Mapas descargados"
@@ -2056,6 +2062,12 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Lo sentimos, actualmente no permitimos mapas por encima de 3,8 G en Android, "
+"por favor, seleccione una versión más pequeña."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Ruta hasta aquí"
msgid "Cancel"
msgstr "Cancelar"
@@ -2067,6 +2079,8 @@ msgid ""
"New location set to %s\n"
"Restart Navit to apply the changes."
msgstr ""
+"Nueva ubicación cambiada a %s\n"
+"Reinicie Navit para aplicar los cambios."
msgid "Whole Planet"
msgstr "Todo el Planeta"
@@ -2440,6 +2454,8 @@ msgstr "listo"
msgid "Media selected for map storage is not available"
msgstr ""
+"Los medios de comunicación seleccionados para el almacenamiento del mapa no "
+"está disponible"
#. Android resource: @strings/map_download_not_enough_free_space
msgid "Not enough free space"
@@ -2519,6 +2535,9 @@ msgstr "Pantalla completa"
msgid "Window Mode"
msgstr "Modo ventana"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Descripción"
@@ -2629,7 +2648,7 @@ msgstr "Respaldar / Restaurar"
#. Android resource: @strings/optionsmenu_set_map_location
msgid "Set map location"
-msgstr ""
+msgstr "Establecer ubicación en mapa"
#. Android resource: @strings/map_delete
msgid "Delete this map?"
diff --git a/po/et.po.in b/po/et.po.in
index 2e234a608..23781e008 100644
--- a/po/et.po.in
+++ b/po/et.po.in
@@ -1,5 +1,5 @@
# Estonian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Andres Kaaber https://launchpad.net/~imapi
@@ -1968,6 +1968,12 @@ msgstr "Paigutus"
msgid "Height Profile"
msgstr "Kõrgusprofiil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Teekonna kirjeldus"
@@ -2023,10 +2029,6 @@ msgstr "Otsing"
msgid "Towns"
msgstr "Linnad"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Teekond siia"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Kaardi andmed (c) OpenStreetMap kaasautorid, ODBL"
@@ -2044,6 +2046,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Teekond siia"
+
msgid "Cancel"
msgstr "Keeldu"
@@ -2506,6 +2512,9 @@ msgstr "Täisekraan"
msgid "Window Mode"
msgstr "Aknarežiim"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Kirjeldus"
diff --git a/po/eu.po.in b/po/eu.po.in
index 7d8b37eea..d0de74d5d 100644
--- a/po/eu.po.in
+++ b/po/eu.po.in
@@ -1,5 +1,5 @@
# Basque translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Inaki Saez https://launchpad.net/~inaki-saez
@@ -1963,6 +1963,12 @@ msgstr "Antolaketa"
msgid "Height Profile"
msgstr "Garaiera ikusi"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Ibilbidearen nondik-norakoa"
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2499,6 +2505,9 @@ msgstr "Pantaila osoa"
msgid "Window Mode"
msgstr "Lehio modua"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Zehazketa"
diff --git a/po/fa.po.in b/po/fa.po.in
index e4254d32a..96767686f 100644
--- a/po/fa.po.in
+++ b/po/fa.po.in
@@ -1,5 +1,5 @@
# Persian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Michael von Glasow https://launchpad.net/~michael-vonglasow
@@ -1963,6 +1963,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2495,6 +2501,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/fi.po.in b/po/fi.po.in
index bbe3cda1a..5662696a4 100644
--- a/po/fi.po.in
+++ b/po/fi.po.in
@@ -1,5 +1,5 @@
# Finnish translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Eero https://launchpad.net/~eero+launchpad
@@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2015-07-19 03:58+0000\n"
-"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
+"Last-Translator: Timo Jyrinki <Unknown>\n"
"Language-Team: Ossi Berg <o.berg@mail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1973,6 +1973,12 @@ msgstr "Pohja"
msgid "Height Profile"
msgstr "Korkeusprofiili"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Reitin kuvaus"
@@ -2028,10 +2034,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2049,6 +2051,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2509,6 +2515,9 @@ msgstr "Koko ruutu"
msgid "Window Mode"
msgstr "Ikkunatila"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Kuvaus"
diff --git a/po/fil.po.in b/po/fil.po.in
index 8178227f6..a882e9f6d 100644
--- a/po/fil.po.in
+++ b/po/fil.po.in
@@ -1,5 +1,5 @@
# Filipino translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# chito https://launchpad.net/~cnuarin
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/fo.po.in b/po/fo.po.in
index dff6442e8..f713a82aa 100644
--- a/po/fo.po.in
+++ b/po/fo.po.in
@@ -1,5 +1,5 @@
# Faroese translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Cyberish https://launchpad.net/~cyberish
@@ -1963,6 +1963,12 @@ msgstr "Snið"
msgid "Height Profile"
msgstr "Hæddar profilur"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Rutulýsing"
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2495,6 +2501,9 @@ msgstr "Fullur skermur"
msgid "Window Mode"
msgstr "Vindeyga støða"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Frágreiðing"
diff --git a/po/fr.po.in b/po/fr.po.in
index 42c1ab7a6..5300b85d2 100644
--- a/po/fr.po.in
+++ b/po/fr.po.in
@@ -1,11 +1,12 @@
# French (fr) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Arnaud https://launchpad.net/~arnaud-lemeur
# Breizh_Punisher https://launchpad.net/~lemeura
# Deuchnord https://launchpad.net/~jerome-logiciels-id
# Elodie https://launchpad.net/~elodie
+# Fred https://launchpad.net/~frederi1
# Fred https://launchpad.net/~jelk
# Gaël Ecorchard https://launchpad.net/~galou-breizh
# Jean-Marc https://launchpad.net/~m-balthazar
@@ -30,8 +31,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-11-25 21:48+0000\n"
-"Last-Translator: Jean-Marc <Unknown>\n"
+"PO-Revision-Date: 2016-09-29 12:45+0000\n"
+"Last-Translator: Fred <frederi1@gmail.com>\n"
"Language-Team: KaZeR <kazer@altern.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1461,6 +1462,16 @@ msgid ""
"\t-h: print this usage info and exit.\n"
"\t-v: print the version and exit.\n"
msgstr ""
+"comment utiliser navit:\n"
+"navit [options] [fichier de configuration]\n"
+"\t-c <fichier>: utiliser <fichier> pour la configuration, à la place du "
+"fichier par défaut.\n"
+"\t-d <n>: configure la verbosité de déboggage à <n> (0=erreur, "
+"1=avertissement, 2=info, 3=debug).\n"
+"\tLes réglages du fichier de configuration s'appliqueront toujours si la "
+"valeur est plus élevée.\n"
+"\t-h: affiche cette aide et quitte.\n"
+"\t-v: affiche la version et quitte.\n"
#. We have not found an existing config file from all possibilities
msgid "No config file navit.xml, navit.xml.local found\n"
@@ -1689,14 +1700,14 @@ msgid "Taxi"
msgstr "Taxi"
msgid "Shopping"
-msgstr "Courses"
+msgstr "Achats"
msgid "Distance from screen center (km)"
-msgstr "Distance du centre de l'ecran (Kilomètre)"
+msgstr "Distance du centre de l'écran (km)"
#, c-format
msgid "POI %s. %s"
-msgstr "point d'intérêt %s. %s"
+msgstr "Point d'intérêt %s. %s"
#, c-format
msgid "Set destination to %ld, %ld \n"
@@ -1708,7 +1719,7 @@ msgstr "sélectionner la carte de %ld, %ld \n"
#, c-format
msgid "Set next visit to %ld, %ld \n"
-msgstr ""
+msgstr "Définir la prochaine visite à %ld, %ld \n"
msgid "POI search"
msgstr "recherche de point d'intérêt"
@@ -1989,6 +2000,13 @@ msgstr "Thème"
msgid "Height Profile"
msgstr "Profil de hauteur"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+"Veuillez installer la carte *.heightlines.bin pour afficher le nivellement."
+
+msgid "The route must cross at least 2 heightlines"
+msgstr "La route doit au minimum passer par deux lignes de niveau"
+
msgid "Route Description"
msgstr "Description de la route"
@@ -2044,10 +2062,6 @@ msgstr "Chercher"
msgid "Towns"
msgstr "Villes"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Conduire ici"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Données cartographiques (c) OpenStreetMap contributors, ODBL"
@@ -2056,6 +2070,9 @@ msgid ""
"Please restart Navit after you attach an SD card or select a different map "
"location."
msgstr ""
+"L'emplacement de carte %s n'est pas disponible\n"
+"Veuillez redémarrer Navit après avoir branché une carte SD ou selectionné en "
+"emplacement de carte différent."
msgid "Downloaded maps"
msgstr "Cartes téléchargées"
@@ -2064,12 +2081,18 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Désolé, nous ne supportons pas les cartes de plus de 3.8GB sur Android, "
+"merci de sélectionner une carte plus petite."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Conduire ici"
msgid "Cancel"
msgstr "Annuler"
msgid "filenamePath"
-msgstr ""
+msgstr "emplacementFichier"
msgid ""
"New location set to %s\n"
@@ -2528,6 +2551,9 @@ msgstr "Plein écran"
msgid "Window Mode"
msgstr "Mode fenêtré"
+msgid "Layers"
+msgstr "Couches"
+
msgid "Description"
msgstr "Description"
@@ -2770,7 +2796,7 @@ msgstr "Restaurer"
#. Android resource: @strings/TTS_title_data_missing
msgid "System text to speech engine data is missing"
-msgstr ""
+msgstr "Les données du moteur de parole système sont manquantes"
#. Android resource: @strings/TTS_qery_install_data
msgid ""
@@ -2778,6 +2804,10 @@ msgid ""
"currently selected engine reports it is unable to speak in your language. "
"Should we ask the system to show voice download dialog?"
msgstr ""
+"Navit peut utiliser n'importe quel système de parole disponible sur votre "
+"appareil. Le système actuellement sélectionné indique qu'il ne peut pas "
+"parler dans votre langue. Devons nous demander au système d'afficher le menu "
+"de téléchargement des voix?"
#, c-format
#~ msgid "then leave the roundabout at the %1$s %2$s"
diff --git a/po/fr_CH.po.in b/po/fr_CH.po.in
index 8619100ee..68d798ee5 100644
--- a/po/fr_CH.po.in
+++ b/po/fr_CH.po.in
@@ -1,5 +1,5 @@
# French/Switzerland translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1966,6 +1966,12 @@ msgstr "Thème"
msgid "Height Profile"
msgstr "Profil de hauteur"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Description de la route"
@@ -2021,10 +2027,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2042,6 +2044,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2502,6 +2508,9 @@ msgstr "Plein écran"
msgid "Window Mode"
msgstr "Mode fenêtré"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Description"
diff --git a/po/gl.po.in b/po/gl.po.in
index d1a30c2f7..e4cb41cd6 100644
--- a/po/gl.po.in
+++ b/po/gl.po.in
@@ -1,5 +1,5 @@
# Galician translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Iván Pérez https://launchpad.net/~ivan.perez-keera.es
@@ -1965,6 +1965,12 @@ msgstr "Disposición"
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2020,10 +2026,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2041,6 +2043,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2499,6 +2505,9 @@ msgstr "Pantalla completa"
msgid "Window Mode"
msgstr "Modo de xanela"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Descrición"
diff --git a/po/he.po.in b/po/he.po.in
index f07d2bb07..2fb3df1eb 100644
--- a/po/he.po.in
+++ b/po/he.po.in
@@ -1,10 +1,9 @@
# Hebrew translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Evgeniy Ginzburg https://launchpad.net/~nad-oby
# KaZeR https://launchpad.net/~kazer
-# Liel Fridman https://launchpad.net/~lielft
# Nadav https://launchpad.net/~nadavz
# Yaron https://launchpad.net/~sh-yaron
# rintintin https://launchpad.net/~yonatanhak-gmail
@@ -1967,6 +1966,12 @@ msgstr "מערך"
msgid "Height Profile"
msgstr "פרופיל גובה"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2022,10 +2027,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2043,6 +2044,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2503,6 +2508,9 @@ msgstr "מסך מלא"
msgid "Window Mode"
msgstr "מצב חלון"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "תיאור"
diff --git a/po/hi.po.in b/po/hi.po.in
index ceaa91806..ba0d20e10 100644
--- a/po/hi.po.in
+++ b/po/hi.po.in
@@ -1,5 +1,5 @@
# Hindi translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1963,6 +1963,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2495,6 +2501,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/hr.po.in b/po/hr.po.in
index e0e956f00..c39cad97e 100644
--- a/po/hr.po.in
+++ b/po/hr.po.in
@@ -1,5 +1,5 @@
# Croatian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1968,6 +1968,12 @@ msgstr "Izgled"
msgid "Height Profile"
msgstr "Visinski profil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Opis rute"
@@ -2023,10 +2029,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2044,6 +2046,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2504,6 +2510,9 @@ msgstr "Cijeli ekran"
msgid "Window Mode"
msgstr "Prozorski način"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Opis"
diff --git a/po/hu.po.in b/po/hu.po.in
index e658e77c0..c4ec926a7 100644
--- a/po/hu.po.in
+++ b/po/hu.po.in
@@ -1,5 +1,5 @@
# Hungarian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Bernath Marci https://launchpad.net/~bernath-marci
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:58+0000\n"
-"Last-Translator: György Balló <ballogyor@gmail.com>\n"
+"PO-Revision-Date: 2016-01-04 19:56+0000\n"
+"Last-Translator: Nagy Attila <tylla_at_launchpad.net@tylla.hu>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -191,7 +191,7 @@ msgstr "Amint lehet, fordujon meg"
#. TRANSLATORS: the argument is the destination to follow
#, c-format
msgid "towards %s"
-msgstr ""
+msgstr "%s irányába"
#, c-format
msgid "Follow the road for the next %s"
@@ -203,10 +203,10 @@ msgstr "Hajtson be a körforgalomba hamarosan."
#. TRANSLATORS: %s is the distance to the roundabout
#, c-format
msgid "Enter the roundabout %s"
-msgstr ""
+msgstr "Hajtson be a körforgalomba %s múlva"
msgid "then enter the roundabout"
-msgstr ""
+msgstr "majd hajtson be a körforgalomba"
#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
#, c-format
@@ -251,19 +251,19 @@ msgstr ""
#. TRANSLATORS: the first arg. is exit ref and/or name, the second is the direction of exit and the third is distance
#, c-format
msgid "Take exit %1$s %2$s %3$s"
-msgstr ""
+msgstr "%3$s múlva hajtson ki %2$s a %1$s kihajtón"
#. TRANSLATORS: the first arg. is the direction of exit, the second is distance, the third is destination
#, c-format
msgid "Take the exit %1$s %2$s%3$s"
-msgstr ""
+msgstr "%2$s múlva hajtson ki %1$s %3$s irányába"
#. TRANSLATORS: as in "Keep right at interchange 42 Greenmond-West"
msgid "at interchange"
-msgstr ""
+msgstr "a csomópontnál"
msgid "at exit"
-msgstr ""
+msgstr "a kijáratnál"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
@@ -550,7 +550,7 @@ msgstr "Bolívia"
#. 535
msgid "Bonaire, Sint Eustatius and Saba"
-msgstr ""
+msgstr "Karib tengeri Bonaire, Sint Eustatius és Saba"
#. 076
msgid "Brazil"
@@ -642,7 +642,7 @@ msgstr "Zöldfoki-szigetek"
#. 531
msgid "Curacao"
-msgstr ""
+msgstr "Curacao"
#. 162
msgid "Christmas Island"
@@ -1274,7 +1274,7 @@ msgstr "Salvador"
#. 534
msgid "Sint Maarten (Dutch part)"
-msgstr ""
+msgstr "Sint Maarten (Holland rész)"
#. 760
msgid "Syrian Arab Republic"
@@ -1442,6 +1442,16 @@ msgid ""
"\t-h: print this usage info and exit.\n"
"\t-v: print the version and exit.\n"
msgstr ""
+"navit használata:\n"
+"navit [opciók] [konfigurációs fájl]\n"
+"\t-c <fájl>: a <fájl> használata konfigurációs fájlként az alapértelmezett "
+"helyett\n"
+"\t-d <n>: a globális hibakeresési kimenet szintjét <n>-re állítja (0=hiba, "
+"1=figyelmeztetés, 2=információ, 3=hibakeresés)\n"
+"\tA konfigurációs állománybeli beállítások ennek ellenére érvényre jutnak "
+"amennyiben nagyobb értéket állítanak be.\n"
+"\t-h: jelen használati információ megjelenítése és kilépés.\n"
+"\t-v: verzióinformáció megjelenítése és kilépés.\n"
#. We have not found an existing config file from all possibilities
msgid "No config file navit.xml, navit.xml.local found\n"
@@ -1457,7 +1467,7 @@ msgstr "A következő konfigurációs állomány használata: %s\n"
#, c-format
msgid "Error: No configuration found in config file '%s'\n"
-msgstr ""
+msgstr "Hiba: Nem található konfigurációs beállítás a fájlban '%s'\n"
msgid ""
"Internal initialization failed, exiting. Check previous error messages.\n"
@@ -1580,10 +1590,10 @@ msgid "Opens address search dialog"
msgstr "Címkeresés"
msgid "_POI search"
-msgstr ""
+msgstr "_POI keresés"
msgid "Opens POI search dialog"
-msgstr ""
+msgstr "POI keresés megnyitása"
msgid "_Stop Navigation"
msgstr "Navigálás vége"
@@ -1628,49 +1638,49 @@ msgid "Data"
msgstr "Adat"
msgid "Pharmacy"
-msgstr ""
+msgstr "Gyógyszertár"
msgid "Restaurant"
-msgstr ""
+msgstr "Étterem"
msgid "Restaurant. Fast food"
-msgstr ""
+msgstr "Étterem. Gyorsétterem"
msgid "Hotel"
-msgstr ""
+msgstr "Szálloda"
msgid "Car parking"
-msgstr ""
+msgstr "Parkoló"
msgid "Fuel station"
msgstr ""
msgid "Bank"
-msgstr ""
+msgstr "Bank"
msgid "Hospital"
-msgstr ""
+msgstr "Kórház"
msgid "Cinema"
-msgstr ""
+msgstr "Mozi"
msgid "Train station"
-msgstr ""
+msgstr "Vasútállomás"
msgid "School"
-msgstr ""
+msgstr "Iskola"
msgid "Police"
-msgstr ""
+msgstr "Rendőrség"
msgid "Justice"
-msgstr ""
+msgstr "Bíróság"
msgid "Taxi"
-msgstr ""
+msgstr "Taxi"
msgid "Shopping"
-msgstr ""
+msgstr "Bevásárlás"
msgid "Distance from screen center (km)"
msgstr ""
@@ -1692,31 +1702,31 @@ msgid "Set next visit to %ld, %ld \n"
msgstr ""
msgid "POI search"
-msgstr ""
+msgstr "POI keresés"
msgid "Select a category"
-msgstr ""
+msgstr "Válasszon egy kategóriát"
msgid "Select a distance to look for (km)"
-msgstr ""
+msgstr "Válasszon keresési távolságot (km)"
msgid "Select a POI"
-msgstr ""
+msgstr "POI kiválasztása"
msgid " "
-msgstr ""
+msgstr " "
msgid "Category"
-msgstr ""
+msgstr "Kategória"
msgid "Direction"
-msgstr ""
+msgstr "Irány"
msgid "Distance(m)"
-msgstr ""
+msgstr "Távolság (km)"
msgid "Name"
-msgstr ""
+msgstr "Név:"
msgid "Visit Before"
msgstr ""
@@ -1970,6 +1980,12 @@ msgstr "Elrendezés"
msgid "Height Profile"
msgstr "Magassági profil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Útvonalleírás"
@@ -2025,10 +2041,6 @@ msgstr "Keres"
msgid "Towns"
msgstr "Városok"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Útvonal ide"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Térkép adatok (c) OpenStreeMap közreműködők, ODBL"
@@ -2045,6 +2057,12 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Jelenleg Androidon a 3.8GB-nál nagyobb térképek nem támogatottak, kérem "
+"válasszon egy kisebbet."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Útvonal ide"
msgid "Cancel"
msgstr "Mégse"
@@ -2130,7 +2148,7 @@ msgid "Corse"
msgstr "Korzika"
msgid "Franche-Comte"
-msgstr ""
+msgstr "Franche-Comté"
msgid "Haute-Normandie"
msgstr "Felső-Normandia"
@@ -2166,7 +2184,7 @@ msgid "Provence-Alpes-Cote-d-Azur"
msgstr "Provence-Alpes-Cote-d-Azur"
msgid "Rhone-Alpes"
-msgstr ""
+msgstr "Rhone-Alpes"
msgid "Baden-Wuerttemberg"
msgstr "Baden-Württemberg"
@@ -2175,25 +2193,25 @@ msgid "Bayern"
msgstr "Bajorország"
msgid "Mittelfranken"
-msgstr ""
+msgstr "Közép-Frankföld"
msgid "Niederbayern"
msgstr "Niederbayern"
msgid "Oberbayern"
-msgstr ""
+msgstr "Felső-Bajorország"
msgid "Oberfranken"
-msgstr ""
+msgstr "Felső-Frankföld"
msgid "Oberpfalz"
-msgstr ""
+msgstr "Felső-Pfalz"
msgid "Schwaben"
-msgstr ""
+msgstr "Svábföld"
msgid "Unterfranken"
-msgstr ""
+msgstr "Alsó-Frankföld"
msgid "Berlin"
msgstr "Berlin"
@@ -2208,40 +2226,40 @@ msgid "Hamburg"
msgstr "Hamburg"
msgid "Hessen"
-msgstr ""
+msgstr "Hessen"
msgid "Mecklenburg-Vorpommern"
-msgstr ""
+msgstr "Mecklenburg-Előpomeránia"
msgid "Niedersachsen"
msgstr "Alsó-Szászország"
msgid "Nordrhein-westfalen"
-msgstr ""
+msgstr "Észak-Rajna-Vesztfália"
msgid "Rheinland-Pfalz"
-msgstr ""
+msgstr "Rajna-vidék-Pfalz"
msgid "Saarland"
msgstr "Saar-vidék"
msgid "Sachsen-Anhalt"
-msgstr ""
+msgstr "Szász-Anhalt"
msgid "Sachsen"
msgstr "Szászország"
msgid "Schleswig-Holstein"
-msgstr ""
+msgstr "Schleswig-Holstein"
msgid "Thueringen"
msgstr "Türingia"
msgid "Mallorca"
-msgstr ""
+msgstr "Mallorca"
msgid "Galicia"
-msgstr ""
+msgstr "Galicia"
msgid "Scandinavia"
msgstr "Skandinávia"
@@ -2250,67 +2268,67 @@ msgid "England"
msgstr "Anglia"
msgid "Buckinghamshire"
-msgstr ""
+msgstr "Buckinghamshire"
msgid "Cambridgeshire"
-msgstr ""
+msgstr "Cambridgeshire"
msgid "Cumbria"
-msgstr ""
+msgstr "Cumbria"
msgid "East yorkshire with hull"
-msgstr ""
+msgstr "East Yorkshire, Hull"
msgid "Essex"
-msgstr ""
+msgstr "Essex"
msgid "Herefordshire"
-msgstr ""
+msgstr "Herefordshire"
msgid "Kent"
-msgstr ""
+msgstr "Kent"
msgid "Lancashire"
-msgstr ""
+msgstr "Lancashire"
msgid "Leicestershire"
-msgstr ""
+msgstr "Leicestershire"
msgid "Norfolk"
-msgstr ""
+msgstr "Norfolk"
msgid "Nottinghamshire"
-msgstr ""
+msgstr "Nottinghamshire"
msgid "Oxfordshire"
-msgstr ""
+msgstr "Oxfordshire"
msgid "Shropshire"
-msgstr ""
+msgstr "Shropshire"
msgid "Somerset"
-msgstr ""
+msgstr "Somerset"
msgid "South yorkshire"
-msgstr ""
+msgstr "South yorkshire"
msgid "Suffolk"
-msgstr ""
+msgstr "Suffolk"
msgid "Surrey"
-msgstr ""
+msgstr "Surrey"
msgid "Wiltshire"
-msgstr ""
+msgstr "Wiltshire"
msgid "Scotland"
-msgstr ""
+msgstr "Skócia"
msgid "Wales"
-msgstr ""
+msgstr "Wales"
msgid "Crete"
-msgstr ""
+msgstr "Kréta"
msgid "North America"
msgstr "Észak-Amerika"
@@ -2319,7 +2337,7 @@ msgid "Alaska"
msgstr "Alaszka"
msgid "Hawaii"
-msgstr ""
+msgstr "Hawaii"
msgid "USA"
msgstr "Amerikai Egyesült Államok"
@@ -2328,97 +2346,97 @@ msgid " (except Alaska and Hawaii)"
msgstr " (kivéve Alaszka és Hawaii)"
msgid "Midwest"
-msgstr ""
+msgstr "Midwest"
msgid "Michigan"
-msgstr ""
+msgstr "Michigan"
msgid "Ohio"
-msgstr ""
+msgstr "Ohio"
msgid "Northeast"
msgstr ""
msgid "Massachusetts"
-msgstr ""
+msgstr "Massachusetts"
msgid "Vermont"
-msgstr ""
+msgstr "Vermont"
msgid "Pacific"
msgstr ""
msgid "South"
-msgstr ""
+msgstr "Dél"
msgid "Arkansas"
-msgstr ""
+msgstr "Arkansas"
msgid "District of Columbia"
-msgstr ""
+msgstr "District of Columbia"
msgid "Florida"
-msgstr ""
+msgstr "Florida"
msgid "Louisiana"
-msgstr ""
+msgstr "Louisiana"
msgid "Maryland"
-msgstr ""
+msgstr "Maryland"
msgid "Mississippi"
-msgstr ""
+msgstr "Mississippi"
msgid "Oklahoma"
-msgstr ""
+msgstr "Oklahoma"
msgid "Texas"
-msgstr ""
+msgstr "Texas"
msgid "Virginia"
-msgstr ""
+msgstr "Virginia"
msgid "West Virginia"
-msgstr ""
+msgstr "Nyugat-Virginia"
msgid "West"
-msgstr ""
+msgstr "Nyugat"
msgid "Arizona"
-msgstr ""
+msgstr "Arizona"
msgid "California"
-msgstr ""
+msgstr "California"
msgid "Colorado"
-msgstr ""
+msgstr "Colorado"
msgid "Idaho"
-msgstr ""
+msgstr "Idaho"
msgid "Montana"
-msgstr ""
+msgstr "Montana"
msgid "New Mexico"
-msgstr ""
+msgstr "New Mexico"
msgid "Nevada"
-msgstr ""
+msgstr "Nevada"
msgid "Oregon"
-msgstr ""
+msgstr "Oregon"
msgid "Utah"
-msgstr ""
+msgstr "Utah"
msgid "Washington State"
-msgstr ""
+msgstr "Washington Állam"
msgid "South+Middle America"
msgstr "Dél és Közép-Amerika"
msgid "Guyane Francaise"
-msgstr ""
+msgstr "Francia Guyana"
msgid "downloading"
msgstr "letöltés"
@@ -2428,7 +2446,7 @@ msgid "ready"
msgstr "kész"
msgid "Media selected for map storage is not available"
-msgstr ""
+msgstr "A térkép tárolására kijelölt hordozó nem elérhető"
#. Android resource: @strings/map_download_not_enough_free_space
msgid "Not enough free space"
@@ -2506,6 +2524,9 @@ msgstr "Teljes képernyő"
msgid "Window Mode"
msgstr "Ablak mód"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Leírás"
diff --git a/po/id.po.in b/po/id.po.in
index 706f23f14..302b11212 100644
--- a/po/id.po.in
+++ b/po/id.po.in
@@ -1,5 +1,5 @@
# Indonesian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Joel-apobae.com https://launchpad.net/~amanda2000
@@ -1965,6 +1965,12 @@ msgstr ""
msgid "Height Profile"
msgstr "Profil ketinggian"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Deskripsi rute"
@@ -2020,10 +2026,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2041,6 +2043,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2501,6 +2507,9 @@ msgstr "Layar penuh"
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Deskripsi"
diff --git a/po/it.po.in b/po/it.po.in
index 106cb19a1..c2c557d7e 100644
--- a/po/it.po.in
+++ b/po/it.po.in
@@ -1,5 +1,5 @@
# Italian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# AndreaCr https://launchpad.net/~andij-cr
@@ -15,7 +15,7 @@
# Stemby https://launchpad.net/~carlo-stemberger
# amedeo https://launchpad.net/~amedeo-lanza
# b3784098 https://launchpad.net/~b3784098
-# ernia https://launchpad.net/~monghitri
+# ernia https://launchpad.net/~ernia
# giardia https://launchpad.net/~fabriziosm
# jackyes https://launchpad.net/~jackthebest
# tomas https://launchpad.net/~tracks-tomyt
@@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:58+0000\n"
+"PO-Revision-Date: 2016-06-17 19:33+0000\n"
"Last-Translator: Michael von Glasow <Unknown>\n"
"Language-Team: Italiano\n"
"MIME-Version: 1.0\n"
@@ -323,7 +323,7 @@ msgstr "decisamente "
#, c-format
msgid "then take the %1$s road to the %2$s"
-msgstr ""
+msgstr "poi prendere la %1$s strada a %2$s"
#, c-format
msgid "Take the %1$s road to the %2$s"
@@ -1982,6 +1982,12 @@ msgstr "Layout"
msgid "Height Profile"
msgstr "Altimetria"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Descrizione del percorso"
@@ -2037,10 +2043,6 @@ msgstr "Cerca"
msgid "Towns"
msgstr "Paesini"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Percorso per questo punto"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Dati Mappa (c) Contributori OpenStreetMap, licenza ODBL"
@@ -2058,6 +2060,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Percorso per questo punto"
+
msgid "Cancel"
msgstr "Annulla"
@@ -2518,6 +2524,9 @@ msgstr "Schermo intero"
msgid "Window Mode"
msgstr "Modalità finestra"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Descrizione"
diff --git a/po/ja.po.in b/po/ja.po.in
index 8e9f53ce2..66ce52328 100644
--- a/po/ja.po.in
+++ b/po/ja.po.in
@@ -1,5 +1,5 @@
# Japanese translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1963,6 +1963,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2495,6 +2501,9 @@ msgstr "全画面表示"
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/jv.po.in b/po/jv.po.in
index b0e4df660..500c5c750 100644
--- a/po/jv.po.in
+++ b/po/jv.po.in
@@ -1,5 +1,5 @@
# Javanese translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Leonardus Priyo Handono https://launchpad.net/~leonardus-ymail
@@ -1963,6 +1963,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2018,10 +2024,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2039,6 +2041,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2495,6 +2501,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/kk.po.in b/po/kk.po.in
index a31248f77..7f48773a4 100644
--- a/po/kk.po.in
+++ b/po/kk.po.in
@@ -1,5 +1,5 @@
# Kazakh translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
"Language: kk\n"
"X-Report-Errors: https://translations.launchpad.net/navit/trunk/+pots/navit\n"
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/kn.po.in b/po/kn.po.in
index 0158067a2..7a1b13a20 100644
--- a/po/kn.po.in
+++ b/po/kn.po.in
@@ -1,5 +1,5 @@
# Kannada translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Mahesh Venom https://launchpad.net/~mahesh-venom-73
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/ko.po.in b/po/ko.po.in
index db73da2eb..4c908aa68 100644
--- a/po/ko.po.in
+++ b/po/ko.po.in
@@ -1,5 +1,5 @@
# Korean translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -1958,6 +1958,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2013,10 +2019,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2034,6 +2036,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2490,6 +2496,9 @@ msgstr "전체화면"
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/ku.po.in b/po/ku.po.in
index cfa547b99..22f79bbea 100644
--- a/po/ku.po.in
+++ b/po/ku.po.in
@@ -1,5 +1,5 @@
# Kurdish translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# kosar https://launchpad.net/~kosar-belana
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/lb.po.in b/po/lb.po.in
index 95421f795..a8e5450db 100644
--- a/po/lb.po.in
+++ b/po/lb.po.in
@@ -1,8 +1,7 @@
# Luxembourgish translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
-# Kevin G https://launchpad.net/~kev912002
# MaXaM https://launchpad.net/~maxschaal
msgid ""
@@ -1962,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2017,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2038,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2494,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/lt.po.in b/po/lt.po.in
index 9913f8fb4..b1c4a4e68 100644
--- a/po/lt.po.in
+++ b/po/lt.po.in
@@ -1,5 +1,5 @@
# Lithuanian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Aidas Kasparas https://launchpad.net/~a-kasparas
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:59+0000\n"
+"PO-Revision-Date: 2016-06-17 20:36+0000\n"
"Last-Translator: Michael von Glasow <Unknown>\n"
"Language-Team: Lithuanian <lt@li.org>\n"
"MIME-Version: 1.0\n"
@@ -317,7 +317,7 @@ msgstr "stipriai "
#, c-format
msgid "then take the %1$s road to the %2$s"
-msgstr ""
+msgstr "tada važiuokite %1$s keliu į %2$s"
#, c-format
msgid "Take the %1$s road to the %2$s"
@@ -1449,11 +1449,11 @@ msgstr ""
#. We have not found an existing config file from all possibilities
msgid "No config file navit.xml, navit.xml.local found\n"
-msgstr ""
+msgstr "Konfiguracijos failai navit.xml, navit.xml.local nerasti\n"
#, c-format
msgid "Error parsing config file '%s': %s\n"
-msgstr ""
+msgstr "Klaida konfiguracijos faile '%s': %s\n"
#, c-format
msgid "Using config file '%s'\n"
@@ -1461,11 +1461,13 @@ msgstr "Naudojamas konfigūracijos failas „%s”\n"
#, c-format
msgid "Error: No configuration found in config file '%s'\n"
-msgstr ""
+msgstr "Klaida: Konfigūracija nerasta faile '%s'\n"
msgid ""
"Internal initialization failed, exiting. Check previous error messages.\n"
msgstr ""
+"Vidinis inicializavimas nepavyko, baigiame darbą. Žiūrėkite prieš tai "
+"pateiktas klaidas.\n"
msgid "unknown street"
msgstr "nežinoma gatvė"
@@ -1642,7 +1644,7 @@ msgid "Hotel"
msgstr "Viešbutis"
msgid "Car parking"
-msgstr ""
+msgstr "Stovėjimo aikštelė"
msgid "Fuel station"
msgstr "Degalinė"
@@ -1858,13 +1860,13 @@ msgid "Download %s"
msgstr "Atsisiųsti %s"
msgid "Map Download"
-msgstr ""
+msgstr "Žemėlapio parsiuntimas"
msgid "Active"
msgstr "Aktyvus"
msgid "Download Enabled"
-msgstr ""
+msgstr "Parsiuntimas leidžiamas"
msgid "Download completely"
msgstr ""
@@ -1925,7 +1927,7 @@ msgid "And all the Navit Team"
msgstr "Ir visa Navit komanda"
msgid "members and contributors."
-msgstr ""
+msgstr "nariai ir pagalbininkai."
msgid "Waypoints"
msgstr ""
@@ -1972,6 +1974,12 @@ msgstr "Išdėstymas"
msgid "Height Profile"
msgstr "Aukščio profilis"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Maršruto aprašymas"
@@ -2010,14 +2018,14 @@ msgstr "Grįžti į maršrutą!"
#. warning told
msgid "Look out! Camera!"
-msgstr ""
+msgstr "Dėmesio! Kamera!"
#. warning told
msgid "Please decrease your speed"
msgstr "Prašom sumažinti greitį"
msgid "partial match"
-msgstr ""
+msgstr "dalinis sutapimas"
#. Android resource: @strings/address_search_button
msgid "Search"
@@ -2027,12 +2035,8 @@ msgstr "Paieška"
msgid "Towns"
msgstr "Miestai"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Maršrutas iki čia"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
-msgstr ""
+msgstr "Žemėlapio duomenys (c) OpenStreetMap pagalbininkai, ODBL"
msgid ""
"Current map location %s is not available\n"
@@ -2047,9 +2051,15 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Atleiskite, bet šiuo metu didesni nei 3,8GB žemėlapiai Androide nepalaikomi, "
+"pasirinkite mažesnį žemėlapį."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Maršrutas iki čia"
msgid "Cancel"
-msgstr ""
+msgstr "Atšaukti"
msgid "filenamePath"
msgstr ""
@@ -2058,21 +2068,23 @@ msgid ""
"New location set to %s\n"
"Restart Navit to apply the changes."
msgstr ""
+"Nauja vieta nustatyta į %s\n"
+"Perstartuokite Navit, kad pakeitimai įsigaliotų."
msgid "Whole Planet"
-msgstr ""
+msgstr "Visa planeta"
msgid "Africa"
-msgstr ""
+msgstr "Afrika"
msgid "Canary Islands"
-msgstr ""
+msgstr "Kanarų salos"
msgid "Asia"
-msgstr ""
+msgstr "Azija"
msgid "Korea"
-msgstr ""
+msgstr "Korėja"
msgid "Taiwan"
msgstr ""
@@ -2081,25 +2093,25 @@ msgid "UAE+Other"
msgstr ""
msgid "Oceania"
-msgstr ""
+msgstr "Okeanija"
msgid "Tasmania"
-msgstr ""
+msgstr "Tasmanija"
msgid "Victoria"
-msgstr ""
+msgstr "Viktorija"
msgid "New South Wales"
-msgstr ""
+msgstr "Naujasis Pietų Velsas"
msgid "Europe"
-msgstr ""
+msgstr "Europa"
msgid "Western Europe"
-msgstr ""
+msgstr "Vakarų Europa"
msgid "Azores"
-msgstr ""
+msgstr "Azorai"
msgid "BeNeLux"
msgstr ""
@@ -2120,10 +2132,10 @@ msgid "Bourgogne"
msgstr ""
msgid "Bretagne"
-msgstr ""
+msgstr "Bretanė"
msgid "Centre"
-msgstr ""
+msgstr "Centras"
msgid "Champagne-Ardenne"
msgstr ""
@@ -2198,16 +2210,16 @@ msgid "Unterfranken"
msgstr ""
msgid "Berlin"
-msgstr ""
+msgstr "Berlynas"
msgid "Brandenburg"
-msgstr ""
+msgstr "Brandenburgas"
msgid "Bremen"
-msgstr ""
+msgstr "Brėmenas"
msgid "Hamburg"
-msgstr ""
+msgstr "Hamburgas"
msgid "Hessen"
msgstr ""
@@ -2240,16 +2252,16 @@ msgid "Thueringen"
msgstr ""
msgid "Mallorca"
-msgstr ""
+msgstr "Maljorka"
msgid "Galicia"
msgstr ""
msgid "Scandinavia"
-msgstr ""
+msgstr "Skandinavija"
msgid "England"
-msgstr ""
+msgstr "Anglija"
msgid "Buckinghamshire"
msgstr ""
@@ -2258,19 +2270,19 @@ msgid "Cambridgeshire"
msgstr ""
msgid "Cumbria"
-msgstr ""
+msgstr "Kambrija"
msgid "East yorkshire with hull"
msgstr ""
msgid "Essex"
-msgstr ""
+msgstr "Eseksas"
msgid "Herefordshire"
msgstr ""
msgid "Kent"
-msgstr ""
+msgstr "Kentas"
msgid "Lancashire"
msgstr ""
@@ -2279,7 +2291,7 @@ msgid "Leicestershire"
msgstr ""
msgid "Norfolk"
-msgstr ""
+msgstr "Norfolkas"
msgid "Nottinghamshire"
msgstr "Notingemšyras"
@@ -2309,31 +2321,31 @@ msgid "Scotland"
msgstr "Škotija"
msgid "Wales"
-msgstr ""
+msgstr "Velsas"
msgid "Crete"
-msgstr ""
+msgstr "Kreta"
msgid "North America"
-msgstr ""
+msgstr "Šiaurės Amerika"
msgid "Alaska"
-msgstr ""
+msgstr "Aliaska"
msgid "Hawaii"
-msgstr ""
+msgstr "Havajai"
msgid "USA"
-msgstr ""
+msgstr "JAV"
msgid " (except Alaska and Hawaii)"
-msgstr ""
+msgstr " (išskyrus Aliaską ir Havajus)"
msgid "Midwest"
msgstr ""
msgid "Michigan"
-msgstr ""
+msgstr "Mičiganas"
msgid "Ohio"
msgstr ""
@@ -2354,28 +2366,28 @@ msgid "South"
msgstr ""
msgid "Arkansas"
-msgstr ""
+msgstr "Arkanzasas"
msgid "District of Columbia"
-msgstr ""
+msgstr "Kolumbijos apygarda"
msgid "Florida"
-msgstr ""
+msgstr "Florida"
msgid "Louisiana"
-msgstr ""
+msgstr "Luiziana"
msgid "Maryland"
msgstr ""
msgid "Mississippi"
-msgstr ""
+msgstr "Misisipė"
msgid "Oklahoma"
-msgstr ""
+msgstr "Oklahoma"
msgid "Texas"
-msgstr ""
+msgstr "Teksasas"
msgid "Virginia"
msgstr "Virdžinija"
@@ -2420,7 +2432,7 @@ msgid "South+Middle America"
msgstr ""
msgid "Guyane Francaise"
-msgstr ""
+msgstr "Prancūzų gvinėja"
msgid "downloading"
msgstr "siunčiama"
@@ -2437,13 +2449,13 @@ msgid "Not enough free space"
msgstr "Nepakanka laisvos vietos"
msgid "Error downloading map!"
-msgstr ""
+msgstr "Klaida parsiunčiant žemėlapį!"
msgid "Error writing map!"
-msgstr ""
+msgstr "Klaida įrašant žemėlapį!"
msgid "Map download aborted!"
-msgstr ""
+msgstr "Žemėlapio parsiuntimas nutrauktas!"
#. Android resource: @strings/map_download_eta
msgid "ETA"
@@ -2510,6 +2522,9 @@ msgstr "Visas ekranas"
msgid "Window Mode"
msgstr "Langų režimas"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Aprašas"
@@ -2527,13 +2542,13 @@ msgid "Satellite Status"
msgstr "Palydovų būsena"
msgid "NMEA Data"
-msgstr ""
+msgstr "NMEA duomenys"
msgid "car_shortest"
msgstr "Automobilis (trumpiausias maršrutas)"
msgid "car_avoid_tolls"
-msgstr ""
+msgstr "D"
msgid "car_pedantic"
msgstr ""
@@ -2572,6 +2587,15 @@ msgid ""
"\n"
"Enjoy Navit!"
msgstr ""
+"Dėkui, kad suinstaliavote Navit!\n"
+"\n"
+"Pradėkite pasirinkdami „Parsiųsti žemėlapius“ pagrindiniame meniu. Dėmesio: "
+"Žemėlapių failai gali būti dideli (>50MB) -- rekomenduojame naudoti WiFi "
+"ryšį.\n"
+"\n"
+"Žemėlapių duomenys: (c) OpenStreetMap pagalbininkai\n"
+"\n"
+"Sėkmės naudojant Navit!"
#. Android resource: @strings/initial_info_box_OK
msgid "OK"
@@ -2603,7 +2627,7 @@ msgstr "Išeiti iš Navit"
#. Android resource: @strings/optionsmenu_backup_restore
msgid "Backup / Restore"
-msgstr ""
+msgstr "Atsarginė kopija / Atstatymas"
#. Android resource: @strings/optionsmenu_set_map_location
msgid "Set map location"
@@ -2619,11 +2643,11 @@ msgstr "Siunčiama:"
#. Android resource: @strings/map_download_download_error
msgid "Error downloading map."
-msgstr ""
+msgstr "Klaida parsiunčiant žemėlapį."
#. Android resource: @strings/map_download_download_aborted
msgid "Map download aborted"
-msgstr ""
+msgstr "Žemėlapio parsiuntimas nutrauktas"
#. Android resource: @strings/map_no_fix
msgid "No location. Reopen after location fix."
@@ -2643,7 +2667,7 @@ msgstr "Įveskite tikslą"
#. Android resource: @strings/address_partial_match
msgid "Match partial address"
-msgstr ""
+msgstr "Dalinis adreso sutapimas"
#. Android resource: @strings/address_search_searching
msgid "Searching..."
@@ -2655,7 +2679,7 @@ msgstr "Adresas nerastas"
#. Android resource: @strings/address_search_getting_results
msgid "Getting search results"
-msgstr ""
+msgstr "Gaunami paieškos rezultatai"
#. Android resource: @strings/address_search_loading_results
msgid "Loading search results"
@@ -2695,7 +2719,7 @@ msgstr ""
#. Android resource: @strings/backup_failed
msgid "Backup failed"
-msgstr ""
+msgstr "Nepavyko padaryti atsarginės kopijos"
#. Android resource: @strings/no_backup_found
msgid "No backup found"
@@ -2703,7 +2727,7 @@ msgstr "Nerasta atsarginių kopijų"
#. Android resource: @strings/failed_to_restore
msgid "Failed to restore"
-msgstr ""
+msgstr "Nepavyko atstatyti"
#. Android resource: @strings/backup_successful
msgid "Backup successful"
@@ -2714,6 +2738,8 @@ msgid ""
"Restore Successful\n"
"Please restart Navit"
msgstr ""
+"Atstatymas pavyko\n"
+"Paleiskite Navit iš naujo"
#. Android resource: @strings/backup_not_found
msgid "Backup not found"
@@ -2721,7 +2747,7 @@ msgstr "Atsarginė kopija neaptikta"
#. Android resource: @strings/restore_failed
msgid "Restore failed"
-msgstr ""
+msgstr "Atstatymas nepavyko"
#. Android resource: @strings/select_backup
msgid "Select backup"
@@ -2733,7 +2759,7 @@ msgstr ""
#. Android resource: @strings/restore
msgid "Restore"
-msgstr ""
+msgstr "Atstatyti atasrginę kopiją"
#. Android resource: @strings/TTS_title_data_missing
msgid "System text to speech engine data is missing"
diff --git a/po/lv.po.in b/po/lv.po.in
index 2ccd61491..8f729a8ca 100644
--- a/po/lv.po.in
+++ b/po/lv.po.in
@@ -1,5 +1,5 @@
# Latvian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Janis https://launchpad.net/~janis-zl
@@ -1972,6 +1972,12 @@ msgstr "Izklājums"
msgid "Height Profile"
msgstr "Augstuma profils"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Maršruta apraksts"
@@ -2027,10 +2033,6 @@ msgstr "Meklēt"
msgid "Towns"
msgstr "Pilsētas"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Ceļš uz šejieni"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Karte (c) OpenStreetMap contributors, ODBL"
@@ -2048,6 +2050,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Ceļš uz šejieni"
+
msgid "Cancel"
msgstr "Atcelt"
@@ -2510,6 +2516,9 @@ msgstr "Pilnekrāns"
msgid "Window Mode"
msgstr "Loga režīms"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Apraksts"
diff --git a/po/mk.po.in b/po/mk.po.in
index 35898cc50..d51a99fb3 100644
--- a/po/mk.po.in
+++ b/po/mk.po.in
@@ -1,5 +1,5 @@
# Macedonian (mk) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Dejan Angelov https://launchpad.net/~dejanangelov
@@ -1969,6 +1969,12 @@ msgstr "Изглед"
msgid "Height Profile"
msgstr "Висински профил"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "Објаснување за патот"
@@ -2024,10 +2030,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2045,6 +2047,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2505,6 +2511,9 @@ msgstr "На цел екран"
msgid "Window Mode"
msgstr "Работи во прозорец"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Опис"
diff --git a/po/ml.po.in b/po/ml.po.in
index edd428786..3658437a3 100644
--- a/po/ml.po.in
+++ b/po/ml.po.in
@@ -1,5 +1,5 @@
# Malayalam translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Faju https://launchpad.net/~gotoarunk
@@ -1964,6 +1964,12 @@ msgstr "വിന്യാസം"
msgid "Height Profile"
msgstr "ഉയര വിവരങ്ങള്‍"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr "പാത വിവരണം"
@@ -2019,10 +2025,6 @@ msgstr "തിരയുക"
msgid "Towns"
msgstr "പട്ടണങ്ങള്‍"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "ഇവിടെ വരെയുള്ള വഴി കാട്ടുക"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "ഭൂപട വിവരങ്ങള്‍ (3) ഓപ്പണ്‍സ്റ്റ്രീറ്റ് മാപ്"
@@ -2040,6 +2042,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "ഇവിടെ വരെയുള്ള വഴി കാട്ടുക"
+
msgid "Cancel"
msgstr "റദ്ദാക്കുക"
@@ -2502,6 +2508,9 @@ msgstr "മുഴുവന്‍ തിരശ്ശീല"
msgid "Window Mode"
msgstr "വിന്റൊ മോഡ്"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "വിവരണം"
diff --git a/po/mn.po.in b/po/mn.po.in
index 37f96b11d..d9c7c7fff 100644
--- a/po/mn.po.in
+++ b/po/mn.po.in
@@ -1,5 +1,5 @@
# Mongolian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Enkhbold https://launchpad.net/~enkhbold-baatar
@@ -1961,6 +1961,12 @@ msgstr ""
msgid "Height Profile"
msgstr ""
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2016,10 +2022,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2037,6 +2039,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2493,6 +2499,9 @@ msgstr ""
msgid "Window Mode"
msgstr ""
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr ""
diff --git a/po/nb.po.in b/po/nb.po.in
index 68d88cc74..d1f9026a3 100644
--- a/po/nb.po.in
+++ b/po/nb.po.in
@@ -1,5 +1,5 @@
# Norwegian translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# KaZeR https://launchpad.net/~kazer
@@ -9,13 +9,14 @@
# Skippern https://launchpad.net/~gay-today
# Thor H. Johansen https://launchpad.net/~thorhajo
# burner https://launchpad.net/~bendik-xplore
+# kingu https://launchpad.net/~comradekingu
msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:59+0000\n"
-"Last-Translator: Michael von Glasow <Unknown>\n"
+"PO-Revision-Date: 2016-10-02 20:18+0000\n"
+"Last-Translator: kingu <comradekingu@gmail.com>\n"
"Language-Team: Bendik Brenne <bendik@xplore.nu>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -77,11 +78,11 @@ msgstr "sjette avkjøring"
#, c-format
msgid "%d feet"
-msgstr ""
+msgstr "%d fot"
#, c-format
msgid "in %d feet"
-msgstr ""
+msgstr "om %d fot"
#, c-format
msgid "%d.%d miles"
@@ -100,8 +101,8 @@ msgstr[1] ""
#, c-format
msgid "in one mile"
msgid_plural "in %d miles"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "om ei mil"
+msgstr[1] "om %d engelske mil"
#, c-format
msgid "%d meters"
@@ -225,28 +226,28 @@ msgstr "så"
#. TRANSLATORS: the arg. is the phrase 'onto ...'. Right merge, the stuff after | doesn't have to be included.
#, c-format
msgid "then merge%1$s|right"
-msgstr ""
+msgstr "flett sp%1$s|høyre"
#. TRANSLATORS: the first arg. is distance, the second is the phrase 'onto ...'. Right merge, the stuff after | doesn't have to be included.
#, c-format
msgid "Merge %1$s%2$s|right"
-msgstr ""
+msgstr "Flett %1$s%2$s|høyre"
#. TRANSLATORS: the arg. is the phrase 'onto ...'. Left merge, the stuff after | doesn't have to be included.
#, c-format
msgid "then merge%1$s|left"
-msgstr ""
+msgstr "flett så%1$s|venstre"
#. TRANSLATORS: the first arg. is distance, the second is the phrase 'onto ...'. Left merge, the stuff after | doesn't have to be included.
#, c-format
msgid "Merge %1$s%2$s|left"
-msgstr ""
+msgstr "Flett %1$s%2$s|venstre"
msgid "on your left"
-msgstr ""
+msgstr "på venstresiden"
msgid "on your right"
-msgstr ""
+msgstr "på høyresiden"
#. TRANSLATORS: the first arg. is exit ref and/or name, the second is the direction of exit and the third is distance
#, c-format
@@ -1968,6 +1969,12 @@ msgstr "Utseende"
msgid "Height Profile"
msgstr "Høydeprofil"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+
+msgid "The route must cross at least 2 heightlines"
+msgstr ""
+
msgid "Route Description"
msgstr ""
@@ -2023,10 +2030,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2044,6 +2047,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -2504,6 +2511,9 @@ msgstr "Fullskjerm"
msgid "Window Mode"
msgstr "Vindusmodus"
+msgid "Layers"
+msgstr ""
+
msgid "Description"
msgstr "Beskrivelse"
diff --git a/po/nds.po.in b/po/nds.po.in
index c12167b5f..53ab20e1a 100644
--- a/po/nds.po.in
+++ b/po/nds.po.in
@@ -1,10 +1,11 @@
# German, Low translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Christian Moll https://launchpad.net/~christian-chrmoll
# KaZeR https://launchpad.net/~kazer
# Lars Hennig https://launchpad.net/~elhennig
+# Marc0 https://launchpad.net/~z-ubuntuone-y
# Michael von Glasow https://launchpad.net/~michael-vonglasow
# Roadrunner IN https://launchpad.net/~online
# Roschkor https://launchpad.net/~bound-one2000
@@ -15,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 03:59+0000\n"
-"Last-Translator: Michael von Glasow <Unknown>\n"
+"PO-Revision-Date: 2016-04-03 18:48+0000\n"
+"Last-Translator: Marc0 <ubuntuone@hidden-primary.net>\n"
"Language-Team: German, Low <nds@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -78,31 +79,31 @@ msgstr "sechste Ausfahrt"
#, c-format
msgid "%d feet"
-msgstr ""
+msgstr "%d Fuss"
#, c-format
msgid "in %d feet"
-msgstr ""
+msgstr "in %d Fuss"
#, c-format
msgid "%d.%d miles"
-msgstr ""
+msgstr "%d,%d Meilen"
#, c-format
msgid "in %d.%d miles"
-msgstr ""
+msgstr "in %d,%d Meilen"
#, c-format
msgid "one mile"
msgid_plural "%d miles"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "eine Meile"
+msgstr[1] "%d Meilen"
#, c-format
msgid "in one mile"
msgid_plural "in %d miles"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "in einer Meile"
+msgstr[1] "in %d Meilen"
#, c-format
msgid "%d meters"
@@ -2024,10 +2025,6 @@ msgstr ""
msgid "Towns"
msgstr ""
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr ""
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr ""
@@ -2045,6 +2042,10 @@ msgid ""
"a smaller one."
msgstr ""
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr ""
+
msgid "Cancel"
msgstr ""
diff --git a/po/nl.po.in b/po/nl.po.in
index e88ed9c35..337fba7e4 100644
--- a/po/nl.po.in
+++ b/po/nl.po.in
@@ -1,5 +1,5 @@
# Dutch translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Bert de Bruijn https://launchpad.net/~lpdebruijn
@@ -18,14 +18,15 @@
# bafplus https://launchpad.net/~bart-cockheyt
# jan https://launchpad.net/~jandegr1
# rob https://launchpad.net/~rvdb
+# wb9688 https://launchpad.net/~wb9688
# worldcitizen https://launchpad.net/~joop-boonen
msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-10-05 13:45+0000\n"
-"Last-Translator: jan <jandegr1@hotmail.com>\n"
+"PO-Revision-Date: 2016-05-04 15:48+0000\n"
+"Last-Translator: wb9688 <Unknown>\n"
"Language-Team: afaber\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1605,7 +1606,7 @@ msgid "Test"
msgstr "Test"
msgid "_Quit"
-msgstr ""
+msgstr "_Afsluiten"
msgid "Quit the application"
msgstr "Het programma afsluiten"
@@ -2038,10 +2039,6 @@ msgstr "Zoek"
msgid "Towns"
msgstr "Steden"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "route hiernaartoe"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "kaart gegevens (c) OpenStreetMap contributeurs, ODBL"
@@ -2064,6 +2061,10 @@ msgstr ""
"Kaarten gorter dan 3,8GB zijn momenteel niet ondersteund op Android.\r\n"
"Kies a.u.b. een kleinere kaart."
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "route hiernaartoe"
+
msgid "Cancel"
msgstr "Annuleer"
diff --git a/po/pl.po.in b/po/pl.po.in
index e623ff6aa..bff4cd27d 100644
--- a/po/pl.po.in
+++ b/po/pl.po.in
@@ -1,10 +1,11 @@
# Polish translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Bartosz Kaszubowski https://launchpad.net/~simek
# DarkAlexis https://launchpad.net/~alex-ludyga
# Jarosław Ogrodnik https://launchpad.net/~goz
+# Jurek https://launchpad.net/~jorgosw
# KaZeR https://launchpad.net/~kazer
# Marcin Ostajewski (panszpik) https://launchpad.net/~panszpik
# Michael von Glasow https://launchpad.net/~michael-vonglasow
@@ -20,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-07-19 04:00+0000\n"
-"Last-Translator: Michael von Glasow <Unknown>\n"
+"PO-Revision-Date: 2016-03-29 21:43+0000\n"
+"Last-Translator: Jurek <jorgosw@gmail.com>\n"
"Language-Team: Translators\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -214,10 +215,10 @@ msgstr "Wjazd na rondo wkrótce"
#. TRANSLATORS: %s is the distance to the roundabout
#, c-format
msgid "Enter the roundabout %s"
-msgstr ""
+msgstr "Wjedź na rondo za %s"
msgid "then enter the roundabout"
-msgstr ""
+msgstr "wtedy wjedź na rondo"
#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
#, c-format
@@ -254,10 +255,10 @@ msgid "Merge %1$s%2$s|left"
msgstr ""
msgid "on your left"
-msgstr ""
+msgstr "po twojej lewej"
msgid "on your right"
-msgstr ""
+msgstr "po twojej prawej"
#. TRANSLATORS: the first arg. is exit ref and/or name, the second is the direction of exit and the third is distance
#, c-format
@@ -271,7 +272,7 @@ msgstr ""
#. TRANSLATORS: as in "Keep right at interchange 42 Greenmond-West"
msgid "at interchange"
-msgstr ""
+msgstr "na skrzyżowaniu"
msgid "at exit"
msgstr ""
@@ -279,32 +280,32 @@ msgstr ""
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then continue straight%1$s"
-msgstr ""
+msgstr "i kontynuuj prosto%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
msgid "Continue straight %1$s%2$s%3$s"
-msgstr ""
+msgstr "Kontynuuj prosto %1$s%2$s%3$s"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then keep right%1$s"
-msgstr ""
+msgstr "i trzymaj się prawej%1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
msgid "Keep right %1$s%2$s%3$s"
-msgstr ""
+msgstr "Trzymaj się prawej %1$s%2$s%3$s"
#. TRANSLATORS: the arg. is where to do the maneuver
#, c-format
msgid "then keep left%1$s"
-msgstr ""
+msgstr "i trzymaj się lewej %1$s"
#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
#, c-format
msgid "Keep left %1$s%2$s%3$s"
-msgstr ""
+msgstr "Trzymaj się lewej %1$s%2$s%3$s"
#. TRANSLATORS: "right" as in "turn right"
msgid "right"
@@ -1468,7 +1469,7 @@ msgstr "Użycie pliku konfiguracji '%s'\n"
#, c-format
msgid "Error: No configuration found in config file '%s'\n"
-msgstr ""
+msgstr "Błąd: Brak konfiguracji w pliku '%s'\n"
msgid ""
"Internal initialization failed, exiting. Check previous error messages.\n"
@@ -1639,46 +1640,46 @@ msgid "Data"
msgstr "Dane"
msgid "Pharmacy"
-msgstr ""
+msgstr "Apteka"
msgid "Restaurant"
-msgstr ""
+msgstr "Restauracja"
msgid "Restaurant. Fast food"
-msgstr ""
+msgstr "Restauracja. Fast food"
msgid "Hotel"
-msgstr ""
+msgstr "Hotel"
msgid "Car parking"
-msgstr ""
+msgstr "Parking"
msgid "Fuel station"
-msgstr ""
+msgstr "Stacja benzynowa"
msgid "Bank"
-msgstr ""
+msgstr "Bank"
msgid "Hospital"
-msgstr ""
+msgstr "Szpital"
msgid "Cinema"
-msgstr ""
+msgstr "Kino"
msgid "Train station"
-msgstr ""
+msgstr "Stacja kolejowa"
msgid "School"
-msgstr ""
+msgstr "Szkoła"
msgid "Police"
-msgstr ""
+msgstr "Posterunek policji"
msgid "Justice"
msgstr ""
msgid "Taxi"
-msgstr ""
+msgstr "Postój taksówek"
msgid "Shopping"
msgstr ""
@@ -1706,28 +1707,28 @@ msgid "POI search"
msgstr ""
msgid "Select a category"
-msgstr ""
+msgstr "Wybierz kategorię"
msgid "Select a distance to look for (km)"
-msgstr ""
+msgstr "Wybierz zakres poszukiwań (km)"
msgid "Select a POI"
msgstr ""
msgid " "
-msgstr ""
+msgstr " "
msgid "Category"
-msgstr ""
+msgstr "Kategoria"
msgid "Direction"
-msgstr ""
+msgstr "Kierunek"
msgid "Distance(m)"
-msgstr ""
+msgstr "Dystans(m)"
msgid "Name"
-msgstr ""
+msgstr "Nazwa"
msgid "Visit Before"
msgstr ""
@@ -2036,10 +2037,6 @@ msgstr "Wyszukaj"
msgid "Towns"
msgstr "Miasta"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Prowadź z tąd"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Dane Mapy (c) OpenStreetMap contributors, ODBL"
@@ -2056,6 +2053,12 @@ msgid ""
"Sorry, we currently do not support maps above 3.8G on Android, please select "
"a smaller one."
msgstr ""
+"Przepraszamy, aktualnie nie wspieramy map większych niż 3,8Gb na Androidzie, "
+"proszę wybrać mniejszą."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Prowadź z tąd"
msgid "Cancel"
msgstr "Anuluj"
@@ -2067,6 +2070,8 @@ msgid ""
"New location set to %s\n"
"Restart Navit to apply the changes."
msgstr ""
+"Nowa lokalizacja ustawiona jako %s\n"
+"Uruchom ponownie aplikację Navit, aby zmiany zostały zastosowane."
msgid "Whole Planet"
msgstr "Cały Ś"
diff --git a/po/pt.po.in b/po/pt.po.in
index 083416c8f..c5ef693aa 100644
--- a/po/pt.po.in
+++ b/po/pt.po.in
@@ -1,5 +1,5 @@
# Portuguese translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# CaioNavas https://launchpad.net/~webmaster-caiomnavas
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-09-19 14:04+0000\n"
+"PO-Revision-Date: 2016-10-11 10:00+0000\n"
"Last-Translator: João Pirralha <joaopirralha@gmail.com>\n"
"Language-Team: Portuguese <pt@li.org>\n"
"MIME-Version: 1.0\n"
@@ -1987,6 +1987,13 @@ msgstr "Esquema"
msgid "Height Profile"
msgstr "Perfil de altitude"
+msgid "please install a map *.heightlines.bin to provide elevationdata"
+msgstr ""
+"por favor instale um mapa *.heightlines.bin para fornecer dados de elevação"
+
+msgid "The route must cross at least 2 heightlines"
+msgstr "A rota deve cruzar pelo menos 2 linhas de altura"
+
msgid "Route Description"
msgstr "Descrição da rota"
@@ -2042,10 +2049,6 @@ msgstr "Procura"
msgid "Towns"
msgstr "Cidades"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Rota para aqui"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Dados do mapa (c) Colaboradores OpenStreetMap, ODBL"
@@ -2068,6 +2071,10 @@ msgstr ""
"Infelizmente não suportamos mapas maiores que 3.8G no Android, por favor "
"selecione um mais pequeno."
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Rota para aqui"
+
msgid "Cancel"
msgstr "Cancelar"
@@ -2532,6 +2539,9 @@ msgstr "Ecrã completo"
msgid "Window Mode"
msgstr "Modo de janela"
+msgid "Layers"
+msgstr "Camadas"
+
msgid "Description"
msgstr "Descrição"
diff --git a/po/ru.po.in b/po/ru.po.in
index 7a8e9b86b..835ed0c8c 100644
--- a/po/ru.po.in
+++ b/po/ru.po.in
@@ -1,5 +1,5 @@
# Russian (ru) translations for navit
-# Copyright (C) 2006-2015 The Navit Team
+# Copyright (C) 2006-2016 The Navit Team
# This file is distributed under the same license as the navit package.
# Many thanks to the contributors of this translation:
# Alexey Reztsov https://launchpad.net/~ariafan
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: navit 0.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2015-11-15 20:38+0000\n"
+"PO-Revision-Date: 2016-07-11 21:09+0000\n"
"Last-Translator: tryagain <mdankov@yandex.ru>\n"
"Language-Team: Rustam T. Usmanov\n"
"MIME-Version: 1.0\n"
@@ -61,7 +61,7 @@ msgid "third"
msgstr "третью"
msgid "fourth"
-msgstr "четвертую"
+msgstr "четвёртый"
msgid "fifth"
msgstr "пятую"
@@ -83,7 +83,7 @@ msgid "third exit"
msgstr "третий съезд"
msgid "fourth exit"
-msgstr "четвертый съезд"
+msgstr "четвёртый съезд"
msgid "fifth exit"
msgstr "пятый съезд"
@@ -2045,10 +2045,6 @@ msgstr "Поиск"
msgid "Towns"
msgstr "Города"
-#. Android resource: @strings/position_popup_drive_here
-msgid "Route to here"
-msgstr "Ехать сюда"
-
msgid "Map data (c) OpenStreetMap contributors, ODBL"
msgstr "Данные карты (c) участники OpenStreetMap, ODBL"
@@ -2071,6 +2067,10 @@ msgstr ""
"К сожалению, карты свыше 3.8 Гб не поддерживаются в Android версии. Выберите "
"другую карту."
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "Ехать сюда"
+
msgid "Cancel"
msgstr "Отмена"
diff --git a/po/zh_TW.po.in b/po/zh_TW.po.in
new file mode 100644
index 000000000..bd136f1e8
--- /dev/null
+++ b/po/zh_TW.po.in
@@ -0,0 +1,2756 @@
+# Chinese (Traditional) translations for navit
+# Copyright (C) 2006-2016 The Navit Team
+# This file is distributed under the same license as the navit package.
+# Many thanks to the contributors of this translation:
+# icefirewu https://launchpad.net/~icefirewu
+
+msgid ""
+msgstr ""
+"Project-Id-Version: navit\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2016-09-12 15:23+0000\n"
+"Last-Translator: icefirewu <icefirewu@gmail.com>\n"
+"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "Running from source directory\n"
+msgstr "自源目錄執行\n"
+
+#, c-format
+msgid "setting '%s' to '%s'\n"
+msgstr "將 '%s' 設為 '%s'\n"
+
+#. TRANSLATORS: the following counts refer to streets
+msgid "zeroth"
+msgstr "第零條"
+
+msgid "first"
+msgstr "第一條"
+
+msgid "second"
+msgstr "第二條"
+
+msgid "third"
+msgstr "第三條"
+
+msgid "fourth"
+msgstr "第四條"
+
+msgid "fifth"
+msgstr "第五條"
+
+msgid "sixth"
+msgstr "第六條"
+
+#. TRANSLATORS: the following counts refer to roundabout exits
+msgid "zeroth exit"
+msgstr "第零條出口"
+
+msgid "first exit"
+msgstr "第一條出口"
+
+msgid "second exit"
+msgstr "第二條出口"
+
+msgid "third exit"
+msgstr "第三條出口"
+
+msgid "fourth exit"
+msgstr "第四條出口"
+
+msgid "fifth exit"
+msgstr "第五條出口"
+
+msgid "sixth exit"
+msgstr "第六條出口"
+
+#, c-format
+msgid "%d feet"
+msgstr "%d 英尺"
+
+#, c-format
+msgid "in %d feet"
+msgstr "在 %d 英尺"
+
+#, c-format
+msgid "%d.%d miles"
+msgstr "%d 點 %d 英里"
+
+#, c-format
+msgid "in %d.%d miles"
+msgstr "在 %d 點 %d 英里"
+
+#, c-format
+msgid "one mile"
+msgid_plural "%d miles"
+msgstr[0] "%d 英里"
+
+#, c-format
+msgid "in one mile"
+msgid_plural "in %d miles"
+msgstr[0] "在 %d 英里"
+
+#, c-format
+msgid "%d meters"
+msgstr "%d 公尺"
+
+#, c-format
+msgid "in %d meters"
+msgstr "在 %d 公尺"
+
+#, c-format
+msgid "%d.%d kilometers"
+msgstr "%d 點 %d 公里"
+
+#, c-format
+msgid "in %d.%d kilometers"
+msgstr "在 %d 點 %d 公里"
+
+#, c-format
+msgid "one kilometer"
+msgid_plural "%d kilometers"
+msgstr[0] "%d 公里"
+
+#, c-format
+msgid "in one kilometer"
+msgid_plural "in %d kilometers"
+msgstr[0] "在 %d 公里"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Systematic Street Name 3: Separator (Space if required), 4: Street Name
+#, c-format
+msgid "%1$sonto the %2$s%3$s%4$s"
+msgstr "%1$s 往 %2$s%3$s%4$s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name
+#, c-format
+msgid "%1$sonto %2$s"
+msgstr "%1$s 往 %2$s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name. Masculine form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%1$sonto %2$s|masculine form"
+msgstr "%1$s 往 %2$s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name. Feminine form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%1$sonto %2$s|feminine form"
+msgstr "%1$s 往 %2$s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name. Neuter form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%1$sonto %2$s|neuter form"
+msgstr "%1$s 往 %2$s"
+
+#. TRANSLATORS: motorway ramp refers to the slip road for entering a motorway.
+msgid "onto the motorway ramp"
+msgstr "往交流道匝道"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name 3: Separator (Space if required), 4: Systematic Street Name
+#, c-format
+msgid "%sinto %s%s%s"
+msgstr "%s 往 %s%s%s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name 3: Separator (Space if required), 4: Systematic Street Name. Masculine form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%sinto %s%s%s|masculine form"
+msgstr "%s 往 %s%s%s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name 3: Separator (Space if required), 4: Systematic Street Name. Feminine form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%sinto %s%s%s|feminine form"
+msgstr "%s 往 %s%s%s"
+
+#. TRANSLATORS: Arguments: 1: Prefix (Space if required) 2: Street Name 3: Separator (Space if required), 4: Systematic Street Name. Neuter form. The stuff after | doesn't have to be included
+#, c-format
+msgid "%sinto %s%s%s|neuter form"
+msgstr "%s 往 %s%s%s"
+
+#. TRANSLATORS: gives the name of the next road to turn into (into the E17)
+#, c-format
+msgid "%sinto the %s"
+msgstr "%s 往 %s"
+
+msgid "When possible, please turn around"
+msgstr "請盡可能迴轉"
+
+#. TRANSLATORS: the argument is the destination to follow
+#, c-format
+msgid "towards %s"
+msgstr "朝向 %s"
+
+#, c-format
+msgid "Follow the road for the next %s"
+msgstr "沿著路到下一個 %s"
+
+msgid "Enter the roundabout soon"
+msgstr "即將進入圓環"
+
+#. TRANSLATORS: %s is the distance to the roundabout
+#, c-format
+msgid "Enter the roundabout %s"
+msgstr "在 %s 進入圓環"
+
+msgid "then enter the roundabout"
+msgstr "然後進入圓環"
+
+#. TRANSLATORS: first arg. is the manieth exit, second arg. is the destination to follow
+#, c-format
+msgid "Leave the roundabout at the %1$s %2$s"
+msgstr "於 %1$s 脫離圓環 %2$s"
+
+msgid "soon"
+msgstr "即將"
+
+msgid "now"
+msgstr "立即"
+
+msgid "then"
+msgstr "然後"
+
+#. TRANSLATORS: the arg. is the phrase 'onto ...'. Right merge, the stuff after | doesn't have to be included.
+#, c-format
+msgid "then merge%1$s|right"
+msgstr "然後匯入右方車道 %1$s"
+
+#. TRANSLATORS: the first arg. is distance, the second is the phrase 'onto ...'. Right merge, the stuff after | doesn't have to be included.
+#, c-format
+msgid "Merge %1$s%2$s|right"
+msgstr "%1$s 靠 %2$s 行駛"
+
+#. TRANSLATORS: the arg. is the phrase 'onto ...'. Left merge, the stuff after | doesn't have to be included.
+#, c-format
+msgid "then merge%1$s|left"
+msgstr "然後并入左線 %1$s 行駛"
+
+#. TRANSLATORS: the first arg. is distance, the second is the phrase 'onto ...'. Left merge, the stuff after | doesn't have to be included.
+#, c-format
+msgid "Merge %1$s%2$s|left"
+msgstr "在 %1$s 併入%2$s 線行駛 |left"
+
+msgid "on your left"
+msgstr "切入右線"
+
+msgid "on your right"
+msgstr "切入左線"
+
+#. TRANSLATORS: the first arg. is exit ref and/or name, the second is the direction of exit and the third is distance
+#, c-format
+msgid "Take exit %1$s %2$s %3$s"
+msgstr "下 %1$s %2$s %3$s"
+
+#. TRANSLATORS: the first arg. is the direction of exit, the second is distance, the third is destination
+#, c-format
+msgid "Take the exit %1$s %2$s%3$s"
+msgstr "%2$s 靠 %1$s 下 %3$s"
+
+#. TRANSLATORS: as in "Keep right at interchange 42 Greenmond-West"
+msgid "at interchange"
+msgstr "於交流道處"
+
+msgid "at exit"
+msgstr "於出口處"
+
+#. TRANSLATORS: the arg. is where to do the maneuver
+#, c-format
+msgid "then continue straight%1$s"
+msgstr "然後繼續朝 %1$s 直行"
+
+#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
+#, c-format
+msgid "Continue straight %1$s%2$s%3$s"
+msgstr "繼續直行 %1$s%2$s%3$s"
+
+#. TRANSLATORS: the arg. is where to do the maneuver
+#, c-format
+msgid "then keep right%1$s"
+msgstr "然後繼續靠右 %1$s"
+
+#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
+#, c-format
+msgid "Keep right %1$s%2$s%3$s"
+msgstr "繼續靠右 %1$s%2$s%3$s"
+
+#. TRANSLATORS: the arg. is where to do the maneuver
+#, c-format
+msgid "then keep left%1$s"
+msgstr "然後繼續靠左 %1$s"
+
+#. TRANSLATORS: the first arg. is distance, the second is where to do the maneuver, the third is destination
+#, c-format
+msgid "Keep left %1$s%2$s%3$s"
+msgstr "在 %1$s 繼續靠左 下 %2$s 往 %3$s"
+
+#. TRANSLATORS: "right" as in "turn right"
+msgid "right"
+msgstr "右"
+
+#. TRANSLATORS: "left" as in "turn left"
+msgid "left"
+msgstr "左"
+
+#. TRANSLATORS: as in "turn easily right"
+msgid "easily "
+msgstr "微 "
+
+#. TRANSLATORS: as in "turn strongly right"
+msgid "strongly "
+msgstr "急 "
+
+#, c-format
+msgid "then take the %1$s road to the %2$s"
+msgstr "然後進入 %1$s 往 %2$s"
+
+#, c-format
+msgid "Take the %1$s road to the %2$s"
+msgstr "進入 %1$s 往 %2$s"
+
+#, c-format
+msgid "after %i roads"
+msgstr "經過 %i 路"
+
+#. TRANSLATORS: the first arg. is strength, the second is direction, the third is distance, the fourth is destination
+#, c-format
+msgid "Turn %1$s%2$s %3$s%4$s"
+msgstr "%3$s 向 %2$s %1$s 轉 %4$s"
+
+#. TRANSLATORS: Left U-turn, the stuff after | doesn't have to be included.
+msgid "then make a U-turn|left"
+msgstr "然後左迴轉"
+
+#. TRANSLATORS: the arg. is distance. Left U-turn, the stuff after | doesn't have to be included.
+#, c-format
+msgid "Make a U-turn %1$s|left"
+msgstr "%1$s 左迴轉"
+
+#. TRANSLATORS: Right U-turn, the stuff after | doesn't have to be included.
+msgid "then make a U-turn|right"
+msgstr "然後右迴轉"
+
+#. TRANSLATORS: the arg. is distance. Right U-turn, the stuff after | doesn't have to be included.
+#, c-format
+msgid "Make a U-turn %1$s|right"
+msgstr "%1$s 右迴轉"
+
+#. An empty placeholder that we can use in the future for
+#. * some motorway commands that are now suppressed but we
+#. * can in some cases make it say here :
+#. * 'follow destination blabla' without any further driving instructions,
+#. * in cases where relevant destination info is available.
+#. * Even if there is no driving command to be announced, in some cases
+#. * there is an overhead roadsign in preparation of an upcoming road-split,
+#. * and then we can give useful info to the driver.
+#. *
+#. * UNTESTED !
+#. *
+#.
+msgid "follow"
+msgstr "沿著"
+
+msgid "then you have reached your destination."
+msgstr "然後你將抵達目的地"
+
+#. TRANSLATORS: the arg. is distance
+#, c-format
+msgid "You have reached your destination %s"
+msgstr "%s 你將抵達目的地"
+
+#. TRANSLATORS: Exit as a noun, as in "Exit 43 Greenmound-East"
+msgid "Interchange"
+msgstr "交流道"
+
+msgid "Exit"
+msgstr "出口"
+
+#. Android resource: @strings/position_popup_title
+msgid "Position"
+msgstr "位置"
+
+msgid "Command"
+msgstr "指令"
+
+msgid "Length"
+msgstr "距離"
+
+msgid "km"
+msgstr "公里"
+
+msgid "m"
+msgstr "公尺"
+
+msgid "Time"
+msgstr "時間"
+
+msgid "Destination Length"
+msgstr "抵達距離"
+
+msgid "Destination Time"
+msgstr "抵達時間"
+
+msgid "Roadbook"
+msgstr "Roadbook"
+
+#, c-format
+msgid "Waypoint %d"
+msgstr "航點 %d"
+
+msgid "Visit before..."
+msgstr "歷經"
+
+msgid "Set as position"
+msgstr "設為起點"
+
+msgid "Set as destination"
+msgstr "設為目的地"
+
+msgid "Add as bookmark"
+msgstr "增為書籤"
+
+#, c-format
+msgid "Point 0x%x 0x%x"
+msgstr "點 0x%x 0x%x"
+
+#, c-format
+msgid "Screen coord : %d %d"
+msgstr "螢幕座標 : %d %d"
+
+#. 020
+msgid "Andorra"
+msgstr "安道爾"
+
+#. 784
+msgid "United Arab Emirates"
+msgstr "阿拉伯聯合大公國"
+
+#. 004
+msgid "Afghanistan"
+msgstr "阿富汗"
+
+#. 028
+msgid "Antigua and Barbuda"
+msgstr "安提瓜和巴布達"
+
+#. 660
+msgid "Anguilla"
+msgstr "英屬安圭拉"
+
+#. 008
+msgid "Albania"
+msgstr "阿爾巴尼亞"
+
+#. 051
+msgid "Armenia"
+msgstr "亞美尼亞"
+
+#. 530
+msgid "Netherlands Antilles"
+msgstr "荷屬安地列斯群島"
+
+#. 024
+msgid "Angola"
+msgstr "安哥拉"
+
+#. 010
+msgid "Antarctica"
+msgstr "南極洲"
+
+#. 032
+msgid "Argentina"
+msgstr "阿根廷"
+
+#. 016
+msgid "American Samoa"
+msgstr "美屬薩摩亞"
+
+#. 040
+msgid "Austria"
+msgstr "奧地利"
+
+#. 036
+msgid "Australia"
+msgstr "澳洲"
+
+#. 533
+msgid "Aruba"
+msgstr "阿鲁巴"
+
+#. 248
+msgid "Aland Islands"
+msgstr "奧蘭群島"
+
+#. 031
+msgid "Azerbaijan"
+msgstr "亞塞拜然"
+
+#. 070
+msgid "Bosnia and Herzegovina"
+msgstr "波士尼亞與赫塞哥維納"
+
+#. 052
+msgid "Barbados"
+msgstr "巴貝多"
+
+#. 050
+msgid "Bangladesh"
+msgstr "孟加拉"
+
+#. 056
+msgid "Belgium"
+msgstr "比利時"
+
+#. 854
+msgid "Burkina Faso"
+msgstr "布吉納法索"
+
+#. 100
+msgid "Bulgaria"
+msgstr "保加利亞"
+
+#. 048
+msgid "Bahrain"
+msgstr "巴林"
+
+#. 108
+msgid "Burundi"
+msgstr "蒲隆地"
+
+#. 204
+msgid "Benin"
+msgstr "貝南"
+
+#. 652
+msgid "Saint Barthelemy"
+msgstr "聖巴托洛繆"
+
+#. 060
+msgid "Bermuda"
+msgstr "百慕達群島"
+
+#. 096
+msgid "Brunei Darussalam"
+msgstr "汶萊"
+
+#. 068
+msgid "Bolivia"
+msgstr "玻利維亞"
+
+#. 535
+msgid "Bonaire, Sint Eustatius and Saba"
+msgstr "荷蘭加勒比區"
+
+#. 076
+msgid "Brazil"
+msgstr "巴西"
+
+#. 044
+msgid "Bahamas"
+msgstr "巴哈馬群島"
+
+#. 064
+msgid "Bhutan"
+msgstr "不丹"
+
+#. 074
+msgid "Bouvet Island"
+msgstr "布威島"
+
+#. 072
+msgid "Botswana"
+msgstr "波札那"
+
+#. 112
+msgid "Belarus"
+msgstr "白俄羅斯"
+
+#. 084
+msgid "Belize"
+msgstr "貝里斯"
+
+#. 124
+msgid "Canada"
+msgstr "加拿大"
+
+#. 166
+msgid "Cocos (Keeling) Islands"
+msgstr "科科斯 (基林) 群島"
+
+#. 180
+msgid "Congo, Democratic Republic of the"
+msgstr "剛果民主共和國"
+
+#. 140
+msgid "Central African Republic"
+msgstr "中非共和國"
+
+#. 178
+msgid "Congo"
+msgstr "剛果共和國"
+
+#. 756
+msgid "Switzerland"
+msgstr "瑞士"
+
+#. 384
+msgid "Cote d'Ivoire"
+msgstr "象牙海岸"
+
+#. 184
+msgid "Cook Islands"
+msgstr "庫克群島"
+
+#. 152
+msgid "Chile"
+msgstr "智利"
+
+#. 120
+msgid "Cameroon"
+msgstr "喀麥隆"
+
+#. 156
+msgid "China"
+msgstr "中國"
+
+#. 170
+msgid "Colombia"
+msgstr "哥倫比亞"
+
+#. 188
+msgid "Costa Rica"
+msgstr "哥斯大黎加"
+
+#. 192
+msgid "Cuba"
+msgstr "古巴"
+
+#. 132
+msgid "Cape Verde"
+msgstr "維德角"
+
+#. 531
+msgid "Curacao"
+msgstr "古拉索"
+
+#. 162
+msgid "Christmas Island"
+msgstr "聖誕島"
+
+#. 196
+msgid "Cyprus"
+msgstr "賽普勒斯"
+
+#. 203
+msgid "Czech Republic"
+msgstr "捷克"
+
+#. 276
+msgid "Germany"
+msgstr "德國"
+
+#. 262
+msgid "Djibouti"
+msgstr "吉布地"
+
+#. 208
+msgid "Denmark"
+msgstr "丹麥"
+
+#. 212
+msgid "Dominica"
+msgstr "多米尼克"
+
+#. 214
+msgid "Dominican Republic"
+msgstr "多明尼加"
+
+#. 012
+msgid "Algeria"
+msgstr "阿爾及利亞"
+
+#. 218
+msgid "Ecuador"
+msgstr "厄瓜多"
+
+#. 233
+msgid "Estonia"
+msgstr "愛沙尼亞"
+
+#. 818
+msgid "Egypt"
+msgstr "埃及"
+
+#. 732
+msgid "Western Sahara"
+msgstr "西撒哈拉"
+
+#. 232
+msgid "Eritrea"
+msgstr "厄利垂亞"
+
+#. 724
+msgid "Spain"
+msgstr "西班牙"
+
+#. 231
+msgid "Ethiopia"
+msgstr "衣索披亞"
+
+#. 246
+msgid "Finland"
+msgstr "芬蘭"
+
+#. 242
+msgid "Fiji"
+msgstr "斐濟"
+
+#. 238
+msgid "Falkland Islands (Malvinas)"
+msgstr "福克蘭群島 (馬爾維納斯)"
+
+#. 583
+msgid "Micronesia, Federated States of"
+msgstr "密克羅尼西亞聯邦"
+
+#. 234
+msgid "Faroe Islands"
+msgstr "法羅群島"
+
+#. 250
+msgid "France"
+msgstr "法國"
+
+#. 266
+msgid "Gabon"
+msgstr "加彭"
+
+#. 826
+msgid "United Kingdom"
+msgstr "英國"
+
+#. 308
+msgid "Grenada"
+msgstr "格瑞那達"
+
+#. 268
+msgid "Georgia"
+msgstr "喬治亞州"
+
+#. 254
+msgid "French Guiana"
+msgstr "法屬圭亞那"
+
+#. 831
+msgid "Guernsey"
+msgstr "耿西"
+
+#. 288
+msgid "Ghana"
+msgstr "迦納"
+
+#. 292
+msgid "Gibraltar"
+msgstr "直布羅陀"
+
+#. 304
+msgid "Greenland"
+msgstr "格陵蘭"
+
+#. 270
+msgid "Gambia"
+msgstr "甘比亞"
+
+#. 324
+msgid "Guinea"
+msgstr "幾內亞"
+
+#. 312
+msgid "Guadeloupe"
+msgstr "瓜德羅普"
+
+#. 226
+msgid "Equatorial Guinea"
+msgstr "赤道幾內亞"
+
+#. 300
+msgid "Greece"
+msgstr "希臘"
+
+#. 239
+msgid "South Georgia and the South Sandwich Islands"
+msgstr "南喬治亞及南桑威奇群島"
+
+#. 320
+msgid "Guatemala"
+msgstr "瓜地馬拉"
+
+#. 316
+msgid "Guam"
+msgstr "關島"
+
+#. 624
+msgid "Guinea-Bissau"
+msgstr "幾內亞比索"
+
+#. 328
+msgid "Guyana"
+msgstr "蓋亞那"
+
+#. 344
+msgid "Hong Kong"
+msgstr "香港"
+
+#. 334
+msgid "Heard Island and McDonald Islands"
+msgstr "赫德及麥當勞群島"
+
+#. 340
+msgid "Honduras"
+msgstr "宏都拉斯"
+
+#. 191
+msgid "Croatia"
+msgstr "克羅埃西亞"
+
+#. 332
+msgid "Haiti"
+msgstr "海地"
+
+#. 348
+msgid "Hungary"
+msgstr "匈牙利"
+
+#. 360
+msgid "Indonesia"
+msgstr "印尼"
+
+#. 372
+msgid "Ireland"
+msgstr "愛爾蘭"
+
+#. 376
+msgid "Israel"
+msgstr "以色列"
+
+#. 833
+msgid "Isle of Man"
+msgstr "英屬曼島"
+
+#. 356
+msgid "India"
+msgstr "印度"
+
+#. 086
+msgid "British Indian Ocean Territory"
+msgstr "英屬印度洋地區"
+
+#. 368
+msgid "Iraq"
+msgstr "伊拉克"
+
+#. 364
+msgid "Iran, Islamic Republic of"
+msgstr "伊朗"
+
+#. 352
+msgid "Iceland"
+msgstr "冰島"
+
+#. 380
+msgid "Italy"
+msgstr "義大利"
+
+#. 832
+msgid "Jersey"
+msgstr "澤西島"
+
+#. 388
+msgid "Jamaica"
+msgstr "牙買加"
+
+#. 400
+msgid "Jordan"
+msgstr "約旦"
+
+#. 392
+msgid "Japan"
+msgstr "日本"
+
+#. 404
+msgid "Kenya"
+msgstr "肯亞"
+
+#. 417
+msgid "Kyrgyzstan"
+msgstr "吉爾吉斯"
+
+#. 116
+msgid "Cambodia"
+msgstr "柬埔寨"
+
+#. 296
+msgid "Kiribati"
+msgstr "吉里巴斯"
+
+#. 174
+msgid "Comoros"
+msgstr "葛摩"
+
+#. 659
+msgid "Saint Kitts and Nevis"
+msgstr "聖克里斯多福與尼維斯聯邦"
+
+#. 408
+msgid "Korea, Democratic People's Republic of"
+msgstr "北韓"
+
+#. 410
+msgid "Korea, Republic of"
+msgstr "南韓"
+
+#. 414
+msgid "Kuwait"
+msgstr "科威特"
+
+#. 136
+msgid "Cayman Islands"
+msgstr "開曼群島"
+
+#. 398
+msgid "Kazakhstan"
+msgstr "哈薩克"
+
+#. 418
+msgid "Lao People's Democratic Republic"
+msgstr "寮國"
+
+#. 422
+msgid "Lebanon"
+msgstr "黎巴嫩"
+
+#. 662
+msgid "Saint Lucia"
+msgstr "聖露西亞"
+
+#. 438
+msgid "Liechtenstein"
+msgstr "列支敦斯登"
+
+#. 144
+msgid "Sri Lanka"
+msgstr "斯里蘭卡"
+
+#. 430
+msgid "Liberia"
+msgstr "賴比瑞亞"
+
+#. 426
+msgid "Lesotho"
+msgstr "賴索托"
+
+#. 440
+msgid "Lithuania"
+msgstr "立陶宛"
+
+#. 442
+msgid "Luxembourg"
+msgstr "盧森堡"
+
+#. 428
+msgid "Latvia"
+msgstr "拉脫維亞"
+
+#. 434
+msgid "Libya"
+msgstr "利比亞"
+
+#. 504
+msgid "Morocco"
+msgstr "摩洛哥"
+
+#. 492
+msgid "Monaco"
+msgstr "摩納哥"
+
+#. 498
+msgid "Moldova, Republic of"
+msgstr "摩爾多瓦"
+
+#. 499
+msgid "Montenegro"
+msgstr "蒙特內哥羅"
+
+#. 663
+msgid "Saint Martin (French part)"
+msgstr "法屬聖馬丁"
+
+#. 450
+msgid "Madagascar"
+msgstr "馬達加斯加"
+
+#. 584
+msgid "Marshall Islands"
+msgstr "馬紹爾群島"
+
+#. 807
+msgid "Macedonia, the former Yugoslav Republic of"
+msgstr "馬其頓"
+
+#. 466
+msgid "Mali"
+msgstr "馬利"
+
+#. 104
+msgid "Myanmar"
+msgstr "緬甸"
+
+#. 496
+msgid "Mongolia"
+msgstr "蒙古"
+
+#. 446
+msgid "Macao"
+msgstr "澳門"
+
+#. 580
+msgid "Northern Mariana Islands"
+msgstr "北馬里安納群島"
+
+#. 474
+msgid "Martinique"
+msgstr "法屬馬丁尼克"
+
+#. 478
+msgid "Mauritania"
+msgstr "茅利塔尼亞"
+
+#. 500
+msgid "Montserrat"
+msgstr "蒙特塞拉特"
+
+#. 470
+msgid "Malta"
+msgstr "馬爾他"
+
+#. 480
+msgid "Mauritius"
+msgstr "模里西斯"
+
+#. 462
+msgid "Maldives"
+msgstr "馬爾地夫"
+
+#. 454
+msgid "Malawi"
+msgstr "馬拉威"
+
+#. 484
+msgid "Mexico"
+msgstr "墨西哥"
+
+#. 458
+msgid "Malaysia"
+msgstr "馬來西亞"
+
+#. 508
+msgid "Mozambique"
+msgstr "莫三比克"
+
+#. 516
+msgid "Namibia"
+msgstr "納米比亞"
+
+#. 540
+msgid "New Caledonia"
+msgstr "新喀里多尼亞"
+
+#. 562
+msgid "Niger"
+msgstr "尼日"
+
+#. 574
+msgid "Norfolk Island"
+msgstr "諾福克島"
+
+#. 566
+msgid "Nigeria"
+msgstr "奈及利亞"
+
+#. 558
+msgid "Nicaragua"
+msgstr "尼加拉瓜"
+
+#. 528
+msgid "Netherlands"
+msgstr "荷蘭"
+
+#. 578
+msgid "Norway"
+msgstr "挪威"
+
+#. 524
+msgid "Nepal"
+msgstr "尼泊爾"
+
+#. 520
+msgid "Nauru"
+msgstr "諾魯"
+
+#. 570
+msgid "Niue"
+msgstr "紐埃"
+
+#. 554
+msgid "New Zealand"
+msgstr "紐西蘭"
+
+#. 512
+msgid "Oman"
+msgstr "阿曼"
+
+#. 591
+msgid "Panama"
+msgstr "巴拿馬"
+
+#. 604
+msgid "Peru"
+msgstr "秘魯"
+
+#. 258
+msgid "French Polynesia"
+msgstr "法屬玻里尼西亞"
+
+#. 598
+msgid "Papua New Guinea"
+msgstr "巴布亞紐幾內亞"
+
+#. 608
+msgid "Philippines"
+msgstr "菲律賓"
+
+#. 586
+msgid "Pakistan"
+msgstr "巴基斯坦"
+
+#. 616
+msgid "Poland"
+msgstr "波蘭"
+
+#. 666
+msgid "Saint Pierre and Miquelon"
+msgstr "聖皮耶與密克隆群島"
+
+#. 612
+msgid "Pitcairn"
+msgstr "皮特肯群島"
+
+#. 630
+msgid "Puerto Rico"
+msgstr "波多黎各"
+
+#. 275
+msgid "Palestinian Territory, Occupied"
+msgstr "巴勒斯坦"
+
+#. 620
+msgid "Portugal"
+msgstr "葡萄牙"
+
+#. 585
+msgid "Palau"
+msgstr "帛琉"
+
+#. 600
+msgid "Paraguay"
+msgstr "巴拉圭"
+
+#. 634
+msgid "Qatar"
+msgstr "卡達"
+
+#. 638
+msgid "Reunion"
+msgstr "留尼旺"
+
+#. 642
+msgid "Romania"
+msgstr "羅馬尼亞"
+
+#. 688
+msgid "Serbia"
+msgstr "塞爾維亞"
+
+#. 643
+msgid "Russian Federation"
+msgstr "俄羅斯"
+
+#. 646
+msgid "Rwanda"
+msgstr "盧安達"
+
+#. 682
+msgid "Saudi Arabia"
+msgstr "沙烏地阿拉伯"
+
+#. 090
+msgid "Solomon Islands"
+msgstr "索羅門群島"
+
+#. 690
+msgid "Seychelles"
+msgstr "塞席爾"
+
+#. 736
+msgid "Sudan"
+msgstr "蘇丹"
+
+#. 752
+msgid "Sweden"
+msgstr "瑞典"
+
+#. 702
+msgid "Singapore"
+msgstr "新加坡"
+
+#. 654
+msgid "Saint Helena"
+msgstr "聖赫勒那島"
+
+#. 705
+msgid "Slovenia"
+msgstr "斯洛維尼亞"
+
+#. 744
+msgid "Svalbard and Jan Mayen"
+msgstr "斯瓦巴和揚馬延"
+
+#. 703
+msgid "Slovakia"
+msgstr "斯洛伐克"
+
+#. 694
+msgid "Sierra Leone"
+msgstr "獅子山"
+
+#. 674
+msgid "San Marino"
+msgstr "聖馬利諾"
+
+#. 686
+msgid "Senegal"
+msgstr "塞內加爾"
+
+#. 706
+msgid "Somalia"
+msgstr "索馬利亞"
+
+#. 740
+msgid "Suriname"
+msgstr "蘇利南"
+
+#. 728
+msgid "South Sudan"
+msgstr "南蘇丹"
+
+#. 678
+msgid "Sao Tome and Principe"
+msgstr "聖多美普林西比"
+
+#. 222
+msgid "El Salvador"
+msgstr "薩爾瓦多"
+
+#. 534
+msgid "Sint Maarten (Dutch part)"
+msgstr "荷屬聖馬丁"
+
+#. 760
+msgid "Syrian Arab Republic"
+msgstr "敘利亞"
+
+#. 748
+msgid "Swaziland"
+msgstr "史瓦濟蘭"
+
+#. 796
+msgid "Turks and Caicos Islands"
+msgstr "土克凱可群島"
+
+#. 148
+msgid "Chad"
+msgstr "查德"
+
+#. 260
+msgid "French Southern Territories"
+msgstr "法屬南部和南極領地"
+
+#. 768
+msgid "Togo"
+msgstr "多哥"
+
+#. 764
+msgid "Thailand"
+msgstr "泰國"
+
+#. 762
+msgid "Tajikistan"
+msgstr "塔吉克"
+
+#. 772
+msgid "Tokelau"
+msgstr "托克勞"
+
+#. 626
+msgid "Timor-Leste"
+msgstr "東帝汶"
+
+#. 795
+msgid "Turkmenistan"
+msgstr "土庫曼"
+
+#. 788
+msgid "Tunisia"
+msgstr "突尼西亞"
+
+#. 776
+msgid "Tonga"
+msgstr "東加"
+
+#. 792
+msgid "Turkey"
+msgstr "土耳其"
+
+#. 780
+msgid "Trinidad and Tobago"
+msgstr "千里達及托巴哥"
+
+#. 798
+msgid "Tuvalu"
+msgstr "吐瓦魯"
+
+#. 158
+msgid "Taiwan, Province of China"
+msgstr "臺灣省"
+
+#. 834
+msgid "Tanzania, United Republic of"
+msgstr "坦尚尼亞"
+
+#. 804
+msgid "Ukraine"
+msgstr "烏克蘭"
+
+#. 800
+msgid "Uganda"
+msgstr "烏干達"
+
+#. 581
+msgid "United States Minor Outlying Islands"
+msgstr "美國本土以外小島嶼"
+
+#. 840
+msgid "United States"
+msgstr "美國"
+
+#. 858
+msgid "Uruguay"
+msgstr "烏拉圭"
+
+#. 860
+msgid "Uzbekistan"
+msgstr "烏茲別克"
+
+#. 336
+msgid "Holy See (Vatican City State)"
+msgstr "梵蒂岡"
+
+#. 670
+msgid "Saint Vincent and the Grenadines"
+msgstr "聖文森及格瑞那丁"
+
+#. 862
+msgid "Venezuela"
+msgstr "委內瑞拉"
+
+#. 092
+msgid "Virgin Islands, British"
+msgstr "英屬維京群島"
+
+#. 850
+msgid "Virgin Islands, U.S."
+msgstr "美屬維京群島"
+
+#. 704
+msgid "Viet Nam"
+msgstr "越南"
+
+#. 548
+msgid "Vanuatu"
+msgstr "萬那杜"
+
+#. 876
+msgid "Wallis and Futuna"
+msgstr "瓦利斯和富圖納群島"
+
+#. 882
+msgid "Samoa"
+msgstr "薩摩亞"
+
+#. 887
+msgid "Yemen"
+msgstr "葉門"
+
+#. 175
+msgid "Mayotte"
+msgstr "馬約特"
+
+#. 710
+msgid "South Africa"
+msgstr "南非"
+
+#. 894
+msgid "Zambia"
+msgstr "尚比亞"
+
+#. 716
+msgid "Zimbabwe"
+msgstr "辛巴威"
+
+msgid "* Unknown, add is_in tags to those cities"
+msgstr "* 未知, 於這些城市新增 is_in 標籤"
+
+msgid ""
+"navit usage:\n"
+"navit [options] [configfile]\n"
+"\t-c <file>: use <file> as config file, instead of using the default file.\n"
+"\t-d <n>: set the global debug output level to <n> (0=error, 1=warning, "
+"2=info, 3=debug).\n"
+"\tSettings from config file will still take effect where they set a higher "
+"level.\n"
+"\t-h: print this usage info and exit.\n"
+"\t-v: print the version and exit.\n"
+msgstr ""
+"navit 用法:\n"
+"navit [選項] [設定檔]\n"
+"\t-c <檔名>: 取代預設檔, 使用 <檔名> 為設定檔.\n"
+"\t-d <n>: 全域除錯輸出等級設為 <n> (0=錯誤, 1=警告, 2=訊息, 3=除錯).\n"
+"\t設定檔內之設定若等級較高則以為準.\n"
+"\t-h: 顯示用法資訊後停止.\n"
+"\t-v: 顯示版本資訊後停止.\n"
+
+#. We have not found an existing config file from all possibilities
+msgid "No config file navit.xml, navit.xml.local found\n"
+msgstr "設定檔 navit.xml, navit.xml.local 未發現\n"
+
+#, c-format
+msgid "Error parsing config file '%s': %s\n"
+msgstr "設定檔 '%s' 解讀錯誤 : %s\n"
+
+#, c-format
+msgid "Using config file '%s'\n"
+msgstr "採用設定檔 '%s'\n"
+
+#, c-format
+msgid "Error: No configuration found in config file '%s'\n"
+msgstr "錯誤: 設定檔 '%s' 內無設定\n"
+
+msgid ""
+"Internal initialization failed, exiting. Check previous error messages.\n"
+msgstr "通用初始化失敗, 正在脫出. 檢查之前的錯誤訊息.\n"
+
+msgid "unknown street"
+msgstr "未知街道"
+
+#. Safe cast: attr_generic_set_attr does not modify its parameter.
+msgid "Unnamed vehicle"
+msgstr "無名車輛"
+
+msgid "Failed to write bookmarks file"
+msgstr "寫入書籤檔失敗"
+
+#. Strings from navit_shipped.xml
+msgid "Map Point"
+msgstr "地圖點"
+
+msgid "Car"
+msgstr "汽車"
+
+msgid "Iso2"
+msgstr "Iso2"
+
+msgid "Iso3"
+msgstr "Iso3"
+
+msgid "Country"
+msgstr "國家/地區"
+
+msgid "Postal"
+msgstr "郵遞區號"
+
+msgid "Town"
+msgstr "鄉/鎮"
+
+msgid "District"
+msgstr "區"
+
+msgid "Street"
+msgstr "路/街"
+
+msgid "Number"
+msgstr "門牌號碼"
+
+msgid "Enter Destination"
+msgstr "輸入目的地"
+
+msgid "Zip Code"
+msgstr "郵遞區號"
+
+msgid "City"
+msgstr "縣市"
+
+msgid "District/Township"
+msgstr "市區/鄉鎮"
+
+msgid "Map"
+msgstr "地圖"
+
+msgid "Bookmark"
+msgstr "書籤"
+
+msgid "Destination"
+msgstr "目的地"
+
+#. TRANSLATORS: These texts are for menu items in GTK GUI. The _ indicates the mnemonic key (=underlined character) for this menu item. Please place the _ before a suitable character in the translation (or omit it if no mnemonic key is desired).
+msgid "_Display"
+msgstr "_顯示"
+
+msgid "_Route"
+msgstr "_路徑"
+
+msgid "_Former Destinations"
+msgstr "_歷來目的地"
+
+msgid "_Bookmarks"
+msgstr "_書籤"
+
+msgid "_Map"
+msgstr "_圖資"
+
+msgid "_Layout"
+msgstr "_畫面配置"
+
+msgid "_Projection"
+msgstr "_規劃"
+
+msgid "_Vehicle"
+msgstr "_車輛"
+
+msgid "Zoom_Out"
+msgstr "拉遠"
+
+msgid "Decrease zoom level"
+msgstr "降低縮放等級"
+
+msgid "Zoom_In"
+msgstr "拉近"
+
+msgid "Increase zoom level"
+msgstr "提高縮放等級"
+
+msgid "_Recalculate"
+msgstr "_重新計算"
+
+msgid "Redraw map"
+msgstr "地圖重繪"
+
+msgid "_Info"
+msgstr "_資訊"
+
+msgid "Set _destination"
+msgstr "設定_目的地"
+
+msgid "Opens address search dialog"
+msgstr "開啟地址搜尋介面"
+
+msgid "_POI search"
+msgstr "_趣點搜尋"
+
+msgid "Opens POI search dialog"
+msgstr "開啟趣點搜尋介面"
+
+msgid "_Stop Navigation"
+msgstr "_停止導航"
+
+msgid "Test"
+msgstr "測試"
+
+msgid "_Quit"
+msgstr "_退出"
+
+msgid "Quit the application"
+msgstr "結束本程式"
+
+msgid "Show position _cursor"
+msgstr "_顯示游標"
+
+msgid "_Lock on Road"
+msgstr "_鎖定道路"
+
+msgid "_Keep orientation to the North"
+msgstr "_保持地圖朝北"
+
+msgid "Switches map orientation to the north or the vehicle"
+msgstr "切換地圖固定朝北或隨車轉"
+
+msgid "_Roadbook"
+msgstr "_Roadbook"
+
+msgid "Show/hide route description"
+msgstr "顯示/隱藏 路徑敘述"
+
+msgid "_Autozoom"
+msgstr "_自動縮放"
+
+msgid "Enable/disable automatic zoom level changing"
+msgstr "啟用/停用 自動縮放"
+
+msgid "_Fullscreen"
+msgstr "_全螢幕"
+
+msgid "Data"
+msgstr "數據"
+
+msgid "Pharmacy"
+msgstr "藥局"
+
+msgid "Restaurant"
+msgstr "餐廳"
+
+msgid "Restaurant. Fast food"
+msgstr "速食店"
+
+msgid "Hotel"
+msgstr "旅館"
+
+msgid "Car parking"
+msgstr "停車場"
+
+msgid "Fuel station"
+msgstr "加油站"
+
+msgid "Bank"
+msgstr "銀行"
+
+msgid "Hospital"
+msgstr "醫院"
+
+msgid "Cinema"
+msgstr "電影院"
+
+msgid "Train station"
+msgstr "火車站"
+
+msgid "School"
+msgstr "學校"
+
+msgid "Police"
+msgstr "警局"
+
+msgid "Justice"
+msgstr "法院"
+
+msgid "Taxi"
+msgstr "計程車"
+
+msgid "Shopping"
+msgstr "購物處"
+
+msgid "Distance from screen center (km)"
+msgstr "距螢幕中心的距離 (公里)"
+
+#, c-format
+msgid "POI %s. %s"
+msgstr "趣點 %s. %s"
+
+#, c-format
+msgid "Set destination to %ld, %ld \n"
+msgstr "將 %ld, %ld 設為目的地 \n"
+
+#, c-format
+msgid "Set map to %ld, %ld \n"
+msgstr "將 %ld, %ld 設為地圖 \n"
+
+#, c-format
+msgid "Set next visit to %ld, %ld \n"
+msgstr "設定接下來經過 %ld, %ld \n"
+
+msgid "POI search"
+msgstr "趣點搜尋"
+
+msgid "Select a category"
+msgstr "選取類別"
+
+msgid "Select a distance to look for (km)"
+msgstr "選擇搜尋範圍 (公里)"
+
+msgid "Select a POI"
+msgstr "擇一趣點"
+
+msgid " "
+msgstr " "
+
+msgid "Category"
+msgstr "類別"
+
+msgid "Direction"
+msgstr "方向"
+
+msgid "Distance(m)"
+msgstr "距離(公尺)"
+
+msgid "Name"
+msgstr "名稱"
+
+msgid "Visit Before"
+msgstr "歷經"
+
+msgid "N"
+msgstr "N"
+
+msgid "NE"
+msgstr "NE"
+
+msgid "E"
+msgstr "E"
+
+msgid "SE"
+msgstr "SE"
+
+msgid "S"
+msgstr "S"
+
+msgid "SW"
+msgstr "SW"
+
+msgid "W"
+msgstr "W"
+
+msgid "NW"
+msgstr "NW"
+
+#. Android resource: @strings/no
+msgid "No"
+msgstr "否"
+
+msgid "2D"
+msgstr "2D"
+
+msgid "3D"
+msgstr "3D"
+
+msgid "OT"
+msgstr "OT"
+
+#, c-format
+msgid "Route %4.0fkm %02d:%02d ETA"
+msgstr "路徑 %4.0fkm %02d:%02d ETA"
+
+msgid "Route 0000km 0+00:00 ETA"
+msgstr "路徑 0000公里 0+00:00 ETA"
+
+msgid "Help"
+msgstr "幫助"
+
+#, c-format
+msgid "Waypoint %s"
+msgstr "航點 %s"
+
+msgid "Select waypoint to insert the new one before"
+msgstr ""
+
+msgid "View in Browser"
+msgstr "列表顯示"
+
+msgid "Item type"
+msgstr "物件類型"
+
+#. Android resource: @strings/address_search_streets
+msgid "Streets"
+msgstr "街道"
+
+msgid "House numbers"
+msgstr "門牌號碼"
+
+msgid "View Attributes"
+msgstr "顯示屬性"
+
+msgid "Set as position (and deactivate vehicle)"
+msgstr "設為起點"
+
+msgid "POIs"
+msgstr "趣點"
+
+msgid "View on map"
+msgstr "於地圖上顯示"
+
+msgid "Remove search results from the map"
+msgstr "於地圖上移除搜尋結果"
+
+msgid "Show results on the map"
+msgstr "於地圖上顯示結果"
+
+msgid "Cut Bookmark"
+msgstr "剪下書籤"
+
+msgid "Copy Bookmark"
+msgstr "複製書籤"
+
+msgid "Rename Bookmark"
+msgstr "書籤改名"
+
+msgid "Paste Bookmark"
+msgstr "貼上書籤"
+
+msgid "Delete Bookmark"
+msgstr "刪除書籤"
+
+msgid "Delete waypoint"
+msgstr "刪除航點"
+
+msgid "Bookmarks"
+msgstr "書籤"
+
+msgid "Bookmarks as waypoints"
+msgstr "標記為航點"
+
+msgid "Save waypoints"
+msgstr "儲存這些航點"
+
+msgid "Replace with waypoints"
+msgstr "置換航點"
+
+msgid "Delete Folder"
+msgstr "刪除目錄"
+
+#. Adds the Bookmark folders
+msgid "Add Bookmark folder"
+msgstr "新增書籤目錄"
+
+#. Pastes the Bookmark
+msgid "Paste bookmark"
+msgstr "貼上書籤"
+
+#, c-format
+msgid "Bookmark %s"
+msgstr "書籤 %s"
+
+#, c-format
+msgid "Download %s"
+msgstr "下載 %s"
+
+msgid "Map Download"
+msgstr "下載地圖"
+
+msgid "Active"
+msgstr "動作"
+
+msgid "Download Enabled"
+msgstr "允許下載"
+
+msgid "Download completely"
+msgstr "下載完畢"
+
+msgid "Show Satellite Status"
+msgstr "顯示衛星狀態"
+
+msgid " Elevation "
+msgstr " 海拔 "
+
+msgid " Azimuth "
+msgstr " 仰角 "
+
+msgid "Show NMEA Data"
+msgstr "顯示GPS協定資料"
+
+msgid "car"
+msgstr "汽車"
+
+msgid "bike"
+msgstr "機踏車"
+
+msgid "pedestrian"
+msgstr "步行"
+
+#, c-format
+msgid "Current profile: %s"
+msgstr "現用設定檔:%s"
+
+#, c-format
+msgid "Change profile to: %s"
+msgstr "改用設定檔:%s"
+
+msgid "Set as active"
+msgstr "設為啟用"
+
+msgid "Show Satellite status"
+msgstr "顯示衛星狀態"
+
+msgid "Show NMEA data"
+msgstr "顯示GPS協定資料"
+
+msgid "Add Bookmark"
+msgstr "加入書籤"
+
+msgid "Rename"
+msgstr "改名"
+
+msgid "About Navit"
+msgstr "關於 Navit"
+
+#. Authors
+msgid "By"
+msgstr "由"
+
+#. Contributors
+msgid "And all the Navit Team"
+msgstr "及 Navit 團隊全體"
+
+msgid "members and contributors."
+msgstr "成員及協力者們"
+
+msgid "Waypoints"
+msgstr "航點"
+
+msgid "Enter Coordinates"
+msgstr "輸入座標"
+
+#.
+#. w=gui_internal_box_new(this, gravity_left_top|orientation_vertical|flags_expand|flags_fill)
+#. gui_internal_widget_append(wb, w)
+#.
+#. we=gui_internal_box_new(this, gravity_left_center|orientation_horizontal|flags_fill)
+#. gui_internal_widget_append(w, we)
+msgid "Latitude Longitude"
+msgstr "經緯"
+
+msgid "Enter coordinates, for example:"
+msgstr "輸入座標, 例如:"
+
+msgid "Vehicle"
+msgstr "車輛"
+
+msgid "Rules"
+msgstr "規則"
+
+msgid "Lock on road"
+msgstr "鎖定道路"
+
+msgid "Northing"
+msgstr "保持朝北"
+
+msgid "Map follows Vehicle"
+msgstr "圖隨車轉"
+
+msgid "Plan with Waypoints"
+msgstr "依這些航點規劃路徑"
+
+msgid "Maps"
+msgstr "圖資"
+
+msgid "Layout"
+msgstr "版面佈局"
+
+msgid "Height Profile"
+msgstr "高度資料"
+
+msgid "Route Description"
+msgstr "路徑敘述"
+
+msgid "Show Locale"
+msgstr "顯示語言環境"
+
+msgid "Former Destinations"
+msgstr "歷來目的地"
+
+msgid "- No former destinations available -"
+msgstr "- 無歷來目的地 -"
+
+msgid "Message"
+msgstr "訊息"
+
+msgid "Back"
+msgstr "返回"
+
+msgid "Back to map"
+msgstr "回到地圖"
+
+msgid "Main Menu"
+msgstr "主選單"
+
+msgid "House number"
+msgstr "門牌號碼"
+
+msgid "Next"
+msgstr "下一頁"
+
+msgid "Prev"
+msgstr "前一頁"
+
+msgid "Return to route!"
+msgstr "回導航路徑"
+
+#. warning told
+msgid "Look out! Camera!"
+msgstr "注意! 拍照!"
+
+#. warning told
+msgid "Please decrease your speed"
+msgstr "請減速"
+
+msgid "partial match"
+msgstr "局部符合"
+
+#. Android resource: @strings/address_search_button
+msgid "Search"
+msgstr "搜尋"
+
+#. Android resource: @strings/address_search_towns
+msgid "Towns"
+msgstr "鄉鎮市區"
+
+msgid "Map data (c) OpenStreetMap contributors, ODBL"
+msgstr "圖資 (c) OpenStreetMap 創作群, ODBL"
+
+msgid ""
+"Current map location %s is not available\n"
+"Please restart Navit after you attach an SD card or select a different map "
+"location."
+msgstr ""
+
+msgid "Downloaded maps"
+msgstr "下載地圖"
+
+msgid ""
+"Sorry, we currently do not support maps above 3.8G on Android, please select "
+"a smaller one."
+msgstr "抱歉, 我們現今於安卓系統上不支援大於3.8G的圖資, 請另選一個較小的."
+
+#. Android resource: @strings/position_popup_drive_here
+msgid "Route to here"
+msgstr "導航至此"
+
+msgid "Cancel"
+msgstr "取消"
+
+msgid "filenamePath"
+msgstr "檔名路徑"
+
+msgid ""
+"New location set to %s\n"
+"Restart Navit to apply the changes."
+msgstr ""
+"重新定位至 %s\n"
+"套用變更請重啟 Navit ."
+
+msgid "Whole Planet"
+msgstr "全球"
+
+msgid "Africa"
+msgstr "非洲"
+
+msgid "Canary Islands"
+msgstr "加那利群島"
+
+msgid "Asia"
+msgstr "亞洲"
+
+msgid "Korea"
+msgstr "南韓"
+
+msgid "Taiwan"
+msgstr "臺灣"
+
+msgid "UAE+Other"
+msgstr "阿拉伯聯合大公國+其他"
+
+msgid "Oceania"
+msgstr "大洋洲"
+
+msgid "Tasmania"
+msgstr "塔斯馬尼亞"
+
+msgid "Victoria"
+msgstr "維多利亞"
+
+msgid "New South Wales"
+msgstr "新南威爾斯"
+
+msgid "Europe"
+msgstr "歐洲"
+
+msgid "Western Europe"
+msgstr "西歐"
+
+msgid "Azores"
+msgstr "亞速爾群島"
+
+msgid "BeNeLux"
+msgstr "比荷盧聯盟"
+
+msgid "Alsace"
+msgstr "亞爾薩斯"
+
+msgid "Aquitaine"
+msgstr "亞奎丹"
+
+msgid "Auvergne"
+msgstr "奧文尼"
+
+msgid "Basse-Normandie"
+msgstr "下諾曼第"
+
+msgid "Bourgogne"
+msgstr "勃艮第"
+
+msgid "Bretagne"
+msgstr "布列塔尼"
+
+msgid "Centre"
+msgstr "中央區"
+
+msgid "Champagne-Ardenne"
+msgstr "香檳-阿登"
+
+msgid "Corse"
+msgstr "科西嘉"
+
+msgid "Franche-Comte"
+msgstr "法蘭琪-康堤"
+
+msgid "Haute-Normandie"
+msgstr "上諾曼第"
+
+msgid "Ile-de-France"
+msgstr "法蘭西島"
+
+msgid "Languedoc-Roussillon"
+msgstr "朗格多克-魯西永"
+
+msgid "Limousin"
+msgstr "利木森"
+
+msgid "Lorraine"
+msgstr "洛林"
+
+msgid "Midi-Pyrenees"
+msgstr "南部-庇里牛斯"
+
+msgid "Nord-pas-de-Calais"
+msgstr "北部-加來海峽"
+
+msgid "Pays-de-la-Loire"
+msgstr "羅亞爾河地區"
+
+msgid "Picardie"
+msgstr "皮卡第區"
+
+msgid "Poitou-Charentes"
+msgstr "普瓦圖-夏朗德區"
+
+msgid "Provence-Alpes-Cote-d-Azur"
+msgstr "普羅旺斯-阿爾卑斯-藍色海岸區"
+
+msgid "Rhone-Alpes"
+msgstr "隆河-阿爾卑斯區"
+
+msgid "Baden-Wuerttemberg"
+msgstr "巴登-符登堡邦"
+
+msgid "Bayern"
+msgstr "拜仁"
+
+msgid "Mittelfranken"
+msgstr "中法蘭克尼亞"
+
+msgid "Niederbayern"
+msgstr "下巴伐利亞"
+
+msgid "Oberbayern"
+msgstr "上巴伐利亞"
+
+msgid "Oberfranken"
+msgstr "上法蘭克尼亞"
+
+msgid "Oberpfalz"
+msgstr "上法爾茲"
+
+msgid "Schwaben"
+msgstr "士瓦本"
+
+msgid "Unterfranken"
+msgstr "下法蘭克尼亞"
+
+msgid "Berlin"
+msgstr "柏林"
+
+msgid "Brandenburg"
+msgstr "布蘭登堡"
+
+msgid "Bremen"
+msgstr "不來梅"
+
+msgid "Hamburg"
+msgstr "漢堡"
+
+msgid "Hessen"
+msgstr "黑森"
+
+msgid "Mecklenburg-Vorpommern"
+msgstr "梅克倫堡-前波莫瑞"
+
+msgid "Niedersachsen"
+msgstr "下薩克森"
+
+msgid "Nordrhein-westfalen"
+msgstr "北萊茵-西伐利亞"
+
+msgid "Rheinland-Pfalz"
+msgstr "萊茵蘭-普法茲"
+
+msgid "Saarland"
+msgstr "薩爾蘭"
+
+msgid "Sachsen-Anhalt"
+msgstr "薩克森-安哈特"
+
+msgid "Sachsen"
+msgstr "薩克森"
+
+msgid "Schleswig-Holstein"
+msgstr "什列斯威-好斯敦"
+
+msgid "Thueringen"
+msgstr "圖林根"
+
+msgid "Mallorca"
+msgstr "馬約卡"
+
+msgid "Galicia"
+msgstr "加利西亞"
+
+msgid "Scandinavia"
+msgstr "斯堪地那維亞"
+
+msgid "England"
+msgstr "英格蘭"
+
+msgid "Buckinghamshire"
+msgstr "白金漢郡"
+
+msgid "Cambridgeshire"
+msgstr "劍橋郡"
+
+msgid "Cumbria"
+msgstr "坎布里亞郡"
+
+msgid "East yorkshire with hull"
+msgstr "東約克郡及赫爾"
+
+msgid "Essex"
+msgstr "艾塞克斯郡"
+
+msgid "Herefordshire"
+msgstr "禧福郡"
+
+msgid "Kent"
+msgstr "肯特郡"
+
+msgid "Lancashire"
+msgstr "蘭開夏郡"
+
+msgid "Leicestershire"
+msgstr "萊斯特郡"
+
+msgid "Norfolk"
+msgstr "諾福克郡"
+
+msgid "Nottinghamshire"
+msgstr "諾丁漢郡"
+
+msgid "Oxfordshire"
+msgstr "牛津郡"
+
+msgid "Shropshire"
+msgstr "施洛普郡"
+
+msgid "Somerset"
+msgstr "索美塞特郡"
+
+msgid "South yorkshire"
+msgstr "南約克郡"
+
+msgid "Suffolk"
+msgstr "薩福克郡"
+
+msgid "Surrey"
+msgstr "薩里"
+
+msgid "Wiltshire"
+msgstr "威爾特郡"
+
+msgid "Scotland"
+msgstr "蘇格蘭"
+
+msgid "Wales"
+msgstr "威爾斯"
+
+msgid "Crete"
+msgstr "克里特"
+
+msgid "North America"
+msgstr "北美"
+
+msgid "Alaska"
+msgstr "阿拉斯加"
+
+msgid "Hawaii"
+msgstr "夏威夷"
+
+msgid "USA"
+msgstr "美國"
+
+msgid " (except Alaska and Hawaii)"
+msgstr " (阿拉斯加及夏威夷除外)"
+
+msgid "Midwest"
+msgstr "中西部"
+
+msgid "Michigan"
+msgstr "密西根"
+
+msgid "Ohio"
+msgstr "俄亥俄"
+
+msgid "Northeast"
+msgstr "東北"
+
+msgid "Massachusetts"
+msgstr "麻塞諸塞"
+
+msgid "Vermont"
+msgstr "佛蒙特"
+
+msgid "Pacific"
+msgstr "太平洋"
+
+msgid "South"
+msgstr "南"
+
+msgid "Arkansas"
+msgstr "阿肯色"
+
+msgid "District of Columbia"
+msgstr "哥倫比亞特區"
+
+msgid "Florida"
+msgstr "佛羅里達"
+
+msgid "Louisiana"
+msgstr "路易斯安那"
+
+msgid "Maryland"
+msgstr "馬里蘭"
+
+msgid "Mississippi"
+msgstr "密西西比"
+
+msgid "Oklahoma"
+msgstr "奧克拉荷馬"
+
+msgid "Texas"
+msgstr "德克薩斯"
+
+msgid "Virginia"
+msgstr "維吉尼亞"
+
+msgid "West Virginia"
+msgstr "西維吉尼亞"
+
+msgid "West"
+msgstr "西"
+
+msgid "Arizona"
+msgstr "亞利桑那"
+
+msgid "California"
+msgstr "加利福尼亞"
+
+msgid "Colorado"
+msgstr "科羅拉多"
+
+msgid "Idaho"
+msgstr "愛達荷"
+
+msgid "Montana"
+msgstr "蒙大拿"
+
+msgid "New Mexico"
+msgstr "新墨西哥"
+
+msgid "Nevada"
+msgstr "內華達"
+
+msgid "Oregon"
+msgstr "奧勒岡"
+
+msgid "Utah"
+msgstr "猶他"
+
+msgid "Washington State"
+msgstr "華盛頓州"
+
+msgid "South+Middle America"
+msgstr "中南美洲"
+
+msgid "Guyane Francaise"
+msgstr "法屬圭亞那"
+
+msgid "downloading"
+msgstr "下載中"
+
+#. Android resource: @strings/map_download_ready
+msgid "ready"
+msgstr "就緒"
+
+msgid "Media selected for map storage is not available"
+msgstr "儲存空間不足以下載已選資源"
+
+#. Android resource: @strings/map_download_not_enough_free_space
+msgid "Not enough free space"
+msgstr "空間不足"
+
+msgid "Error downloading map!"
+msgstr "下載地圖發生錯誤!"
+
+msgid "Error writing map!"
+msgstr "寫入地圖發生錯誤!"
+
+msgid "Map download aborted!"
+msgstr "中止下載地圖!"
+
+#. Android resource: @strings/map_download_eta
+msgid "ETA"
+msgstr "ETA"
+
+#. Android resource: @strings/map_download_title
+msgid "Map download"
+msgstr "下載地圖"
+
+msgid "Vehicle Position"
+msgstr "車輛位置"
+
+msgid "Main menu"
+msgstr "主選單"
+
+msgid ""
+"Show\n"
+"Map"
+msgstr ""
+"顯示\n"
+"地圖"
+
+msgid "Settings"
+msgstr "設定值"
+
+msgid "Tools"
+msgstr "工具箱"
+
+msgid "Route"
+msgstr "路徑"
+
+msgid "About"
+msgstr "關於"
+
+msgid "Quit"
+msgstr "退出"
+
+msgid "Actions"
+msgstr "行動"
+
+msgid ""
+"Former\n"
+"Destinations"
+msgstr ""
+"歷來的\n"
+"目的地"
+
+msgid "Coordinates"
+msgstr "座標"
+
+msgid ""
+"Stop\n"
+"Navigation"
+msgstr ""
+"停止\n"
+"導航"
+
+msgid "Display"
+msgstr "顯示"
+
+msgid "Fullscreen"
+msgstr "全螢幕"
+
+msgid "Window Mode"
+msgstr "視窗模式"
+
+msgid "Layers"
+msgstr ""
+
+msgid "Description"
+msgstr "備註"
+
+msgid ""
+"Drop last \n"
+"Waypoint"
+msgstr ""
+"捨棄前一\n"
+"航點"
+
+msgid ""
+"Drop next \n"
+"Waypoint"
+msgstr ""
+"捨棄次一\n"
+"航點"
+
+msgid "Satellite Status"
+msgstr "衛星狀態"
+
+msgid "NMEA Data"
+msgstr "GPS協定資料"
+
+msgid "car_shortest"
+msgstr "汽車_最短路徑"
+
+msgid "car_avoid_tolls"
+msgstr "汽車_避付費路徑"
+
+msgid "car_pedantic"
+msgstr "步行"
+
+msgid "horse"
+msgstr "馬"
+
+msgid "Truck"
+msgstr "卡車"
+
+#. Strings from android/res/values/strings.xml
+#. Android resource: @strings/yes
+msgid "Yes"
+msgstr "確定"
+
+#. Android resource: @strings/notification_ticker
+msgid "Navit started"
+msgstr "Navit 啟動"
+
+#. Android resource: @strings/notification_event_default
+msgid "Navit running"
+msgstr "Navit 執行中"
+
+#. Android resource: @strings/initial_info_box_title
+msgid "Welcome to Navit"
+msgstr "歡迎使用 Navit"
+
+#. Android resource: @strings/initial_info_box_message
+msgid ""
+"Thank you for installing Navit!\n"
+"\n"
+"To start, select \"Download maps\" from the menu to download a map. Note: "
+"The map filesize may be large (>50MB) - a wifi connection is recommended.\n"
+"\n"
+"Mapdata: (c) OpenStreetMap contributors\n"
+"\n"
+"Enjoy Navit!"
+msgstr ""
+"感謝您安裝 Navit!\n"
+"\n"
+"剛開始, 從選單選擇 \"下載圖資\" 來下載地圖. 注意: 地圖檔可能很大 (>50MB) - 建議使用 wifi 網路連線.\n"
+"\n"
+"圖資: (c) OpenStreetMap 建構群\n"
+"\n"
+"請享用 Navit!"
+
+#. Android resource: @strings/initial_info_box_OK
+msgid "OK"
+msgstr "OK"
+
+#. Android resource: @strings/initial_info_box_more_info
+msgid "More info"
+msgstr "更多資訊"
+
+#. Android resource: @strings/optionsmenu_zoom_in
+msgid "Zoom in"
+msgstr "拉近"
+
+#. Android resource: @strings/optionsmenu_zoom_out
+msgid "Zoom out"
+msgstr "拉遠"
+
+#. Android resource: @strings/optionsmenu_download_maps
+msgid "Download maps"
+msgstr "下載圖資"
+
+#. Android resource: @strings/optionsmenu_toggle_poi
+msgid "Toggle POIs"
+msgstr "切換趣點"
+
+#. Android resource: @strings/optionsmenu_exit_navit
+msgid "Exit Navit"
+msgstr "離開 Navit"
+
+#. Android resource: @strings/optionsmenu_backup_restore
+msgid "Backup / Restore"
+msgstr "備份/回復"
+
+#. Android resource: @strings/optionsmenu_set_map_location
+msgid "Set map location"
+msgstr "設定地圖區域"
+
+#. Android resource: @strings/map_delete
+msgid "Delete this map?"
+msgstr "刪除此圖資?"
+
+#. Android resource: @strings/map_download_downloading
+msgid "Downloading:"
+msgstr "下載中:"
+
+#. Android resource: @strings/map_download_download_error
+msgid "Error downloading map."
+msgstr "圖資下載錯誤"
+
+#. Android resource: @strings/map_download_download_aborted
+msgid "Map download aborted"
+msgstr "已中止地圖下載"
+
+#. Android resource: @strings/map_no_fix
+msgid "No location. Reopen after location fix."
+msgstr "圖資不含現在位置. 修正後重啟."
+
+#. Android resource: @strings/maps_for_current_location
+msgid "Maps containing current location"
+msgstr "圖資含現在位置"
+
+#. Android resource: @strings/address_search_title
+msgid "Address search"
+msgstr "地址搜尋"
+
+#. Android resource: @strings/address_enter_destination
+msgid "Enter destination"
+msgstr "輸入目的地"
+
+#. Android resource: @strings/address_partial_match
+msgid "Match partial address"
+msgstr "符合部分地址"
+
+#. Android resource: @strings/address_search_searching
+msgid "Searching..."
+msgstr "搜尋中…"
+
+#. Android resource: @strings/address_search_not_found
+msgid "Address not found"
+msgstr "查無地址"
+
+#. Android resource: @strings/address_search_getting_results
+msgid "Getting search results"
+msgstr "取得搜尋結果"
+
+#. Android resource: @strings/address_search_loading_results
+msgid "Loading search results"
+msgstr "載入搜尋結果"
+
+#. Android resource: @strings/address_search_no_results
+msgid "No results found"
+msgstr "搜尋無結果"
+
+#. Android resource: @strings/address_search_no_text_entered
+msgid "No text entered"
+msgstr "未鍵入文字"
+
+#. Android resource: @strings/address_search_set_destination
+msgid "Setting destination to:"
+msgstr "將目的地設為:"
+
+#. Android resource: @strings/choose_an_action
+msgid "Choose an action"
+msgstr "選擇動作"
+
+#. Android resource: @strings/please_insert_an_sd_card
+msgid "Please insert an SD Card"
+msgstr "請插入SD卡"
+
+#. Android resource: @strings/backing_up
+msgid "Backing up..."
+msgstr "正在備份..."
+
+#. Android resource: @strings/restoring
+msgid "Restoring..."
+msgstr "正在還原..."
+
+#. Android resource: @strings/failed_to_create_backup_directory
+msgid "Failed to create backup directory"
+msgstr "建立備份檔目錄失敗"
+
+#. Android resource: @strings/backup_failed
+msgid "Backup failed"
+msgstr "備份失敗"
+
+#. Android resource: @strings/no_backup_found
+msgid "No backup found"
+msgstr "未找到備份"
+
+#. Android resource: @strings/failed_to_restore
+msgid "Failed to restore"
+msgstr "回復失敗"
+
+#. Android resource: @strings/backup_successful
+msgid "Backup successful"
+msgstr "備份成功"
+
+#. Android resource: @strings/restore_successful_please_restart_navit
+msgid ""
+"Restore Successful\n"
+"Please restart Navit"
+msgstr ""
+"回復成功\n"
+"請重啟 Navit"
+
+#. Android resource: @strings/backup_not_found
+msgid "Backup not found"
+msgstr "未找到備份"
+
+#. Android resource: @strings/restore_failed
+msgid "Restore failed"
+msgstr "回復失敗"
+
+#. Android resource: @strings/select_backup
+msgid "Select backup"
+msgstr "選擇備份"
+
+#. Android resource: @strings/backup
+msgid "Backup"
+msgstr "備份"
+
+#. Android resource: @strings/restore
+msgid "Restore"
+msgstr "回復"
+
+#. Android resource: @strings/TTS_title_data_missing
+msgid "System text to speech engine data is missing"
+msgstr "系統文轉音引擎資料遺失"
+
+#. Android resource: @strings/TTS_qery_install_data
+msgid ""
+"Navit can use any text to speech engine installed on your device. The "
+"currently selected engine reports it is unable to speak in your language. "
+"Should we ask the system to show voice download dialog?"
+msgstr "Navit 可使用所有已安裝之文轉音引擎. 現在選定的引擎表示無法依照您的語言發音. 要顯示語音下載對話框嗎?"