[qlandkartegt] 01/16: Imported Upstream version 1.8.0

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Feb 13 02:16:33 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository qlandkartegt.

commit c73a64fc85899513cafe6c4205a2df1b7fb5c64f
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Thu Feb 12 08:59:50 2015 +0100

    Imported Upstream version 1.8.0
---
 3rdparty/QDeviceWatcher/CMakeLists.txt             |  82 -----
 3rdparty/QDeviceWatcher/libQDeviceWatcher.pri      | 134 -------
 3rdparty/QDeviceWatcher/libQDeviceWatcher.pro      |  27 --
 3rdparty/QDeviceWatcher/qdevicechangeevent.cpp     |  29 --
 3rdparty/QDeviceWatcher/qdevicechangeevent.h       |  48 ---
 3rdparty/QDeviceWatcher/qdevicewatcher.cpp         |  94 -----
 3rdparty/QDeviceWatcher/qdevicewatcher.h           |  52 ---
 3rdparty/QDeviceWatcher/qdevicewatcher_global.h    |  31 --
 3rdparty/QDeviceWatcher/qdevicewatcher_linux.cpp   | 267 --------------
 3rdparty/QDeviceWatcher/qdevicewatcher_mac.cpp     |  76 ----
 3rdparty/QDeviceWatcher/qdevicewatcher_p.h         | 124 -------
 3rdparty/QDeviceWatcher/qdevicewatcher_win32.cpp   | 385 ---------------------
 3rdparty/QDeviceWatcher/qdevicewatcher_wince.cpp   | 137 --------
 CMakeLists.txt                                     |   5 +-
 CMakeLists.txt.user                                |  16 +-
 CMakeLists.txt.user => CMakeLists.txt.user.18      |  18 +-
 ...eLists.txt.user => CMakeLists.txt.user.3.2-pre1 |   2 +-
 changelog.txt                                      |  15 +
 nsi/3rdparty.txt                                   |   2 +-
 nsi/GTinstaller.nsi                                |   2 +-
 nsi/copyfiles.bat                                  |   6 +-
 src/CCanvas.cpp                                    |  35 +-
 src/CCanvas.h                                      |   1 +
 src/CDeviceGarminBulk.cpp                          |   8 +-
 src/CDlgConfig.cpp                                 |  85 +++++
 src/CDlgConfig.h                                   |   4 +
 src/CDlgEditWpt.cpp                                |  31 +-
 src/CGpx.cpp                                       |   6 +-
 src/CGpx.h                                         |  13 +-
 src/CMainWindow.cpp                                |   4 +-
 src/CMakeLists.txt                                 |   6 +-
 src/CMapTDB.cpp                                    |   2 +-
 src/CMouseMoveMap.cpp                              |   3 +
 src/CPlot.cpp                                      |  10 +-
 src/CPlot.h                                        |   3 +-
 src/CResources.cpp                                 |  44 +++
 src/CResources.h                                   |  12 +
 src/CRoute.cpp                                     |  63 +++-
 src/CRoute.h                                       |   9 +
 src/CRouteDB.cpp                                   |   1 +
 src/CRouteToolWidget.cpp                           | 107 +++++-
 src/CRouteToolWidget.h                             |   5 +-
 src/CTrack.cpp                                     |  50 ++-
 src/CTrackDB.cpp                                   |   4 +-
 src/CTrackEditWidget.cpp                           |  29 +-
 src/CWptDB.cpp                                     |   2 +-
 src/IDlgConfig.ui                                  | 164 +++++++++
 src/IGarminTyp.cpp                                 |   2 +-
 src/IGarminTyp.h                                   |   2 +-
 src/IRouteToolWidget.ui                            |  62 +++-
 src/ITrackEditWidget.ui                            |  12 +-
 src/locale/qlandkartegt_es_ES.ts                   | 108 +++---
 src/main.cpp                                       |   2 +-
 svn-commit.2.tmp                                   |   4 +
 54 files changed, 776 insertions(+), 1669 deletions(-)

diff --git a/3rdparty/QDeviceWatcher/CMakeLists.txt b/3rdparty/QDeviceWatcher/CMakeLists.txt
deleted file mode 100644
index 32f0fc0..0000000
--- a/3rdparty/QDeviceWatcher/CMakeLists.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-project(QDeviceWatcher)
-
-# Required cmake version
-cmake_minimum_required(VERSION 2.6.0)
-
-
-set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
-
-if(QK_QT5_PORT)
-  find_package(Qt5Widgets)
-else(QK_QT5_PORT)
-  find_package(Qt4 REQUIRED)
-  include(${QT_USE_FILE})
-endif(QK_QT5_PORT)
-
-set(SRCS
-    qdevicewatcher.cpp
-    qdevicechangeevent.cpp
-)
-
-set(HDRS
-    qdevicewatcher_p.h
-    qdevicewatcher.h
-    qdevicechangeevent.h
-    qdevicewatcher_global.h
-)
-
-if(UNIX)
-    SET(SRCS ${SRCS}  qdevicewatcher_linux.cpp)
-endif(UNIX)
-if (APPLE)
-    SET(SRCS ${SRCS}  qdevicewatcher_mac.cpp)
-endif(APPLE)
-if(WIN32)
-    SET(SRCS ${SRCS}  qdevicewatcher_win32.cpp)
-endif(WIN32)
-
-
-set(UIS
-
-)
-
-set(RCS
-
-
-)
-
-
-if(QK_QT5_PORT)
-  qt5_wrap_cpp(MOC_SRCS ${HDRS})
-  qt5_wrap_ui(UI_HDRS ${UIS})
-  qt5_add_resources(RC_SRCS ${RCS})
-else(QK_QT5_PORT)
-  qt4_wrap_cpp(MOC_SRCS ${HDRS})
-  qt4_wrap_ui(UI_HDRS ${UIS})
-  qt4_add_resources(RC_SRCS ${RCS})
-endif(QK_QT5_PORT)
-
-
-include_directories(
-
-)
-
-link_directories(
-    ${CMAKE_BINARY_DIR}/lib
-)
-
-add_library(qdevicewatcher
-  ${SRCS}
-  ${HDRS}
-  ${UI_HDRS}
-  ${RC_SRCS}
-  ${MOC_SRCS}
-  ${QM_FILES}
-)
-if(QK_QT5_PORT)
-  qt5_use_modules(qdevicewatcher )
-endif(QK_QT5_PORT)
-
-target_link_libraries( qdevicewatcher
-      ${QT_LIBRARIES}
-)
diff --git a/3rdparty/QDeviceWatcher/libQDeviceWatcher.pri b/3rdparty/QDeviceWatcher/libQDeviceWatcher.pri
deleted file mode 100644
index c1b1309..0000000
--- a/3rdparty/QDeviceWatcher/libQDeviceWatcher.pri
+++ /dev/null
@@ -1,134 +0,0 @@
-# qmake library building template pri file
-# Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-# Shanghai, China.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# 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.
-#
-############################## HOW TO ##################################
-# Suppose the library name is XX
-# Usually what you need to change are: staticlink, LIB_VERSION, NAME and DLLDESTDIR.
-# And rename xx-buildlib and LIBXX_PRI_INCLUDED
-# the contents of libXX.pro is:
-#
-#    TEMPLATE = lib
-#    QT -= gui
-#    CONFIG *= xx-buildlib
-#    include(libXX.pri)
-#    HEADERS = ...
-#    SOURCES = ...
-#    ...
-# the content of other pro using this library is:
-#
-#    TEMPLATE = app
-#    include(dir_of_XX/libXX.pri)
-#    HEADERS = ...
-#    SOURCES = ...
-#
-
-
-!isEmpty(LIBQDEVICEWATCHER_PRI_INCLUDED):error("libQDeviceWatcher.pri already included")
-LIBQDEVICEWATCHER_PRI_INCLUDED = 1
-
-staticlink = 0  #1 or 0. use static lib or not
-LIB_VERSION = 2.0.0
-#QT += network
-
-NAME = QDeviceWatcher
-TEMPLATE += fakelib
-PROJECT_TARGETNAME = $$qtLibraryTarget($$NAME)
-TEMPLATE -= fakelib
-
-
-include(../common.pri)
-#load(../common.pri)
-CONFIG += depend_includepath #?
-
-PROJECT_SRCPATH = $$PWD
-PROJECT_LIBDIR = $$qtLongName($$PWD/../lib)
-#PROJECT_LIBDIR = $$PWD/../bin #for win dll
-
-INCLUDEPATH += $$PROJECT_SRCPATH
-DEPENDPATH += $$PROJECT_SRCPATH
-QMAKE_LFLAGS_RPATH += #will append to rpath dir
-
-!qdevicewatcher-buildlib {
-
-	#The following may not need to change
-	CONFIG *= link_prl
-	LIBS += -L$$PROJECT_LIBDIR -l$$qtLibName($$NAME)
-	isEqual(staticlink, 1) {
-		PRE_TARGETDEPS += $$PROJECT_LIBDIR/$$qtStaticLib($$NAME)
-	} else {
-		win32 {
-			PRE_TARGETDEPS += $$PROJECT_LIBDIR/$$qtSharedLib($$NAME, $$LIB_VERSION)
-		} else {
-			PRE_TARGETDEPS += $$PROJECT_LIBDIR/$$qtSharedLib($$NAME)
-			unix: QMAKE_RPATHDIR += $$DESTDIR:$$PROJECT_LIBDIR #executable's dir
-		}
-	}
-} else {
-	#Add your additional configuration first
-	win32: LIBS += -lUser32
-
-
-	#The following may not need to change
-
-	#TEMPLATE = lib
-	VERSION = $$LIB_VERSION
-	TARGET = $$PROJECT_TARGETNAME
-	DESTDIR= $$PROJECT_LIBDIR
-
-	CONFIG *= create_prl #
-	isEqual(staticlink, 1) {
-		CONFIG -= shared dll ##otherwise the following shared is true, why?
-		CONFIG *= staticlib
-	}
-	else {
-		DEFINES += Q_DLL_LIBRARY #win32-msvc*
-		CONFIG *= shared #shared includes dll
-	}
-
-	shared {
-		DLLDESTDIR = ../bin #copy shared lib there
-		CONFIG(release, debug|release):
-			!isEmpty(QMAKE_STRIP): QMAKE_POST_LINK = -$$QMAKE_STRIP $$PROJECT_LIBDIR/$$qtSharedLib($$NAME)
-
-		#copy from the pro creator creates.
-		symbian {
-			MMP_RULES += EXPORTUNFROZEN
-			TARGET.UID3 = 0xE4CC8061
-			TARGET.CAPABILITY =
-			TARGET.EPOCALLOWDLLDATA = 1
-			addFiles.sources = $$qtSharedLib($$NAME, $$LIB_VERSION)
-			addFiles.path = !:/sys/bin
-			DEPLOYMENT += addFiles
-		}
-	}
-	unix:!symbian {
-		maemo5 {
-			target.path = /opt/usr/lib
-		} else {
-			target.path = /usr/lib
-		}
-		INSTALLS += target
-	}
-
-}
-
-unset(LIB_VERSION)
-unset(PROJECT_SRCPATH)
-unset(PROJECT_LIBDIR)
-unset(PROJECT_TARGETNAME)
-unset(staticlink)
diff --git a/3rdparty/QDeviceWatcher/libQDeviceWatcher.pro b/3rdparty/QDeviceWatcher/libQDeviceWatcher.pro
deleted file mode 100644
index e497760..0000000
--- a/3rdparty/QDeviceWatcher/libQDeviceWatcher.pro
+++ /dev/null
@@ -1,27 +0,0 @@
-TEMPLATE = lib
-QT -= gui
-CONFIG *= qdevicewatcher-buildlib
-
-!include(libQDeviceWatcher.pri): error(could not find ibQDeviceWatcher.pri)
-
-#src
-unix:  SOURCES += qdevicewatcher_linux.cpp
-win32 {
-	wince*: SOURCES += qdevicewatcher_wince.cpp
-	else:  SOURCES += qdevicewatcher_win32.cpp
-}
-macx {
-    LIBS += -framework DiskArbitration -framework Foundation
-}
-
-SOURCES += qdevicewatcher.cpp \
-	qdevicechangeevent.cpp \
-    qdevicewatcher_mac.cpp
-
-HEADERS += \
-	qdevicewatcher_p.h \
-	qdevicewatcher.h \
-	qdevicechangeevent.h \
-	qdevicewatcher_global.h
-
-
diff --git a/3rdparty/QDeviceWatcher/qdevicechangeevent.cpp b/3rdparty/QDeviceWatcher/qdevicechangeevent.cpp
deleted file mode 100644
index 6c2b1d7..0000000
--- a/3rdparty/QDeviceWatcher/qdevicechangeevent.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/******************************************************************************
-	QDeviceChangeEvent: Device change event
-	Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-
-	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.
-******************************************************************************/
-
-#include "qdevicechangeevent.h"
-
-//const QEvent::Type  QDeviceChangeEvent::EventType = static_cast<QEvent::Type>(QEvent::registerEventType());
-QDeviceChangeEvent::QDeviceChangeEvent(Action action, const QString &device) :
-	QEvent(registeredType())
-{
-	m_action = action;
-	m_device = device;
-}
-
diff --git a/3rdparty/QDeviceWatcher/qdevicechangeevent.h b/3rdparty/QDeviceWatcher/qdevicechangeevent.h
deleted file mode 100644
index a39f538..0000000
--- a/3rdparty/QDeviceWatcher/qdevicechangeevent.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/******************************************************************************
-    QDeviceChangeEvent: Device change event
-    Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    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.
-******************************************************************************/
-
-#ifndef QDEVICECHANGEEVENT_H
-#define QDEVICECHANGEEVENT_H
-
-#include <QEvent>
-#include <QString>
-#include "qdevicewatcher_global.h"
-
-class Q_DLL_EXPORT QDeviceChangeEvent : public QEvent
-{
-public:
-    enum Action { Add, Remove, Change};
-    //static const Type EventType; //VC link error
-
-    explicit QDeviceChangeEvent(Action action, const QString& device);
-
-    Action action() const {return m_action;}
-    QString device() const {return m_device;}
-    static Type registeredType()
-    {
-        static Type EventType = static_cast<Type>(registerEventType());
-        return EventType;
-    }
-
-private:
-    Action m_action;
-    QString m_device;
-};
-
-#endif // QDEVICECHANGEEVENT_H
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher.cpp b/3rdparty/QDeviceWatcher/qdevicewatcher.cpp
deleted file mode 100644
index 7d4ac8c..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/******************************************************************************
-	QDeviceWatcher: Device watcher class
-	Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-
-	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.
-******************************************************************************/
-
-#include "qdevicewatcher.h"
-#include "qdevicewatcher_p.h"
-
-QDeviceWatcher::QDeviceWatcher(QObject* parent)
-	:QObject(parent),running(false),d_ptr(new QDeviceWatcherPrivate)
-{
-	Q_D(QDeviceWatcher);
-	d->setWatcher(this);
-}
-
-QDeviceWatcher::~QDeviceWatcher()
-{
-	if (d_ptr) {
-		delete d_ptr;
-		d_ptr = NULL;
-	}
-}
-
-bool QDeviceWatcher::start()
-{
-	Q_D(QDeviceWatcher);
-	if (!d->start()) {
-		stop();
-		running = false;
-	}
-	running = true;
-	return running;
-}
-
-bool QDeviceWatcher::stop()
-{
-	Q_D(QDeviceWatcher);
-	running = !d->stop();
-	return !running;
-}
-
-bool QDeviceWatcher::isRunning() const
-{
-	return running;
-}
-
-void QDeviceWatcher::appendEventReceiver(QObject *receiver)
-{
-	Q_D(QDeviceWatcher);
-	d->event_receivers.append(receiver);
-}
-
-void QDeviceWatcherPrivate::emitDeviceAdded(const QString &dev)
-{
-	if (!QMetaObject::invokeMethod(watcher, "deviceAdded", Q_ARG(QString, dev)))
-		qWarning("invoke deviceAdded failed");
-}
-
-void QDeviceWatcherPrivate::emitDeviceChanged(const QString &dev)
-{
-	if (!QMetaObject::invokeMethod(watcher, "deviceChanged", Q_ARG(QString, dev)))
-		qWarning("invoke deviceChanged failed");
-}
-
-void QDeviceWatcherPrivate::emitDeviceRemoved(const QString &dev)
-{
-	if (!QMetaObject::invokeMethod(watcher, "deviceRemoved", Q_ARG(QString, dev)))
-		qWarning("invoke deviceRemoved failed");
-}
-
-void QDeviceWatcherPrivate::emitDeviceAction(const QString &dev, const QString &action)
-{
-	QString a(action.toLower());
-	if (a == QLatin1String("add"))
-		emitDeviceAdded(dev);
-	else if (a == QLatin1String("remove"))
-		emitDeviceRemoved(dev);
-	else if (a == QLatin1String("change"))
-		emitDeviceChanged(dev);
-}
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher.h b/3rdparty/QDeviceWatcher/qdevicewatcher.h
deleted file mode 100644
index 1509c8a..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/******************************************************************************
-	QDeviceWatcher: Device watcher class
-	Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-
-	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.
-******************************************************************************/
-
-#ifndef QUSBWATCHER_H
-#define QUSBWATCHER_H
-
-#include <QtCore/QObject>
-#include "qdevicewatcher_global.h"
-
-class QDeviceWatcherPrivate;
-
-class Q_DLL_EXPORT QDeviceWatcher : public QObject
-{
-	Q_OBJECT
-	Q_DECLARE_PRIVATE(QDeviceWatcher)
-public:
-	explicit QDeviceWatcher(QObject *parent = 0);
-	~QDeviceWatcher();
-
-	bool start();
-	bool stop();
-	bool isRunning() const;
-
-	void appendEventReceiver(QObject* receiver);
-
-signals:
-	void deviceAdded(const QString& dev);
-	void deviceChanged(const QString& dev); //when umounting the device
-	void deviceRemoved(const QString& dev);
-
-protected:
-	bool running;
-	QDeviceWatcherPrivate *d_ptr;
-};
-
-#endif // QUSBWATCHER_H
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_global.h b/3rdparty/QDeviceWatcher/qdevicewatcher_global.h
deleted file mode 100644
index 8b0c14a..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_global.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/******************************************************************************
-	qdevicewatcher_global.h: description
-	Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-
-	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.
-******************************************************************************/
-
-#ifndef QDEVICEWATCHER_GLOBAL_H
-#define QDEVICEWATCHER_GLOBAL_H
-
-#if defined(Q_DLL_LIBRARY)
-#  undef Q_DLL_EXPORT
-#  define Q_DLL_EXPORT Q_DECL_EXPORT
-#else
-#  undef Q_DLL_EXPORT
-#  define Q_DLL_EXPORT //Q_DECL_IMPORT //only for vc?
-#endif
-
-#endif // QDEVICEWATCHER_GLOBAL_H
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_linux.cpp b/3rdparty/QDeviceWatcher/qdevicewatcher_linux.cpp
deleted file mode 100644
index cf48c67..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_linux.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/******************************************************************************
-  QDeviceWatcherPrivate: watching depends on platform
-  Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-
-  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.
-******************************************************************************/
-
-#include "qdevicewatcher_p.h"
-#ifdef Q_OS_LINUX
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <linux/version.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-#else
-
-#endif
-
-#include <sys/un.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <linux/types.h>
-#include <linux/netlink.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <QCoreApplication>
-#include <qregexp.h>
-#if CONFIG_SOCKETNOTIFIER
-#include <QSocketNotifier>
-#elif CONFIG_TCPSOCKET
-#include <QtNetwork/QTcpSocket>
-#endif
-
-#include "qdevicechangeevent.h"
-
-#define UEVENT_BUFFER_SIZE      2048
-
-enum udev_monitor_netlink_group {
-    UDEV_MONITOR_NONE,
-    UDEV_MONITOR_KERNEL,
-    UDEV_MONITOR_UDEV
-};
-
-QDeviceWatcherPrivate::~QDeviceWatcherPrivate()
-{
-    stop();
-    close(netlink_socket);
-    netlink_socket = -1;
-}
-
-bool QDeviceWatcherPrivate::start()
-{
-    if (!init())
-        return false;
-#if CONFIG_SOCKETNOTIFIER
-    socket_notifier->setEnabled(true);
-#elif CONFIG_TCPSOCKET
-    connect(tcp_socket, SIGNAL(readyRead()), SLOT(parseDeviceInfo()));
-#else
-    this->QThread::start();
-#endif
-    return true;
-}
-
-bool QDeviceWatcherPrivate::stop()
-{
-    if (netlink_socket!=-1) {
-#if CONFIG_SOCKETNOTIFIER
-        socket_notifier->setEnabled(false);
-#elif CONFIG_TCPSOCKET
-        //tcp_socket->close(); //how to restart?
-        disconnect(this, SLOT(parseDeviceInfo()));
-#else
-        this->quit();
-#endif
-        close(netlink_socket);
-        netlink_socket = -1;
-    }
-    return true;
-}
-
-
-void QDeviceWatcherPrivate::parseDeviceInfo()
-{//zDebug("%s active", qPrintable(QTime::currentTime().toString()));
-    QByteArray data;
-#if CONFIG_SOCKETNOTIFIER
-    //socket_notifier->setEnabled(false); //for win
-    data.resize(UEVENT_BUFFER_SIZE*2);
-    data.fill(0);
-    size_t len = read(socket_notifier->socket(), data.data(), UEVENT_BUFFER_SIZE*2);
-    //zDebug("read fro socket %d bytes", len);
-    data.resize(len);
-    //socket_notifier->setEnabled(true); //for win
-#elif CONFIG_TCPSOCKET
-    data = tcp_socket->readAll();
-#endif
-    data = data.replace(0, '\n').trimmed(); //In the original line each information is seperated by 0
-    if (buffer.isOpen())
-        buffer.close();
-    buffer.setBuffer(&data);
-    buffer.open(QIODevice::ReadOnly);
-    while(!buffer.atEnd()) { //buffer.canReadLine() always false?
-        parseLine(buffer.readLine().trimmed());
-    }
-    buffer.close();
-
-}
-
-#if CONFIG_THREAD
-//another thread
-void QDeviceWatcherPrivate::run()
-{
-    QByteArray data;
-    //loop only when event happens. because of recv() block the function?
-    while (1) {
-        //char buf[UEVENT_BUFFER_SIZE*2] = {0};
-        //recv(d->netlink_socket, &buf, sizeof(buf), 0);
-        data.resize(UEVENT_BUFFER_SIZE*2);
-        data.fill(0);
-        size_t len = recv(netlink_socket, data.data(), data.size(), 0);
-        //zDebug("read fro socket %d bytes", len);
-        data.resize(len);
-        data = data.replace(0, '\n').trimmed();
-        if (buffer.isOpen())
-            buffer.close();
-        buffer.setBuffer(&data);
-        buffer.open(QIODevice::ReadOnly);
-        QByteArray line = buffer.readLine();
-        while(!line.isNull()) {
-            parseLine(line.trimmed());
-            line = buffer.readLine();
-        }
-        buffer.close();
-    }
-}
-#endif //CONFIG_THREAD
-
-/**
- * Create new udev monitor and connect to a specified event
- * source. Valid sources identifiers are "udev" and "kernel".
- *
- * Applications should usually not connect directly to the
- * "kernel" events, because the devices might not be useable
- * at that time, before udev has configured them, and created
- * device nodes.
- *
- * Accessing devices at the same time as udev, might result
- * in unpredictable behavior.
- *
- * The "udev" events are sent out after udev has finished its
- * event processing, all rules have been processed, and needed
- * device nodes are created.
- **/
-
-bool QDeviceWatcherPrivate::init()
-{
-    struct sockaddr_nl snl;
-    const int buffersize = 16 * 1024 * 1024;
-    int retval;
-
-    memset(&snl, 0x00, sizeof(struct sockaddr_nl));
-    snl.nl_family = AF_NETLINK;
-    snl.nl_pid = getpid();
-    snl.nl_groups = UDEV_MONITOR_KERNEL;
-
-    netlink_socket = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
-    //netlink_socket = socket(PF_NETLINK, SOCK_DGRAM|SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT); //SOCK_CLOEXEC may be not available
-    if (netlink_socket == -1) {
-        qWarning("error getting socket: %s", strerror(errno));
-        return false;
-    }
-
-    /* set receive buffersize */
-    setsockopt(netlink_socket, SOL_SOCKET, SO_RCVBUFFORCE, &buffersize, sizeof(buffersize));
-    retval = bind(netlink_socket, (struct sockaddr*) &snl, sizeof(struct sockaddr_nl));
-    if (retval < 0) {
-        qWarning("bind failed: %s", strerror(errno));
-        close(netlink_socket);
-        netlink_socket = -1;
-        return false;
-    } else if (retval == 0) {
-        //from libudev-monitor.c
-        struct sockaddr_nl _snl;
-        socklen_t _addrlen;
-
-        /*
-         * get the address the kernel has assigned us
-         * it is usually, but not necessarily the pid
-         */
-        _addrlen = sizeof(struct sockaddr_nl);
-        retval = getsockname(netlink_socket, (struct sockaddr *)&_snl, &_addrlen);
-        if (retval == 0)
-            snl.nl_pid = _snl.nl_pid;
-    }
-
-#if CONFIG_SOCKETNOTIFIER
-    socket_notifier = new QSocketNotifier(netlink_socket, QSocketNotifier::Read, this);
-    connect(socket_notifier, SIGNAL(activated(int)), SLOT(parseDeviceInfo())); //will always active
-    socket_notifier->setEnabled(false);
-#elif CONFIG_TCPSOCKET
-    //QAbstractSocket *socket = new QAbstractSocket(QAbstractSocket::UnknownSocketType, this); //will not detect "remove", why?
-    tcp_socket = new QTcpSocket(this); //works too
-    if (!tcp_socket->setSocketDescriptor(netlink_socket, QAbstractSocket::ConnectedState)) {
-        qWarning("Failed to assign native socket to QAbstractSocket: %s", qPrintable(tcp_socket->errorString()));
-        delete tcp_socket;
-        return false;
-    }
-#endif
-    return true;
-}
-
-void QDeviceWatcherPrivate::parseLine(const QByteArray &line)
-{
-    //zDebug("%s", line.constData());
-#define USE_REGEXP 0
-#if USE_REGEXP
-    QRegExp rx("(\\w+)(?:@/.*/block/.*/)(\\w+)\\W*");
-    //QRegExp rx("(add|remove|change)@/.*/block/.*/(\\w+)\\W*");
-    if (rx.indexIn(line) == -1)
-        return;
-    QString action_str = rx.cap(1).toLower();
-    QString dev = "/dev/" + rx.cap(2);
-#else
-    if (!line.contains("/block/")) //hotplug
-        return;
-    QString action_str = line.left(line.indexOf('@')).toLower();
-    QString dev = "/dev/" + line.right(line.length() - line.lastIndexOf('/') - 1);
-#endif //USE_REGEXP
-    QDeviceChangeEvent *event = 0;
-
-    if (action_str==QLatin1String("add")) {
-        emitDeviceAdded(dev);
-        event = new QDeviceChangeEvent(QDeviceChangeEvent::Add, dev);
-    } else if (action_str==QLatin1String("remove")) {
-        emitDeviceRemoved(dev);
-        event = new QDeviceChangeEvent(QDeviceChangeEvent::Remove, dev);
-    } else if (action_str==QLatin1String("change")) {
-        emitDeviceChanged(dev);
-        event = new QDeviceChangeEvent(QDeviceChangeEvent::Change, dev);
-    }
-
-    //zDebug("%s %s", qPrintable(action_str), qPrintable(dev));
-
-    if (event != 0 && !event_receivers.isEmpty()) {
-        foreach(QObject* obj, event_receivers) {
-            QCoreApplication::postEvent(obj, event, Qt::HighEventPriority);
-        }
-    }
-}
-
-#endif //Q_OS_LINUX
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_mac.cpp b/3rdparty/QDeviceWatcher/qdevicewatcher_mac.cpp
deleted file mode 100644
index ceeb49c..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_mac.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "qdevicewatcher_p.h"
-#include <QtCore/QStringList>
-
-#include <CoreServices/CoreServices.h>
-#include <IOKit/storage/IOCDMedia.h>
-#include <IOKit/storage/IODVDMedia.h>
-
-static QStringList sDevices; //disk list, or mount point list?
-
-static void onDiskAppear(DADiskRef disk, void *context)
-{
-    QString disk_name = DADiskGetBSDName(disk);
-    if (sDevices.contains(disk_name))
-        return;
-    sDevices.append(disk_name);
-    QDeviceWatcherPrivate *p = static_cast<QDeviceWatcherPrivate*>(context);
-    p->emitDeviceAdded(disk_name);
-}
-
-static void onDiskDisappear(DADiskRef disk, void *context)
-{
-    QString disk_name = DADiskGetBSDName(disk);
-    sDevices.removeAll(disk_name); //erase?
-    QDeviceWatcherPrivate *p = static_cast<QDeviceWatcherPrivate*>(context);
-    p->emitDeviceRemoved(disk_name);
-}
-
-QDeviceWatcherPrivate::~QDeviceWatcherPrivate()
-{
-    stop();
-}
-
-bool QDeviceWatcherPrivate::start()
-{
-    init();
-    QThread::start();
-}
-
-bool QDeviceWatcherPrivate::stop()
-{
-    mStop = true;
-    wait();
-    //DAUnregisterApprovalCallback
-    DAUnregisterCallback(mSession, (void*)onDiskAppear, this);
-    DAUnregisterCallback(mSession, (void*)onDiskDisappear, this);
-}
-
-
-void QDeviceWatcherPrivate::parseDeviceInfo()
-{
-}
-
-
-bool QDeviceWatcherPrivate::init()
-{
-    //get sDevices
-    //FSGetVolumeInfo()
-    mSession = DASessionCreate(kCFAllocatorDefault);
-
-    DARegisterDiskAppearedCallback(mSession, NULL, onDiskAppear, this);
-    DARegisterDiskDisappearedCallback(mSession, NULL, onDiskDisappear, this);
-
-}
-
-void QDeviceWatcherPrivate::run()
-{
-    mStop = false;
-
-    DASessionScheduleWithRunLoop(mSession, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
-    SInt32 result;
-    do {
-        result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1, true);
-    } while (!mStop && result);
-
-    DASessionUnscheduleFromRunLoop(mSession, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
-}
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_p.h b/3rdparty/QDeviceWatcher/qdevicewatcher_p.h
deleted file mode 100644
index 8f07ace..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_p.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/******************************************************************************
-    QDeviceWatcherPrivate: watching depends on platform
-    Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    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.
-******************************************************************************/
-
-#ifndef QDEVICEWATCHER_P_H
-#define QDEVICEWATCHER_P_H
-
-/*!
-  Usually we use CONFIG_SOCKETNOTIFIER. CONFIG_TCPSOCKET and CONFIG_THREAD are test case
-*/
-#include <qglobal.h>
-#define CONFIG_SOCKETNOTIFIER 1
-#define CONFIG_TCPSOCKET 0  //QtNetwork
-
-#if defined(Q_OS_WINCE)
-#define CONFIG_THREAD 1
-#elif defined(Q_OS_LINUX)
-#define CONFIG_THREAD (!CONFIG_SOCKETNOTIFIER && !CONFIG_TCPSOCKET)
-#elif defined Q_OS_MAC //OSX or MACX
-#define CONFIG_THREAD 1
-#include <DiskArbitration/DiskArbitration.h>
-#else
-#define CONFIG_THREAD 0
-#endif
-
-//#define QT_NO_DEBUG_OUTPUT 0
-#define CONFIG_DEBUG 1
-#if CONFIG_DEBUG
-#define zDebug(fmt, ...) qDebug("%s: "#fmt, __FUNCTION__, ##__VA_ARGS__)
-#else
-#define zDebug(fmt, ...)
-#endif //CONFIG_DEBUG
-
-#ifdef Q_OS_WIN
-#include <qt_windows.h>
-#else
-#include <QBuffer>
-#endif //Q_OS_WIN
-#include <QList>
-#include <QThread>
-
-class QDeviceWatcher;
-class QDeviceWatcherPrivate
-#if CONFIG_THREAD
-        : public QThread
-#else
-        : public QObject
-#endif //CONFIG_THREAD
-{
-    Q_OBJECT
-public:
-    QDeviceWatcherPrivate(QObject *parent = 0) :
-#if CONFIG_THREAD
-    QThread(parent)
-#else
-    QObject(parent)
-#endif //CONFIG_THREAD
-    {
-        //init();
-    }
-    ~QDeviceWatcherPrivate();
-
-    void setWatcher(QDeviceWatcher *w) {watcher=w;}
-    bool start(); //conflict with QThread::start()
-    bool stop();
-
-    //Do not use Qt::DirectConnection. this thread is not watcher's thread!
-    void emitDeviceAdded(const QString& dev);
-    void emitDeviceChanged(const QString& dev); //Linux: when umounting the device
-    void emitDeviceRemoved(const QString& dev);
-    void emitDeviceAction(const QString& dev, const QString& action);
-
-    QList<QObject*> event_receivers;
-
-private slots:
-    void parseDeviceInfo();
-
-private:
-    QDeviceWatcher *watcher;
-
-    bool init();
-#if CONFIG_THREAD
-    virtual void run();
-#endif //CONFIG_THREAD
-#if defined(Q_OS_LINUX)
-    QBuffer buffer;
-    void parseLine(const QByteArray& line);
-# if CONFIG_TCPSOCKET
-    class QTcpSocket *tcp_socket;
-# elif CONFIG_SOCKETNOTIFIER
-    class QSocketNotifier *socket_notifier;
-# endif
-
-    QString bus_name;
-    int netlink_socket;
-#elif defined(Q_OS_WIN32)
-    HWND hwnd;
-#elif defined(Q_OS_WINCE)
-    HANDLE mQueueHandle;
-    HANDLE mNotificationHandle;
-#endif
-#ifdef Q_OS_MAC
-    volatile bool mStop;
-    DASessionRef mSession;
-#endif //Q_OS_MAC
-};
-
-
-#endif // QDEVICEWATCHER_P_H
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_win32.cpp b/3rdparty/QDeviceWatcher/qdevicewatcher_win32.cpp
deleted file mode 100644
index f7d5aaf..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_win32.cpp
+++ /dev/null
@@ -1,385 +0,0 @@
-/******************************************************************************
-	QDeviceWatcherPrivate: watching depends on platform
-	Copyright (C) 2011 Wang Bin <wbsecg1 at gmail.com>
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-
-	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.
-******************************************************************************/
-
-
-#include "qdevicewatcher_p.h"
-
-//TODO: If wince works, use Q_OS_WIN
-#ifdef Q_OS_WIN32
-#include <QtCore/QStringList>
-#include <QtCore/QCoreApplication>
-
-#include "qdevicechangeevent.h"
-
-#undef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
-#include <dbt.h>
-
-#ifndef DBT_CUSTOMEVENT
-#  define DBT_CUSTOMEVENT 0x8006
-#endif
-
-#define CONFIG_NOTIFICATION 0
-
-/*
- *http://www.codeproject.com/Articles/14500/Detecting-Hardware-Insertion-and-or-Removal
- *http://blog.csdn.net/sxbluebird/article/details/2445145
-*/
-#if CONFIG_NOTIFICATION
-static HDEVNOTIFY hDevNotify = 0;
-#define HID_CLASSGUID {0x4d1e55b2, 0xf16f, 0x11cf,{ 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}}
-static const GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, 0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 };
-static const GUID GUID_DEVINTERFACE_USBSTOR = { 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
-static const GUID InterfaceClassGuid = GUID_DEVINTERFACE_USBSTOR;//(GUID)HID_CLASSGUID; //GUID_DEVINTERFACE_USBSTOR
-#endif //CONFIG_NOTIFICATION
-
-Q_CORE_EXPORT HINSTANCE qWinAppInst();
-
-static inline QStringList drivesFromMask(quint32 driveBits) //driveBits ->unitmask
-{
-		QStringList ret;
-#if 1  //a disk with multiple partitions removed
-		char driveName[] = "A:/";
-		driveBits &= 0x3ffffff;
-		while (driveBits) {
-			if (driveBits & 0x1)
-				ret.append(QString::fromLatin1(driveName));
-			++driveName[0];
-			driveBits >>= 1;
-		}
-		return ret;
-#else
-		char i = 0;
-		for (; i<26; ++i) {
-			if (driveBits & 0x1)
-				break;
-			driveBits >>= 1;
-		}
-		QChar c(i + 'A');
-		return ret << QString(c) + ":";
-#endif
-}
-
-void static UpdateDevice(PDEV_BROADCAST_DEVICEINTERFACE pDevInf, WPARAM wParam)
-{
-/*
-	// dbcc_name:
-	// \\?\USB#Vid_04e8&Pid_503b#0002F9A9828E0F06#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
-	// convert to
-	// USB\Vid_04e8&Pid_503b\0002F9A9828E0F06
-	ASSERT(lstrlen(pDevInf->dbcc_name) > 4);
-	wchar_t *szDevId = pDevInf->dbcc_name+4;
-	int idx = szDevId.ReverseFind(_T('#'));
-	ASSERT( -1 != idx );
-	szDevId.Truncate(idx);
-	szDevId.Replace(_T('#'), _T('\\'));
-	szDevId.MakeUpper();
-
-	CString szClass;
-	idx = szDevId.Find(_T('\\'));
-	ASSERT(-1 != idx );
-	szClass = szDevId.Left(idx);
-
-	// if we are adding device, we only need present devices
-	// otherwise, we need all devices
-	DWORD dwFlag = DBT_DEVICEARRIVAL != wParam
-		? DIGCF_ALLCLASSES : (DIGCF_ALLCLASSES | DIGCF_PRESENT);
-	HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, szClass, NULL, dwFlag);
-	if( INVALID_HANDLE_VALUE == hDevInfo )
-	{
-		zDebug("SetupDiGetClassDevs(): " + _com_error(GetLastError()).ErrorMessage());
-		return;
-	}
-
-	SP_DEVINFO_DATA* pspDevInfoData = (SP_DEVINFO_DATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(SP_DEVINFO_DATA));
-	pspDevInfoData->cbSize = sizeof(SP_DEVINFO_DATA);
-	for(int i=0; SetupDiEnumDeviceInfo(hDevInfo,i,pspDevInfoData); ++i) {
-		DWORD DataT ;
-		DWORD nSize=0 ;
-		TCHAR buf[MAX_PATH];
-		if (!SetupDiGetDeviceInstanceId(hDevInfo, pspDevInfoData, buf, sizeof(buf), &nSize)) {
-			zDebug("SetupDiGetDeviceInstanceId(): " + _com_error(GetLastError()).ErrorMessage());
-			break;
-		}
-
-		if (szDevId == buf) {
-			// device found
-			if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData,
-				SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &nSize)) {
-				// do nothing
-			} else if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData,
-				SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize)) {
-				// do nothing
-			} else {
-				lstrcpy(buf, _T("Unknown"));
-			}
-			// update UI
-			break;
-		}
-	}
-
-	if (pspDevInfoData)
-		HeapFree(GetProcessHeap(), 0, pspDevInfoData);
-	SetupDiDestroyDeviceInfoList(hDevInfo);
-*/
-}
-
-/*
- http://msdn.microsoft.com/en-us/library/windows/desktop/aa363246%28v=vs.85%29.aspx
-typedef struct _DEV_BROADCAST_HDR {
-  DWORD dbch_size;
-  DWORD dbch_devicetype;
-  DWORD dbch_reserved;
-} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
-
-dbch_size:
-	The size of this structure, in bytes.
-	If this is a user-defined event, this member must be the size of this header, plus the size of the variable-length data in the _DEV_BROADCAST_USERDEFINED structure.
-dbch_devicetype:
-	The device type, which determines the event-specific information that follows the first three members. This member can be one of the following values.
-	Value	Meaning
-	DBT_DEVTYP_DEVICEINTERFACE 0x00000005
-	Class of devices. This structure is a DEV_BROADCAST_DEVICEINTERFACE structure.
-	DBT_DEVTYP_HANDLE 0x00000006
-	File system handle. This structure is a DEV_BROADCAST_HANDLE structure.
-	DBT_DEVTYP_OEM 0x00000000
-	OEM- or IHV-defined device type. This structure is a DEV_BROADCAST_OEM structure.
-	DBT_DEVTYP_PORT 0x00000003
-	Port device (serial or parallel). This structure is a DEV_BROADCAST_PORT structure.
-	DBT_DEVTYP_VOLUME 0x00000002
-	Logical volume. This structure is a DEV_BROADCAST_VOLUME structure.
-dbch_reserved:
-	Reserved; do not use.
-WM_DEVICECHANGE限制:
-1 只有顶层窗体的程序才能收到这个消息
-2 仅仅串口、磁盘发生改变,才对每个程序广播这个消息
-*/
-LRESULT CALLBACK dw_internal_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-	if (message == WM_DEVICECHANGE) {
-		DEV_BROADCAST_HDR *lpdb = (DEV_BROADCAST_HDR *)lParam;
-		zDebug("Device type address: %#x", lpdb);
-		if (lpdb) {
-			if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) {
-				zDebug("DBT_DEVTYP_VOLUME");
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT) {
-				zDebug("DBT_DEVTYP_PORT");
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) {
-				zDebug("DBT_DEVTYP_DEVICEINTERFACE");
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_OEM) {
-				zDebug("DBT_DEVTYP_OEM");
-			} else {
-				zDebug("Unknow device type");
-			}
-		}
-
-		switch (wParam) {
-		case DBT_DEVNODES_CHANGED:
-			zDebug("DBT_DEVNODES_CHANGED message received, no extended info.");
-			break;
-		case DBT_QUERYCHANGECONFIG:
-			zDebug("DBT_QUERYCHANGECONFIG message received, no extended info.");
-			break;
-		case DBT_CONFIGCHANGED:
-			zDebug("DBT_CONFIGCHANGED message received, no extended info.");
-			break;
-		case DBT_CONFIGCHANGECANCELED:
-			zDebug("DBT_CONFIGCHANGECANCELED message received, no extended info.");
-			break;
-
-		case DBT_DEVICEARRIVAL:
-		case DBT_DEVICEQUERYREMOVE:
-		case DBT_DEVICEQUERYREMOVEFAILED:
-		case DBT_DEVICEREMOVEPENDING:
-		case DBT_DEVICEREMOVECOMPLETE:
-			if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) {
-				DEV_BROADCAST_VOLUME *db_volume = (DEV_BROADCAST_VOLUME *)lpdb;
-				QStringList drives = drivesFromMask(db_volume->dbcv_unitmask);
-#ifdef GWLP_USERDATA
-				QDeviceWatcherPrivate *watcher = (QDeviceWatcherPrivate *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
-#else
-				QDeviceWatcherPrivate *watcher = (QDeviceWatcherPrivate *)GetWindowLong(hwnd, GWL_USERDATA);
-#endif
-				QList<QDeviceChangeEvent *> events;
-				QString action_str("add");
-				QDeviceChangeEvent::Action action = QDeviceChangeEvent::Add;
-				if (wParam == DBT_DEVICEARRIVAL) {
-				} else if (wParam == DBT_DEVICEQUERYREMOVE) {
-				} else if (wParam == DBT_DEVICEQUERYREMOVEFAILED) {
-				} else if (wParam == DBT_DEVICEREMOVEPENDING) {
-				} else if (wParam == DBT_DEVICEREMOVECOMPLETE) {
-					action_str = "remove";
-					action = QDeviceChangeEvent::Remove;
-				}
-				foreach (const QString &drive, drives) {
-					if (db_volume->dbcv_flags & DBTF_MEDIA)
-                        zDebug("Drive %c: Media has been removed.", drive.at(0).toLatin1());
-					else if (db_volume->dbcv_flags & DBTF_NET)
-                        zDebug("Drive %c: Network share has been removed.", drive.at(0).toLatin1());
-					else
-                        zDebug("Drive %c: Device has been removed.", drive.at(0).toLatin1());
-					watcher->emitDeviceAction(drive, action_str);
-					if (!watcher->event_receivers.isEmpty())
-						events.append(new QDeviceChangeEvent(action, drive));
-				}
-				if (!events.isEmpty() && !watcher->event_receivers.isEmpty()) {
-					foreach(QObject* obj, watcher->event_receivers) {
-						foreach(QDeviceChangeEvent* event, events) {
-							QCoreApplication::postEvent(obj, event, Qt::HighEventPriority);
-						}
-					}
-				}
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT) {
-				zDebug("DBT_DEVTYP_PORT");
-				PDEV_BROADCAST_PORT pDevPort = (PDEV_BROADCAST_PORT)lpdb;
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) {
-				//RegisterDeviceNotification()
-				zDebug("DBT_DEVTYP_DEVICEINTERFACE");
-				PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;
-				UpdateDevice(pDevInf, wParam);
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_OEM) {
-				zDebug("DBT_DEVTYP_OEM");
-				DEV_BROADCAST_OEM *pDevOem = (DEV_BROADCAST_OEM*)lpdb;
-			} else if (lpdb->dbch_devicetype == DBT_DEVTYP_HANDLE) {
-				zDebug("DBT_DEVTYP_HANDLE");
-				PDEV_BROADCAST_HANDLE pDevHnd = (PDEV_BROADCAST_HANDLE)lpdb;
-			}
-			break;
-		case DBT_DEVICETYPESPECIFIC:
-			zDebug("DBT_DEVICETYPESPECIFIC message received, may contain an extended info.");
-			break;
-		case DBT_CUSTOMEVENT:
-			zDebug("DBT_CUSTOMEVENT message received, contains an extended info.");
-			break;
-		case DBT_USERDEFINED:
-			zDebug("WM_DEVICECHANGE user defined message received, can not handle.");
-			break;
-		default:
-			qWarning("WM_DEVICECHANGE message received, unhandled value %d.", wParam);
-			break;
-		}
-	}
-
-	return DefWindowProc(hwnd, message, wParam, lParam);
-}
-
-static inline QString className()
-{
-	return QLatin1String("QDeviceWatcherPrivateWin32_Internal_Widget") + QString::number(quintptr(dw_internal_proc));
-}
-
-static inline HWND dw_create_internal_window(const void* userData)
-{
-	QString className = ::className();
-	HINSTANCE hi = qWinAppInst();
-
-	WNDCLASS wc;
-	wc.style = 0;
-	wc.lpfnWndProc = dw_internal_proc;
-	wc.cbClsExtra = 0;
-	wc.cbWndExtra = 0;
-	wc.hInstance = hi;
-	wc.hIcon = 0;
-	wc.hCursor = 0;
-	wc.hbrBackground = 0;
-	wc.lpszMenuName = NULL;
-	wc.lpszClassName = reinterpret_cast<LPCSTR>(className.utf16());
-	RegisterClass(&wc);
-
-	HWND hwnd = CreateWindow(wc.lpszClassName,	   // classname
-							 wc.lpszClassName,	   // window name
-							 0,					  // style
-							 0, 0, 0, 0,			 // geometry
-							 0,					  // parent
-							 0,					  // menu handle
-							 hi,					 // application
-							 0);					 // windows creation data.
-	if (!hwnd) {
-		qWarning("QDeviceWatcherPrivate: Failed to create internal window: %d", (int)GetLastError());
-#if CONFIG_NOTIFICATION
-	} else {
-		DEV_BROADCAST_DEVICEINTERFACE NotificationFilter ;
-		ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)) ;
-		NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
-		NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
-		NotificationFilter.dbcc_classguid = InterfaceClassGuid;
-		//3rd param with DEVICE_NOTIFY_ALL_INTERFACE_CLASSES and dbcc_classguid will be ignored
-		//http://msdn.microsoft.com/en-us/library/windows/desktop/aa363431(v=vs.85).aspx
-		hDevNotify = RegisterDeviceNotification(hwnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
-		if (!hDevNotify) {
-			zDebug("");
-		}
-	}
-#else
-	} else if (userData) {
-#ifdef GWLP_USERDATA
-		SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)userData);
-#else
-		SetWindowLong(hwnd, GWL_USERDATA, (LONG)userData);
-#endif
-	}
-#endif //CONFIG_NOTIFICATION
-	return hwnd;
-}
-
-static inline void dw_destroy_internal_window(HWND hwnd)
-{
-	if (hwnd)
-		DestroyWindow(hwnd);
-
-#if CONFIG_NOTIFICATION
-	UnregisterDeviceNotification(hDevNotify);
-#endif
-	UnregisterClass(reinterpret_cast<LPCSTR>(className().utf16()), qWinAppInst());
-}
-
-
-
-QDeviceWatcherPrivate::~QDeviceWatcherPrivate()
-{
-	stop();
-}
-
-bool QDeviceWatcherPrivate::start()
-{
-	init();
-	hwnd = dw_create_internal_window(this);
-
-	if (!hwnd) {
-		dw_destroy_internal_window(hwnd);
-	}
-	return hwnd;
-}
-
-bool QDeviceWatcherPrivate::stop()
-{
-	dw_destroy_internal_window(hwnd);
-	return true;
-}
-
-bool QDeviceWatcherPrivate::init()
-{
-	return true;
-}
-
-void QDeviceWatcherPrivate::parseDeviceInfo()
-{
-}
-
-#endif //Q_OS_WIN32
diff --git a/3rdparty/QDeviceWatcher/qdevicewatcher_wince.cpp b/3rdparty/QDeviceWatcher/qdevicewatcher_wince.cpp
deleted file mode 100644
index 3408b87..0000000
--- a/3rdparty/QDeviceWatcher/qdevicewatcher_wince.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/******************************************************************************
-	qdevicewatcher_wince.cpp: for wince. TO BE TESTED
-	Copyright (C) 2012 Wang Bin <wbsecg1 at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	(at your option) any later version.
-	
-	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.
-******************************************************************************/
-
-/*!
- * http://msdn.microsoft.com/en-us/library/aa447466.aspx
-*/
-#include "qdevicewatcher_p.h"
-
-#ifdef Q_OS_WINCE
-#include <msgqueue.h>
-#include <pnp.h>
-#include <Storemgr.h> //BLOCK_DRIVER_GUID
-#include <QtCore/QCoreApplication>
-#include "qdevicechangeevent.h"
-
-#ifdef UNICODE
-#  if QT_VERSION >= 0x040000
-#    define TCHAR2QString(x) QString::fromUtf16(x)
-#  else
-#    define TCHAR2QString(x) QString::fromUcs2(x)
-#  endif
-#else
-#  define TCHAR2QString(x)	 QString::fromLocal8Bit((x))
-#endif //UNICODE
-
-typedef union {
-	DEVDETAIL d;
-	char pad[sizeof(DEVDETAIL)+MAX_DEVCLASS_NAMELEN]; //BYTE pad[sizeof(DEVDETAIL) + (MAX_PATH * sizeof(TCHAR))];
-} Q_DEVDETAIL;
-
-
-QDeviceWatcherPrivate::~QDeviceWatcherPrivate()
-{
-}
-
-bool QDeviceWatcherPrivate::start()
-{
-	if (!init())
-		return false;
-	this->QThread::start();
-	return true;
-}
-
-
-bool QDeviceWatcherPrivate::stop()
-{
-	quit();
-
-	if (!StopDeviceNotifications(mNotificationHandle)) {
-		qWarning("StopDeviceNotifications() error: %d", GetLastError());
-		return false;
-	}
-	if (!CloseMsgQueue(mQueueHandle)) {
-		qWarning("CloseMsgQueue() error: %d", GetLastError());
-		return false;
-	}
-	return true;
-}
-
-
-bool QDeviceWatcherPrivate::init()
-{
-	MSGQUEUEOPTIONS msgopts;
-
-	msgopts.dwSize = sizeof(MSGQUEUEOPTIONS);
-	msgopts.dwFlags = 0; //MSGQUEUE_VARIABLESIZE | MSGQUEUE_MSGSIZE; /*msdn*/ //MSGQUEUE_NOPRECOMMIT | MSGQUEUE_ALLOW_BROKEN
-	msgopts.dwMaxMessages = 0;
-	msgopts.cbMaxMessage = sizeof(Q_DEVDETAIL);
-	msgopts.bReadAccess = TRUE;
-	msgopts.dwMaxMessages = 0; //?
-	//msgopts.cbMaxMsgQueue = 0; //?
-	//msgopts.dwDesiredAccess = GENERIC_READ;
-	//msgopts.dwShareMode = 0;
-	//msgopts.dwCreationDisposition = CREATE_NEW;
-
-	mQueueHandle = CreateMsgQueue(NULL, &msgopts);
-	if (mQueueHandle == NULL) {
-		qWarning("CreateMsgQueue() error: %d", GetLastError());
-		return false;
-	}
-	mNotificationHandle = RequestDeviceNotifications(&BLOCK_DRIVER_GUID, mQueueHandle, TRUE);
-	if (mNotificationHandle == NULL) {
-		qWarning("RequestDeviceNotifications() error: %d", GetLastError());
-		return false;
-	}
-	return true;
-}
-
-void QDeviceWatcherPrivate::run()
-{
-	DWORD flags;
-	DWORD size;
-	Q_DEVDETAIL detail;
-	SetLastError(0); //?
-	while (true) {
-		if(WaitForSingleObject(mQueueHandle, 3000) == WAIT_OBJECT_0) {
-			while(ReadMsgQueue(mQueueHandle, &detail, sizeof(detail), &size, 1, &flags)) {
-				QString dev = TCHAR2QString(detail.d.szName);
-				QDeviceChangeEvent *event = 0;
-				if (detail.d.fAttached) {
-					emitDeviceAdded(dev);
-					event = new QDeviceChangeEvent(QDeviceChangeEvent::Add, dev);
-				} else {
-					emitDeviceRemoved(dev);
-					event = new QDeviceChangeEvent(QDeviceChangeEvent::Remove, dev);
-				}
-				if (event != 0 && !event_receivers.isEmpty()) {
-					foreach(QObject* obj, event_receivers) {
-						QCoreApplication::postEvent(obj, event, Qt::HighEventPriority);
-					}
-				}
-			}
-		}
-	}
-}
-
-void QDeviceWatcherPrivate::parseDeviceInfo()
-{
-}
-
-#endif //Q_OS_WINCE
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6f7f266..1e2e95b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,8 +21,8 @@ endif(QK_QT5_PORT)
 set(APPLICATION_NAME ${PROJECT_NAME})
 
 set(APPLICATION_VERSION_MAJOR "1")
-set(APPLICATION_VERSION_MINOR "7")
-set(APPLICATION_VERSION_PATCH "7")
+set(APPLICATION_VERSION_MINOR "8")
+set(APPLICATION_VERSION_PATCH "0")
 
 
 add_definitions(-DVER_MAJOR=${APPLICATION_VERSION_MAJOR} -DVER_MINOR=${APPLICATION_VERSION_MINOR} -DVER_STEP=${APPLICATION_VERSION_PATCH})
@@ -94,7 +94,6 @@ endif (NOT QK_QT5_SERIAL_PORT)
 
 add_subdirectory(3rdparty/QZip)
 add_subdirectory(3rdparty/QTextHtmlExporter)
-add_subdirectory(3rdparty/QDeviceWatcher)
 add_subdirectory(3rdparty/getopt)
 add_subdirectory(3rdparty/map2gcm)
 add_subdirectory(3rdparty/map2rmap)
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user
index 367d27b..cfc51c2 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user
@@ -1,8 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.1.1, 2014-07-08T17:53:55. -->
+<!-- Written by QtCreator 3.2.2, 2015-02-09T20:27:14. -->
 <qtcreator>
  <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
+ </data>
+ <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
   <value type="int">0</value>
  </data>
@@ -68,7 +72,6 @@
       <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">-j8</value>
       <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="CMakeProjectManager.MakeStep.Clean">false</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
@@ -84,7 +87,6 @@
       <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">clean</value>
       <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="CMakeProjectManager.MakeStep.Clean">true</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
@@ -431,11 +433,11 @@
   <value type="int">1</value>
  </data>
  <data>
-  <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
-  <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">16</value>
  </data>
  <data>
-  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
-  <value type="int">15</value>
+  <variable>Version</variable>
+  <value type="int">16</value>
  </data>
 </qtcreator>
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user.18
similarity index 98%
copy from CMakeLists.txt.user
copy to CMakeLists.txt.user.18
index 367d27b..c63f47a 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user.18
@@ -1,8 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.1.1, 2014-07-08T17:53:55. -->
+<!-- Written by QtCreator 3.3.0, 2015-01-29T20:40:10. -->
 <qtcreator>
  <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
+ </data>
+ <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
   <value type="int">0</value>
  </data>
@@ -68,7 +72,7 @@
       <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">-j8</value>
       <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="CMakeProjectManager.MakeStep.Clean">false</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
+      <value type="QString" key="CMakeProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
@@ -84,7 +88,7 @@
       <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">clean</value>
       <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="CMakeProjectManager.MakeStep.Clean">true</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
+      <value type="QString" key="CMakeProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
@@ -431,11 +435,11 @@
   <value type="int">1</value>
  </data>
  <data>
-  <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
-  <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">18</value>
  </data>
  <data>
-  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
-  <value type="int">15</value>
+  <variable>Version</variable>
+  <value type="int">18</value>
  </data>
 </qtcreator>
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user.3.2-pre1
similarity index 99%
copy from CMakeLists.txt.user
copy to CMakeLists.txt.user.3.2-pre1
index 367d27b..75b4e3b 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user.3.2-pre1
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.1.1, 2014-07-08T17:53:55. -->
+<!-- Written by QtCreator 3.1.1, 2014-11-09T17:44:53. -->
 <qtcreator>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
diff --git a/changelog.txt b/changelog.txt
index c49e19d..20fb31c 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,18 @@
+--- 2015.02.09 ---
+Routing: Add support for BRouter
+
+Routing: Switch MapQuest to new API version
+
+Routing: Handle multiple legs in MapQuest response
+
+Track: Mark position in the track point table on the on-screen
+
+GeoCache: Fix spoiler download
+
+Grid: Change coordinate format for long/lat grid from dd mm.mm to dd.dddddd
+
+Bug fixes to avoid crashes and GUI quirks
+
 --- 2014.07.08 ---
 LiveLog: Add large data fields
 
diff --git a/nsi/3rdparty.txt b/nsi/3rdparty.txt
index e0b9fd3..bbe67d2 100644
--- a/nsi/3rdparty.txt
+++ b/nsi/3rdparty.txt
@@ -1,7 +1,7 @@
 QLandkarte GT for Windows (short: QLGT) depends on the 3rd party software listed below
 
 See the Wiki on compile instructions:
-https://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=Compiling_QLandkarte_GT_on_Windows
+http://sourceforge.net/p/qlandkartegt/qlandkartegt/Compiling_QLandkarte_GT_on_Windows/
 
 
 1.) Microsoft Visual C++ 2008 SP1 Redistributable Package
diff --git a/nsi/GTinstaller.nsi b/nsi/GTinstaller.nsi
index 24d24b8..a9502bd 100644
--- a/nsi/GTinstaller.nsi
+++ b/nsi/GTinstaller.nsi
@@ -174,7 +174,7 @@ Section "StartMenue" StartMenue
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\QLandkarteGT.lnk" "$INSTDIR\qlandkartegt.exe" "" "$INSTDIR\GlobeWin.ico"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\qlandkarte.org.lnk" "http://www.qlandkarte.org/" "" "$INSTDIR\kfm_home.ico"
-    CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Help.lnk" "https://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=Help_for_QLandkarte_GT" "" "$INSTDIR\khelpcenter.ico"
+    CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Help.lnk" "http://sourceforge.net/p/qlandkartegt/qlandkartegt/QLandkarte_GT/" "" "$INSTDIR\khelpcenter.ico"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Download.lnk" "http://sourceforge.net/projects/qlandkartegt/" "" "$INSTDIR\kget.ico"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GDAL.lnk" %COMSPEC% "/k $\"$INSTDIR\gdal.bat$\""
    !insertmacro MUI_STARTMENU_WRITE_END
diff --git a/nsi/copyfiles.bat b/nsi/copyfiles.bat
index 02042b0..2201ebc 100644
--- a/nsi/copyfiles.bat
+++ b/nsi/copyfiles.bat
@@ -6,9 +6,9 @@ rem http://technet.microsoft.com/en-us/library/bb491035.aspx
 rem http://vlaurie.com/computers2/Articles/environment.htm
 
 rem Section 1.) Define path to Qt, MSVC, .... installations
-set QLGTI_QT_PATH=C:\Qt\4.8.3
-set QLGTI_VCREDIST_PATH="E:\qlgt\tools\vcredist_VS2008SP1"
-set QLGTI_LIBEXIF_PATH="E:\qlgt\tools\libexif"
+set QLGTI_QT_PATH=C:\Qt\4.8.5
+set QLGTI_VCREDIST_PATH="D:\qlgt\tools\vcredist_VS2008SP1"
+set QLGTI_LIBEXIF_PATH="D:\qlgt\tools\libexif"
 set QLGTI_GDAL_PATH="%CD%\..\Win32\gdal\bin"
 
 rem Section 2.) Copy Files
diff --git a/src/CCanvas.cpp b/src/CCanvas.cpp
index 520ab9b..faa0e47 100644
--- a/src/CCanvas.cpp
+++ b/src/CCanvas.cpp
@@ -893,11 +893,13 @@ void CCanvas::mouseMoveEventCoord(QMouseEvent * e)
 
         if(isLonLat)
         {
-            QString str;
+            QString lat,lng;
             x_m *= RAD_TO_DEG;
             y_m *= RAD_TO_DEG;
-            GPS_Math_Deg_To_Str(x_m,y_m, str);
-            info += tr("[Grid: %1] ").arg(str);
+            lat = y_m < 0 ? "S" : "N";
+            lng = x_m < 0 ? "W" : "E";
+            info += tr("[Grid: %1%2%5 %3%4%5] ").arg(lat).arg(qAbs(y_m), 0, 'f', 6).arg(lng).arg(qAbs(x_m), 0, 'f', 6).arg(QChar('\260'));
+
         }
         else
         {
@@ -979,6 +981,29 @@ void CCanvas::slotPointOfFocus(const int idx)
 }
 
 
+void CCanvas::slotProfileChanged()
+{
+    CTrack * track = CTrackDB::self().highlightedTrack();
+    if(track == 0)
+    {
+        return;
+    }
+
+    QList<QPointF> focusElev;
+    float basefactor = IUnit::self().basefactor;
+
+    foreach(const CTrack::pt_t trkpt, track->getTrackPoints())
+    {
+        if(trkpt.flags & CTrack::pt_t::eFocus)
+        {
+            focusElev << QPointF(trkpt.distance, trkpt.ele * basefactor);
+            break;
+        }
+    }
+    profile->newFocus(focusElev);
+}
+
+
 void CCanvas::slotHighlightTrack(CTrack * track)
 {
     if(track && CResources::self().showTrackProfilePreview())
@@ -1018,13 +1043,15 @@ void CCanvas::slotHighlightTrack(CTrack * track)
         profile->show();
         disconnect(profile, SIGNAL(sigClicked()), CTrackDB::self().getToolWidget(), SLOT(slotShowProfile()));
         connect(profile, SIGNAL(sigClicked()), CTrackDB::self().getToolWidget(), SLOT(slotShowProfile()));
-
+        disconnect(&CTrackDB::self(),SIGNAL(sigNeedUpdate(const QString&)),this,SLOT(slotProfileChanged()));
+        connect(&CTrackDB::self(),SIGNAL(sigNeedUpdate(const QString&)),this,SLOT(slotProfileChanged()));
     }
     else
     {
         profile->clear();
         profile->hide();
         disconnect(profile, SIGNAL(sigClicked()), CTrackDB::self().getToolWidget(), SLOT(slotShowProfile()));
+        disconnect(&CTrackDB::self(),SIGNAL(sigNeedUpdate(const QString&)),this,SLOT(slotProfileChanged()));
     }
     update();
 }
diff --git a/src/CCanvas.h b/src/CCanvas.h
index 8349ce3..3079c0f 100644
--- a/src/CCanvas.h
+++ b/src/CCanvas.h
@@ -148,6 +148,7 @@ class CCanvas : public QWidget
         void slotHighlightTrack(CTrack * track);
         void slotTrackChanged();
         void slotPointOfFocus(const int idx);
+        void slotProfileChanged();
         void slotFadingMessage();
         void slotTime();
 
diff --git a/src/CDeviceGarminBulk.cpp b/src/CDeviceGarminBulk.cpp
index 70b5bd4..84d6653 100644
--- a/src/CDeviceGarminBulk.cpp
+++ b/src/CDeviceGarminBulk.cpp
@@ -32,18 +32,12 @@
 #include <QtXml>
 #include <QMessageBox>
 #include <QFileDialog>
-#include <qdevicewatcher.h>
+
 
 CDeviceGarminBulk::CDeviceGarminBulk(QObject * parent)
 : IDevice("Garmin Mass Storage", parent)
 {
-    deviceWatcher = new QDeviceWatcher(this);
-    connect(deviceWatcher, SIGNAL(deviceAdded(QString)), SLOT(slotDevice(QString)));
-    connect(deviceWatcher, SIGNAL(deviceChanged(QString)), SLOT(slotDevice(QString)));
-    connect(deviceWatcher, SIGNAL(deviceRemoved(QString)), SLOT(slotDevice(QString)));
-    deviceWatcher->start();
 
-    qDebug() << "***************************************CDeviceGarminBulk";
 }
 
 
diff --git a/src/CDlgConfig.cpp b/src/CDlgConfig.cpp
index 067d729..588269c 100644
--- a/src/CDlgConfig.cpp
+++ b/src/CDlgConfig.cpp
@@ -54,6 +54,11 @@ CDlgConfig::CDlgConfig(QWidget * parent)
 
     connect(toolPathMapCache, SIGNAL(clicked()), this, SLOT(slotSelectPathMapCache()));
 
+    connect(checkBRouterLocal, SIGNAL(stateChanged(int)), this, SLOT(slotCheckBRouterLocal(int)));
+    connect(toolButtonBRouterProfilePath, SIGNAL(clicked()), this, SLOT(slotSelectPathBRouterProfiles()));
+    connect(pushBRouterDefaultLocal, SIGNAL(clicked()), this, SLOT(slotPushBRouterDefaultLocal()));
+    connect(pushBRouterDefaultOnline, SIGNAL(clicked()), this, SLOT(slotPushBRouterDefaultOnline()));
+
     const char ** tz = tblTimezone;
     while(*tz)
     {
@@ -189,6 +194,13 @@ void CDlgConfig::exec()
         radioTimeZone->setChecked(true);
     }
 
+    lineBRouterHost->setText(resources.m_brouterHost);
+    lineBRouterPort->setText(resources.m_brouterPort);
+    lineBRouterProfiles->setText(resources.m_brouterProfiles);
+    labelBRouterProfiles->setText(resources.m_brouterProfiles);
+    labelBRouterProfilePath->setText(resources.m_brouterProfilePath);
+    checkBRouterLocal->setChecked(resources.m_brouterLocal);
+    slotCheckBRouterLocal(resources.m_brouterLocal ? Qt::Checked : Qt::Unchecked);
 #ifdef QK_QT5_PORT
     return QDialog::exec();
 #else
@@ -300,6 +312,19 @@ void CDlgConfig::accept()
         resources.m_tzMode = resources.eTZSelected;
     }
 
+    resources.m_brouterHost = lineBRouterHost->text();
+    resources.m_brouterPort = lineBRouterPort->text();
+    bool bRouterChanged = resources.m_brouterProfiles.compare(lineBRouterProfiles->text())
+            or resources.m_brouterProfilePath.compare(labelBRouterProfilePath->text())
+            or resources.m_brouterLocal!=checkBRouterLocal->isChecked();
+    resources.m_brouterLocal = checkBRouterLocal->isChecked();
+    resources.m_brouterProfiles = lineBRouterProfiles->text().split(QRegExp("[,;| ]"),QString::SkipEmptyParts).join(",");
+    resources.m_brouterProfilePath = labelBRouterProfilePath->text();
+    if (bRouterChanged)
+    {
+        emit resources.sigBRouterChanged();
+    }
+
     QDialog::accept();
 }
 
@@ -467,3 +492,63 @@ void CDlgConfig::slotSelectPathMapCache()
         labelPathMapCache->setText(path);
     }
 }
+
+void CDlgConfig::slotCheckBRouterLocal(int state)
+{
+    switch(state) {
+    case Qt::Checked:
+    {
+        lineBRouterProfiles->setVisible(false);
+        labelBRouterProfiles->setVisible(true);
+        labelBRouterProfileDir->setVisible(true);
+        toolButtonBRouterProfilePath->setVisible(true);
+        labelBRouterProfilePath->setVisible(true);
+        if (!labelBRouterProfilePath->text().isEmpty())
+        {
+            labelBRouterProfiles->setText(CResources::self().readBRouterProfiles(labelBRouterProfilePath->text()).join(","));
+        }
+        else
+        {
+            labelBRouterProfiles->setText(lineBRouterProfiles->text());
+        }
+        break;
+    }
+    case Qt::Unchecked:
+    {
+        lineBRouterProfiles->setVisible(true);
+        labelBRouterProfiles->setVisible(false);
+        labelBRouterProfileDir->setVisible(false);
+        toolButtonBRouterProfilePath->setVisible(false);
+        labelBRouterProfilePath->setVisible(false);
+        if (!labelBRouterProfiles->text().isEmpty())
+        {
+            lineBRouterProfiles->setText(labelBRouterProfiles->text());
+        }
+        break;
+    }
+    }
+}
+
+void CDlgConfig::slotSelectPathBRouterProfiles()
+{
+    QString path = QFileDialog::getExistingDirectory(this, tr("Open Directory"), labelPathMapCache->text(), QFileDialog::ShowDirsOnly);
+    if(!path.isEmpty())
+    {
+        labelBRouterProfilePath->setText(path);
+        labelBRouterProfiles->setText(CResources::self().readBRouterProfiles(path).join(","));
+    }
+}
+
+void CDlgConfig::slotPushBRouterDefaultOnline()
+{
+    lineBRouterHost->setText(QString("h2096617.stratoserver.net"));
+    lineBRouterPort->setText(QString("443"));
+    lineBRouterProfiles->setText(QString("trekking,fastbike,car-test,safety,shortest,trekking-ignore-cr,trekking-steep,trekking-noferries,trekking-nosteps,moped,rail,river,vm-forum-liegerad-schnell,vm-forum-velomobil-schnell"));
+}
+
+void CDlgConfig::slotPushBRouterDefaultLocal()
+{
+    lineBRouterHost->setText(QString("127.0.0.1"));
+    lineBRouterPort->setText(QString("17777"));
+    lineBRouterProfiles->setText(QString("car-test,fastbike,moped,shortest,trekking"));
+}
diff --git a/src/CDlgConfig.h b/src/CDlgConfig.h
index dc144ec..134d0da 100644
--- a/src/CDlgConfig.h
+++ b/src/CDlgConfig.h
@@ -44,6 +44,10 @@ class CDlgConfig : public QDialog, private Ui::IDlgConfig
         void slotSetupGarminIcons();
         void slotSelectPathGeoDB();
         void slotSelectPathMapCache();
+        void slotCheckBRouterLocal(int state);
+        void slotSelectPathBRouterProfiles();
+        void slotPushBRouterDefaultOnline();
+        void slotPushBRouterDefaultLocal();
 
     private:
         void fillTypeCombo();
diff --git a/src/CDlgEditWpt.cpp b/src/CDlgEditWpt.cpp
index 8a1561d..9191e7a 100644
--- a/src/CDlgEditWpt.cpp
+++ b/src/CDlgEditWpt.cpp
@@ -697,12 +697,25 @@ void CDlgEditWpt::slotRequestFinished(QNetworkReply * reply)
 
     if(pendingRequests.contains(reply))
     {
-        CWpt::image_t img;
-        img.info = pendingRequests.take(reply);
-        img.pixmap.loadFromData(reply->readAll());
-        wpt.images.push_back(img);
-        showImage(wpt.images.count() - 1);
-        pushDel->setEnabled(true);
+
+        QString info = pendingRequests.take(reply);
+
+        if(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 301)
+        {
+            QNetworkRequest request;
+            request.setUrl(reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl());
+            pendingRequests[networkAccessManager->get(request)] = info;
+        }
+        else if(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200)
+        {
+            QByteArray data = reply->readAll();
+            CWpt::image_t img;
+            img.info = info;
+            img.pixmap.loadFromData(data);
+            wpt.images.push_back(img);
+            showImage(wpt.images.count() - 1);
+            pushDel->setEnabled(true);
+        }
 
         if(pendingRequests.isEmpty())
         {
@@ -715,6 +728,12 @@ void CDlgEditWpt::slotRequestFinished(QNetworkReply * reply)
     QString asw = reply->readAll();
     reply->deleteLater();
 
+    static int cnt = 0;
+    QFile f(QString("test%1.html").arg(cnt++));
+    f.open(QIODevice::WriteOnly);
+    f.write(asw.toUtf8(), asw.size());
+    f.close();
+
     if(asw.isEmpty())
     {
         return;
diff --git a/src/CGpx.cpp b/src/CGpx.cpp
index 4e260c2..34b021d 100644
--- a/src/CGpx.cpp
+++ b/src/CGpx.cpp
@@ -67,7 +67,7 @@ CGpx::CGpx(QObject * parent, exportMode_e mode)
     for (int i=0;;++i)
     {
         QColor trackColor = CTrack::lineColors[i];
-        QString colorName = colorMap.left(trackColor);
+        QString colorName = colorMap.key(trackColor);
         if (!colorName.isEmpty()) trackColorMap.insert(colorName, i);
         if (trackColor == Qt::transparent) break;
     }
@@ -80,13 +80,13 @@ CGpx::~CGpx()
 }
 
 
-const Dictionary<QString, QColor>& CGpx::getColorMap() const
+const QMap<QString, QColor>& CGpx::getColorMap() const
 {
     return colorMap;
 }
 
 
-const Dictionary<QString, int>& CGpx::getTrackColorMap() const
+const QMap<QString, int>& CGpx::getTrackColorMap() const
 {
     return trackColorMap;
 }
diff --git a/src/CGpx.h b/src/CGpx.h
index a9908c3..0f4920a 100644
--- a/src/CGpx.h
+++ b/src/CGpx.h
@@ -24,8 +24,6 @@
 #include <QString>
 #include <QtXml/QDomDocument>
 
-#include "Dictionary.h"
-
 /// handle geo data from GPX files
 class CGpx : public QObject, public QDomDocument
 {
@@ -68,10 +66,11 @@ class CGpx : public QObject, public QDomDocument
         void save(const QString& filename);
         void makeExtensions();
 
-        static QMap<QString,QDomElement> mapChildElements(const QDomNode& parent);
+        static QMap<QString,QDomElement> mapChildElements(const QDomNode&
+                                                          parent);
 
-        const Dictionary<QString, QColor>& getColorMap() const;
-        const Dictionary<QString, int>& getTrackColorMap() const;
+        const QMap<QString, QColor>& getColorMap() const;
+        const QMap<QString, int>& getTrackColorMap() const;
 
         QDomElement &getExtensions() { return extensions; }
         gpx_version version() { return file_version; }
@@ -80,8 +79,8 @@ class CGpx : public QObject, public QDomDocument
     protected:
         void writeMetadata();
 
-        Dictionary<QString, QColor> colorMap;
-        Dictionary<QString, int> trackColorMap;
+        QMap<QString, QColor> colorMap;
+        QMap<QString, int> trackColorMap;
 
     private:
         QDomElement extensions;
diff --git a/src/CMainWindow.cpp b/src/CMainWindow.cpp
index d966183..03feac3 100644
--- a/src/CMainWindow.cpp
+++ b/src/CMainWindow.cpp
@@ -1540,13 +1540,13 @@ void CMainWindow::slotTabCloseRequest(int i)
 
 void CMainWindow::slotFAQ()
 {
-    QDesktopServices::openUrl(QUrl("http://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=FAQ"));
+    QDesktopServices::openUrl(QUrl("http://sourceforge.net/p/qlandkartegt/qlandkartegt/FAQ/"));
 }
 
 
 void CMainWindow::slotHelp()
 {
-    QDesktopServices::openUrl(QUrl("http://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=QLandkarte_GT"));
+    QDesktopServices::openUrl(QUrl("http://sourceforge.net/p/qlandkartegt/qlandkartegt/QLandkarte_GT/"));
 }
 
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0a5d16e..125256d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -463,7 +463,6 @@ set(qlandkarte_HDRS
     CImageViewer.h
     CMapRmp.h
     CMapDEMSlopeSetup.h
-    Dictionary.h
     QFileExt.h
     IExchange.h
     CExchangeGarmin.h
@@ -672,7 +671,7 @@ endif(UNIX)
 set(qlandkarte_include_dirs
   ${CMAKE_BINARY_DIR}
   ${CMAKE_CURRENT_BINARY_DIR}
-  ${OPENGL_INCLUDE_DIRS}
+  ${OPENGL_INCLUDE_DIR}
   ${GDAL_INCLUDE_DIRS}
   ${PROJ_INCLUDE_DIRS}
   ${QT_QTXML_INCLUDE_DIR}
@@ -747,7 +746,7 @@ if (APPLE)
   add_executable(${PROGNAME} MACOSX_BUNDLE ${qlandkarte_ALLINP} ${MAC_EXTRA_RES})
   set_target_properties(${PROGNAME} PROPERTIES
         MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/MacOSX/Info.plist.in
-        LINK_FLAGS "-framework CoreFoundation"
+        LINK_FLAGS "-framework CoreFoundation -framework DiskArbitration"
   )
 
   add_custom_target(mac-deploy macdeployqt "${MAC_BUNDLE_PATH}"
@@ -800,7 +799,6 @@ set(qlandkarte_link_libs
     ${GPSD_LIBRARIES}
     qzip
     qtexthtmlexporter
-    qdevicewatcher
     getopt
     ${QTSOAP_LIBRARIES}
     ${PROFILING_LIBRARIES}
diff --git a/src/CMapTDB.cpp b/src/CMapTDB.cpp
index 594db56..51123b0 100644
--- a/src/CMapTDB.cpp
+++ b/src/CMapTDB.cpp
@@ -3000,7 +3000,7 @@ void CMapTDB::drawPois(QPainter& p, pointtype_t& pts, QVector<QRect>& rectPois)
 void CMapTDB::drawLabels(QPainter& p, const QVector<strlbl_t> &lbls)
 {
     QFont f = CResources::self().getMapFont();
-    QVector<QFont> fonts(5, f);
+    QVector<QFont> fonts(8, f);
     fonts[IGarminTyp::eSmall].setPointSize(f.pointSize() - 2);
     fonts[IGarminTyp::eLarge].setPointSize(f.pointSize() + 2);
 
diff --git a/src/CMouseMoveMap.cpp b/src/CMouseMoveMap.cpp
index e732be1..6b6cc88 100644
--- a/src/CMouseMoveMap.cpp
+++ b/src/CMouseMoveMap.cpp
@@ -421,6 +421,9 @@ void CMouseMoveMap::slotDeleteWpt()
 
     CWpt * selWpt = selWpts.first().wpt;
     QString key = selWpt->getKey();
+
+    selWpts.clear();
+
     CWptDB::self().delWpt(key);
 }
 
diff --git a/src/CPlot.cpp b/src/CPlot.cpp
index 97580ec..3192d43 100644
--- a/src/CPlot.cpp
+++ b/src/CPlot.cpp
@@ -155,13 +155,20 @@ void CPlot::newLine(const QPolygonF& line, const QList<QPointF>& focus, const QS
     l.points    = line;
     l.label     = label;
 
-    m_pData->focus = focus;
     m_pData->badData = false;
     m_pData->lines << l;
     setSizes();
     m_pData->x().setScale( rectGraphArea.width() );
     m_pData->y().setScale( rectGraphArea.height() );
 
+    newFocus(focus);
+
+}
+
+void CPlot::newFocus(const QList<QPointF>& focus)
+{
+    m_pData->focus = focus;
+
     idxHighlight1 = -1;
     idxHighlight2 = -1;
 
@@ -201,7 +208,6 @@ void CPlot::newLine(const QPolygonF& line, const QList<QPointF>& focus, const QS
 
 }
 
-
 void CPlot::addLine(const QPolygonF& line, const QString& label)
 {
     QRectF r = line.boundingRect();
diff --git a/src/CPlot.h b/src/CPlot.h
index f5efae0..0fe9997 100644
--- a/src/CPlot.h
+++ b/src/CPlot.h
@@ -42,8 +42,9 @@ class CPlot : public QWidget
 
         void setSelTrackPoint(CTrack::pt_t * pt){selTrkPt = pt;}
 
-        void newLine(const QPolygonF& line, const QList<QPointF> &focus, const QString& label);
+        void newLine(const QPolygonF& line, const QList<QPointF>& focus, const QString& label);
         void addLine(const QPolygonF& line, const QString& label);
+        void newFocus(const QList<QPointF>& focus);
         void newMarks(const QPolygonF& line);
         void addTag(CPlotData::point_t& tag);
         void setLimits();
diff --git a/src/CResources.cpp b/src/CResources.cpp
index 65d9f32..ca0b069 100644
--- a/src/CResources.cpp
+++ b/src/CResources.cpp
@@ -85,6 +85,11 @@ CResources::CResources(QObject * parent)
 , m_expireMapCache(8)
 , m_tzMode(eTZAuto)
 , m_timezone("UTC")
+// BRouter service being used by http://brouter.de/brouter-web
+, m_brouterHost("h2096617.stratoserver.net")
+, m_brouterPort("443")
+, m_brouterProfiles("trekking,fastbike,car-test,safety,shortest,trekking-ignore-cr,trekking-steep,trekking-noferries,trekking-nosteps,moped,rail,river,vm-forum-liegerad-schnell,vm-forum-velomobil-schnell")
+, m_brouterLocal(false)
 {
     m_self = this;
 
@@ -221,6 +226,11 @@ CResources::CResources(QObject * parent)
     m_tzMode = (TimezoneMode_e)cfg.value("timezone/mode", m_tzMode).toInt();
     m_timezone = cfg.value("timezone/zone", m_timezone).toString();
 
+    m_brouterHost = cfg.value("routing/BR/host", m_brouterHost).toString();
+    m_brouterPort = cfg.value("routing/BR/port", m_brouterPort).toString();
+    m_brouterProfiles = cfg.value("routing/BR/profiles", m_brouterProfiles).toString();
+    m_brouterProfilePath = cfg.value("routing/BR/profilePath", m_brouterProfilePath).toString();
+    m_brouterLocal = cfg.value("routing/BR/local", m_brouterLocal).toBool();
 }
 
 
@@ -284,6 +294,12 @@ CResources::~CResources()
 
     cfg.setValue("timezone/mode", m_tzMode);
     cfg.setValue("timezone/zone", m_timezone);
+
+    cfg.setValue("routing/BR/host", m_brouterHost);
+    cfg.setValue("routing/BR/port", m_brouterPort);
+    cfg.setValue("routing/BR/profiles", m_brouterProfiles);
+    cfg.setValue("routing/BR/profilePath", m_brouterProfilePath);
+    cfg.setValue("routing/BR/local", m_brouterLocal);
 }
 
 
@@ -387,3 +403,31 @@ QString CResources::charset()
     else
         return m_devCharset;
 }
+
+QStringList CResources::getBRouterProfiles()
+{
+    if (m_brouterLocal and !m_brouterProfilePath.isNull())
+    {
+        return readBRouterProfiles(m_brouterProfilePath);
+    }
+    else
+    {
+        return m_brouterProfiles.split(QRegExp("[,;| ]"),QString::SkipEmptyParts);
+    }
+}
+
+QStringList CResources::readBRouterProfiles(QString path)
+{
+    QDir dir = QDir(path);
+    QString profile;
+    QStringList entries = dir.entryList();
+    QStringList profiles = QStringList();
+    foreach(profile,entries)
+    {
+        if(profile.endsWith(".brf"))
+        {
+            profiles.append(profile.left(profile.length()-4));
+        }
+    }
+    return profiles;
+}
diff --git a/src/CResources.h b/src/CResources.h
index ca0605d..3f23e0c 100644
--- a/src/CResources.h
+++ b/src/CResources.h
@@ -93,8 +93,14 @@ class CResources : public QObject
         TimezoneMode_e getTimezoneMode(){return m_tzMode;}
         QString getSelectedTimezone(){return m_timezone;}
 
+        QString getBRouterHost(){return m_brouterHost;}
+        int getBRouterPort(){return m_brouterPort.toInt();}
+        QStringList getBRouterProfiles();
+        QStringList readBRouterProfiles(QString path);
+
         signals:
         void sigDeviceChanged();
+        void sigBRouterChanged();
 
     private:
         friend class CMainWindow;
@@ -188,5 +194,11 @@ class CResources : public QObject
 
         TimezoneMode_e m_tzMode;
         QString m_timezone;
+
+        QString m_brouterHost;
+        QString m_brouterPort;
+        QString m_brouterProfiles;
+        QString m_brouterProfilePath;
+        bool m_brouterLocal;
 };
 #endif                           //CRESOURCES_H
diff --git a/src/CRoute.cpp b/src/CRoute.cpp
index 05cae27..8dd7ddf 100644
--- a/src/CRoute.cpp
+++ b/src/CRoute.cpp
@@ -294,6 +294,7 @@ CRoute::CRoute(QObject * parent)
 , highlight(false)
 , firstTime(true)
 , calcRoutePending(false)
+, routeIdx(0)
 {
     setIcon("Small City");
 }
@@ -449,6 +450,9 @@ void CRoute::loadSecondaryRoute(QDomDocument& xml, service_e service)
         case eMapQuest:
             loadSecondaryRouteMQ(xml);
             break;
+        case eBRouter:
+            loadSecondaryRouteBR(xml);
+            break;
     }
 
     calcDistance();
@@ -469,14 +473,18 @@ void CRoute::loadSecondaryRouteMQ(QDomDocument& xml)
     ttime = time.text().toUInt();
 
     // build list of maneuvers
-    QDomElement legs        = route.firstChildElement("legs");
-    QDomElement leg         = legs.firstChildElement("leg");
-    QDomNodeList maneuvers  = leg.firstChildElement("maneuvers").elementsByTagName("maneuver");
-    const qint32 M = maneuvers.size();
-    for(int i = 0; i < M; i++)
+    QDomNodeList legs       = route.firstChildElement("legs").elementsByTagName("leg");
+    const qint32 L = legs.size();
+    for(int j = 0; j < L; j++)
     {
-        QDomNode maneuver    = maneuvers.item(i);
-        instructions << maneuver.firstChildElement("narrative").text();
+	QDomNode leg            = legs.item(j);
+	QDomNodeList maneuvers  = leg.firstChildElement("maneuvers").elementsByTagName("maneuver");
+	const qint32 M = maneuvers.size();
+	for(int i = 0; i < M; i++)
+	{
+	    QDomNode maneuver    = maneuvers.item(i);
+	    instructions << maneuver.firstChildElement("narrative").text();
+	}
     }
 
     // read the shape
@@ -591,6 +599,47 @@ void CRoute::loadSecondaryRouteORS(QDomDocument& xml)
     }
 }
 
+void CRoute::loadSecondaryRouteBR(QDomDocument& xml)
+{
+//	<!-- track-length = 253153 filtered ascend = 888 plain-ascend = -282 cost=296476 -->
+//	 <trk>
+//	  <name>brouter_fastbike_0</name>
+//	  <trkseg>
+//	   <trkpt lon="11.626430" lat="48.298522"><ele>466.75</ele></trkpt>
+
+    QDomElement root = xml.documentElement();
+    QDomNodeList nodes = root.childNodes();
+    for (int i = 0; i < nodes.size(); i++)
+    {
+        QDomNode node = nodes.item(i);
+        if (node.isComment())
+        {
+            //TODO parse comment to set dist and ttime
+        }
+    }
+    QDomNodeList tracks = root.elementsByTagName("trk");
+    for(int i = 0; i < tracks.size(); i++)
+    {
+        QDomElement track = tracks.item(i).toElement();
+        QDomNodeList segments = track.elementsByTagName("trkseg");
+        for (int j = 0; j < segments.size(); j++)
+        {
+            QDomElement segment = segments.item(j).toElement();
+            QDomNodeList points = segment.elementsByTagName("trkpt");
+            const qint32 M = points.size();
+            for(int k = 0; k < M; k++)
+            {
+                pt_t rtept;
+                QDomElement point = points.item(k).toElement();
+                rtept.lon = point.attribute("lon").toFloat();
+                rtept.lat = point.attribute("lat").toFloat();
+                //QString elevation = point.firstChildElement("ele").text();
+                secRoute << rtept;
+            }
+        }
+    }
+    routeIdx++;
+}
 
 void CRoute::reset()
 {
diff --git a/src/CRoute.h b/src/CRoute.h
index 6f38a6c..4036ee5 100644
--- a/src/CRoute.h
+++ b/src/CRoute.h
@@ -41,6 +41,7 @@ class CRoute : public IItem
         {
             eOpenRouteService
             ,eMapQuest
+            ,eBRouter
         };
 
         enum type_e {eEnd, eBase, eRtePts, eRteSec};
@@ -97,6 +98,10 @@ class CRoute : public IItem
 
         void setCalcPending(){calcRoutePending = true;}
 
+        void resetRouteIdx(){routeIdx = 0;}
+
+        int getRouteIdx(){return routeIdx;}
+
     private:
         friend class CRouteDB;
         friend QDataStream& operator >>(QDataStream& s, CRoute& route);
@@ -104,6 +109,8 @@ class CRoute : public IItem
 
         void loadSecondaryRouteORS(QDomDocument& xml);
         void loadSecondaryRouteMQ(QDomDocument& xml);
+        void loadSecondaryRouteBR(QDomDocument& xml);
+
         void calcDistance();
 
         /// primary route, just the basic points like A to B via C
@@ -127,6 +134,8 @@ class CRoute : public IItem
 
         bool calcRoutePending;
 
+        int routeIdx;
+
 };
 
 QDataStream& operator >>(QDataStream& s, CRoute& route);
diff --git a/src/CRouteDB.cpp b/src/CRouteDB.cpp
index f8d9023..629c07d 100644
--- a/src/CRouteDB.cpp
+++ b/src/CRouteDB.cpp
@@ -752,6 +752,7 @@ void CRouteDB::reset(const QString& key)
     if(routes.contains(key))
     {
         routes[key]->reset();
+        routes[key]->resetRouteIdx();
     }
 }
 
diff --git a/src/CRouteToolWidget.cpp b/src/CRouteToolWidget.cpp
index 9d55f76..659d193 100644
--- a/src/CRouteToolWidget.cpp
+++ b/src/CRouteToolWidget.cpp
@@ -81,6 +81,7 @@ CRouteToolWidget::CRouteToolWidget(QTabWidget * parent)
 
     comboService->addItem("OpenRouteService (Europe)", CRoute::eOpenRouteService);
     comboService->addItem("MapQuest (World)", CRoute::eMapQuest);
+    comboService->addItem("BRouter", CRoute::eBRouter);
     connect(comboService, SIGNAL(currentIndexChanged(int)), this, SLOT(slotServiceChanged(int)));
 
     // ------------ ORS Setup ------------
@@ -168,6 +169,14 @@ CRouteToolWidget::CRouteToolWidget(QTabWidget * parent)
     checkMQAvoidCountryBorder->setChecked(cfg.value("avoidCountryBorder", false).toBool());
     comboMQLanguage->setCurrentIndex(cfg.value("language", langIdx).toInt());
     cfg.endGroup();
+
+    // ------------ BR Setup ------------
+    connect(&CResources::self(), SIGNAL(sigBRouterChanged()), this, SLOT(slotBRProfilesChanged()));
+    slotBRProfilesChanged();
+    cfg.beginGroup("BR");
+    comboBRPreference->setCurrentIndex(cfg.value("preference", 0).toInt());
+    connect(comboBRPreference, SIGNAL(currentIndexChanged(int)), this, SLOT(slotBRPreferenceChanged(int)));
+    cfg.endGroup();
     cfg.endGroup();
 
     m_networkAccessManager->setProxy(QNetworkProxy(QNetworkProxy::DefaultProxy));
@@ -208,14 +217,23 @@ void CRouteToolWidget::slotServiceChanged(int idx)
 {
     groupORS->hide();
     groupMQ->hide();
+    groupBR->hide();
+    labelCopyrightMapQuest->hide();
+    labelCopyrightOpenRoute->hide();
 
     if(comboService->itemData(idx).toInt() == CRoute::eOpenRouteService)
     {
         groupORS->show();
+        labelCopyrightOpenRoute->show();
     }
     else if(comboService->itemData(idx).toInt() == CRoute::eMapQuest)
     {
         groupMQ->show();
+        labelCopyrightMapQuest->show();
+    }
+    else if(comboService->itemData(idx).toInt() == CRoute::eBRouter)
+    {
+        groupBR->show();
     }
 }
 
@@ -410,6 +428,10 @@ void CRouteToolWidget::slotCalcRoute()
         {
             startMapQuest(*route);
         }
+        else if(service == CRoute::eBRouter)
+        {
+            startBRouterService(*route);
+        }
     }
 
     originator = false;
@@ -634,6 +656,15 @@ void CRouteToolWidget::slotRequestFinished(QNetworkReply* reply)
             return;
         }
     }
+    else if (service == CRoute::eBRouter)
+    {
+        QDomElement response = xml.firstChildElement("gpx");
+        if(response.isNull())
+        {
+            QMessageBox::warning(0,tr("Failed..."), tr("Bad response from server:\n%1").arg(xml.toString()), QMessageBox::Abort);
+            return;
+        }
+    }
 
     CRouteDB::self().loadSecondaryRoute(key, xml, (CRoute::service_e)service);
 }
@@ -917,7 +948,7 @@ void CRouteToolWidget::startMapQuest(CRoute& rte)
     xmlstr = xmlstr.replace("\n","");
 
     QUrl url("http://www.mapquestapi.com");
-    url.setPath("directions/v1/route");
+    url.setPath("directions/v2/route");
 
 #ifdef QK_QT5_PORT
     QList< QPair<QString, QString> > queryItems;
@@ -962,3 +993,77 @@ void CRouteToolWidget::addMapQuestLocations(QDomDocument& xml, QDomElement& loca
         locations.appendChild(location);
     }
 }
+
+void CRouteToolWidget::startBRouterService(CRoute& rte)
+{
+    // /brouter?lonlats=11.626453,48.298498|9.942884,49.798885&nogos=&profile=fastbike&alternativeidx=0&format=gpx
+
+    QUrl url(QString("http://").append(CResources::self().getBRouterHost()));
+    url.setPort(CResources::self().getBRouterPort());
+    url.setPath("/brouter");
+
+    QVector<CRoute::pt_t> wpts = rte.getPriRtePoints();
+    bool isNext = false;
+    QString lonlats;
+    foreach(const CRoute::pt_t& wpt, wpts)
+    {
+        if (isNext)
+        {
+            lonlats.append(QString("|%1,%2").arg(wpt.lon).arg(wpt.lat));
+        } else {
+            lonlats = QString("%1,%2").arg(wpt.lon).arg(wpt.lat);
+            isNext = true;
+        }
+    }
+
+    QList< QPair<QByteArray, QByteArray> > queryItems;
+    queryItems << QPair<QByteArray, QByteArray>(QByteArray("lonlats"),QByteArray(lonlats.toAscii()));
+    queryItems << QPair<QByteArray, QByteArray>(QByteArray("nogos"), QByteArray(""));
+    queryItems << QPair<QByteArray, QByteArray>(QByteArray("profile"), comboBRPreference->itemData(comboBRPreference->currentIndex()).toByteArray());
+    queryItems << QPair<QByteArray, QByteArray>(QByteArray("alternativeidx"), QVariant(rte.getRouteIdx()).toByteArray());
+    queryItems << QPair<QByteArray, QByteArray>(QByteArray("format"), QByteArray("gpx"));
+    url.setEncodedQueryItems(queryItems);
+
+    QNetworkRequest request;
+
+    request.setUrl(url);
+
+    QNetworkReply* reply = m_networkAccessManager->get(request);
+    pendingRequests[reply] = rte.getKey();
+
+    timer->start(20000);
+}
+
+void CRouteToolWidget::slotBRPreferenceChanged(int idx)
+{
+    for(int i = 0; i<listRoutes->count(); i++)
+    {
+        QString key = listRoutes->item(i)->data(Qt::UserRole).toString();
+        CRouteDB::self().getRouteByKey(key)->resetRouteIdx();
+    }
+    SETTINGS;
+    cfg.setValue("routing/BR/preference", comboBRPreference->currentIndex());
+}
+
+void CRouteToolWidget::slotBRProfilesChanged()
+{
+    int currentIndex = -1;
+    int i = 0;
+    QString currentProfile = comboBRPreference->itemData(comboBRPreference->currentIndex()).toString();
+    comboBRPreference->clear();
+    foreach(const QString& key, CResources::self().getBRouterProfiles())
+    {
+        comboBRPreference->addItem(key,key);
+        if (currentProfile.compare(key) == 0)
+        {
+            currentIndex = i;
+        }
+        i++;
+    }
+    if (currentIndex >= 0)
+    {
+        comboBRPreference->setCurrentIndex(currentIndex);
+        SETTINGS;
+        cfg.setValue("routing/BR/preference", currentIndex);
+    }
+}
diff --git a/src/CRouteToolWidget.h b/src/CRouteToolWidget.h
index 9630697..c18beae 100644
--- a/src/CRouteToolWidget.h
+++ b/src/CRouteToolWidget.h
@@ -68,6 +68,8 @@ class CRouteToolWidget : public QWidget, private Ui::IRouteToolWidget
 
         void slotTimeout();
         void slotServiceChanged(int);
+        void slotBRPreferenceChanged(int);
+        void slotBRProfilesChanged();
 
         void slotProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
 
@@ -79,6 +81,8 @@ class CRouteToolWidget : public QWidget, private Ui::IRouteToolWidget
         void startMapQuest(CRoute& rte);
         void addMapQuestLocations(QDomDocument& xml, QDomElement& locations, CRoute& rte);
 
+        void startBRouterService(CRoute& rte);
+
         bool originator;
 
         enum tab_e
@@ -101,6 +105,5 @@ class CRouteToolWidget : public QWidget, private Ui::IRouteToolWidget
         static sortmode_e sortmode;
 
         QMap<QNetworkReply*, QString> pendingRequests;
-
 };
 #endif                           //CROUTETOOLWIDGET_H
diff --git a/src/CTrack.cpp b/src/CTrack.cpp
index bdb582a..c6205e4 100644
--- a/src/CTrack.cpp
+++ b/src/CTrack.cpp
@@ -1677,32 +1677,7 @@ void CTrack::setPointOfFocus(int idx, type_select_e typeSelect, bool moveMap)
                 break;
         }
     }
-    else if(typeSelect == eHoover)
-    {
-        multi_color_setup_t& setup = setupMultiColor[idMultiColor];
-        if(idx != -1)
-        {
-            switch(idMultiColor)
-            {
-                case eMultiColorSlope:
-                    setup.markVal = track[idx].slope2;
-                    break;
-                case eMultiColorEle:
-                    setup.markVal = track[idx].ele;
-                    break;
-                case eMultiColorSpeed:
-                    setup.markVal = track[idx].speed * 3.6;
-                    break;
-                default:
-                    setup.markVal = WPT_NOFLOAT;
-            }
-        }
-        else
-        {
-            setup.markVal = WPT_NOFLOAT;
-        }
-    }
-    else
+    else if(typeSelect != eHoover)
     {
         // erase all flags
         while(trkpt != track.end())
@@ -1723,6 +1698,29 @@ void CTrack::setPointOfFocus(int idx, type_select_e typeSelect, bool moveMap)
         }
     }
 
+    multi_color_setup_t& setup = setupMultiColor[idMultiColor];
+    if((idx != -1) && (idx < track.count()))
+    {
+        switch(idMultiColor)
+        {
+            case eMultiColorSlope:
+                setup.markVal = track[idx].slope2;
+                break;
+            case eMultiColorEle:
+                setup.markVal = track[idx].ele;
+                break;
+            case eMultiColorSpeed:
+                setup.markVal = track[idx].speed * 3.6;
+                break;
+            default:
+                setup.markVal = WPT_NOFLOAT;
+        }
+    }
+    else
+    {
+        setup.markVal = WPT_NOFLOAT;
+    }
+
     // move map to point under focus
     if(moveMap && idx < track.count())
     {
diff --git a/src/CTrackDB.cpp b/src/CTrackDB.cpp
index 5dccba6..297408e 100644
--- a/src/CTrackDB.cpp
+++ b/src/CTrackDB.cpp
@@ -233,7 +233,7 @@ void CTrackDB::loadGPX(CGpx& gpx)
                 tmpelem = trackextensionmap.value(CGpx::gpxx_ns + ":" + "DisplayColor");
                 if (!tmpelem.isNull())
                 {
-                    int colorID = gpx.getTrackColorMap().right(tmpelem.text(), -1);
+                    int colorID = gpx.getTrackColorMap().value(tmpelem.text(), -1);
                     if (colorID >= 0) track->setColor(colorID);
                 }
             }
@@ -488,7 +488,7 @@ void CTrackDB::saveGPX(CGpx& gpx, const QStringList& keys)
         QDomElement color = gpx.createElement("gpxx:DisplayColor");
         gpxx_ext.appendChild(color);
 
-        QString colname = gpx.getTrackColorMap().left(track->getColorIdx());
+        QString colname = gpx.getTrackColorMap().key(track->getColorIdx());
         QDomText _color_ = gpx.createTextNode(colname);
         color.appendChild(_color_);
 
diff --git a/src/CTrackEditWidget.cpp b/src/CTrackEditWidget.cpp
index a73d0f5..18c8b72 100644
--- a/src/CTrackEditWidget.cpp
+++ b/src/CTrackEditWidget.cpp
@@ -173,8 +173,6 @@ CTrackEditWidget::CTrackEditWidget(QWidget * parent)
     toolGoogleMaps->hide();
 #endif
 
-    treePoints->sortByColumn(eNum, Qt::AscendingOrder);
-
     CActions * actions = theMainWindow->getActionGroupProvider()->getActions();
 
     contextMenu = new QMenu(this);
@@ -207,6 +205,15 @@ CTrackEditWidget::CTrackEditWidget(QWidget * parent)
     tabWidget->setCurrentIndex(cfg.value("TrackEditWidget/currentIndex",0).toUInt());
     checkCenterMap->setChecked((cfg.value("TrackEditWidget/centerMap",true).toBool()));
 
+    QByteArray state = cfg.value("TrackEditWidget/trackpointlist").toByteArray();
+    if(state.isEmpty())
+    {
+        treePoints->sortByColumn(eNum, Qt::AscendingOrder);
+    }
+    else
+    {
+        treePoints->header()->restoreState(state);
+    }
 }
 
 
@@ -215,6 +222,7 @@ CTrackEditWidget::~CTrackEditWidget()
     SETTINGS;
     cfg.setValue("TrackEditWidget/currentIndex",tabWidget->currentIndex());
     cfg.setValue("TrackEditWidget/centerMap",checkCenterMap->isChecked());
+    cfg.setValue("TrackEditWidget/trackpointlist", treePoints->header()->saveState());
 
     if(!trackStatProfileDist.isNull())
     {
@@ -902,18 +910,15 @@ void CTrackEditWidget::slotPointSelectionChanged()
     }
 
     originator = true;
-    if (checkCenterMap->isChecked())
+    if (items.begin() != items.end())
     {
-        if (items.begin() != items.end())
+        if (old_e != new_e)
         {
-            if (old_e != new_e)
-            {
-                track->setPointOfFocus(new_e, CTrack::eNoErase, true);
-            }
-            else
-            {
-                track->setPointOfFocus(new_b, CTrack::eNoErase, true);
-            }
+            track->setPointOfFocus(new_e, CTrack::eNoErase, checkCenterMap->isChecked());
+        }
+        else
+        {
+            track->setPointOfFocus(new_b, CTrack::eNoErase, checkCenterMap->isChecked());
         }
     }
     //track->rebuild(false);
diff --git a/src/CWptDB.cpp b/src/CWptDB.cpp
index 2234a58..4e49e12 100644
--- a/src/CWptDB.cpp
+++ b/src/CWptDB.cpp
@@ -307,7 +307,7 @@ CWpt * CWptDB::newWpt(float lon, float lat, float ele, const QString& name)
         CDlgEditWpt dlg(*wpt,theMainWindow->getCanvas());
         if(dlg.exec() == QDialog::Rejected)
         {
-            delete wpt;
+            wpt->deleteLater();
             return 0;
         }
     }
diff --git a/src/IDlgConfig.ui b/src/IDlgConfig.ui
index cf773d8..d18b976 100644
--- a/src/IDlgConfig.ui
+++ b/src/IDlgConfig.ui
@@ -1016,6 +1016,170 @@
        </item>
       </layout>
      </widget>
+     <widget class="QWidget" name="Seite_3">
+      <attribute name="title">
+       <string>Routing</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_6">
+       <item>
+        <widget class="QGroupBox" name="groupBox_12">
+         <property name="title">
+          <string>BRouter</string>
+         </property>
+         <layout class="QVBoxLayout" name="verticalLayout_7">
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_10">
+            <item>
+             <widget class="QCheckBox" name="checkBRouterLocal">
+              <property name="text">
+               <string>use local install</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QGridLayout" name="gridLayout_7">
+            <item row="4" column="1">
+             <layout class="QHBoxLayout" name="horizontalLayout_11">
+              <item>
+               <spacer name="horizontalSpacer_4">
+                <property name="orientation">
+                 <enum>Qt::Horizontal</enum>
+                </property>
+                <property name="sizeHint" stdset="0">
+                 <size>
+                  <width>40</width>
+                  <height>20</height>
+                 </size>
+                </property>
+               </spacer>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushBRouterDefaultOnline">
+                <property name="text">
+                 <string>restore Defaults (online)</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushBRouterDefaultLocal">
+                <property name="text">
+                 <string>set Defaults (local installation)</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item row="2" column="1">
+             <layout class="QHBoxLayout" name="horizontalLayout_13">
+              <item>
+               <widget class="QLineEdit" name="lineBRouterProfiles">
+                <property name="text">
+                 <string notr="true">car-test|fastbike|moped|shortest|trekking</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QLabel" name="labelBRouterProfiles">
+                <property name="text">
+                 <string/>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_17">
+              <property name="text">
+               <string>Profiles</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_15">
+              <property name="text">
+               <string>Host</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <layout class="QHBoxLayout">
+              <item>
+               <widget class="QLineEdit" name="lineBRouterHost">
+                <property name="text">
+                 <string notr="true">127.0.0.1</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QLabel" name="label_16">
+                <property name="text">
+                 <string>Port</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QLineEdit" name="lineBRouterPort">
+                <property name="inputMask">
+                 <string notr="true">00000</string>
+                </property>
+                <property name="text">
+                 <string notr="true">17777</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="labelBRouterProfileDir">
+              <property name="text">
+               <string>ProfileDir</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="1">
+             <layout class="QHBoxLayout" name="horizontalLayout_12">
+              <item>
+               <widget class="QToolButton" name="toolButtonBRouterProfilePath">
+                <property name="text">
+                 <string>...</string>
+                </property>
+                <property name="icon">
+                 <iconset resource="resources.qrc">
+                  <normaloff>:/icons/iconFolderBlue16x16.png</normaloff>:/icons/iconFolderBlue16x16.png</iconset>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QLabel" name="labelBRouterProfilePath">
+                <property name="text">
+                 <string notr="true"/>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="verticalSpacer_2">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>40</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
      <widget class="QWidget" name="Seite_2">
       <attribute name="title">
        <string>Keys</string>
diff --git a/src/IGarminTyp.cpp b/src/IGarminTyp.cpp
index 41c7784..08610d8 100644
--- a/src/IGarminTyp.cpp
+++ b/src/IGarminTyp.cpp
@@ -996,7 +996,7 @@ bool IGarminTyp::decodeBppAndBytes(int ncolors, int w, int flags, int& bpp, int&
 }
 
 
-bool IGarminTyp::decodeColorTable(QDataStream& in, QImage& img, int ncolors, int maxcolor, bool hasAlpha)
+bool IGarminTyp::decodeColorTable(QDataStream& in, QImage& img, quint8 ncolors, int maxcolor, bool hasAlpha)
 {
 
 #ifdef QK_QT5_PORT
diff --git a/src/IGarminTyp.h b/src/IGarminTyp.h
index 6246ff2..a7d24f0 100644
--- a/src/IGarminTyp.h
+++ b/src/IGarminTyp.h
@@ -195,7 +195,7 @@ class IGarminTyp : public QObject
         QTextCodec * getCodec(quint16 codepage);
         void decodeBitmap(QDataStream &in, QImage &img, int w, int h, int bpp);
         bool decodeBppAndBytes(int ncolors, int w, int flags, int& bpp, int& bytes);
-        bool decodeColorTable(QDataStream& in, QImage& img, int ncolors,  int maxcolor, bool hasAlpha);
+        bool decodeColorTable(QDataStream& in, QImage& img, quint8 ncolors,  int maxcolor, bool hasAlpha);
         format_e format;
 
         struct typ_section_t
diff --git a/src/IRouteToolWidget.ui b/src/IRouteToolWidget.ui
index 1900ff3..e6b6eab 100644
--- a/src/IRouteToolWidget.ui
+++ b/src/IRouteToolWidget.ui
@@ -63,7 +63,7 @@
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="tab">
       <attribute name="title">
@@ -73,7 +73,16 @@
        <property name="spacing">
         <number>0</number>
        </property>
-       <property name="margin">
+       <property name="leftMargin">
+        <number>0</number>
+       </property>
+       <property name="topMargin">
+        <number>0</number>
+       </property>
+       <property name="rightMargin">
+        <number>0</number>
+       </property>
+       <property name="bottomMargin">
         <number>0</number>
        </property>
        <item>
@@ -211,6 +220,35 @@
         </widget>
        </item>
        <item>
+        <widget class="QGroupBox" name="groupBR">
+         <property name="title">
+          <string/>
+         </property>
+         <layout class="QVBoxLayout" name="verticalLayout_7">
+          <item>
+           <widget class="QComboBox" name="comboBRPreference"/>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelCopyrightMapQuest">
+         <property name="text">
+          <string><p>Directions Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> </p></string>
+         </property>
+         <property name="openExternalLinks">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelCopyrightOpenRoute">
+         <property name="text">
+          <string><p>Directions Courtesy of <a href="http://openrouteservice.org/" target="_blank">OpenRouteService</a> </p></string>
+         </property>
+        </widget>
+       </item>
+       <item>
         <spacer name="verticalSpacer">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
@@ -239,19 +277,19 @@
           <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;">
 <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
 <tr>
 <td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">How to add a route?</p>
-<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Routes can be created from waypoints or distance polylines. </p>
-<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To create a route from waypoints you have to select at least two waypoints in the waypoint tool view. After you made your selection you summon the menu by a right mouse button click and select &quot;Make Route&quot;. </p>
-<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To create a route from a distance polyline you select the line and summon the menu by a right mouse button click and select &quot;Make Route&quot;.</p>
-<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In the &quot;Setup&quot; tab you can select settings for auto routing. To calculate a secondary, autorouted route to your primary route definition you  summon the menu by a right mouse button click and select &quot;Calc. route&quot;.</p></td></tr></table></body></html></string>
+<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">How to add a route?</span></p>
+<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p>
+<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Routes can be created from waypoints or distance polylines. </span></p>
+<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p>
+<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">To create a route from waypoints you have to select at least two waypoints in the waypoint tool view. After you made your selection you summon the menu by a right mouse button click and select &quot;Make Route&quot;. </span></p>
+<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p>
+<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">To create a route from a distance polyline you select the line and summon the menu by a right mouse button click and select &quot;Make Route&quot;.</span></p>
+<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p>
+<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">In the &quot;Setup&quot; tab you can select settings for auto routing. To calculate a secondary, autorouted route to your primary route definition you  summon the menu by a right mouse button click and select &quot;Calc. route&quot;.</span& [...]
          </property>
         </widget>
        </item>
diff --git a/src/ITrackEditWidget.ui b/src/ITrackEditWidget.ui
index 62f9959..5b90b7f 100644
--- a/src/ITrackEditWidget.ui
+++ b/src/ITrackEditWidget.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>706</width>
+    <width>753</width>
     <height>421</height>
    </rect>
   </property>
@@ -396,9 +396,6 @@
               <property name="autoFillBackground">
                <bool>true</bool>
               </property>
-              <property name="styleSheet">
-               <string notr="true">background-color: transparent;</string>
-              </property>
               <property name="frameShape">
                <enum>QFrame::NoFrame</enum>
               </property>
@@ -743,9 +740,6 @@
               <property name="autoFillBackground">
                <bool>true</bool>
               </property>
-              <property name="styleSheet">
-               <string notr="true">background-color: transparent;</string>
-              </property>
               <property name="frameShape">
                <enum>QFrame::NoFrame</enum>
               </property>
@@ -766,8 +760,8 @@
                 <rect>
                  <x>0</x>
                  <y>0</y>
-                 <width>100</width>
-                 <height>30</height>
+                 <width>249</width>
+                 <height>256</height>
                 </rect>
                </property>
                <layout class="QVBoxLayout" name="verticalLayout_Extensions"/>
diff --git a/src/locale/qlandkartegt_es_ES.ts b/src/locale/qlandkartegt_es_ES.ts
index 7f7b7f0..ed04955 100644
--- a/src/locale/qlandkartegt_es_ES.ts
+++ b/src/locale/qlandkartegt_es_ES.ts
@@ -337,18 +337,18 @@
     <message>
         <location filename="../CActions.cpp" line="112"/>
         <source>Add Area Polygon</source>
-        <translation type="unfinished"></translation>
+        <translation>Añadir Polígono de Área</translation>
     </message>
     <message>
         <location filename="../CActions.cpp" line="112"/>
         <location filename="../CActions.cpp" line="113"/>
         <source>Mark an area with a polygon.</source>
-        <translation type="unfinished"></translation>
+        <translation>Marcar un área con un polígono.</translation>
     </message>
     <message>
         <location filename="../CActions.cpp" line="113"/>
         <source>Area Polygon</source>
-        <translation type="unfinished"></translation>
+        <translation>Polígono de Área</translation>
     </message>
     <message>
         <location filename="../CActions.cpp" line="116"/>
@@ -368,7 +368,7 @@
     <message>
         <location filename="../CActions.cpp" line="305"/>
         <source>&Overlay Area</source>
-        <translation type="unfinished"></translation>
+        <translation>&Superponer Área</translation>
     </message>
     <message>
         <location filename="../CActions.cpp" line="704"/>
@@ -628,7 +628,7 @@
     <message>
         <location filename="../CActions.cpp" line="102"/>
         <source>Move Map to &Pos.</source>
-        <translation>Mover el Mapa a la &Posición.</translation>
+        <translation>Mover el Mapa a la &Posición</translation>
     </message>
     <message>
         <location filename="../CActions.cpp" line="102"/>
@@ -2435,7 +2435,7 @@ Se esperaba %1, se recibió %2.</translation>
     <message>
         <location filename="../CDlgConfig.cpp" line="156"/>
         <source>Pass something like "COM1" or "\\.\COM13" or "\\.\com13" for serial Garmin devices or NMEA devices. For Garmin USB devices leave blank.</source>
-        <translation type="unfinished"></translation>
+        <translation>Introduzca algo del estilo de "COM1:" o "\\.\COM13" o "\\.\com13" para dispositivos NMEA o Garmin de puerto serie. Para dispositivos Garmin USB, dejar en blanco.</translation>
     </message>
     <message>
         <source>Mikrokopter</source>
@@ -3574,7 +3574,7 @@ Proyección actual: %1</translation>
     <message>
         <location filename="../CLiveLogDB.cpp" line="264"/>
         <source>%1%2 T</source>
-        <translation type="unfinished"></translation>
+        <translation>%1%2 T</translation>
     </message>
     <message>
         <location filename="../CLiveLogDB.cpp" line="309"/>
@@ -3863,12 +3863,20 @@ It won't transmit any private data other than needed for requesting a HTML
 If you want QLandkarte GT to do this query now and in the future press 'Ok'. Else press 'No'.
 
 You won't be bugged a second time unless you erase QLandkarte's configuration data.</source>
-        <translation type="unfinished"></translation>
+        <translation>QLandkarte GT puede comprobar si hay nueva versión al inicio. Si hay alguna nueva versión disponible, mostrará un pequeño aviso en la barra de estado. Para comprobar si hay una nueva versión QLandkarte GT se debe conectar al servidor:
+
+http://www.qlandkarte.org/webservice/qlandkartegt.php
+
+No transmitirá ninguna información privada más que la necesaria para solicitar una página HTML.
+
+Si quiere que QLandkarteGT haga esta solicitud ahora y en el futuro, pulse 'Aceptar'. En otro caso, pulse 'No'.
+
+No será molestado una segunda vez a menos que borre los datos de configuración de QLandkarte.</translation>
     </message>
     <message>
         <location filename="../CMainWindow.cpp" line="1584"/>
         <source>Query for new version...</source>
-        <translation type="unfinished"></translation>
+        <translation>Comprobar nueva versión...</translation>
     </message>
     <message>
         <location filename="../CMainWindow.cpp" line="1621"/>
@@ -6132,22 +6140,22 @@ línea %2, columna %3:
     <message>
         <location filename="../COverlayArea.cpp" line="57"/>
         <source>Area %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Área %1</translation>
     </message>
     <message>
         <location filename="../COverlayArea.cpp" line="982"/>
         <source>Overlay</source>
-        <translation type="unfinished">Superponer</translation>
+        <translation>Superponer</translation>
     </message>
     <message>
         <location filename="../COverlayArea.cpp" line="988"/>
         <source>Edit...</source>
-        <translation type="unfinished">Editar...</translation>
+        <translation>Editar...</translation>
     </message>
     <message>
         <location filename="../COverlayArea.cpp" line="990"/>
         <source>Show</source>
-        <translation type="unfinished">Mostrar</translation>
+        <translation>Mostrar</translation>
     </message>
 </context>
 <context>
@@ -6155,7 +6163,7 @@ línea %2, columna %3:
     <message>
         <location filename="../COverlayAreaEditWidget.cpp" line="110"/>
         <source>Delete</source>
-        <translation type="unfinished">Borrar</translation>
+        <translation>Borrar</translation>
     </message>
 </context>
 <context>
@@ -6168,7 +6176,7 @@ línea %2, columna %3:
     <message>
         <location filename="../COverlayDB.cpp" line="672"/>
         <source>Area</source>
-        <translation type="unfinished">Área</translation>
+        <translation>Área</translation>
     </message>
     <message>
         <location filename="../COverlayDB.cpp" line="725"/>
@@ -6996,7 +7004,7 @@ final: %1</translation>
     <message>
         <location filename="../CTrack.cpp" line="2031"/>
         <source>speed: %1%2</source>
-        <translation type="unfinished"></translation>
+        <translation>velocidad: %1%2</translation>
     </message>
     <message>
         <location filename="../CTrack.cpp" line="2471"/>
@@ -9366,42 +9374,42 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../IDlgConfig.ui" line="249"/>
         <source>Vector Maps</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapas vectoriales</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="258"/>
         <source>Tooltips</source>
-        <translation type="unfinished"></translation>
+        <translation>Descripciones emergentes</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="265"/>
         <source>Element Info</source>
-        <translation type="unfinished"></translation>
+        <translation>Información de elemento</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="272"/>
         <source>Reduce POI icons</source>
-        <translation type="unfinished"></translation>
+        <translation>Reducir iconos POI</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="281"/>
         <source>Zoom level threshold for POIs:</source>
-        <translation type="unfinished"></translation>
+        <translation>Umbral de zoom para POIs:</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="294"/>
         <source>Defines at which zoom level POIs are drawn.</source>
-        <translation type="unfinished"></translation>
+        <translation>Define a qué nivel de zoom se dibujan los POIs.</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="314"/>
         <source>Zoom level threshold for POI labels:</source>
-        <translation type="unfinished"></translation>
+        <translation>Umbral de zoom para etiquetas de POIs:</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="327"/>
         <source>Defines at which zoom level POIs are labeled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Define a qué nivel de zoom se muestran etiquetas de POIs.</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="570"/>
@@ -9726,7 +9734,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../IDlgConfig.ui" line="114"/>
         <source>Time</source>
-        <translation type="unfinished">Hora</translation>
+        <translation>Hora</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="120"/>
@@ -9824,7 +9832,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../IDlgConfig.ui" line="909"/>
         <source>Watch Dog</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Vigilancia</translation>
     </message>
     <message>
         <location filename="../IDlgConfig.ui" line="925"/>
@@ -11930,7 +11938,7 @@ DEM: %2</translation>
         <source>Left click to lock circles.
 Then select function from circle.
 Left click on canvas to un-lock circles.</source>
-        <translation type="unfinished">Haga click con el botón izquierdo para fijar círculo.
+        <translation>Haga click con el botón izquierdo para fijar círculo.
 Entonces seleccione función en el círculo.
 Haga click con el botón izquierdo en la pantalla para desbloquear círculo.</translation>
     </message>
@@ -11948,57 +11956,57 @@ Haga click con el botón izquierdo en la pantalla para desbloquear círculo.</tr
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished">Formulario</translation>
+        <translation>Formulario</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="28"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Etiqueta de Texto</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="35"/>
         <source>...</source>
-        <translation type="unfinished">...</translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="48"/>
         <source>Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Color</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="55"/>
         <source>Comment</source>
-        <translation type="unfinished">Comentario</translation>
+        <translation>Comentario</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="65"/>
         <source>Name</source>
-        <translation type="unfinished">Nombre</translation>
+        <translation>Nombre</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="72"/>
         <source>Style</source>
-        <translation type="unfinished"></translation>
+        <translation>Estilo</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="99"/>
         <source>Border Width</source>
-        <translation type="unfinished"></translation>
+        <translation>Anchura del borde</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="109"/>
         <source>Opacity</source>
-        <translation type="unfinished"></translation>
+        <translation>Transparencia</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="133"/>
         <source>Apply</source>
-        <translation type="unfinished">Aplicar</translation>
+        <translation>Aplicar</translation>
     </message>
     <message>
         <location filename="../IOverlayAreaEditWidget.ui" line="163"/>
         <source>Position</source>
-        <translation type="unfinished">Posición</translation>
+        <translation>Posición</translation>
     </message>
 </context>
 <context>
@@ -12031,7 +12039,7 @@ Haga click con el botón izquierdo en la pantalla para desbloquear círculo.</tr
     <message>
         <location filename="../IOverlayDistanceEditWidget.ui" line="100"/>
         <source>Apply</source>
-        <translation type="unfinished">Aplicar</translation>
+        <translation>Aplicar</translation>
     </message>
     <message>
         <location filename="../IOverlayDistanceEditWidget.ui" line="124"/>
@@ -12375,12 +12383,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../ITrackEditWidget.ui" line="182"/>
         <source>If checked, the map is centered map on selected trackpoint.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si se selecciona, el mapa se centrará en el punto seleccionado del track.</translation>
     </message>
     <message>
         <location filename="../ITrackEditWidget.ui" line="185"/>
         <source>Center map</source>
-        <translation type="unfinished"></translation>
+        <translation>Centrar mapa</translation>
     </message>
     <message>
         <location filename="../ITrackEditWidget.ui" line="711"/>
@@ -13264,45 +13272,47 @@ Finalización estimada: %02i:%02i:%02i [hh:mm:ss]</translation>
     <message>
         <location filename="../CExchangeGarmin.cpp" line="52"/>
         <source>No 'Garmin/GarminDevice.xml' found</source>
-        <translation type="unfinished"></translation>
+        <translation>No se ha encontrado 'Garmin/GarminDevice.xml'</translation>
     </message>
     <message>
         <location filename="../CExchangeGarmin.cpp" line="209"/>
         <location filename="../CExchangeGarmin.cpp" line="217"/>
         <source>Failed to read...</source>
-        <translation type="unfinished"></translation>
+        <translation>Error al leer...</translation>
     </message>
     <message>
         <location filename="../CExchangeGarmin.cpp" line="209"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
-        <translation type="unfinished"></translation>
+        <translation>Error al leer: %1
+línea %2, columna %3:
+ %4</translation>
     </message>
     <message>
         <location filename="../CExchangeGarmin.cpp" line="217"/>
         <source>Not a GPX file: </source>
-        <translation type="unfinished">No es un archivo GPX:</translation>
+        <translation>No es un archivo GPX: </translation>
     </message>
     <message>
         <location filename="../COverlayAreaEditWidget.cpp" line="54"/>
         <source>thin</source>
-        <translation type="unfinished"></translation>
+        <translation>fino</translation>
     </message>
     <message>
         <location filename="../COverlayAreaEditWidget.cpp" line="55"/>
         <source>normal</source>
-        <translation type="unfinished"></translation>
+        <translation>normal</translation>
     </message>
     <message>
         <location filename="../COverlayAreaEditWidget.cpp" line="56"/>
         <source>wide</source>
-        <translation type="unfinished"></translation>
+        <translation>ancho</translation>
     </message>
     <message>
         <location filename="../COverlayAreaEditWidget.cpp" line="57"/>
         <source>strong</source>
-        <translation type="unfinished"></translation>
+        <translation>muy ancho</translation>
     </message>
 </context>
 </TS>
diff --git a/src/main.cpp b/src/main.cpp
index 90abd59..f2653d3 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -284,7 +284,7 @@ int main(int argc, char ** argv)
     GDALAllRegister();
 
 #ifdef Q_OS_MAC
-    QCoreApplication::setApplicationName("QLandkarte GT");
+    QCoreApplication::setApplicationName("QLandkarteGT");
     QCoreApplication::setApplicationVersion(VER_STR);
     QCoreApplication::setOrganizationName("org.qlandkarte");
     QCoreApplication::setOrganizationDomain("org.qlandkarte");
diff --git a/svn-commit.2.tmp b/svn-commit.2.tmp
new file mode 100644
index 0000000..3d1e197
--- /dev/null
+++ b/svn-commit.2.tmp
@@ -0,0 +1,4 @@
+V 1.8.0
+-- Diese und die folgenden Zeilen werden ignoriert --
+
+A    https://svn.code.sf.net/p/qlandkartegt/code/QLandkarteGT/tag/QLandkarteGT.2015.02.09

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qlandkartegt.git



More information about the Pkg-grass-devel mailing list