[qmapshack] 01/02: Imported Upstream version 0.6.0
Jaromír Mikeš
mira-guest at moszumanska.debian.org
Thu Oct 16 19:45:16 UTC 2014
This is an automated email from the git hooks/post-receive script.
mira-guest pushed a commit to branch master
in repository qmapshack.
commit 809ebf32262ef2860cfa4ea61d9e3828971009ee
Author: Jaromír Mikeš <mira.mikes at seznam.cz>
Date: Thu Oct 16 21:44:58 2014 +0200
Imported Upstream version 0.6.0
---
CMakeLists.txt | 2 +-
CMakeLists.txt.user | 65 +--
changelog.txt | 7 +
src/CMainWindow.cpp | 11 +
src/CMakeLists.txt | 10 +-
src/canvas/CCanvas.cpp | 20 +-
src/canvas/CCanvas.h | 2 +
src/cursors/cursorSelectRange.png | Bin 1357 -> 1419 bytes
src/gis/CGisListWks.cpp | 32 +-
src/gis/CGisListWks.h | 5 +
src/gis/CGisWidget.cpp | 45 +++
src/gis/CGisWidget.h | 8 +
src/gis/trk/CCombineTrk.cpp | 205 ++++++++++
src/gis/trk/{CScrOptTrk.h => CCombineTrk.h} | 41 +-
src/gis/trk/CDetailsTrk.cpp | 4 +-
src/gis/trk/CGisItemTrk.cpp | 437 ++++++++++++++++++---
src/gis/trk/CGisItemTrk.h | 60 ++-
src/gis/trk/CScrOptTrk.cpp | 22 ++
src/gis/trk/CScrOptTrk.h | 3 +
src/gis/trk/ICombineTrk.ui | 266 +++++++++++++
src/gis/trk/IScrOptTrk.ui | 61 ++-
src/icons/32x32/Combine.png | Bin 0 -> 711 bytes
src/icons/32x32/Left.png | Bin 0 -> 669 bytes
src/icons/32x32/PointHide.png | Bin 0 -> 813 bytes
src/icons/32x32/PointShow.png | Bin 0 -> 642 bytes
src/icons/32x32/Reverse.png | Bin 0 -> 661 bytes
src/icons/32x32/SelectRange.png | Bin 628 -> 831 bytes
src/icons/48x48/Combine.png | Bin 0 -> 979 bytes
src/icons/48x48/Left.png | Bin 0 -> 976 bytes
src/icons/48x48/PointHide.png | Bin 0 -> 1175 bytes
src/icons/48x48/PointShow.png | Bin 0 -> 869 bytes
src/icons/48x48/Reverse.png | Bin 0 -> 1088 bytes
src/icons/48x48/SelectRange.png | Bin 849 -> 1129 bytes
src/icons/Combine.svg | 120 ++++++
src/icons/Left.svg | 94 +++++
src/icons/{SelectRange.svg => PointHide.svg} | 102 +++--
src/icons/{SelectRange.svg => PointShow.svg} | 79 ++--
src/icons/Reverse.svg | 76 ++++
src/icons/SelectRange.svg | 73 +++-
src/locale/qmapshack_cs.ts | 231 ++++++++---
src/locale/qmapshack_de.ts | 405 ++++++++++++-------
src/locale/qmapshack_es.ts | 231 ++++++++---
src/map/CMapWMTS.cpp | 2 +-
src/mouse/CMouseEditArea.cpp | 10 +-
src/mouse/CMouseEditArea.h | 2 +
src/mouse/CMouseEditTrk.cpp | 9 +-
src/mouse/CMouseEditTrk.h | 2 +
src/mouse/CMouseRangeTrk.cpp | 275 +++++++++++++
.../trk/CScrOptTrk.h => mouse/CMouseRangeTrk.h} | 56 ++-
src/mouse/{CMouseEditTrk.h => CScrOptRangeTrk.cpp} | 41 +-
.../trk/CScrOptTrk.h => mouse/CScrOptRangeTrk.h} | 28 +-
src/mouse/IMouseEditLine.cpp | 106 ++++-
src/mouse/IMouseEditLine.h | 4 +
src/mouse/IScrOptRangeTrk.ui | 116 ++++++
src/plot/CPlotTrack.cpp | 68 +++-
src/plot/CPlotTrack.h | 3 +
src/resources.qrc | 10 +
57 files changed, 2874 insertions(+), 575 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d7a90d4..ae04ec5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@ endif(WIN32)
set(APPLICATION_NAME qmapshack)
set(APPLICATION_VERSION_MAJOR "0")
-set(APPLICATION_VERSION_MINOR "5")
+set(APPLICATION_VERSION_MINOR "6")
set(APPLICATION_VERSION_PATCH "0")
add_definitions(-DVER_MAJOR=${APPLICATION_VERSION_MAJOR} -DVER_MINOR=${APPLICATION_VERSION_MINOR} -DVER_STEP=${APPLICATION_VERSION_PATCH} -DAPPLICATION_NAME=${PROJECT_NAME})
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user
index d8476d7..0d188d1 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.1.1, 2014-10-05T17:39:27. -->
+<!-- Written by QtCreator 3.1.2, 2014-10-15T08:28:32. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -54,12 +54,12 @@
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.3.0 GCC 64bit</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.3.0 GCC 64bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.3 GCC 64bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.3 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.53.gcc_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
- <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">1</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool" key="CMakeProjectManager.CMakeBuildConfiguration.UseNinja">false</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oeichler/Code/cpp/build_QMapShack</value>
@@ -152,59 +152,8 @@
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">maproom</value>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
- <value type="bool" key="CMakeProjectManager.CMakeRunConfiguration.UseTerminal">false</value>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
- <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
- <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">maproom (deaktiviert)</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.maproom</value>
- <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
- <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
- <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
- <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
- <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
- <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
- </valuemap>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
- <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
- <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
- <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
- <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
- <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
- <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
- <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
- <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
- <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
- <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
- <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
- <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
- <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
- <value type="int">0</value>
- <value type="int">1</value>
- <value type="int">2</value>
- <value type="int">3</value>
- <value type="int">4</value>
- <value type="int">5</value>
- <value type="int">6</value>
- <value type="int">7</value>
- <value type="int">8</value>
- <value type="int">9</value>
- <value type="int">10</value>
- <value type="int">11</value>
- <value type="int">12</value>
- <value type="int">13</value>
- <value type="int">14</value>
- </valuelist>
<value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">qmapshack</value>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments">-d</value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
<value type="bool" key="CMakeProjectManager.CMakeRunConfiguration.UseTerminal">false</value>
<value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
@@ -219,7 +168,7 @@
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
- <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
@@ -228,7 +177,7 @@
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
- <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
+ <value type="QByteArray">{aef9f59c-83a3-4ac3-bddf-77d643de0ead}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
diff --git a/changelog.txt b/changelog.txt
index 4634eb5..f225f6a 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,10 @@
+V 0.6.0
+* Reverse tracks
+* Add dialog to combine tracks
+* Add range select to tracks
+* Add function to hide/show track points
+* Add function to copy selected track points as new track
+
V 0.5.0
* Add support for WMTS maps
* Edit/create tracks
diff --git a/src/CMainWindow.cpp b/src/CMainWindow.cpp
index 205cc04..3f0b300 100644
--- a/src/CMainWindow.cpp
+++ b/src/CMainWindow.cpp
@@ -155,6 +155,7 @@ CMainWindow::~CMainWindow()
cfg.setValue("MainWindow/geometry", saveGeometry());
cfg.beginGroup("Canvas");
+ QList<CCanvas*> allCanvas;
for(int i = 0; i < tabWidget->count(); i++)
{
CCanvas * canvas = dynamic_cast<CCanvas*>(tabWidget->widget(i));
@@ -166,6 +167,8 @@ CMainWindow::~CMainWindow()
cfg.beginGroup(QString("Canvas%1").arg(i));
canvas->saveConfig(cfg);
cfg.endGroup();
+
+ allCanvas << canvas;
}
cfg.setValue("visibleCanvas", tabWidget->currentIndex());
@@ -181,6 +184,14 @@ CMainWindow::~CMainWindow()
CDemDraw::saveDemPath(cfg);
cfg.endGroup(); // Canvas
+ /*
+ Delete all canvas objects now to make sure they are destroyed before all
+ other objects. This allows children of the canvas to access central objects
+ like CGisWidget safely uppon their destruction. (e.g. CMouseRangeTrk to reset
+ it's track's draw mode by key)
+ */
+ qDeleteAll(allCanvas);
+
QByteArray tz;
IUnit::tz_mode_e tzmode;
IUnit::getTimeZoneSetup(tzmode, tz);
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3c3035a..aaaa497 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -74,10 +74,12 @@ set( SRCS
mouse/CMouseMoveWpt.cpp
mouse/CMouseEditTrk.cpp
mouse/CMouseEditArea.cpp
+ mouse/CMouseRangeTrk.cpp
mouse/CScrOptUnclutter.cpp
mouse/CScrOptPoint.cpp
mouse/CScrOptEditLine.cpp
mouse/CScrOptRange.cpp
+ mouse/CScrOptRangeTrk.cpp
gis/WptIcons.cpp
gis/CGisDraw.cpp
gis/IGisItem.cpp
@@ -90,6 +92,7 @@ set( SRCS
gis/trk/CGisItemTrk.cpp
gis/trk/CScrOptTrk.cpp
gis/trk/CDetailsTrk.cpp
+ gis/trk/CCombineTrk.cpp
gis/rte/CGisItemRte.cpp
gis/rte/CScrOptRte.cpp
gis/ovl/CGisItemOvlArea.cpp
@@ -176,10 +179,12 @@ set( HDRS
mouse/CMouseMoveWpt.h
mouse/CMouseEditTrk.h
mouse/CMouseEditArea.h
+ mouse/CMouseRangeTrk.h
mouse/CScrOptUnclutter.h
mouse/CScrOptPoint.h
mouse/CScrOptEditLine.h
mouse/CScrOptRange.h
+ mouse/CScrOptRangeTrk.h
gis/WptIcons.h
gis/CGisDraw.h
gis/IGisItem.h
@@ -191,7 +196,8 @@ set( HDRS
gis/wpt/CProjWpt.h
gis/trk/CGisItemTrk.h
gis/trk/CScrOptTrk.h
- gis/trk/CDetailsTrk.cpp
+ gis/trk/CDetailsTrk.h
+ gis/trk/CCombineTrk.h
gis/rte/CGisItemRte.h
gis/rte/CScrOptRte.h
gis/ovl/CGisItemOvlArea.h
@@ -231,6 +237,7 @@ set( UIS
mouse/IScrOptPoint.ui
mouse/IScrOptEditLine.ui
mouse/IScrOptRange.ui
+ mouse/IScrOptRangeTrk.ui
gis/IGisWidget.ui
gis/wpt/IScrOptWpt.ui
gis/wpt/IDetailsWpt.ui
@@ -238,6 +245,7 @@ set( UIS
gis/wpt/IProjWpt.ui
gis/trk/IScrOptTrk.ui
gis/trk/IDetailsTrk.ui
+ gis/trk/ICombineTrk.ui
gis/rte/IScrOptRte.ui
gis/ovl/IScrOptOvlArea.ui
gis/ovl/IDetailsOvlArea.ui
diff --git a/src/canvas/CCanvas.cpp b/src/canvas/CCanvas.cpp
index d14a1ed..6db7200 100644
--- a/src/canvas/CCanvas.cpp
+++ b/src/canvas/CCanvas.cpp
@@ -29,6 +29,7 @@
#include "mouse/CMouseMoveWpt.h"
#include "mouse/CMouseEditTrk.h"
#include "mouse/CMouseEditArea.h"
+#include "mouse/CMouseRangeTrk.h"
#include "gis/CGisWidget.h"
#include "gis/CGisDraw.h"
#include "gis/trk/CGisItemTrk.h"
@@ -181,6 +182,17 @@ void CCanvas::setMouseEditTrk(CGisItemTrk& trk)
}
}
+void CCanvas::setMouseRangeTrk(CGisItemTrk& trk)
+{
+ mouse->deleteLater();
+ mouse = new CMouseRangeTrk(trk, gis, this);
+ if(underMouse())
+ {
+ QApplication::restoreOverrideCursor();
+ QApplication::setOverrideCursor(*mouse);
+ }
+}
+
void CCanvas::setMouseEditArea(const QPointF& pt)
{
mouse->deleteLater();
@@ -232,9 +244,9 @@ void CCanvas::reportStatus(const QString& key, const QString& msg)
{
labelStatusMessages->show();
labelStatusMessages->setText(report);
- labelStatusMessages->adjustSize();
- update();
+ labelStatusMessages->adjustSize();
}
+ update();
}
void CCanvas::resizeEvent(QResizeEvent * e)
@@ -255,7 +267,7 @@ void CCanvas::resizeEvent(QResizeEvent * e)
QPoint p2(demLoadIndicator->width()>>1, demLoadIndicator->height()>>1);
demLoadIndicator->move(rect().center() - p2);
- labelStatusMessages->move(20,20);
+ labelStatusMessages->move(20,50);
if(plotTrackProfile)
{
@@ -486,7 +498,7 @@ void CCanvas::drawStatusMessages(QPainter& p)
{
QRect r = labelStatusMessages->rect();
r.adjust(-5, -5, 5, 5);
- r.moveTopLeft(QPoint(15,15));
+ r.moveTopLeft(QPoint(15,45));
p.setPen(CCanvas::penBorderGray);
p.setBrush(CCanvas::brushBackWhite);
p.drawRoundedRect(r, 5, 5);
diff --git a/src/canvas/CCanvas.h b/src/canvas/CCanvas.h
index dccb87d..e3d1851 100644
--- a/src/canvas/CCanvas.h
+++ b/src/canvas/CCanvas.h
@@ -100,10 +100,12 @@ class CCanvas : public QWidget
void resetMouse();
void setMouseMoveWpt(CGisItemWpt& wpt);
void setMouseEditTrk(CGisItemTrk& trk);
+ void setMouseRangeTrk(CGisItemTrk& trk);
void setMouseEditTrk(const QPointF& pt);
void setMouseEditArea(CGisItemOvlArea& area);
void setMouseEditArea(const QPointF& pt);
+
/**
@brief Add a message by key to be reported on the canvas
diff --git a/src/cursors/cursorSelectRange.png b/src/cursors/cursorSelectRange.png
index 0741d16..f5617f9 100644
Binary files a/src/cursors/cursorSelectRange.png and b/src/cursors/cursorSelectRange.png differ
diff --git a/src/gis/CGisListWks.cpp b/src/gis/CGisListWks.cpp
index 174c10e..23e8545 100644
--- a/src/gis/CGisListWks.cpp
+++ b/src/gis/CGisListWks.cpp
@@ -46,6 +46,8 @@ CGisListWks::CGisListWks(QWidget *parent)
actionProjWpt = menuItem->addAction(QIcon("://icons/32x32/WptProj.png"),tr("Proj. Waypoint..."), this, SLOT(slotProjWpt()));
actionFocusTrk = menuItem->addAction(QIcon("://icons/32x32/TrkProfile.png"),tr("Track Profile"));
actionEditTrk = menuItem->addAction(QIcon("://icons/32x32/LineMove.png"),tr("Edit Track Points"), this, SLOT(slotEditTrk()));
+ actionReverseTrk = menuItem->addAction(QIcon("://icons/32x32/Reverse.png"),tr("Reverse Track"), this, SLOT(slotReverseTrk()));
+ actionCombineTrk = menuItem->addAction(QIcon("://icons/32x32/Combine.png"),tr("Combine Tracks"), this, SLOT(slotCombineTrk()));
actionFocusTrk->setCheckable(true);
connect(actionFocusTrk, SIGNAL(triggered(bool)), this, SLOT(slotFocusTrk(bool)));
actionDelete = menuItem->addAction(QIcon("://icons/32x32/DeleteOne.png"),tr("Delete"), this, SLOT(slotDeleteItem()));
@@ -333,13 +335,17 @@ void CGisListWks::slotContextMenu(const QPoint& point)
{
actionFocusTrk->setVisible(false);
actionEditTrk->setVisible(false);
+ actionReverseTrk->setVisible(false);
+ actionCombineTrk->setVisible(false);
}
else
{
actionFocusTrk->setVisible(true);
actionEditTrk->setVisible(true);
+ actionReverseTrk->setVisible(true);
+ actionCombineTrk->setVisible(true);
actionFocusTrk->setChecked(trk->hasUserFocus());
- actionEditTrk->setEnabled(!trk->isReadOnly());
+ actionEditTrk->setEnabled(!trk->isReadOnly());
}
// display menu
QPoint p = mapToGlobal(point);
@@ -485,3 +491,27 @@ void CGisListWks::slotEditTrk()
}
IGisItem::mutexItems.unlock();
}
+
+void CGisListWks::slotReverseTrk()
+{
+ IGisItem::mutexItems.lock();
+ CGisItemTrk * gisItem = dynamic_cast<CGisItemTrk*>(currentItem());
+ if(gisItem != 0)
+ {
+ QString key = gisItem->getKey();
+ CGisWidget::self().reverseTrkByKey(key);
+ }
+ IGisItem::mutexItems.unlock();
+}
+
+void CGisListWks::slotCombineTrk()
+{
+ IGisItem::mutexItems.lock();
+ CGisItemTrk * gisItem = dynamic_cast<CGisItemTrk*>(currentItem());
+ if(gisItem != 0)
+ {
+ QString key = gisItem->getKey();
+ CGisWidget::self().combineTrkByKey(key);
+ }
+ IGisItem::mutexItems.unlock();
+}
diff --git a/src/gis/CGisListWks.h b/src/gis/CGisListWks.h
index 4d7d139..185da30 100644
--- a/src/gis/CGisListWks.h
+++ b/src/gis/CGisListWks.h
@@ -51,6 +51,8 @@ class CGisListWks : public QTreeWidget
void slotMoveWpt();
void slotFocusTrk(bool on);
void slotEditTrk();
+ void slotReverseTrk();
+ void slotCombineTrk();
private:
QMenu * menuProject;
@@ -65,6 +67,9 @@ class CGisListWks : public QTreeWidget
QAction * actionMoveWpt;
QAction * actionFocusTrk;
QAction * actionEditTrk;
+ QAction * actionReverseTrk;
+ QAction * actionCombineTrk;
+
};
diff --git a/src/gis/CGisWidget.cpp b/src/gis/CGisWidget.cpp
index e15c5c6..cea7831 100644
--- a/src/gis/CGisWidget.cpp
+++ b/src/gis/CGisWidget.cpp
@@ -267,6 +267,34 @@ void CGisWidget::cutTrkByKey(const QString& key)
emit sigChanged();
}
+void CGisWidget::reverseTrkByKey(const QString& key)
+{
+ IGisItem::mutexItems.lock();
+
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+ if(trk)
+ {
+ trk->reverse();
+ }
+ IGisItem::mutexItems.unlock();
+ emit sigChanged();
+
+}
+
+void CGisWidget::combineTrkByKey(const QString& key)
+{
+ IGisItem::mutexItems.lock();
+
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+ if(trk)
+ {
+ trk->combine();
+ }
+ IGisItem::mutexItems.unlock();
+ emit sigChanged();
+
+}
+
void CGisWidget::editTrkByKey(const QString& key)
{
IGisItem::mutexItems.lock();
@@ -284,6 +312,23 @@ void CGisWidget::editTrkByKey(const QString& key)
IGisItem::mutexItems.unlock();
}
+void CGisWidget::rangeTrkByKey(const QString& key)
+{
+ IGisItem::mutexItems.lock();
+
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+ if(trk != 0)
+ {
+ CCanvas * canvas = CMainWindow::self().getVisibleCanvas();
+ if(canvas != 0)
+ {
+ canvas->setMouseRangeTrk(*trk);
+ }
+ }
+
+ IGisItem::mutexItems.unlock();
+}
+
void CGisWidget::editAreaByKey(const QString& key)
{
IGisItem::mutexItems.lock();
diff --git a/src/gis/CGisWidget.h b/src/gis/CGisWidget.h
index f893165..47787b2 100644
--- a/src/gis/CGisWidget.h
+++ b/src/gis/CGisWidget.h
@@ -116,8 +116,16 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
void editTrkByKey(const QString& key);
+ void reverseTrkByKey(const QString& key);
+
+ void combineTrkByKey(const QString& key);
+
+ void rangeTrkByKey(const QString& key);
+
void editAreaByKey(const QString& key);
+
+
/**
@brief Select a project via dialog
diff --git a/src/gis/trk/CCombineTrk.cpp b/src/gis/trk/CCombineTrk.cpp
new file mode 100644
index 0000000..7b47244
--- /dev/null
+++ b/src/gis/trk/CCombineTrk.cpp
@@ -0,0 +1,205 @@
+/**********************************************************************************************
+ Copyright (C) 2014 Oliver Eichler oliver.eichler at gmx.de
+
+ 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 3 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, see <http://www.gnu.org/licenses/>.
+
+**********************************************************************************************/
+
+#include "gis/trk/CCombineTrk.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/CGisProject.h"
+#include "plot/CPlotTrack.h"
+
+#include <QtWidgets>
+
+CCombineTrk::CCombineTrk(CGisItemTrk& trk, CGisProject& project, QWidget * parent)
+ : QDialog(parent)
+ , trk(trk)
+ , project(project)
+{
+ setupUi(this);
+
+ const int N = project.childCount();
+ for(int i = 0; i < N; i++)
+ {
+ CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(project.child(i));
+ if(trk1 == 0)
+ {
+ continue;
+ }
+
+ if(trk.getKey() == trk1->getKey())
+ {
+ continue;
+ }
+
+ QListWidgetItem * item = new QListWidgetItem(listAvailable);
+ item->setText(trk1->getName());
+ item->setIcon(trk1->getIcon());
+ item->setData(Qt::UserRole, trk1->getKey());
+ }
+
+ QListWidgetItem * item = new QListWidgetItem(listSelected);
+ item->setText(trk.getName());
+ item->setIcon(trk.getIcon());
+ item->setData(Qt::UserRole, trk.getKey());
+
+ connect(listAvailable, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
+ connect(listSelected, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
+ connect(toolSelect, SIGNAL(clicked()), this, SLOT(slotSelect()));
+ connect(toolRemove, SIGNAL(clicked()), this, SLOT(slotRemove()));
+ connect(toolUp, SIGNAL(clicked()), this, SLOT(slotUp()));
+ connect(toolDown, SIGNAL(clicked()), this, SLOT(slotDown()));
+
+ listAvailable->setCurrentItem(0);
+ listSelected->setCurrentItem(0);
+
+ slotSelectionChanged();
+ updatePreview();
+
+}
+
+CCombineTrk::~CCombineTrk()
+{
+
+}
+
+void CCombineTrk::accept()
+{
+ for(int i = 0; i < listSelected->count(); i++)
+ {
+ QString key = listSelected->item(i)->data(Qt::UserRole).toString();
+ CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(project.getItemByKey(key));
+ if(trk1 == 0)
+ {
+ continue;
+ }
+ keys << key;
+ }
+
+ QDialog::accept();
+}
+
+void CCombineTrk::slotSelectionChanged()
+{
+ QListWidgetItem * item;
+ item = listAvailable->currentItem();
+ toolSelect->setEnabled(item != 0);
+
+ item = listSelected->currentItem();
+ toolRemove->setEnabled(item != 0);
+ toolUp->setEnabled(item != 0);
+ toolDown->setEnabled(item != 0);
+
+ if(item)
+ {
+ if(listSelected->row(item) == 0)
+ {
+ toolUp->setEnabled(false);
+ }
+ if(listSelected->row(item) == (listSelected->count() - 1))
+ {
+ toolDown->setEnabled(false);
+ }
+ }
+
+ buttonBox->button(QDialogButtonBox::Ok)->setEnabled(listSelected->count() > 1);
+}
+
+void CCombineTrk::slotSelect()
+{
+ QListWidgetItem * item;
+ item = listAvailable->currentItem();
+
+ if(item == 0)
+ {
+ return;
+ }
+
+ listAvailable->takeItem(listAvailable->row(item));
+ listSelected->addItem(item);
+
+ slotSelectionChanged();
+ updatePreview();
+}
+
+void CCombineTrk::slotRemove()
+{
+ QListWidgetItem * item;
+ item = listSelected->currentItem();
+
+ if((item == 0) || (item->data(Qt::UserRole).toString() == trk.getKey()))
+ {
+ return;
+ }
+
+ listSelected->takeItem(listSelected->row(item));
+ listAvailable->addItem(item);
+
+ slotSelectionChanged();
+ updatePreview();
+}
+
+void CCombineTrk::slotUp()
+{
+ QListWidgetItem * item = listSelected->currentItem();
+ if(item)
+ {
+ int row = listSelected->row(item);
+ if(row == 0) return;
+ listSelected->takeItem(row);
+ row = row - 1;
+ listSelected->insertItem(row,item);
+ listSelected->setCurrentItem(item);
+ }
+ updatePreview();
+
+}
+
+void CCombineTrk::slotDown()
+{
+ QListWidgetItem * item = listSelected->currentItem();
+ if(item)
+ {
+ int row = listSelected->row(item);
+ if(row == (listSelected->count() - 1)) return;
+ listSelected->takeItem(row);
+ row = row + 1;
+ listSelected->insertItem(row,item);
+ listSelected->setCurrentItem(item);
+ }
+
+ updatePreview();
+}
+
+void CCombineTrk::updatePreview()
+{
+ QPolygonF line;
+ for(int i = 0; i < listSelected->count(); i++)
+ {
+ QString key = listSelected->item(i)->data(Qt::UserRole).toString();
+ CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(project.getItemByKey(key));
+ if(trk1 == 0)
+ {
+ continue;
+ }
+ QPolygonF line1;
+ trk1->getData(line1);
+
+ line += line1;
+ }
+
+ plotTrack->setTrack(line);
+ plotTrack->update();
+}
diff --git a/src/gis/trk/CScrOptTrk.h b/src/gis/trk/CCombineTrk.h
similarity index 59%
copy from src/gis/trk/CScrOptTrk.h
copy to src/gis/trk/CCombineTrk.h
index 1ea7586..bdcecac 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/gis/trk/CCombineTrk.h
@@ -16,36 +16,41 @@
**********************************************************************************************/
-#ifndef CSCROPTTRK_H
-#define CSCROPTTRK_H
+#ifndef CCOMBINETRK_H
+#define CCOMBINETRK_H
-#include "mouse/IScrOpt.h"
-#include "ui_IScrOptTrk.h"
+#include <QDialog>
+#include "ui_ICombineTrk.h"
class CGisItemTrk;
-class IMouse;
+class CGisProject;
-class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
+class CCombineTrk : public QDialog, private Ui::ICombineTrk
{
Q_OBJECT
public:
- CScrOptTrk(CGisItemTrk * trk, const QPoint &point, IMouse *parent);
- virtual ~CScrOptTrk();
+ CCombineTrk(CGisItemTrk& trk, CGisProject& project, QWidget * parent);
+ virtual ~CCombineTrk();
- void draw(QPainter& p);
+ const QStringList& getTrackKeys(){return keys;}
- private slots:
- void slotDelete();
- void slotEditDetails();
- void slotProfile(bool on);
- void slotCut();
- void slotEdit();
+ public slots:
+ void accept();
+ private slots:
+ void slotSelectionChanged();
+ void slotSelect();
+ void slotRemove();
+ void slotUp();
+ void slotDown();
private:
- QString key;
- QPointF anchor;
+ void updatePreview();
+ CGisItemTrk& trk;
+ CGisProject& project;
+
+ QStringList keys;
};
-#endif //CSCROPTTRK_H
+#endif //CCOMBINETRK_H
diff --git a/src/gis/trk/CDetailsTrk.cpp b/src/gis/trk/CDetailsTrk.cpp
index d61151f..e1ad9e7 100644
--- a/src/gis/trk/CDetailsTrk.cpp
+++ b/src/gis/trk/CDetailsTrk.cpp
@@ -129,7 +129,7 @@ void CDetailsTrk::setupGui()
}
}
- item->setText(eColNum,QString::number(trkpt.idx));
+ item->setText(eColNum,QString::number(trkpt.idxTotal));
if(trkpt.time.isValid())
{
item->setText(eColTime, IUnit::self().datetime2string(trkpt.time, true, QPointF(trkpt.lon, trkpt.lat)*DEG_TO_RAD));
@@ -226,7 +226,7 @@ void CDetailsTrk::setMouseClickFocus(const CGisItemTrk::trkpt_t * pt)
if(pt != 0)
{
treeWidget->blockSignals(true);
- treeWidget->setCurrentItem(treeWidget->topLevelItem(pt->idx));
+ treeWidget->setCurrentItem(treeWidget->topLevelItem(pt->idxTotal));
treeWidget->blockSignals(false);
}
}
diff --git a/src/gis/trk/CGisItemTrk.cpp b/src/gis/trk/CGisItemTrk.cpp
index b22b741..011eaee 100644
--- a/src/gis/trk/CGisItemTrk.cpp
+++ b/src/gis/trk/CGisItemTrk.cpp
@@ -19,8 +19,10 @@
#include "gis/trk/CGisItemTrk.h"
#include "gis/trk/CScrOptTrk.h"
#include "gis/trk/CDetailsTrk.h"
+#include "gis/trk/CCombineTrk.h"
#include "gis/CGisProject.h"
#include "gis/CGisDraw.h"
+#include "gis/CGisWidget.h"
#include "plot/IPlot.h"
#include "CMainWindow.h"
#include "GeoMath.h"
@@ -100,24 +102,25 @@ const QPen CGisItemTrk::penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap,
QString CGisItemTrk::keyUserFocus;
/// used to create a new track from a part of an existing track
-CGisItemTrk::CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t& srctrk, CGisProject * project)
+CGisItemTrk::CGisItemTrk(const QString &name, quint32 idx1, quint32 idx2, const trk_t& srctrk, CGisProject * project)
: IGisItem(project, eTypeTrk, -1)
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+ , drawMode(eDrawNormal)
, mouseMoveFocus(0)
, mouseClickFocus(0)
{
- flags = eFlagCreatedInQms|eFlagWriteAllowed;
+ flags = eFlagCreatedInQms;
foreach(const trkseg_t& srcseg, srctrk.segs)
{
trkseg_t seg;
foreach(const trkpt_t& srcpt, srcseg.pts)
{
- if(srcpt.idx < idx1)
+ if(srcpt.idxTotal < idx1)
{
continue;
}
- if(srcpt.idx > idx2)
+ if(srcpt.idxTotal > idx2)
{
break;
}
@@ -131,7 +134,7 @@ CGisItemTrk::CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t& srctrk, CGisPr
}
}
- trk.name = srctrk.name + QString(" (%1 - %2)").arg(idx1).arg(idx2);
+ trk.name = name;
trk.cmt = srctrk.cmt;
trk.desc = srctrk.desc;
trk.src = srctrk.src;
@@ -154,6 +157,7 @@ CGisItemTrk::CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t& srctrk, CGisPr
CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, CGisProject * project, int idx)
: IGisItem(project, eTypeTrk, idx)
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+ , drawMode(eDrawNormal)
, mouseMoveFocus(0)
, mouseClickFocus(0)
{
@@ -168,14 +172,15 @@ CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, CGisProject * project, in
}
/// usd to create a track from a line of coordinates
-CGisItemTrk::CGisItemTrk(const QPolygonF& line, const QString& name, CGisProject * project, int idx)
+CGisItemTrk::CGisItemTrk(const QPolygonF& l, const QString& name, CGisProject * project, int idx)
: IGisItem(project, eTypeTrk, idx)
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+ , drawMode(eDrawNormal)
, mouseMoveFocus(0)
, mouseClickFocus(0)
{
trk.name = name;
- readLine(line);
+ readLine(l);
flags |= eFlagCreatedInQms|eFlagWriteAllowed;
@@ -191,6 +196,7 @@ CGisItemTrk::CGisItemTrk(const QPolygonF& line, const QString& name, CGisProject
CGisItemTrk::CGisItemTrk(const QDomNode& xml, CGisProject * project)
: IGisItem(project, eTypeTrk, project->childCount())
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+ , drawMode(eDrawNormal)
, mouseMoveFocus(0)
, mouseClickFocus(0)
{
@@ -223,7 +229,7 @@ CGisItemTrk::~CGisItemTrk()
}
-void CGisItemTrk::setData(const QPolygonF &line)
+void CGisItemTrk::setData(const QPolygonF &l)
{
/*
as this will change the line significantly we better stop
@@ -233,7 +239,7 @@ void CGisItemTrk::setData(const QPolygonF &line)
mouseMoveFocus = 0;
delete dlgDetails;
- readLine(line);
+ readLine(l);
flags |= eFlagTainted;
setText(1,"*");
@@ -242,9 +248,9 @@ void CGisItemTrk::setData(const QPolygonF &line)
changed(QObject::tr("Changed trackpoints, sacrificed all previous data."));
}
-void CGisItemTrk::getData(QPolygonF &line)
+void CGisItemTrk::getData(QPolygonF &l)
{
- line.clear();
+ l.clear();
foreach (const trkseg_t& seg, trk.segs)
{
foreach(const trkpt_t& pt, seg.pts)
@@ -253,27 +259,27 @@ void CGisItemTrk::getData(QPolygonF &line)
{
continue;
}
- line << QPointF(pt.lon * DEG_TO_RAD, pt.lat * DEG_TO_RAD);
+ l << QPointF(pt.lon * DEG_TO_RAD, pt.lat * DEG_TO_RAD);
}
}
}
-void CGisItemTrk::readLine(const QPolygonF &line)
+void CGisItemTrk::readLine(const QPolygonF &l)
{
trk.segs.clear();
trk.segs.resize(1);
trkseg_t& seg = trk.segs.first();
- seg.pts.resize(line.size());
+ seg.pts.resize(l.size());
- QPolygonF ele(line.size());
- CMainWindow::self().getEelevationAt(line, ele);
+ QPolygonF ele(l.size());
+ CMainWindow::self().getEelevationAt(l, ele);
- for(int i = 0; i < line.size(); i++)
+ for(int i = 0; i < l.size(); i++)
{
trkpt_t& trkpt = seg.pts[i];
- const QPointF& pt = line[i];
+ const QPointF& pt = l[i];
trkpt.lon = pt.x() * RAD_TO_DEG;
trkpt.lat = pt.y() * RAD_TO_DEG;
@@ -365,6 +371,60 @@ QString CGisItemTrk::getInfo()
return str;
}
+QString CGisItemTrk::getInfoRange()
+{
+ qreal tmp, d, slope1, slope2;
+ QString str, val, unit;
+ if(mouseClickFocus == 0 || mouseMoveFocus == 0)
+ {
+ return str;
+ }
+
+ int idx1 = mouseClickFocus->idxTotal;
+ int idx2 = mouseMoveFocus->idxTotal;
+ const trkpt_t * pt1, * pt2;
+ if(idx1 < idx2)
+ {
+ pt1 = mouseClickFocus;
+ pt2 = mouseMoveFocus;
+ }
+ else
+ {
+ pt1 = mouseMoveFocus;
+ pt2 = mouseClickFocus;
+ }
+
+ d = tmp = pt2->distance - pt1->distance;
+ IUnit::self().meter2distance(tmp, val, unit);
+ str += QString("%3 %1%2\n").arg(val).arg(unit).arg(QChar(0x21A6));
+ if(pt1->time.isValid() && pt2->time.isValid())
+ {
+ quint32 t = pt2->time.toTime_t() - pt1->time.toTime_t();
+ quint32 hh = t / 3600;
+ quint32 mm = (t - hh * 3600) / 60;
+ quint32 ss = (t - hh * 3600 - mm * 60);
+
+ str += QString("%4 %1:%2:%3\n").arg(hh,2,10,QChar('0')).arg(mm,2,10,QChar('0')).arg(ss,2,10,QChar('0')).arg(QChar(0x231a));
+ }
+
+ tmp = atan((pt2->ascend - pt1->ascend)/d);
+ slope1 = qAbs(tmp * 360.0/(2 * M_PI));
+ slope2 = qTan(slope1 * DEG_TO_RAD) * 100;
+
+ IUnit::self().meter2elevation(pt2->ascend - pt1->ascend, val, unit);
+ str += QString("%3 %1%2 (%4%5, %6%)\n").arg(val).arg(unit).arg(QChar(0x2197)).arg(qRound(slope1)).arg(QChar(0260)).arg(qRound(slope2));
+
+ tmp = atan((pt2->descend - pt1->descend)/d);
+ slope1 = qAbs(tmp * 360.0/(2 * M_PI));
+ slope2 = qTan(slope1 * DEG_TO_RAD) * 100;
+
+ IUnit::self().meter2elevation(pt2->descend - pt1->descend, val, unit);
+ str += QString("%3 %1%2 (%4%5, %6%)").arg(val).arg(unit).arg(QChar(0x2198)).arg(qRound(slope1)).arg(QChar(0260)).arg(qRound(slope2));
+
+
+ return str;
+}
+
QString CGisItemTrk::getInfoTrkPt(const trkpt_t& pt)
{
@@ -446,7 +506,7 @@ QPointF CGisItemTrk::getPointCloseBy(const QPoint& screenPos)
qint32 i = 0;
qint32 idx = -1;
qint32 d = NOINT;
- foreach(const QPointF& point, line)
+ foreach(const QPointF& point, lineSimple)
{
int tmp = (screenPos - point).manhattanLength();
if(tmp < d)
@@ -465,7 +525,7 @@ QPointF CGisItemTrk::getPointCloseBy(const QPoint& screenPos)
const trkpt_t * newPointOfFocus = getVisibleTrkPtByIndex(idx);
publishMouseFocus(newPointOfFocus, eFocusMouseClick, 0);
- return line[idx];
+ return lineSimple[idx];
}
void CGisItemTrk::readTrk(const QDomNode& xml, trk_t& trk)
@@ -617,13 +677,13 @@ void CGisItemTrk::deriveSecondaryData()
{
trkpt_t& trkpt = seg.pts[p];
- trkpt.idx = cntTotalPoints++;
+ trkpt.idxTotal = cntTotalPoints++;
if(trkpt.flags & trkpt_t::eDeleted)
{
trkpt.reset();
continue;
}
- cntVisiblePoints++;
+ trkpt.idxVisible = cntVisiblePoints++;
if(trkpt.lon < west) west = trkpt.lon;
if(trkpt.lon > east) east = trkpt.lon;
@@ -796,7 +856,7 @@ void CGisItemTrk::deriveSecondaryData()
bool CGisItemTrk::isCloseTo(const QPointF& pos)
{
- foreach(const QPointF& pt, line)
+ foreach(const QPointF& pt, lineSimple)
{
if((pt - pos).manhattanLength() < MIN_DIST_CLOSE_TO)
{
@@ -836,49 +896,303 @@ bool CGisItemTrk::cut()
return false;
}
+ QString name1 = getName() + QString(" (%1 - %2)").arg(0).arg(mouseClickFocus->idxTotal);
+ name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name1);
+ if(name1.isEmpty())
+ {
+ return false;
+ }
+ new CGisItemTrk(name1, 0, mouseClickFocus->idxTotal, trk, project);
- new CGisItemTrk(0, mouseClickFocus->idx, trk, project);
- new CGisItemTrk(mouseClickFocus->idx, cntTotalPoints-1, trk, project);
+ name1 = getName() + QString(" (%1 - %2)").arg(mouseClickFocus->idxTotal).arg(cntTotalPoints-1);
+ name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name1);
+ if(name1.isEmpty())
+ {
+ return false;
+ }
+ new CGisItemTrk(name1, mouseClickFocus->idxTotal, cntTotalPoints-1, trk, project);
return true;
}
+void CGisItemTrk::reverse()
+{
+ CGisProject * project = dynamic_cast<CGisProject*>(parent());
+ if(project == 0)
+ {
+ return;
+ }
+
+ QString name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, getName() + "_rev");
+ if(name1.isEmpty())
+ {
+ return;
+ }
+
+ CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1);
+
+ trk1->trk.name = name1;
+ trk1->trk.segs.clear();
+ foreach(const trkseg_t& seg, trk.segs)
+ {
+ trkseg_t seg1;
+ foreach(const trkpt_t& pt, seg.pts)
+ {
+ trkpt_t pt1 = pt;
+ pt1.time = QDateTime();
+
+ seg1.pts.push_front(pt1);
+ }
+ trk1->trk.segs.push_front(seg1);
+ }
+ trk1->deriveSecondaryData();
+ trk1->setText(0, trk1->getName());
+ trk1->setToolTip(0, trk1->getInfo());
+ trk1->setText(1,"*");
+ project->setText(1,"*");
+
+}
+
+void CGisItemTrk::combine()
+{
+ CGisProject * project = dynamic_cast<CGisProject*>(parent());
+ if(project == 0)
+ {
+ return;
+ }
+
+ CCombineTrk dlg(*this, *project, 0);
+ dlg.exec();
+
+ QStringList keys = dlg.getTrackKeys();
+ if(keys.isEmpty())
+ {
+ return;
+ }
+
+ QString name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, getName() + " & other");
+ if(name1.isEmpty())
+ {
+ return;
+ }
+
+ CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1);
+
+ trk1->trk.name = name1;
+ trk1->trk.segs.clear();
+ foreach(const QString& key, keys)
+ {
+ CGisItemTrk * trk2 = dynamic_cast<CGisItemTrk*>(project->getItemByKey(key));
+ if(trk2 == 0)
+ {
+ continue;
+ }
+
+ trk1->trk.segs += trk2->trk.segs;
+ }
+
+ trk1->deriveSecondaryData();
+ trk1->setText(0, trk1->getName());
+ trk1->setToolTip(0, trk1->getInfo());
+ trk1->setText(1,"*");
+ project->setText(1,"*");
+
+}
+
+void CGisItemTrk::hideSelectedPoints()
+{
+
+ if((mouseClickFocus == 0) && (mouseMoveFocus == 0))
+ {
+ return;
+ }
+
+ quint32 idx1 = mouseClickFocus->idxTotal;
+ quint32 idx2 = mouseMoveFocus->idxTotal;
+
+ if(idx1 > idx2)
+ {
+ qSwap(idx1,idx2);
+ }
+
+ for(int s = 0; s < trk.segs.size(); s++)
+ {
+ trkseg_t& seg = trk.segs[s];
+ for(int i = 0; i < seg.pts.size(); i++)
+ {
+ trkpt_t& trkpt = seg.pts[i];
+
+ if((idx1 < trkpt.idxTotal) && (trkpt.idxTotal < idx2))
+ {
+ trkpt.flags |= trkpt_t::eDeleted;
+ }
+ }
+ }
+ mouseClickFocus = 0;
+ mouseMoveFocus = 0;
+ deriveSecondaryData();
+ setToolTip(0, getInfo());
+ setText(1,"*");
+ parent()->setText(1,"*");
+}
+
+void CGisItemTrk::showSelectedPoints()
+{
+ if((mouseClickFocus == 0) && (mouseMoveFocus == 0))
+ {
+ return;
+ }
+
+ quint32 idx1 = mouseClickFocus->idxTotal;
+ quint32 idx2 = mouseMoveFocus->idxTotal;
+
+ if(idx1 > idx2)
+ {
+ qSwap(idx1,idx2);
+ }
+
+ for(int s = 0; s < trk.segs.size(); s++)
+ {
+ trkseg_t& seg = trk.segs[s];
+ for(int i = 0; i < seg.pts.size(); i++)
+ {
+ trkpt_t& trkpt = seg.pts[i];
+
+ if((idx1 < trkpt.idxTotal) && (trkpt.idxTotal < idx2))
+ {
+ trkpt.flags &= ~trkpt_t::eDeleted;
+ }
+ }
+ }
+ mouseClickFocus = 0;
+ mouseMoveFocus = 0;
+ deriveSecondaryData();
+ setToolTip(0, getInfo());
+ setText(1,"*");
+ parent()->setText(1,"*");
+}
+
+void CGisItemTrk::copySelectedPoints()
+{
+ if((mouseClickFocus == 0) && (mouseMoveFocus == 0))
+ {
+ return;
+ }
+
+ quint32 idx1 = mouseClickFocus->idxTotal;
+ quint32 idx2 = mouseMoveFocus->idxTotal;
+
+ if(idx1 > idx2)
+ {
+ qSwap(idx1,idx2);
+ }
+
+ CGisProject * project = CGisWidget::self().selectProject();
+ if(project == 0)
+ {
+ return;
+ }
+
+ QString name1 = getName() + QString(" (%1 - %2)").arg(idx1).arg(idx2);
+ name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name1);
+ if(name1.isEmpty())
+ {
+ return;
+ }
+ new CGisItemTrk(name1, idx1, idx2, trk, project);
+}
+
void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
{
- line.clear();
+ lineSimple.clear();
+ lineFull.clear();
+
if(!viewport.intersects(boundingRect))
{
return;
}
- QPointF pt1;
-
+ QPointF pt1;
QPointF p1 = viewport.topLeft();
QPointF p2 = viewport.bottomRight();
gis->convertRad2Px(p1);
gis->convertRad2Px(p2);
QRectF extViewport(p1,p2);
- foreach (const trkseg_t& seg, trk.segs)
+ if(drawMode == eDrawNormal)
{
- foreach(const trkpt_t& pt, seg.pts)
+ // in normal mode the trackline without points marked as deleted is drawn
+ foreach (const trkseg_t& seg, trk.segs)
{
- if(pt.flags & trkpt_t::eDeleted)
+ foreach(const trkpt_t& pt, seg.pts)
{
- continue;
+ if(pt.flags & trkpt_t::eDeleted)
+ {
+ continue;
+ }
+
+ pt1.setX(pt.lon);
+ pt1.setY(pt.lat);
+ pt1 *= DEG_TO_RAD;
+ lineSimple << pt1;
}
+ }
+ }
+ else
+ {
+ // in full mode the complete track including points marked as deleted
+ // is drawn as gray line first. Then the track without points marked as
+ // deleted is drawn with it's configured color
+ foreach (const trkseg_t& seg, trk.segs)
+ {
+ foreach(const trkpt_t& pt, seg.pts)
+ {
+ pt1.setX(pt.lon);
+ pt1.setY(pt.lat);
+ pt1 *= DEG_TO_RAD;
- pt1.setX(pt.lon);
- pt1.setY(pt.lat);
- pt1 *= DEG_TO_RAD;
- line << pt1;
+ lineFull << pt1;
+
+ if(pt.flags & trkpt_t::eDeleted)
+ {
+ continue;
+ }
+
+ lineSimple << pt1;
+ }
}
}
+ gis->convertRad2Px(lineSimple);
+ gis->convertRad2Px(lineFull);
+
+ // draw the full line first
+ if(drawMode == eDrawRange)
+ {
+ QList<QPolygonF> lines;
+ splitLineToViewport(lineFull, extViewport, lines);
+
+ p.setPen(QPen(Qt::lightGray,5,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+
+ foreach(const QPolygonF& l, lines)
+ {
+ p.drawPolyline(l);
+ }
- gis->convertRad2Px(line);
+ QPixmap bullet("://icons/8x8/bullet_dark_gray.png");
+ foreach(const QPolygonF& l, lines)
+ {
+ foreach(const QPointF& pt, l)
+ {
+ p.drawPixmap(pt.x() - 3, pt.y() - 3, bullet);
+ }
+ }
+
+ }
+ // -------------------------
+ // draw the reduced track line
QList<QPolygonF> lines;
- splitLineToViewport(line, extViewport, lines);
+ splitLineToViewport(lineSimple, extViewport, lines);
if(key == keyUserFocus)
{
@@ -901,7 +1215,8 @@ void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
foreach(const QPolygonF& l, lines)
{
p.drawPolyline(l);
- }
+ }
+ // -------------------------
}
void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
@@ -997,7 +1312,6 @@ void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
p.drawPixmap(anchor - QPointF(4,4), QPixmap(bulletColors[colorIdx]));
}
-
}
void CGisItemTrk::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
@@ -1008,12 +1322,35 @@ void CGisItemTrk::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &
void CGisItemTrk::drawHighlight(QPainter& p)
{
- if(line.isEmpty() || key == keyUserFocus)
+ if(lineSimple.isEmpty() || key == keyUserFocus)
{
return;
}
p.setPen(QPen(QColor(255,0,0,100),11,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
- p.drawPolyline(line);
+ p.drawPolyline(lineSimple);
+}
+
+void CGisItemTrk::drawRange(QPainter& p)
+{
+ if((mouseClickFocus != 0) && (mouseMoveFocus != 0))
+ {
+ int idx1 = mouseClickFocus->idxVisible;
+ int idx2 = mouseMoveFocus->idxVisible;
+
+ if(idx1 > idx2)
+ {
+ qSwap(idx1,idx2);
+ }
+
+ QPolygonF line = lineSimple.mid(idx1, idx2 - idx1 + 1);
+
+ p.setPen(QPen(Qt::red, 12, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+ p.drawPolyline(line);
+ foreach(const QPointF& pt, line)
+ {
+ p.drawPixmap(pt.x() - 3, pt.y() - 3, bullet);
+ }
+ }
}
void CGisItemTrk::setName(const QString& str)
@@ -1149,11 +1486,12 @@ void CGisItemTrk::setMouseFocusByTime(quint32 time, focusmode_e mode, IPlot * in
}
-void CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
+QPointF CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
{
const trkpt_t * newPointOfFocus = 0;
+ quint32 idx = 0;
- if(hasUserFocus() && (pt != NOPOINT))
+ if((hasUserFocus() || (drawMode == eDrawRange)) && (pt != NOPOINT))
{
/*
Iterate over the polyline used to draw the track as it contains screen
@@ -1164,10 +1502,9 @@ void CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
until the visible index is reached. This is done by getVisibleTrkPtByIndex().
*/
- quint32 i = 0;
- quint32 idx = 0;
- qint32 d = NOINT;
- foreach(const QPointF& point, line)
+ quint32 i = 0;
+ qint32 d = NOINT;
+ foreach(const QPointF& point, lineSimple)
{
int tmp = (pt - point).manhattanLength();
if(tmp < d)
@@ -1184,6 +1521,8 @@ void CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
}
}
publishMouseFocus(newPointOfFocus, mode, 0);
+
+ return newPointOfFocus ? lineSimple[idx] : NOPOINTF;
}
@@ -1195,7 +1534,7 @@ void CGisItemTrk::setMouseFocusByIndex(quint32 idx, focusmode_e mode)
{
foreach(const trkpt_t& pt, seg.pts)
{
- if(pt.idx == idx)
+ if(pt.idxTotal == idx)
{
newPointOfFocus = &pt;
publishMouseFocus(newPointOfFocus, mode, 0);
diff --git a/src/gis/trk/CGisItemTrk.h b/src/gis/trk/CGisItemTrk.h
index eada1ce..3d728fa 100644
--- a/src/gis/trk/CGisItemTrk.h
+++ b/src/gis/trk/CGisItemTrk.h
@@ -45,21 +45,29 @@ class CGisItemTrk : public IGisItem, public IGisLine
,eFocusMouseClick
};
- CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t &srctrk, CGisProject * project);
+ enum drawmode_e
+ {
+ eDrawNormal
+ , eDrawRange
+ };
+
+ CGisItemTrk(const QString& name, quint32 idx1, quint32 idx2, const trk_t &srctrk, CGisProject * project);
CGisItemTrk(const CGisItemTrk& parentTrk, CGisProject * project, int idx);
- CGisItemTrk(const QPolygonF& line, const QString &name, CGisProject * project, int idx);
+ CGisItemTrk(const QPolygonF& l, const QString &name, CGisProject * project, int idx);
CGisItemTrk(const QDomNode &xml, CGisProject *project);
virtual ~CGisItemTrk();
const QString& getName(){return trk.name;}
int getColorIdx(){return colorIdx;}
QString getInfo();
+ QString getInfoRange();
QString getInfoTrkPt(const trkpt_t& pt);
QString getInfoProgress(const trkpt_t& pt);
quint32 getTotalElapsedSeconds(){return totalElapsedSeconds;}
void setName(const QString& str);
void setColor(int idx);
+ void setDrawMode(drawmode_e mode){drawMode = mode;}
IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
QPointF getPointCloseBy(const QPoint& screenPos);
@@ -69,10 +77,11 @@ class CGisItemTrk : public IGisItem, public IGisLine
void drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis);
void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
void drawHighlight(QPainter& p);
+ void drawRange(QPainter& p);
void save(QDomNode& gpx);
- void setData(const QPolygonF& line);
- void getData(QPolygonF& line);
+ void setData(const QPolygonF& l);
+ void getData(QPolygonF& l);
/**
@brief Switch user focus on and off.
@@ -93,6 +102,28 @@ class CGisItemTrk : public IGisItem, public IGisLine
@return Return true on success.
*/
bool cut();
+
+ /**
+ @brief Reverse the complete track
+
+ @note All timestamps will be removed
+ */
+ void reverse();
+
+ /**
+ @brief Combine this track with several others.
+
+ Handle the complete process of selecting tracks, choosing the order and
+ the final name with dialogs.
+ */
+ void combine();
+
+ void hideSelectedPoints();
+
+ void showSelectedPoints();
+
+ void copySelectedPoints();
+
/**
@brief Check for user focus
@@ -146,7 +177,7 @@ class CGisItemTrk : public IGisItem, public IGisLine
@param pt a point on the screen in pixel.
*/
- void setMouseFocusByPoint(const QPoint& pt, focusmode_e mode);
+ QPointF setMouseFocusByPoint(const QPoint& pt, focusmode_e mode);
/**
@brief Use point with given index counter
@@ -166,7 +197,7 @@ class CGisItemTrk : public IGisItem, public IGisLine
void deriveSecondaryData();
const trkpt_t *getVisibleTrkPtByIndex(quint32 idx);
void publishMouseFocus(const trkpt_t * pt, focusmode_e mode, IPlot *initiator);
- void readLine(const QPolygonF &line);
+ void readLine(const QPolygonF &l);
public:
struct trkpt_t : public wpt_t
@@ -190,15 +221,14 @@ class CGisItemTrk : public IGisItem, public IGisLine
enum flag_e
{
- eSelected = 0x00000001 ///< selected by track info view
-// ,eCursor = 0x00000002 ///< selected by cursor
- ,eDeleted = 0x00000004 ///< mark point as deleted
-// ,eFocus = 0x00000008 ///< mark current point of user focus
- ,eAllowEdit = 0x80000000
+ eDeleted = 0x00000004 ///< mark point as deleted
};
quint32 flags;
- quint32 idx;
+ /// index within the complete track
+ quint32 idxTotal;
+ /// offset into lineSimple
+ qint32 idxVisible;
/// the distance to the last point
qreal deltaDistance;
@@ -254,6 +284,8 @@ class CGisItemTrk : public IGisItem, public IGisLine
QPen penForeground;
+ drawmode_e drawMode;
+
quint32 cntTotalPoints;
quint32 cntVisiblePoints;
QDateTime timeStart;
@@ -271,7 +303,9 @@ class CGisItemTrk : public IGisItem, public IGisLine
/// the track line color by index
unsigned colorIdx;
/// the current track line as screen pixel coordinates
- QPolygonF line;
+ QPolygonF lineSimple;
+ /// visible and invisible points
+ QPolygonF lineFull;
/**
A list of plot objects that need to get informed on any change in data.
diff --git a/src/gis/trk/CScrOptTrk.cpp b/src/gis/trk/CScrOptTrk.cpp
index 231a1db..b504ba7 100644
--- a/src/gis/trk/CScrOptTrk.cpp
+++ b/src/gis/trk/CScrOptTrk.cpp
@@ -45,6 +45,9 @@ CScrOptTrk::CScrOptTrk(CGisItemTrk * trk, const QPoint& point, IMouse *parent)
connect(toolProfile, SIGNAL(toggled(bool)), this, SLOT(slotProfile(bool)));
connect(toolCut, SIGNAL(clicked()), this, SLOT(slotCut()));
connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
+ connect(toolReverse, SIGNAL(clicked()), this, SLOT(slotReverse()));
+ connect(toolCombine, SIGNAL(clicked()), this, SLOT(slotCombine()));
+ connect(toolRange, SIGNAL(clicked()), this, SLOT(slotRange()));
}
CScrOptTrk::~CScrOptTrk()
@@ -82,6 +85,25 @@ void CScrOptTrk::slotEdit()
deleteLater();
}
+void CScrOptTrk::slotReverse()
+{
+ CGisWidget::self().reverseTrkByKey(key);
+ deleteLater();
+}
+
+void CScrOptTrk::slotCombine()
+{
+ CGisWidget::self().combineTrkByKey(key);
+ deleteLater();
+
+}
+
+void CScrOptTrk::slotRange()
+{
+ CGisWidget::self().rangeTrkByKey(key);
+ deleteLater();
+}
+
void CScrOptTrk::draw(QPainter& p)
{
IGisItem * item = CGisWidget::self().getItemByKey(key);
diff --git a/src/gis/trk/CScrOptTrk.h b/src/gis/trk/CScrOptTrk.h
index 1ea7586..5ac73d2 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/gis/trk/CScrOptTrk.h
@@ -40,6 +40,9 @@ class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
void slotProfile(bool on);
void slotCut();
void slotEdit();
+ void slotReverse();
+ void slotCombine();
+ void slotRange();
private:
diff --git a/src/gis/trk/ICombineTrk.ui b/src/gis/trk/ICombineTrk.ui
new file mode 100644
index 0000000..447f9a9
--- /dev/null
+++ b/src/gis/trk/ICombineTrk.ui
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ICombineTrk</class>
+ <widget class="QDialog" name="ICombineTrk">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>473</width>
+ <height>369</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Combine Tracks...</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QListWidget" name="listAvailable"/>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolSelect">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/Right.png</normaloff>:/icons/32x32/Right.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolRemove">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/Left.png</normaloff>:/icons/32x32/Left.png</iconset>
+ </property>
+ </widget>
+ </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>
+ </item>
+ <item>
+ <widget class="QListWidget" name="listSelected"/>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolUp">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/Up.png</normaloff>:/icons/32x32/Up.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolDown">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/Down.png</normaloff>:/icons/32x32/Down.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_6">
+ <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>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <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="CPlotTrack" name="plotTrack" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>150</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>CPlotTrack</class>
+ <extends>QWidget</extends>
+ <header>plot/CPlotTrack.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources>
+ <include location="../../resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>ICombineTrk</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>ICombineTrk</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/gis/trk/IScrOptTrk.ui b/src/gis/trk/IScrOptTrk.ui
index c7722b7..8bb6506 100644
--- a/src/gis/trk/IScrOptTrk.ui
+++ b/src/gis/trk/IScrOptTrk.ui
@@ -49,6 +49,23 @@
</widget>
</item>
<item>
+ <widget class="QToolButton" name="toolProfile">
+ <property name="toolTip">
+ <string>Show on-screen profile and detailed information about points.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/TrkProfile.png</normaloff>:/icons/32x32/TrkProfile.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QToolButton" name="toolDelete">
<property name="toolTip">
<string>Delete</string>
@@ -70,47 +87,69 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="toolProfile">
+ <widget class="QToolButton" name="toolRange">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/SelectRange.png</normaloff>:/icons/32x32/SelectRange.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolEdit">
<property name="toolTip">
- <string>Show on-screen profile and detailed information about points.</string>
+ <string>Edit position of track points.</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../resources.qrc">
- <normaloff>:/icons/32x32/TrkProfile.png</normaloff>:/icons/32x32/TrkProfile.png</iconset>
+ <normaloff>:/icons/32x32/LineMove.png</normaloff>:/icons/32x32/LineMove.png</iconset>
</property>
- <property name="checkable">
- <bool>true</bool>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolReverse">
+ <property name="toolTip">
+ <string>Reverse track.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources.qrc">
+ <normaloff>:/icons/32x32/Reverse.png</normaloff>:/icons/32x32/Reverse.png</iconset>
</property>
</widget>
</item>
<item>
- <widget class="QToolButton" name="toolCut">
+ <widget class="QToolButton" name="toolCombine">
<property name="toolTip">
- <string>Cut track at selected point into two tracks.</string>
+ <string>Combine tracks.</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../resources.qrc">
- <normaloff>:/icons/32x32/TrkCut.png</normaloff>:/icons/32x32/TrkCut.png</iconset>
+ <normaloff>:/icons/32x32/Combine.png</normaloff>:/icons/32x32/Combine.png</iconset>
</property>
</widget>
</item>
<item>
- <widget class="QToolButton" name="toolEdit">
+ <widget class="QToolButton" name="toolCut">
<property name="toolTip">
- <string>Edit position of track points.</string>
+ <string>Cut track at selected point into two tracks.</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../resources.qrc">
- <normaloff>:/icons/32x32/LineMove.png</normaloff>:/icons/32x32/LineMove.png</iconset>
+ <normaloff>:/icons/32x32/TrkCut.png</normaloff>:/icons/32x32/TrkCut.png</iconset>
</property>
</widget>
</item>
diff --git a/src/icons/32x32/Combine.png b/src/icons/32x32/Combine.png
new file mode 100644
index 0000000..c753af3
Binary files /dev/null and b/src/icons/32x32/Combine.png differ
diff --git a/src/icons/32x32/Left.png b/src/icons/32x32/Left.png
new file mode 100644
index 0000000..c6047a5
Binary files /dev/null and b/src/icons/32x32/Left.png differ
diff --git a/src/icons/32x32/PointHide.png b/src/icons/32x32/PointHide.png
new file mode 100644
index 0000000..a749118
Binary files /dev/null and b/src/icons/32x32/PointHide.png differ
diff --git a/src/icons/32x32/PointShow.png b/src/icons/32x32/PointShow.png
new file mode 100644
index 0000000..870bdf0
Binary files /dev/null and b/src/icons/32x32/PointShow.png differ
diff --git a/src/icons/32x32/Reverse.png b/src/icons/32x32/Reverse.png
new file mode 100644
index 0000000..1bd284b
Binary files /dev/null and b/src/icons/32x32/Reverse.png differ
diff --git a/src/icons/32x32/SelectRange.png b/src/icons/32x32/SelectRange.png
index 1b41b92..b785f2d 100644
Binary files a/src/icons/32x32/SelectRange.png and b/src/icons/32x32/SelectRange.png differ
diff --git a/src/icons/48x48/Combine.png b/src/icons/48x48/Combine.png
new file mode 100644
index 0000000..b8f0991
Binary files /dev/null and b/src/icons/48x48/Combine.png differ
diff --git a/src/icons/48x48/Left.png b/src/icons/48x48/Left.png
new file mode 100644
index 0000000..414e372
Binary files /dev/null and b/src/icons/48x48/Left.png differ
diff --git a/src/icons/48x48/PointHide.png b/src/icons/48x48/PointHide.png
new file mode 100644
index 0000000..b97ad53
Binary files /dev/null and b/src/icons/48x48/PointHide.png differ
diff --git a/src/icons/48x48/PointShow.png b/src/icons/48x48/PointShow.png
new file mode 100644
index 0000000..197892a
Binary files /dev/null and b/src/icons/48x48/PointShow.png differ
diff --git a/src/icons/48x48/Reverse.png b/src/icons/48x48/Reverse.png
new file mode 100644
index 0000000..58b0228
Binary files /dev/null and b/src/icons/48x48/Reverse.png differ
diff --git a/src/icons/48x48/SelectRange.png b/src/icons/48x48/SelectRange.png
index 233ce9f..e4ede1e 100644
Binary files a/src/icons/48x48/SelectRange.png and b/src/icons/48x48/SelectRange.png differ
diff --git a/src/icons/Combine.svg b/src/icons/Combine.svg
new file mode 100644
index 0000000..8e01e59
--- /dev/null
+++ b/src/icons/Combine.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Combine.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.919596"
+ inkscape:cx="21.972795"
+ inkscape:cy="31.160294"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1012"
+ inkscape:window-x="-2"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2985"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-988.36218)">
+ <g
+ id="g2995"
+ transform="translate(0,-4)">
+ <rect
+ y="1027.494"
+ x="9.7728424"
+ height="5"
+ width="20"
+ id="rect2987"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="9.4203312"
+ sodipodi:start="3.1402285"
+ transform="translate(-5.137872,993.99396)"
+ d="m 33.000005,36.006821 c -0.0038,-2.761421 2.231753,-5.003049 4.993174,-5.006816 2.761421,-0.0038 5.003049,2.231753 5.006816,4.993174 0.0038,2.761421 -2.231753,5.003049 -4.993174,5.006816 -2.755404,0.0038 -4.994519,-2.222382 -5.006772,-4.977761"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="36"
+ sodipodi:cx="38"
+ id="path2989"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="7.8518428"
+ sodipodi:start="4.7086266"
+ transform="matrix(1.1421102,0,0,1.2655127,-8.991318,981.27173)"
+ d="m 39.475545,32.000046 c 3.589825,-0.01351 6.510903,2.885673 6.524409,6.475499 0.01351,3.589825 -2.885673,6.510903 -6.475499,6.524409 -0.0035,1.3e-5 -0.007,2.4e-5 -0.01055,3.1e-5"
+ sodipodi:ry="6.5"
+ sodipodi:rx="6.5"
+ sodipodi:cy="38.5"
+ sodipodi:cx="39.5"
+ id="path3759"
+ style="fill:none;stroke:#008000;stroke-width:4.61505318;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <rect
+ y="1027.4646"
+ x="42.100681"
+ height="5.0586071"
+ width="12.826465"
+ id="rect2987-9"
+ style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.94139314" />
+ </g>
+ <path
+ style="fill:#000080;stroke:#000000;stroke-width:1.56250179px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 6.0937514,1003.5878 7.8124996,0 0,-7.81257 7.812499,0 0,7.81257 7.8125,0 0,7.8124 -7.8125,0 0,7.8125 -7.812499,0 0,-7.8125 -7.8124996,0 z"
+ id="path3779"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:none;stroke:none"
+ id="rect3781"
+ width="50"
+ height="50"
+ x="5.3125005"
+ y="990.99396" />
+ </g>
+</svg>
diff --git a/src/icons/Left.svg b/src/icons/Left.svg
new file mode 100644
index 0000000..38ea694
--- /dev/null
+++ b/src/icons/Left.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64px"
+ height="64px"
+ id="svg3513"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Right.svg">
+ <defs
+ id="defs3515">
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4038"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mend"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4041"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5"
+ inkscape:cx="32"
+ inkscape:cy="32.090909"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1012"
+ inkscape:window-x="-2"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata3518">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#000080;stroke:#000000;stroke-width:1.01764786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 37.718453,40.918299 -19.82335,0 0,9.70925 -14.1590101,-16.90607 14.1590101,-17.0763 0,9.70925 19.82335,0 0,14.56387"
+ id="path3052-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc"
+ inkscape:export-filename="/home/oeichler/Code/android/QLandkarteM/QLandkarteM/icons/32x32/next.png"
+ inkscape:export-xdpi="83"
+ inkscape:export-ydpi="83" />
+ </g>
+</svg>
diff --git a/src/icons/SelectRange.svg b/src/icons/PointHide.svg
similarity index 51%
copy from src/icons/SelectRange.svg
copy to src/icons/PointHide.svg
index f1e86fa..94f7f62 100644
--- a/src/icons/SelectRange.svg
+++ b/src/icons/PointHide.svg
@@ -14,7 +14,7 @@
id="svg3513"
version="1.1"
inkscape:version="0.48.4 r9939"
- sodipodi:docname="SelectRange.svg">
+ sodipodi:docname="PointHide.svg">
<defs
id="defs3515">
<marker
@@ -92,14 +92,14 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11"
- inkscape:cx="46.804178"
- inkscape:cy="23.220932"
+ inkscape:cx="0.74985782"
+ inkscape:cy="21.718796"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
- inkscape:window-height="1012"
+ inkscape:window-height="996"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1">
@@ -115,7 +115,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -123,26 +123,76 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
- <path
- style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 5,49 52,0"
- id="path4223"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 11,9 0,50"
- id="path3002"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 51,9.0909092 51,59.09091"
- id="path3002-0"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
- d="m 11,34 34,0"
- id="path3024"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
+ <g
+ id="g3001"
+ transform="translate(-5.1263428e-7,-1.9999988)">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path3021"
+ d="m 51.954546,24.068177 -10,0 -9.999999,19 -10,-19 -10,0 10,0"
+ style="fill:none;stroke:#999999;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ transform="matrix(4.9999916,0,0,3.3333275,-56.999863,-27.643853)"
+ sodipodi:open="true"
+ sodipodi:end="7.8084814"
+ sodipodi:start="1.5578398"
+ d="m 16.012956,16.999874 c -0.552238,0.01073 -1.005717,-0.652082 -1.012872,-1.48044 -0.0072,-0.828357 0.434721,-1.508575 0.98696,-1.519308 0.552238,-0.01073 1.005717,0.652082 1.012872,1.48044 0.007,0.809359 -0.415372,1.481065 -0.954431,1.517882"
+ sodipodi:ry="1.5"
+ sodipodi:rx="1"
+ sodipodi:cy="15.5"
+ sodipodi:cx="16"
+ id="path3026"
+ style="fill:#ff0000;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(4.9999916,0,0,3.3333275,-38.090772,-27.780214)"
+ sodipodi:open="true"
+ sodipodi:end="7.8084814"
+ sodipodi:start="1.5578398"
+ d="m 16.012956,16.999874 c -0.552238,0.01073 -1.005717,-0.652082 -1.012872,-1.48044 -0.0072,-0.828357 0.434721,-1.508575 0.98696,-1.519308 0.552238,-0.01073 1.005717,0.652082 1.012872,1.48044 0.007,0.809359 -0.415372,1.481065 -0.954431,1.517882"
+ sodipodi:ry="1.5"
+ sodipodi:rx="1"
+ sodipodi:cy="15.5"
+ sodipodi:cx="16"
+ id="path3026-6"
+ style="fill:#ff0000;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(4.9999916,0,0,3.3333275,-48.090772,-8.280213)"
+ sodipodi:open="true"
+ sodipodi:end="7.8084814"
+ sodipodi:start="1.5578398"
+ d="m 16.012956,16.999874 c -0.552238,0.01073 -1.005717,-0.652082 -1.012872,-1.48044 -0.0072,-0.828357 0.434721,-1.508575 0.98696,-1.519308 0.552238,-0.01073 1.005717,0.652082 1.012872,1.48044 0.007,0.809359 -0.415372,1.481065 -0.954431,1.517882"
+ sodipodi:ry="1.5"
+ sodipodi:rx="1"
+ sodipodi:cy="15.5"
+ sodipodi:cx="16"
+ id="path3026-2"
+ style="fill:#999999;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3853"
+ d="m 11.954547,24.068167 10,0"
+ style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3855"
+ d="m 41.954546,24.022752 10,0"
+ style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3857"
+ d="m 21.954547,23.977268 19.999999,0"
+ style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <rect
+ style="fill:none;stroke:none"
+ id="rect3859"
+ width="44"
+ height="44"
+ x="9.954546"
+ y="9.636364" />
</g>
</svg>
diff --git a/src/icons/SelectRange.svg b/src/icons/PointShow.svg
similarity index 59%
copy from src/icons/SelectRange.svg
copy to src/icons/PointShow.svg
index f1e86fa..5947d1b 100644
--- a/src/icons/SelectRange.svg
+++ b/src/icons/PointShow.svg
@@ -14,7 +14,7 @@
id="svg3513"
version="1.1"
inkscape:version="0.48.4 r9939"
- sodipodi:docname="SelectRange.svg">
+ sodipodi:docname="PointShow.svg">
<defs
id="defs3515">
<marker
@@ -92,14 +92,14 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11"
- inkscape:cx="46.804178"
- inkscape:cy="23.220932"
+ inkscape:cx="0.74985782"
+ inkscape:cy="34.683233"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
- inkscape:window-height="1012"
+ inkscape:window-height="996"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1">
@@ -115,7 +115,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -123,26 +123,53 @@
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
- <path
- style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 5,49 52,0"
- id="path4223"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 11,9 0,50"
- id="path3002"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 51,9.0909092 51,59.09091"
- id="path3002-0"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
- d="m 11,34 34,0"
- id="path3024"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
+ <g
+ id="g2998"
+ transform="translate(-5.1263428e-7,-1.8636831)">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path3021"
+ d="m 51.954546,24.068177 -10,0 -9.999999,19 -10,-19 -10,0 10,0"
+ style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ transform="matrix(4.9999916,0,0,3.3333275,-57.999866,-27.643851)"
+ sodipodi:open="true"
+ sodipodi:end="7.8084814"
+ sodipodi:start="1.5578398"
+ d="m 16.012956,16.999874 c -0.552238,0.01073 -1.005717,-0.652082 -1.012872,-1.48044 -0.0072,-0.828357 0.434721,-1.508575 0.98696,-1.519308 0.552238,-0.01073 1.005717,0.652082 1.012872,1.48044 0.007,0.809359 -0.415372,1.481065 -0.954431,1.517882"
+ sodipodi:ry="1.5"
+ sodipodi:rx="1"
+ sodipodi:cy="15.5"
+ sodipodi:cx="16"
+ id="path3026"
+ style="fill:#ff0000;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3026-6"
+ d="m 43.155442,28.976782 c -1.674983,0.0257 -3.060232,-0.800843 -3.841513,-1.723781 -1.335977,-1.585952 -1.536426,-3.537884 -0.806772,-5.274056 0.511251,-1.159446 1.537885,-2.332921 3.271612,-2.827458 1.387235,-0.405204 3.038707,-0.06746 4.052859,0.644023 1.613676,1.093903 2.246943,2.679675 2.257881,4.180199 -0.01,1.503052 -0.644825,3.092097 -2.262864,4.186897 -0.670763,0.443916 -1.552507,0.769248 -2.508598,0.809423"
+ style="fill:#ff0000;stroke:none" />
+ <path
+ transform="matrix(4.9999916,0,0,3.3333275,-48.09077,-8.643849)"
+ sodipodi:open="true"
+ sodipodi:end="7.8084814"
+ sodipodi:start="1.5578398"
+ d="m 16.012956,16.999874 c -0.552238,0.01073 -1.005717,-0.652082 -1.012872,-1.48044 -0.0072,-0.828357 0.434721,-1.508575 0.98696,-1.519308 0.552238,-0.01073 1.005717,0.652082 1.012872,1.48044 0.007,0.809359 -0.415372,1.481065 -0.954431,1.517882"
+ sodipodi:ry="1.5"
+ sodipodi:rx="1"
+ sodipodi:cy="15.5"
+ sodipodi:cx="16"
+ id="path3026-2"
+ style="fill:#ff0000;stroke:none"
+ sodipodi:type="arc" />
+ </g>
+ <rect
+ style="fill:none;stroke:none"
+ id="rect3859"
+ width="44"
+ height="44"
+ x="9.954546"
+ y="9.636364" />
</g>
</svg>
diff --git a/src/icons/Reverse.svg b/src/icons/Reverse.svg
new file mode 100644
index 0000000..2638195
--- /dev/null
+++ b/src/icons/Reverse.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Reverse.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.2"
+ inkscape:cx="30.17267"
+ inkscape:cy="30.261621"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="996"
+ inkscape:window-x="-2"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2985"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-988.36218)">
+ <path
+ style="fill:#000080;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 10.575768,1019.8759 39.205608,0 -17.820732,-17.7058 3.032802,11.3528 -24.52916,0.071 z"
+ id="path2987"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#000080;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 49.781375,1023.67 -39.205607,0 17.82073,17.7057 -3.300658,-11.3529 24.685536,0 z"
+ id="path2987-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/src/icons/SelectRange.svg b/src/icons/SelectRange.svg
index f1e86fa..db406fd 100644
--- a/src/icons/SelectRange.svg
+++ b/src/icons/SelectRange.svg
@@ -92,14 +92,14 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11"
- inkscape:cx="46.804178"
- inkscape:cy="23.220932"
+ inkscape:cx="4.2132686"
+ inkscape:cy="35.664608"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
- inkscape:window-height="1012"
+ inkscape:window-height="996"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1">
@@ -115,7 +115,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -124,25 +124,76 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
- style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 5,49 52,0"
+ style="fill:none;stroke:#ff0000;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 12.590982,42.90909 37.636219,0"
+ id="path2999"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 6,42.90909 52,0"
id="path4223"
inkscape:connector-curvature="0" />
<path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 11,9 0,50"
+ style="fill:#000080;stroke:#000080;stroke-width:2.80589914;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 12,9.3576325 12,53.096912"
id="path3002"
inkscape:connector-curvature="0" />
<path
- style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 51,9.0909092 51,59.09091"
+ style="fill:#000080;stroke:#000080;stroke-width:2.82508969;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 52,8.8301885 52,53.169812"
id="path3002-0"
inkscape:connector-curvature="0" />
<path
style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
- d="m 11,34 34,0"
+ d="m 12,21.90909 34,0"
id="path3024"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#0000ff;fill-opacity:1;stroke:none"
+ id="path3802"
+ sodipodi:cx="-24.5"
+ sodipodi:cy="39.5"
+ sodipodi:rx="0.5"
+ sodipodi:ry="0.5"
+ d="m -25,39.500682 a 0.5,0.5 0 1 1 5e-6,0.0015"
+ sodipodi:start="3.1402285"
+ sodipodi:end="9.4203312"
+ sodipodi:open="true"
+ transform="matrix(14,0,0,14,355.00002,-509.9091)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#0000ff;fill-opacity:1;stroke:none"
+ id="path3802-8"
+ sodipodi:cx="-24.5"
+ sodipodi:cy="39.5"
+ sodipodi:rx="0.5"
+ sodipodi:ry="0.5"
+ d="m -25,39.500682 a 0.5,0.5 0 1 1 5e-6,0.0015"
+ sodipodi:start="3.1402285"
+ sodipodi:end="9.4203312"
+ sodipodi:open="true"
+ transform="matrix(14,0,0,14,395.00001,-509.99999)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#0000ff;fill-opacity:1;stroke:none"
+ id="path3802-0"
+ sodipodi:cx="-24.5"
+ sodipodi:cy="39.5"
+ sodipodi:rx="0.5"
+ sodipodi:ry="0.5"
+ d="m -25,39.500682 a 0.5,0.5 0 1 1 5e-6,0.0015"
+ sodipodi:start="3.1402285"
+ sodipodi:end="9.4203312"
+ sodipodi:open="true"
+ transform="matrix(14,0,0,14,375.09092,-510.00001)" />
+ <rect
+ style="fill:none;stroke:none"
+ id="rect3829"
+ width="60"
+ height="60"
+ x="2"
+ y="1" />
</g>
</svg>
diff --git a/src/locale/qmapshack_cs.ts b/src/locale/qmapshack_cs.ts
index 88fbf94..9379e3b 100644
--- a/src/locale/qmapshack_cs.ts
+++ b/src/locale/qmapshack_cs.ts
@@ -4,7 +4,7 @@
<context>
<name>CCanvas</name>
<message>
- <location filename="../canvas/CCanvas.cpp" line="58"/>
+ <location filename="../canvas/CCanvas.cpp" line="59"/>
<source>Workspace %1</source>
<translation>Pracovní oblast %1</translation>
</message>
@@ -208,7 +208,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="51"/>
+ <location filename="../gis/CGisListWks.cpp" line="49"/>
+ <source>Reverse Track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="50"/>
+ <source>Combine Tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="53"/>
<source>Delete</source>
<translation>Smazat</translation>
</message>
@@ -229,12 +239,12 @@
<context>
<name>CMainWindow</name>
<message>
- <location filename="../CMainWindow.cpp" line="420"/>
+ <location filename="../CMainWindow.cpp" line="431"/>
<source>Ele: %1%2</source>
<translation>Výška: %1%2</translation>
</message>
<message>
- <location filename="../CMainWindow.cpp" line="521"/>
+ <location filename="../CMainWindow.cpp" line="532"/>
<source>Load GIS Data...</source>
<translation>Nahrát data GIS...</translation>
</message>
@@ -1041,27 +1051,56 @@ Unknown structure.</source>
</message>
<message>
<location filename="../map/CMapWMTS.cpp" line="323"/>
- <source>%1: %2 tiles pending</source>
+ <source><b>%1</b>: %2 tiles pending<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseEditArea</name>
+ <message>
+ <location filename="../mouse/CMouseEditArea.cpp" line="38"/>
+ <source><b>Edit Area</b><br/>Select a corner point for more options.<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseEditTrk</name>
+ <message>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="46"/>
+ <source><b>Edit Track Points</b><br/>Select a track point for more options.<br/></source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CMouseNormal</name>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="42"/>
<source>Add Waypoint</source>
<translation>Přidat cestovní bod</translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="43"/>
<source>Add Track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="44"/>
<source>Add Area</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../mouse/CMouseNormal.cpp" line="46"/>
+ <source>Copy position</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseRangeTrk</name>
+ <message>
+ <location filename="../mouse/CMouseRangeTrk.cpp" line="48"/>
+ <source><b>Select Range</b><br/>Select first track point. And then a second one.<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>CPlotDistance</name>
@@ -1232,6 +1271,22 @@ není platným vymezením soustavy souřadnic
</message>
</context>
<context>
+ <name>ICombineTrk</name>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="14"/>
+ <source>Combine Tracks...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="43"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="70"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="117"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="144"/>
+ <source>...</source>
+ <translation type="unfinished">...</translation>
+ </message>
+</context>
+<context>
<name>IDemPathSetup</name>
<message>
<location filename="../dem/IDemPathSetup.ui" line="14"/>
@@ -1913,22 +1968,22 @@ není platným vymezením soustavy souřadnic
<context>
<name>IMouseEditLine</name>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points to temporary line?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
<translation type="unfinished"></translation>
</message>
@@ -2160,6 +2215,41 @@ nebo
</message>
</context>
<context>
+ <name>IScrOptRangeTrk</name>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="14"/>
+ <source>Form</source>
+ <translation type="unfinished">Formulář</translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="40"/>
+ <source>Hide all points.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="43"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="57"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="71"/>
+ <source>...</source>
+ <translation type="unfinished">...</translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="54"/>
+ <source>Show all points.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="68"/>
+ <source>Copy track points as new track.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="103"/>
+ <source>TextLabel</source>
+ <translation type="unfinished">Textový štítek</translation>
+ </message>
+</context>
+<context>
<name>IScrOptRte</name>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="14"/>
@@ -2201,35 +2291,48 @@ nebo
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
<source>Delete</source>
<translation type="unfinished">Smazat</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
<source>Show on-screen profile and detailed information about points.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="145"/>
<source>Cut track at selected point into two tracks.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="103"/>
<source>Edit position of track points.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="117"/>
+ <source>Reverse track.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="131"/>
+ <source>Combine tracks.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source><html><head/><body><p>View details & Edit</p></body></html></source>
<translation type="obsolete"><html><head/><body><p>Zobrazit podrobnosti a upravit</p></body></html></translation>
</message>
<message>
<location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="74"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>...</source>
<translation>...</translation>
</message>
@@ -2238,7 +2341,7 @@ nebo
<translation type="obsolete"><html><head/><body><p>Smazat</p></body></html></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="174"/>
<source>TextLabel</source>
<translation>Textový štítek</translation>
</message>
@@ -2561,48 +2664,48 @@ line %2, column %3:
<translation>Režim pouze pro čtení...</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="325"/>
<source>Length: %1 %2</source>
<translation>Délka: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="332"/>
<source>, %1%2 %3, %4%5 %6</source>
<translation>, %1%2 %3, %4%5 %6</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="340"/>
<source>Time: %1</source>
<translation>Čas: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
<source>, Speed: %1 %2</source>
<translation>, Rychlost: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
<source>Moving: %1</source>
<translation>Pohyb: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Start: %1</source>
<translation>Začátek: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="364"/>
<source>End: %1</source>
<translation>Konec: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Points: %1 (%2)</source>
<translation>Body: %1 (%2)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="434"/>
<source>Ele.: %1 %2</source>
<translation>Výška: %1 %2</translation>
</message>
@@ -2611,57 +2714,57 @@ line %2, column %3:
<translation type="obsolete"> sklon: %1°(%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source> speed: %1%2</source>
<translation> rychlost: %1%2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="454"/>
<source>Ascend: %1%2 (%3%)</source>
<translation>Stoupání: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="458"/>
<source>Ascend: - (-)</source>
<translation>Stoupání: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="468"/>
<source> Descend: - (-) </source>
<translation> Klesání: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="489"/>
<source> Moving: - (-) </source>
<translation> Pohyb: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="464"/>
<source> Descend: %1%2 (%3%)</source>
<translation> Klesání: %1%2 (%3%) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="248"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="437"/>
<source> slope: %1° (%2%)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="475"/>
<source>Dist.: %1%2 (%3%)</source>
<translation>Vzdálenost: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="479"/>
<source>Dist.: - (-)</source>
<translation>Vzdálenost: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="485"/>
<source> Moving: %1%2 (%3%)</source>
<translation> Pohyb: %1%2 (%3%) </translation>
</message>
@@ -2722,30 +2825,35 @@ line %2, column %3:
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1371"/>
<source>Changed color</source>
<translation>Změněná barva</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
<source>Elevation: %1 %2</source>
<translation>Výška: %1 %2</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
<source>Proximity: %1 %2</source>
<translation>Blízkost: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1360"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
<source>Changed name</source>
<translation>Změněný název</translation>
</message>
<message>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
<location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Edit name...</source>
<translation>Upravit název...</translation>
</message>
@@ -2755,47 +2863,47 @@ line %2, column %3:
<translation>Zadat nový název pro cestovní bod.</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
<source>Changed position</source>
<translation>Změněná poloha</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
<source>Changed elevation</source>
<translation>Změněná výška</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
<source>Changed proximity</source>
<translation>Změněná blízkost</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
<source>Changed icon</source>
<translation>Změněná ikona</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
<source>Changed comment</source>
<translation>Změněná poznámka</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
<source>Changed description</source>
<translation>Změněný popis</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
<source>Archived</source>
<translation>Archivováno</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
<source>Available</source>
<translation>Dostupné</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
<source>Not Available</source>
<translation>Nedostupné</translation>
</message>
@@ -2816,8 +2924,13 @@ line %2, column %3:
<translation>Toto je souborový typ s neznámým druhem čáry. Nahlašte to, prosím!</translation>
</message>
<message>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Enter new track name.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/locale/qmapshack_de.ts b/src/locale/qmapshack_de.ts
index d48f6bb..1b06954 100644
--- a/src/locale/qmapshack_de.ts
+++ b/src/locale/qmapshack_de.ts
@@ -4,7 +4,7 @@
<context>
<name>CCanvas</name>
<message>
- <location filename="../canvas/CCanvas.cpp" line="58"/>
+ <location filename="../canvas/CCanvas.cpp" line="59"/>
<source>Workspace %1</source>
<translation>Ansicht %1</translation>
</message>
@@ -27,7 +27,7 @@
<message>
<location filename="../dem/CDemPathSetup.cpp" line="39"/>
<source>Add or remove paths containing DEM data. There can be multiple files in a path but no sub-path is parsed. Supported formats are: %1</source>
- <translation>Hinzufügen oder entfernen von Verzeichnissen mit DEM Daten. Im Verzeichnis können mehrere Dateien vorliegen. Allerdings wird kein Unterverzeichnis durchsucht. Unterstützte Formate sind: %1</translation>
+ <translation>Hinzufügen oder Entfernen von Verzeichnissen mit DEM Daten. Im Verzeichnis können mehrere Dateien vorliegen. Allerdings wird kein Unterverzeichnis durchsucht. Unterstützte Formate sind: %1</translation>
</message>
<message>
<location filename="../dem/CDemPathSetup.cpp" line="55"/>
@@ -54,7 +54,11 @@
<location filename="../dem/CDemVRT.cpp" line="51"/>
<location filename="../dem/CDemVRT.cpp" line="60"/>
<source>DEM must have one band with 16bit or 32bit data.</source>
- <translation>Das DEM muss aus einem Satz mit 16 oder 32Bit Daten bestehen.</translation>
+ <translation>DEM muss aus einem Satz mit 16 bit oder 32 bit Daten bestehen.</translation>
+ </message>
+ <message>
+ <source>DEM must have one band with 16 bit or 32 bit data.</source>
+ <translation type="obsolete">Das DEM muss aus einem Satz mit 16 bit oder 32 bit Daten bestehen.</translation>
</message>
<message>
<location filename="../dem/CDemVRT.cpp" line="84"/>
@@ -81,32 +85,32 @@
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
<source>Edit name...</source>
- <translation type="unfinished">Name ändern...</translation>
+ <translation>Name ändern...</translation>
</message>
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
<source>Enter new waypoint name.</source>
- <translation type="unfinished">Geben Sie einen neuen Namen ein.</translation>
+ <translation>Geben Sie einen neuen Namen ein.</translation>
</message>
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
<source><h4>Comment:</h4></source>
- <translation type="unfinished"><h4>Kommentar:</h4></translation>
+ <translation><h4>Kommentar:</h4></translation>
</message>
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
<source><p>--- no comment ---</p></source>
- <translation type="unfinished"><p>--- kein Kommentar ---</p></translation>
+ <translation><p>--- kein Kommentar ---</p></translation>
</message>
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
<source><h4>Description:</h4></source>
- <translation type="unfinished"><h4>Beschreibung:</h4></translation>
+ <translation><h4>Beschreibung:</h4></translation>
</message>
<message>
<location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
<source><p>--- no description ---</p></source>
- <translation type="unfinished"><p>--- keine Beschreibung ---</p></translation>
+ <translation><p>--- keine Beschreibung ---</p></translation>
</message>
</context>
<context>
@@ -220,7 +224,17 @@
<translation>Wegpunkte bearbeiten</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="51"/>
+ <location filename="../gis/CGisListWks.cpp" line="49"/>
+ <source>Reverse Track</source>
+ <translation>Track umkehren</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="50"/>
+ <source>Combine Tracks</source>
+ <translation>Tracks verbinden</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="53"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
@@ -241,12 +255,12 @@
<context>
<name>CMainWindow</name>
<message>
- <location filename="../CMainWindow.cpp" line="420"/>
+ <location filename="../CMainWindow.cpp" line="431"/>
<source>Ele: %1%2</source>
<translation>Höhe: %1%2</translation>
</message>
<message>
- <location filename="../CMainWindow.cpp" line="521"/>
+ <location filename="../CMainWindow.cpp" line="532"/>
<source>Load GIS Data...</source>
<translation>Lade GIS Daten...</translation>
</message>
@@ -321,8 +335,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="168"/>
<source>Welsh</source>
- <translatorcomment>?</translatorcomment>
- <translation></translation>
+ <translation>Walisisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="169"/>
@@ -392,47 +405,48 @@
<message>
<location filename="../map/CMapIMG.cpp" line="182"/>
<source>Estonian</source>
- <translation></translation>
+ <translation>Estnisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="183"/>
<source>Latvian</source>
- <translation></translation>
+ <translation>Lettisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="184"/>
<source>Romanian</source>
- <translation></translation>
+ <translation>Rumänisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="185"/>
<source>Albanian</source>
- <translation></translation>
+ <translatorcomment>Albanisch</translatorcomment>
+ <translation>Albanisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="186"/>
<source>Bosnian</source>
- <translation></translation>
+ <translation>Bosnisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="187"/>
<source>Lithuanian</source>
- <translation></translation>
+ <translation>Litauisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="188"/>
<source>Serbian</source>
- <translation></translation>
+ <translation>Serbisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="189"/>
<source>Macedonian</source>
- <translation></translation>
+ <translation>Makedonisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="190"/>
<source>Bulgarian</source>
- <translation></translation>
+ <translation>Bulgarisch</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="247"/>
@@ -497,7 +511,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="259"/>
<source>Railroad</source>
- <translation>Einsenbahn</translation>
+ <translation>Eisenbahn</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="260"/>
@@ -517,7 +531,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="263"/>
<source>Time zone</source>
- <translation></translation>
+ <translation>Zeitzone</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="264"/>
@@ -548,32 +562,32 @@
<message>
<location filename="../map/CMapIMG.cpp" line="270"/>
<source>Minor land contour</source>
- <translation></translation>
+ <translation>Höhenlinie klein</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="271"/>
<source>Intermediate land contour</source>
- <translation></translation>
+ <translation>Höhenlinie mittel</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="272"/>
<source>Major land contour</source>
- <translation></translation>
+ <translation>Höhenlinie groß</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="273"/>
<source>Minor depth contour</source>
- <translation></translation>
+ <translation>Tiefenlinie klein</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="274"/>
<source>Intermediate depth contour</source>
- <translation></translation>
+ <translation>Tiefenlinie mittel</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="275"/>
<source>Major depth contour</source>
- <translation></translation>
+ <translation>Tiefenlinie groß</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="276"/>
@@ -584,7 +598,7 @@
<location filename="../map/CMapIMG.cpp" line="277"/>
<location filename="../map/CMapIMG.cpp" line="359"/>
<source>Airport runway</source>
- <translation></translation>
+ <translation>Landebahn</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="278"/>
@@ -624,17 +638,17 @@
<message>
<location filename="../map/CMapIMG.cpp" line="349"/>
<source>Military base</source>
- <translation></translation>
+ <translation>Militärbasis</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="350"/>
<source>Parking lot</source>
- <translation></translation>
+ <translation>Parkplatz</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="351"/>
<source>Parking garage</source>
- <translation></translation>
+ <translation>Parkhaus</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="352"/>
@@ -644,7 +658,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="353"/>
<source>Shopping center</source>
- <translation></translation>
+ <translation>Einkaufszentrum</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="354"/>
@@ -654,7 +668,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="355"/>
<source>University/College</source>
- <translation></translation>
+ <translation>Universität/Hochschule</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="356"/>
@@ -664,12 +678,12 @@
<message>
<location filename="../map/CMapIMG.cpp" line="357"/>
<source>Industrial complex</source>
- <translation></translation>
+ <translation>Industrie</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="358"/>
<source>Reservation</source>
- <translation></translation>
+ <translation>Schutzgebiet</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="360"/>
@@ -679,12 +693,12 @@
<message>
<location filename="../map/CMapIMG.cpp" line="361"/>
<source>Sports complex</source>
- <translation></translation>
+ <translation>Sportanlage</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="362"/>
<source>Golf course</source>
- <translation></translation>
+ <translation>Golfplatz</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="363"/>
@@ -696,12 +710,12 @@
<location filename="../map/CMapIMG.cpp" line="365"/>
<location filename="../map/CMapIMG.cpp" line="366"/>
<source>National park</source>
- <translation></translation>
+ <translation>Nationalpark</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="367"/>
<source>City park</source>
- <translation></translation>
+ <translation>Stadtpark</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="368"/>
@@ -997,7 +1011,7 @@
<message>
<location filename="../map/CMapVRT.cpp" line="88"/>
<source>File must be 8 bit palette or gray indexed.</source>
- <translation>Die Datei muss eine 8Bit Palette haben, oder Graustufen.</translation>
+ <translation>Die Datei muss eine 8 bit Palette haben, oder Graustufen.</translation>
</message>
<message>
<location filename="../map/CMapVRT.cpp" line="123"/>
@@ -1049,8 +1063,12 @@ Unbekannte Struktur.</translation>
</message>
<message>
<location filename="../map/CMapWMTS.cpp" line="323"/>
+ <source><b>%1</b>: %2 tiles pending<br/></source>
+ <translation><b>%1</b>: %2 unerledigte Kacheln<br/></translation>
+ </message>
+ <message>
<source>%1: %2 tiles pending</source>
- <translation>%1: %2 unerledigte Kacheln</translation>
+ <translation type="obsolete">%1: %2 unerledigte Kacheln</translation>
</message>
<message>
<source>Unexpexted service. 'OGC WMTS 1.0.0' is expected. '%1 %2' is read.</source>
@@ -1063,8 +1081,24 @@ Unbekannte Struktur.</translation>
</message>
</context>
<context>
+ <name>CMouseEditArea</name>
+ <message>
+ <location filename="../mouse/CMouseEditArea.cpp" line="38"/>
+ <source><b>Edit Area</b><br/>Select a corner point for more options.<br/></source>
+ <translation><b>Gebiet bearbeiten</b><br/>Wählen Sie einen der Eckpunkt für eine Auswahl an Funktionen.<br/></translation>
+ </message>
+</context>
+<context>
<name>CMouseEditLine</name>
<message>
+ <source>Add points?</source>
+ <translation type="obsolete">Punkte hinzufügen?</translation>
+ </message>
+ <message>
+ <source>Add points to temporary line?</source>
+ <translation type="obsolete">Punkte zur temporären Linie hinzufügen?</translation>
+ </message>
+ <message>
<source>Warning!</source>
<translation type="obsolete">Warnung!</translation>
</message>
@@ -1074,21 +1108,42 @@ Unbekannte Struktur.</translation>
</message>
</context>
<context>
+ <name>CMouseEditTrk</name>
+ <message>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="46"/>
+ <source><b>Edit Track Points</b><br/>Select a track point for more options.<br/></source>
+ <translation><b>Trackpunkte bearbeiten</b><br/>Wählen Sie einen Trackpunkt für eine Auswahl an Funktionen.<br/></translation>
+ </message>
+</context>
+<context>
<name>CMouseNormal</name>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="42"/>
<source>Add Waypoint</source>
<translation>Wegpunkt hinzufügen</translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="43"/>
<source>Add Track</source>
- <translation type="unfinished"></translation>
+ <translation>Track hinzufügen</translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="44"/>
<source>Add Area</source>
- <translation type="unfinished"></translation>
+ <translation>Fläche hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../mouse/CMouseNormal.cpp" line="46"/>
+ <source>Copy position</source>
+ <translation>Position kopieren</translation>
+ </message>
+</context>
+<context>
+ <name>CMouseRangeTrk</name>
+ <message>
+ <location filename="../mouse/CMouseRangeTrk.cpp" line="48"/>
+ <source><b>Select Range</b><br/>Select first track point. And then a second one.<br/></source>
+ <translation><b>Ausschnitt wählen</b><br/>Wählen Sie den ersten Punkt aus. Und dann den zweiten.<br/></translation>
</message>
</context>
<context>
@@ -1260,6 +1315,22 @@ ist keine gültige Koordinatensystemdefinition:
</message>
</context>
<context>
+ <name>ICombineTrk</name>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="14"/>
+ <source>Combine Tracks...</source>
+ <translation>Tracks verbinden...</translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="43"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="70"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="117"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="144"/>
+ <source>...</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
<name>IDemPathSetup</name>
<message>
<location filename="../dem/IDemPathSetup.ui" line="14"/>
@@ -1283,7 +1354,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../dem/IDemPropSetup.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1323,7 +1393,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../dem/IDemList.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1393,7 +1462,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/wpt/IDetailsGeoCache.ui" line="249"/>
<source>Hint:</source>
- <translation>Hilfe:</translation>
+ <translation>Hinweis:</translation>
</message>
</context>
<context>
@@ -1401,52 +1470,52 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished">Dialog</translation>
+ <translation>Dialog</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="37"/>
<source>-</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="75"/>
<source>...</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="105"/>
<source>Color</source>
- <translation type="unfinished"></translation>
+ <translation>Farbe</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="126"/>
<source>Border width</source>
- <translation type="unfinished"></translation>
+ <translation>Rahmenbreite</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="140"/>
<source>Style</source>
- <translation type="unfinished"></translation>
+ <translation>Stil</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="159"/>
<source>Opacity</source>
- <translation type="unfinished"></translation>
+ <translation>Deckkraft</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="179"/>
<source>Points</source>
- <translation type="unfinished">Punkte</translation>
+ <translation>Punkte</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="206"/>
<source>Position</source>
- <translation type="unfinished">Position</translation>
+ <translation>Position</translation>
</message>
<message>
<location filename="../gis/ovl/IDetailsOvlArea.ui" line="215"/>
<source>Hist.</source>
- <translation type="unfinished">Hist.</translation>
+ <translation>Hist.</translation>
</message>
</context>
<context>
@@ -1454,7 +1523,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/trk/IDetailsTrk.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1613,7 +1681,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/IGisWidget.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1850,7 +1917,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../map/IMapList.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1897,7 +1963,6 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../map/IMapPropSetup.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -1961,22 +2026,22 @@ ist keine gültige Koordinatensystemdefinition:
<context>
<name>IMouseEditLine</name>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points?</source>
- <translation type="unfinished"></translation>
+ <translation>Punkte hinzufügen?</translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points to temporary line?</source>
- <translation type="unfinished"></translation>
+ <translation>Punkte zur temporären Linie hinzufügen?</translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>Warning!</source>
<translation>Warnung!</translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
<translation>Alle ursprünglichen Daten werden durch eine einfache Koordinatenlinie ersetzt. Alle anderen Daten sind dauerhaft verloren.</translation>
</message>
@@ -2110,7 +2175,6 @@ sein</translation>
<message>
<location filename="../mouse/IScrOptEditLine.ui" line="26"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2154,7 +2218,6 @@ sein</translation>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2179,17 +2242,17 @@ sein</translation>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="63"/>
<source>Move selected point.</source>
- <translation type="unfinished"></translation>
+ <translation>Ausgewählten Punkt verschieben.</translation>
</message>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="77"/>
<source>Add points before the selected point.</source>
- <translation type="unfinished"></translation>
+ <translation>Punkte vor dem ausgewählten Punkt einfügen.</translation>
</message>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="91"/>
<source>Add points after the selected point.</source>
- <translation type="unfinished"></translation>
+ <translation>Punkte nach dem ausgewählten Punkt einfügen.</translation>
</message>
</context>
<context>
@@ -2197,7 +2260,6 @@ sein</translation>
<message>
<location filename="../mouse/IScrOptRange.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2212,11 +2274,45 @@ sein</translation>
</message>
</context>
<context>
+ <name>IScrOptRangeTrk</name>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="14"/>
+ <source>Form</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="40"/>
+ <source>Hide all points.</source>
+ <translation>Alle Punkte verstecken.</translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="43"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="57"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="71"/>
+ <source>...</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="54"/>
+ <source>Show all points.</source>
+ <translation>Alle Punkte zeigen.</translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="68"/>
+ <source>Copy track points as new track.</source>
+ <translation>Die Trackpunkte als neuen Track kopieren.</translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="103"/>
+ <source>TextLabel</source>
+ <translation>Bezeichnung</translation>
+ </message>
+</context>
+<context>
<name>IScrOptRte</name>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2246,7 +2342,6 @@ sein</translation>
<message>
<location filename="../gis/trk/IScrOptTrk.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2255,26 +2350,36 @@ sein</translation>
<translation>Detailansicht & Trackeigenschaften bearbeiten.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
<source>Show on-screen profile and detailed information about points.</source>
<translation>Zeigt das Profil und detaillierte Informationen der Punkte.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="145"/>
<source>Cut track at selected point into two tracks.</source>
<translation>Teilt den Track am selektierten Punkt in zwei Teile.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="103"/>
<source>Edit position of track points.</source>
<translation>Position von Trackpunkten bearbeiten.</translation>
</message>
<message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="117"/>
+ <source>Reverse track.</source>
+ <translation>Track umkehren.</translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="131"/>
+ <source>Combine tracks.</source>
+ <translation>Tracks verbinden.</translation>
+ </message>
+ <message>
<source><html><head/><body><p>View details & Edit</p></body></html></source>
<translation type="obsolete"><html><head/><body><p>Details anzeigen & Bearbeiten</p></body></html></translation>
</message>
@@ -2285,9 +2390,12 @@ sein</translation>
<message>
<location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="74"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>...</source>
<translation></translation>
</message>
@@ -2308,7 +2416,7 @@ sein</translation>
<translation type="obsolete"><html><head/><body><p>Bearbeiten der Position von Trackpunkten.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="174"/>
<source>TextLabel</source>
<translation>Bezeichnung</translation>
</message>
@@ -2318,7 +2426,6 @@ sein</translation>
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="20"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2364,7 +2471,7 @@ sein</translation>
<message>
<location filename="../helpers/ISelectProjectDialog.ui" line="14"/>
<source>Select a project...</source>
- <translation type="unfinished"></translation>
+ <translation>Wähle ein Projekt...</translation>
</message>
<message>
<location filename="../helpers/ISelectProjectDialog.ui" line="20"/>
@@ -2377,7 +2484,6 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="14"/>
<source>Form</source>
- <translatorcomment>?</translatorcomment>
<translation></translation>
</message>
<message>
@@ -2623,59 +2729,58 @@ Zeile %2, Spalte %3:
<translation>Datei %1' konnte nicht gespeichert werden</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="248"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
- <translatorcomment>?</translatorcomment>
- <translation>Geänderte Wegpunkte, alle vorherigen Daten sind verloren.</translation>
+ <translation>Wegpunkte geändert, alle vorherigen Daten sind verloren.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="325"/>
<source>Length: %1 %2</source>
<translation>Länge: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="332"/>
<source>, %1%2 %3, %4%5 %6</source>
<translation></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="340"/>
<source>Time: %1</source>
<translation>Zeit: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
<source>, Speed: %1 %2</source>
<translation>, Geschw.: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
<source>Moving: %1</source>
<translation>Bewegung: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Start: %1</source>
<translation>Beginn: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="364"/>
<source>End: %1</source>
<translation>Ende: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Points: %1 (%2)</source>
<translation>Punkte: %1 (%2)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="434"/>
<source>Ele.: %1 %2</source>
<translation>Höhe: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="437"/>
<source> slope: %1° (%2%)</source>
<translation> Neigung: %1° (%2%)</translation>
</message>
@@ -2684,115 +2789,120 @@ Zeile %2, Spalte %3:
<translation type="obsolete">Neigung: %1°(%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source> speed: %1%2</source>
<translation>Geschwindigkeit: %1%2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="454"/>
<source>Ascend: %1%2 (%3%)</source>
<translation>Anstieg: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="458"/>
<source>Ascend: - (-)</source>
<translation>Anstieg: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="464"/>
<source> Descend: %1%2 (%3%)</source>
<translation> Abstieg: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="468"/>
<source> Descend: - (-) </source>
<translation> Abstieg: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="475"/>
<source>Dist.: %1%2 (%3%)</source>
<translation>Entf.: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="479"/>
<source>Dist.: - (-)</source>
<translation>Entf.: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="485"/>
<source> Moving: %1%2 (%3%)</source>
<translation>Bewegung: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="489"/>
<source> Moving: - (-) </source>
<translation> Bewegung: - (-) </translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="94"/>
<source>thin</source>
- <translation type="unfinished"></translation>
+ <translation>dünn</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
<source>normal</source>
- <translation type="unfinished"></translation>
+ <translation>normal</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
<source>wide</source>
- <translation type="unfinished"></translation>
+ <translation>weit</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
<source>strong</source>
- <translation type="unfinished"></translation>
+ <translation>stark</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
<source>Changed area shape.</source>
- <translation type="unfinished"></translation>
+ <translation>Flächenform geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
<source>Changed name.</source>
- <translation type="unfinished"></translation>
+ <translation>Name geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
<source>Changed border width.</source>
- <translation type="unfinished"></translation>
+ <translation>Umrnadungsbreite geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
<source>Changed fill pattern.</source>
- <translation type="unfinished"></translation>
+ <translation>Füllung geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
<source>Changed opacity.</source>
- <translation type="unfinished"></translation>
+ <translation>Durchsichtigkeit geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
<source>Changed comment.</source>
- <translation type="unfinished"></translation>
+ <translation>Kommentar geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
<source>Changed description.</source>
- <translation type="unfinished"></translation>
+ <translation>Beschreibung geändert.</translation>
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1371"/>
<source>Changed color</source>
<translation>Farbe geändert</translation>
</message>
<message>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
<location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Edit name...</source>
<translation>Name ändern...</translation>
</message>
@@ -2802,63 +2912,63 @@ Zeile %2, Spalte %3:
<translation>Geben Sie einen neuen Namen ein.</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
<source>Elevation: %1 %2</source>
<translation>Höhe: %1 %2</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
<source>Proximity: %1 %2</source>
<translation>Abstand: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1360"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
<source>Changed name</source>
<translation>Name geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
<source>Changed position</source>
<translation>Position geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
<source>Changed elevation</source>
<translation>Höhe geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
<source>Changed proximity</source>
<translation>Abstandsalarm geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
<source>Changed icon</source>
<translation>Symbol geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
<source>Changed comment</source>
<translation>Kommentar geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
<source>Changed description</source>
<translation>Beschreibung geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
<source>Archived</source>
<translation>Archiviert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
<source>Available</source>
<translation>Verfügbar</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
<source>Not Available</source>
<translation>Nicht verfügbar</translation>
</message>
@@ -2889,10 +2999,15 @@ Zeile %2, Spalte %3:
<translation>Schreibgeschützt...</translation>
</message>
<message>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Enter new track name.</source>
- <translation type="unfinished"></translation>
+ <translation>Name eingeben.</translation>
</message>
</context>
</TS>
diff --git a/src/locale/qmapshack_es.ts b/src/locale/qmapshack_es.ts
index 9d25baa..9465088 100644
--- a/src/locale/qmapshack_es.ts
+++ b/src/locale/qmapshack_es.ts
@@ -4,7 +4,7 @@
<context>
<name>CCanvas</name>
<message>
- <location filename="../canvas/CCanvas.cpp" line="58"/>
+ <location filename="../canvas/CCanvas.cpp" line="59"/>
<source>Workspace %1</source>
<translation type="unfinished"></translation>
</message>
@@ -208,7 +208,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="51"/>
+ <location filename="../gis/CGisListWks.cpp" line="49"/>
+ <source>Reverse Track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="50"/>
+ <source>Combine Tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="53"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
@@ -229,12 +239,12 @@
<context>
<name>CMainWindow</name>
<message>
- <location filename="../CMainWindow.cpp" line="420"/>
+ <location filename="../CMainWindow.cpp" line="431"/>
<source>Ele: %1%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../CMainWindow.cpp" line="521"/>
+ <location filename="../CMainWindow.cpp" line="532"/>
<source>Load GIS Data...</source>
<translation type="unfinished"></translation>
</message>
@@ -1038,27 +1048,56 @@ Unknown structure.</source>
</message>
<message>
<location filename="../map/CMapWMTS.cpp" line="323"/>
- <source>%1: %2 tiles pending</source>
+ <source><b>%1</b>: %2 tiles pending<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseEditArea</name>
+ <message>
+ <location filename="../mouse/CMouseEditArea.cpp" line="38"/>
+ <source><b>Edit Area</b><br/>Select a corner point for more options.<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseEditTrk</name>
+ <message>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="46"/>
+ <source><b>Edit Track Points</b><br/>Select a track point for more options.<br/></source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CMouseNormal</name>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="42"/>
<source>Add Waypoint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="43"/>
<source>Add Track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+ <location filename="../mouse/CMouseNormal.cpp" line="44"/>
<source>Add Area</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../mouse/CMouseNormal.cpp" line="46"/>
+ <source>Copy position</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CMouseRangeTrk</name>
+ <message>
+ <location filename="../mouse/CMouseRangeTrk.cpp" line="48"/>
+ <source><b>Select Range</b><br/>Select first track point. And then a second one.<br/></source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>CPlotDistance</name>
@@ -1226,6 +1265,22 @@ is not a valid coordinate system definition:
</message>
</context>
<context>
+ <name>ICombineTrk</name>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="14"/>
+ <source>Combine Tracks...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/ICombineTrk.ui" line="43"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="70"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="117"/>
+ <location filename="../gis/trk/ICombineTrk.ui" line="144"/>
+ <source>...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>IDemPathSetup</name>
<message>
<location filename="../dem/IDemPathSetup.ui" line="14"/>
@@ -1903,22 +1958,22 @@ is not a valid coordinate system definition:
<context>
<name>IMouseEditLine</name>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="309"/>
<source>Add points to temporary line?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+ <location filename="../mouse/IMouseEditLine.cpp" line="758"/>
<source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
<translation type="unfinished"></translation>
</message>
@@ -2147,6 +2202,41 @@ or
</message>
</context>
<context>
+ <name>IScrOptRangeTrk</name>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="14"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="40"/>
+ <source>Hide all points.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="43"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="57"/>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="71"/>
+ <source>...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="54"/>
+ <source>Show all points.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="68"/>
+ <source>Copy track points as new track.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mouse/IScrOptRangeTrk.ui" line="103"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>IScrOptRte</name>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="14"/>
@@ -2188,36 +2278,49 @@ or
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
<source>Show on-screen profile and detailed information about points.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="145"/>
<source>Cut track at selected point into two tracks.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="103"/>
<source>Edit position of track points.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="74"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="117"/>
+ <source>Reverse track.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="131"/>
+ <source>Combine tracks.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="174"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
@@ -2524,103 +2627,103 @@ line %2, column %3:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="325"/>
<source>Length: %1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="332"/>
<source>, %1%2 %3, %4%5 %6</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="340"/>
<source>Time: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
<source>, Speed: %1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
<source>Moving: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Start: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="364"/>
<source>End: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Points: %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="434"/>
<source>Ele.: %1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source> speed: %1%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="454"/>
<source>Ascend: %1%2 (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="458"/>
<source>Ascend: - (-)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="468"/>
<source> Descend: - (-) </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="489"/>
<source> Moving: - (-) </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="464"/>
<source> Descend: %1%2 (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="248"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="437"/>
<source> slope: %1° (%2%)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="475"/>
<source>Dist.: %1%2 (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="479"/>
<source>Dist.: - (-)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="485"/>
<source> Moving: %1%2 (%3%)</source>
<translation type="unfinished"></translation>
</message>
@@ -2681,30 +2784,35 @@ line %2, column %3:
</message>
<message>
<location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1371"/>
<source>Changed color</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
<source>Elevation: %1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
<source>Proximity: %1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1360"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
<source>Changed name</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
<location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Edit name...</source>
<translation type="unfinished"></translation>
</message>
@@ -2714,47 +2822,47 @@ line %2, column %3:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
<source>Changed position</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
<source>Changed elevation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
<source>Changed proximity</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
<source>Changed icon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
<source>Changed comment</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
<source>Changed description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
<source>Archived</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
<source>Available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
<source>Not Available</source>
<translation type="unfinished"></translation>
</message>
@@ -2785,8 +2893,13 @@ line %2, column %3:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
- <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="900"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="908"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1097"/>
+ <location filename="../mouse/CMouseEditArea.cpp" line="86"/>
+ <location filename="../mouse/CMouseEditTrk.cpp" line="91"/>
<source>Enter new track name.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/map/CMapWMTS.cpp b/src/map/CMapWMTS.cpp
index ce77bff..1cf9ae3 100644
--- a/src/map/CMapWMTS.cpp
+++ b/src/map/CMapWMTS.cpp
@@ -320,7 +320,7 @@ void CMapWMTS::slotQueueChanged()
int pending = urlQueue.size() + urlPending.size();
if(pending)
{
- map->reportStatusToCanvas(name, tr("%1: %2 tiles pending").arg(name).arg(pending));
+ map->reportStatusToCanvas(name, tr("<b>%1</b>: %2 tiles pending<br/>").arg(name).arg(pending));
}
else
{
diff --git a/src/mouse/CMouseEditArea.cpp b/src/mouse/CMouseEditArea.cpp
index deaa563..f528ef2 100644
--- a/src/mouse/CMouseEditArea.cpp
+++ b/src/mouse/CMouseEditArea.cpp
@@ -27,7 +27,7 @@
CMouseEditArea::CMouseEditArea(const QPointF& point, CGisDraw * gis, CCanvas * parent)
: IMouseEditLine(point, gis, parent)
{
- cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveArea.png"),0,0);
+ cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveArea.png"),0,0);
}
CMouseEditArea::CMouseEditArea(CGisItemOvlArea &area, CGisDraw * gis, CCanvas * parent)
@@ -35,13 +35,21 @@ CMouseEditArea::CMouseEditArea(CGisItemOvlArea &area, CGisDraw * gis, CCanvas *
{
cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveArea.png"),0,0);
key = area.getKey();
+ canvas->reportStatus(key, tr("<b>Edit Area</b><br/>Select a corner point for more options.<br/>"));
}
CMouseEditArea::~CMouseEditArea()
{
+ canvas->reportStatus(key, "");
+}
+void CMouseEditArea::mousePressEvent(QMouseEvent * e)
+{
+ canvas->reportStatus(key, "");
+ IMouseEditLine::mousePressEvent(e);
}
+
void CMouseEditArea::drawLine(const QPolygonF &l, QPainter& p)
{
p.setPen(QPen(Qt::magenta, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
diff --git a/src/mouse/CMouseEditArea.h b/src/mouse/CMouseEditArea.h
index 9ec2ead..80e8cf4 100644
--- a/src/mouse/CMouseEditArea.h
+++ b/src/mouse/CMouseEditArea.h
@@ -31,6 +31,8 @@ class CMouseEditArea : public IMouseEditLine
CMouseEditArea(CGisItemOvlArea &area, CGisDraw * gis, CCanvas * parent);
virtual ~CMouseEditArea();
+ void mousePressEvent(QMouseEvent * e);
+
protected slots:
void slotCopyToNew();
diff --git a/src/mouse/CMouseEditTrk.cpp b/src/mouse/CMouseEditTrk.cpp
index 5bf68e3..da35996 100644
--- a/src/mouse/CMouseEditTrk.cpp
+++ b/src/mouse/CMouseEditTrk.cpp
@@ -43,16 +43,23 @@ CMouseEditTrk::CMouseEditTrk(CGisItemTrk &trk, CGisDraw * gis, CCanvas * parent)
trk.gainUserFocus(false);
}
+ canvas->reportStatus(key, tr("<b>Edit Track Points</b><br/>Select a track point for more options.<br/>"));
/*
trigger complete update of GIS components to make sure all changes to
- the originating object are reflected on the canvas->
+ the originating object are reflected on the canvas
*/
canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
}
CMouseEditTrk::~CMouseEditTrk()
{
+ canvas->reportStatus(key, "");
+}
+void CMouseEditTrk::mousePressEvent(QMouseEvent * e)
+{
+ canvas->reportStatus(key, "");
+ IMouseEditLine::mousePressEvent(e);
}
IGisLine * CMouseEditTrk::getGisLine()
diff --git a/src/mouse/CMouseEditTrk.h b/src/mouse/CMouseEditTrk.h
index 33c77fc..79096e4 100644
--- a/src/mouse/CMouseEditTrk.h
+++ b/src/mouse/CMouseEditTrk.h
@@ -31,6 +31,8 @@ class CMouseEditTrk : public IMouseEditLine
CMouseEditTrk(CGisItemTrk &trk, CGisDraw * gis, CCanvas * parent);
virtual ~CMouseEditTrk();
+ void mousePressEvent(QMouseEvent * e);
+
protected slots:
void slotCopyToNew();
diff --git a/src/mouse/CMouseRangeTrk.cpp b/src/mouse/CMouseRangeTrk.cpp
new file mode 100644
index 0000000..9e9c5d6
--- /dev/null
+++ b/src/mouse/CMouseRangeTrk.cpp
@@ -0,0 +1,275 @@
+/**********************************************************************************************
+ Copyright (C) 2014 Oliver Eichler oliver.eichler at gmx.de
+
+ 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 3 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, see <http://www.gnu.org/licenses/>.
+
+**********************************************************************************************/
+
+#include "mouse/CMouseRangeTrk.h"
+#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/CGisDraw.h"
+#include "gis/CGisWidget.h"
+#include "canvas/CCanvas.h"
+
+#include <QtWidgets>
+
+
+CMouseRangeTrk::CMouseRangeTrk(CGisItemTrk &trk, CGisDraw *gis, CCanvas *parent)
+ : IMouse(gis, parent)
+ , state(eStateIdle)
+ , anchor(NOPOINTF)
+{
+ cursor = QCursor(QPixmap("://cursors/cursorSelectRange.png"),0,0);
+ key = trk.getKey();
+
+ // reset user focus if the track has it
+ trk.setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseMove);
+ trk.setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseClick);
+ if(trk.hasUserFocus())
+ {
+ trk.gainUserFocus(false);
+ }
+
+ // switch to full mode to show deleted (hidden) track points, too
+ trk.setDrawMode(CGisItemTrk::eDrawRange);
+
+ canvas->reportStatus(key, tr("<b>Select Range</b><br/>Select first track point. And then a second one.<br/>"));
+ /*
+ trigger complete update of GIS components to make sure all changes to
+ the originating object are reflected on the canvas
+ */
+ canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
+
+CMouseRangeTrk::~CMouseRangeTrk()
+{
+ canvas->reportStatus(key, "");
+
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk)
+ {
+ trk->setDrawMode(CGisItemTrk::eDrawNormal);
+ canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+ }
+
+ delete scrOptRange;
+}
+
+void CMouseRangeTrk::draw(QPainter& p, bool needsRedraw, const QRect &rect)
+{
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk)
+ {
+ switch(state)
+ {
+ case eStateIdle:
+ case eStateMoveMap:
+ if(anchor != NOPOINTF)
+ {
+ p.setPen(Qt::darkBlue);
+ p.setBrush(QColor(255,255,255,200));
+ p.drawEllipse(anchor, 6, 6);
+
+ QPixmap bullet("://icons/8x8/bullet_magenta.png");
+ p.drawPixmap(anchor.x() - 3, anchor.y() - 3, bullet);
+ }
+ break;
+
+ case eStateSelectRange:
+ case eStateRangeSelected:
+ trk->drawRange(p);
+ if(anchor != NOPOINTF)
+ {
+ p.setPen(Qt::darkBlue);
+ p.setBrush(QColor(255,255,255,200));
+ p.drawEllipse(anchor, 6, 6);
+
+ QPixmap bullet("://icons/8x8/bullet_magenta.png");
+ p.drawPixmap(anchor.x() - 3, anchor.y() - 3, bullet);
+ }
+
+ break;
+ }
+ }
+
+ if(!scrOptRange.isNull())
+ {
+ scrOptRange->draw(p);
+ }
+}
+
+void CMouseRangeTrk::mousePressEvent(QMouseEvent * e)
+{
+ canvas->reportStatus(key, "");
+ point = e->pos();
+ if(e->button() == Qt::RightButton)
+ {
+ canvas->resetMouse();
+ canvas->update();
+ }
+ else if(e->button() == Qt::LeftButton)
+ {
+ switch(state)
+ {
+ case eStateIdle:
+ {
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0 && anchor != NOPOINTF)
+ {
+ anchor = trk->setMouseFocusByPoint(point, CGisItemTrk::eFocusMouseClick);
+ state = eStateSelectRange;
+ canvas->update();
+ }
+ else
+ {
+ state = eStateMoveMap;
+ }
+ break;
+ }
+
+ case eStateSelectRange:
+ {
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0 && anchor != NOPOINTF)
+ {
+ QPointF pt = trk->setMouseFocusByPoint(point, CGisItemTrk::eFocusMouseMove);
+ scrOptRange = new CScrOptRangeTrk(pt, trk, canvas);
+ connect(scrOptRange->toolHidePoints, SIGNAL(clicked()), this, SLOT(slotHidePoints()));
+ connect(scrOptRange->toolShowPoints, SIGNAL(clicked()), this, SLOT(slotShowPoints()));
+ connect(scrOptRange->toolCopy, SIGNAL(clicked()), this, SLOT(slotCopy()));
+
+ state = eStateRangeSelected;
+ canvas->update();
+ }
+
+ break;
+ }
+ case eStateRangeSelected:
+ {
+ scrOptRange->deleteLater();
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ trk->setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseMove);
+ trk->setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseClick);
+ }
+ state = eStateIdle;
+ canvas->update();
+ break;
+ }
+ default:;
+ }
+
+ }
+}
+
+void CMouseRangeTrk::mouseMoveEvent(QMouseEvent * e)
+{
+ point = e->pos();
+
+ switch(state)
+ {
+ case eStateIdle:
+ {
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ anchor = trk->setMouseFocusByPoint(point, CGisItemTrk::eFocusMouseClick);
+ canvas->update();
+ }
+ break;
+ }
+
+ case eStateMoveMap:
+ {
+ if(point != lastPoint)
+ {
+ QPoint delta = point - lastPoint;
+ canvas->moveMap(delta);
+ }
+ break;
+ }
+
+ case eStateSelectRange:
+ {
+
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ anchor = trk->setMouseFocusByPoint(point, CGisItemTrk::eFocusMouseMove);
+ canvas->update();
+ }
+ panCanvas(point);
+ break;
+ }
+ default:;
+ }
+
+ lastPoint = point;
+}
+
+void CMouseRangeTrk::mouseReleaseEvent(QMouseEvent *e)
+{
+ if(e->button() == Qt::LeftButton)
+ {
+ if(state == eStateMoveMap)
+ {
+ state = eStateIdle;
+ }
+ }
+}
+
+void CMouseRangeTrk::wheelEvent(QWheelEvent * e)
+{
+
+}
+
+void CMouseRangeTrk::slotHidePoints()
+{
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ trk->hideSelectedPoints();
+ canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+ }
+
+ scrOptRange->deleteLater();
+ canvas->resetMouse();
+}
+
+void CMouseRangeTrk::slotShowPoints()
+{
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ trk->showSelectedPoints();
+ canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+ }
+
+ scrOptRange->deleteLater();
+ canvas->resetMouse();
+}
+
+void CMouseRangeTrk::slotCopy()
+{
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ trk->copySelectedPoints();
+ canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+ }
+ scrOptRange->deleteLater();
+ canvas->resetMouse();
+}
diff --git a/src/gis/trk/CScrOptTrk.h b/src/mouse/CMouseRangeTrk.h
similarity index 51%
copy from src/gis/trk/CScrOptTrk.h
copy to src/mouse/CMouseRangeTrk.h
index 1ea7586..dcd0a16 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/mouse/CMouseRangeTrk.h
@@ -16,36 +16,56 @@
**********************************************************************************************/
-#ifndef CSCROPTTRK_H
-#define CSCROPTTRK_H
+#ifndef CMOUSERANGETRK_H
+#define CMOUSERANGETRK_H
-#include "mouse/IScrOpt.h"
-#include "ui_IScrOptTrk.h"
+#include "mouse/IMouse.h"
+#include <QPointer>
class CGisItemTrk;
-class IMouse;
+class CGisDraw;
+class CCanvas;
+class CScrOptRangeTrk;
-class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
+class CMouseRangeTrk : public IMouse
{
- Q_OBJECT
+ Q_OBJECT;
public:
- CScrOptTrk(CGisItemTrk * trk, const QPoint &point, IMouse *parent);
- virtual ~CScrOptTrk();
+ CMouseRangeTrk(CGisItemTrk& trk, CGisDraw * gis, CCanvas * parent);
+ virtual ~CMouseRangeTrk();
- void draw(QPainter& p);
-
- private slots:
- void slotDelete();
- void slotEditDetails();
- void slotProfile(bool on);
- void slotCut();
- void slotEdit();
+ void draw(QPainter& p, bool needsRedraw, const QRect &rect);
+ void mousePressEvent(QMouseEvent * e);
+ void mouseMoveEvent(QMouseEvent * e);
+ void mouseReleaseEvent(QMouseEvent *e);
+ void wheelEvent(QWheelEvent * e);
+ private slots:
+ void slotHidePoints();
+ void slotShowPoints();
+ void slotCopy();
private:
QString key;
+
+ enum state_e
+ {
+ eStateIdle
+ ,eStateMoveMap
+ ,eStateSelectRange
+ ,eStateRangeSelected
+ };
+
+ state_e state;
+
QPointF anchor;
+
+ QPoint lastPoint;
+
+ QPointer<CScrOptRangeTrk> scrOptRange;
+
+
};
-#endif //CSCROPTTRK_H
+#endif //CMOUSERANGETRK_H
diff --git a/src/mouse/CMouseEditTrk.h b/src/mouse/CScrOptRangeTrk.cpp
similarity index 61%
copy from src/mouse/CMouseEditTrk.h
copy to src/mouse/CScrOptRangeTrk.cpp
index 33c77fc..cf17ce7 100644
--- a/src/mouse/CMouseEditTrk.h
+++ b/src/mouse/CScrOptRangeTrk.cpp
@@ -16,30 +16,33 @@
**********************************************************************************************/
-#ifndef CMOUSEEDITTRK_H
-#define CMOUSEEDITTRK_H
+#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "CMainWindow.h"
-#include "mouse/IMouseEditLine.h"
+#include <QtWidgets>
-class CGisItemTrk;
-
-class CMouseEditTrk : public IMouseEditLine
+CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
+ : IScrOpt(parent)
{
- Q_OBJECT
- public:
- CMouseEditTrk(const QPointF& point, CGisDraw * gis, CCanvas * parent);
- CMouseEditTrk(CGisItemTrk &trk, CGisDraw * gis, CCanvas * parent);
- virtual ~CMouseEditTrk();
+ setupUi(this);
+ label->setFont(CMainWindow::self().getMapFont());
+ label->setText(trk->getInfoRange());
+ adjustSize();
+
+ setOrigin(point.toPoint());
- protected slots:
- void slotCopyToNew();
+ move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
+ show();
+}
- protected:
- IGisLine * getGisLine();
+CScrOptRangeTrk::~CScrOptRangeTrk()
+{
- private:
- QString key;
-};
+}
-#endif //CMOUSEEDITTRK_H
+void CScrOptRangeTrk::draw(QPainter& p)
+{
+ drawBubble2(origin, p);
+}
diff --git a/src/gis/trk/CScrOptTrk.h b/src/mouse/CScrOptRangeTrk.h
similarity index 66%
copy from src/gis/trk/CScrOptTrk.h
copy to src/mouse/CScrOptRangeTrk.h
index 1ea7586..ecb0914 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/mouse/CScrOptRangeTrk.h
@@ -16,36 +16,22 @@
**********************************************************************************************/
-#ifndef CSCROPTTRK_H
-#define CSCROPTTRK_H
+#ifndef CSCROPTRANGETRK_H
+#define CSCROPTRANGETRK_H
#include "mouse/IScrOpt.h"
-#include "ui_IScrOptTrk.h"
+#include "ui_IScrOptRangeTrk.h"
class CGisItemTrk;
-class IMouse;
-class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
+class CScrOptRangeTrk : public IScrOpt, public Ui::IScrOptRangeTrk
{
- Q_OBJECT
public:
- CScrOptTrk(CGisItemTrk * trk, const QPoint &point, IMouse *parent);
- virtual ~CScrOptTrk();
+ CScrOptRangeTrk(const QPointF& point, CGisItemTrk *trk, QWidget * parent);
+ virtual ~CScrOptRangeTrk();
void draw(QPainter& p);
-
- private slots:
- void slotDelete();
- void slotEditDetails();
- void slotProfile(bool on);
- void slotCut();
- void slotEdit();
-
-
- private:
- QString key;
- QPointF anchor;
};
-#endif //CSCROPTTRK_H
+#endif //CSCROPTRANGETRK_H
diff --git a/src/mouse/IMouseEditLine.cpp b/src/mouse/IMouseEditLine.cpp
index 663f32f..9a5a76a 100644
--- a/src/mouse/IMouseEditLine.cpp
+++ b/src/mouse/IMouseEditLine.cpp
@@ -143,6 +143,68 @@ void IMouseEditLine::drawHighlight2(QPainter& p)
p.drawPolyline(highlight);
}
+void IMouseEditLine::drawArrows(const QPolygonF &l, QPainter& p)
+{
+ QPointF arrow[4] =
+ {
+ QPointF( 24.0, 9.0), //front
+ QPointF( 0.0, 0.0), //upper tail
+ QPointF( 5.0, 9.0), //mid tail
+ QPointF( 0.0, 19.0) //lower tail
+ };
+
+ QPointF pt, pt1, ptt;
+
+ // draw direction arrows
+ bool start = true;
+ qreal heading;
+
+ //generate arrow pic on-the-fly
+ QImage arrow_pic(25,20, QImage::Format_ARGB32);
+ arrow_pic.fill( qRgba(0,0,0,0));
+ QPainter t_paint(&arrow_pic);
+ USE_ANTI_ALIASING(t_paint, true);
+ t_paint.setPen(QPen(Qt::white, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+ t_paint.setBrush(Qt::magenta);
+ t_paint.drawPolygon(arrow, 4);
+ t_paint.end();
+
+ foreach(pt,l)
+ {
+ if(start) // no arrow on the first loop
+ {
+ start = false;
+ }
+ else
+ {
+ if((qAbs(pt.x() - pt1.x()) + qAbs(pt.y() - pt1.y())) < 7)
+ {
+ pt1 = pt;
+ continue;
+ }
+ // keep distance
+ if((qAbs(pt.x() - ptt.x()) + qAbs(pt.y() - ptt.y())) > 100)
+ {
+ if(0 != pt.x() - pt1.x() && (pt.y() - pt1.y()))
+ {
+ heading = ( atan2((qreal)(pt.y() - pt1.y()), (qreal)(pt.x() - pt1.x())) * 180.) / M_PI;
+
+ p.save();
+ // draw arrow between bullets
+ p.translate((pt.x() + pt1.x())/2,(pt.y() + pt1.y())/2);
+ p.rotate(heading);
+ p.drawImage(-13, -9, arrow_pic);
+ p.restore();
+ //remember last point
+ ptt = pt;
+ }
+ }
+ }
+ pt1 = pt;
+ }
+
+}
+
void IMouseEditLine::draw(QPainter& p, bool needsRedraw, const QRect &rect)
{
if(needsRedraw)
@@ -153,30 +215,36 @@ void IMouseEditLine::draw(QPainter& p, bool needsRedraw, const QRect &rect)
gis->convertRad2Px(newLine);
}
+
+
switch(state)
{
case eStateIdle:
case eStatePointSelected:
- drawLine(line, p);
+ drawArrows(line, p);
+ drawLine(line, p);
drawBullets(line, p);
drawPointOfFocus(p);
break;
case eStateSelectRange:
- drawLine(line, p);
+ drawArrows(line, p);
+ drawLine(line, p);
drawHighlight1(p);
drawBullets(line, p);
drawPointOfFocus(p);
break;
case eStateRangeSelected:
- drawLine(line, p);
+ drawArrows(line, p);
+ drawLine(line, p);
drawHighlight2(p);
drawBullets(line, p);
drawPointOfFocus(p);
break;
case eStateMovePoint:
+ drawArrows(line, p);
drawLine(line, p);
drawBullets(line, p);
drawPointOfFocus(p);
@@ -186,7 +254,8 @@ void IMouseEditLine::draw(QPainter& p, bool needsRedraw, const QRect &rect)
case eStateAddPointBwd:
{
QPolygonF l = line.mid(0, idxStart + 1) + newLine + line.mid(idxStop, -1);
- drawLine(l, p);
+ drawArrows(l, p);
+ drawLine(l, p);
drawBullets(l, p);
break;
}
@@ -380,6 +449,10 @@ void IMouseEditLine::mousePressEvent(QMouseEvent * e)
state = eStatePointSelected;
}
+ else
+ {
+ state = eStateMoveMap;
+ }
break;
}
case eStateSelectRange:
@@ -432,11 +505,6 @@ void IMouseEditLine::mouseMoveEvent(QMouseEvent * e)
{
case eStateIdle:
{
- if(!scrOptEditLine->rect().contains(point))
- {
- panCanvas(point);
- }
-
int old = idxFocus;
idxFocus = getPointCloseBy(point);
if(old != idxFocus)
@@ -489,15 +557,33 @@ void IMouseEditLine::mouseMoveEvent(QMouseEvent * e)
newCoords[idxFocus] = pt;
canvas->update();
+ break;
}
+ case eStateMoveMap:
+ {
+ if(point != lastPoint)
+ {
+ QPoint delta = point - lastPoint;
+ canvas->moveMap(delta);
+ }
+ break;
+ }
default:;
}
+
+ lastPoint = point;
}
void IMouseEditLine::mouseReleaseEvent(QMouseEvent *e)
{
-
+ if(e->button() == Qt::LeftButton)
+ {
+ if(state == eStateMoveMap)
+ {
+ state = eStateIdle;
+ }
+ }
}
void IMouseEditLine::wheelEvent(QWheelEvent * e)
diff --git a/src/mouse/IMouseEditLine.h b/src/mouse/IMouseEditLine.h
index 651477d..85121e8 100644
--- a/src/mouse/IMouseEditLine.h
+++ b/src/mouse/IMouseEditLine.h
@@ -104,6 +104,7 @@ class IMouseEditLine : public IMouse
void drawBullets(const QPolygonF& l, QPainter& p);
void drawHighlight1(QPainter& p);
void drawHighlight2(QPainter& p);
+ void drawArrows(const QPolygonF &l, QPainter& p);
int getPointCloseBy(const QPoint& screenPos);
/// backup for coord1
@@ -125,6 +126,7 @@ class IMouseEditLine : public IMouse
,eStateMovePoint
,eStateAddPointBwd
,eStateAddPointFwd
+ ,eStateMoveMap
};
@@ -136,6 +138,8 @@ class IMouseEditLine : public IMouse
QPointer<CScrOptPoint> scrOptPoint;
QPointer<CScrOptRange> scrOptRange;
CScrOptEditLine * scrOptEditLine;
+
+ QPoint lastPoint;
};
#endif //IMOUSEEDITLINE_H
diff --git a/src/mouse/IScrOptRangeTrk.ui b/src/mouse/IScrOptRangeTrk.ui
new file mode 100644
index 0000000..01ab623
--- /dev/null
+++ b/src/mouse/IScrOptRangeTrk.ui
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IScrOptRangeTrk</class>
+ <widget class="QWidget" name="IScrOptRangeTrk">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>100</width>
+ <height>100</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <property name="leftMargin">
+ <number>3</number>
+ </property>
+ <property name="topMargin">
+ <number>3</number>
+ </property>
+ <property name="rightMargin">
+ <number>3</number>
+ </property>
+ <property name="bottomMargin">
+ <number>3</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <item>
+ <widget class="QToolButton" name="toolHidePoints">
+ <property name="toolTip">
+ <string>Hide all points.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../resources.qrc">
+ <normaloff>:/icons/32x32/PointHide.png</normaloff>:/icons/32x32/PointHide.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolShowPoints">
+ <property name="toolTip">
+ <string>Show all points.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../resources.qrc">
+ <normaloff>:/icons/32x32/PointShow.png</normaloff>:/icons/32x32/PointShow.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolCopy">
+ <property name="toolTip">
+ <string>Copy track points as new track.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../resources.qrc">
+ <normaloff>:/icons/32x32/Copy.png</normaloff>:/icons/32x32/Copy.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/plot/CPlotTrack.cpp b/src/plot/CPlotTrack.cpp
index be68fe1..af1b522 100644
--- a/src/plot/CPlotTrack.cpp
+++ b/src/plot/CPlotTrack.cpp
@@ -51,19 +51,59 @@ void CPlotTrack::setTrack(CGisItemTrk * track, const QString& proj)
updateData();
}
+void CPlotTrack::setTrack(const QPolygonF& track, const QString &proj)
+{
+ coords = track;
+ pjsrc = pj_init_plus(proj.toLatin1());
+
+ updateData();
+}
+
void CPlotTrack::updateData()
{
- if(trk == 0)
+ if(trk == 0 && coords.isEmpty())
{
return;
}
- const QRectF& boundingRect = trk->getBoundingRect();
+ QRectF boundingRect;
+ if(trk)
+ {
+ coords.clear();
+ const CGisItemTrk::trk_t& t = trk->getTrackData();
+ foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+ {
+ foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+ {
+ if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+ {
+ continue;
+ }
+
+ coords << QPointF(trkpt.lon * DEG_TO_RAD, trkpt.lat * DEG_TO_RAD);
+ }
+ }
+ }
+
+ qreal north = -90 * DEG_TO_RAD;
+ qreal east = -180 * DEG_TO_RAD;
+ qreal south = 90 * DEG_TO_RAD;
+ qreal west = 180 * DEG_TO_RAD;
+
+ foreach(const QPointF& trkpt, coords)
+ {
+ if(trkpt.x() < west) west = trkpt.x();
+ if(trkpt.x() > east) east = trkpt.x();
+ if(trkpt.y() < south) south = trkpt.y();
+ if(trkpt.y() > north) north = trkpt.y();
+ }
+
+
QRectF r = buffer.rect();
r.adjust(5,5,-5,-5);
- pt1 = boundingRect.topLeft();
- pt2 = boundingRect.bottomRight();
+ pt1 = QPointF(west, north);
+ pt2 = QPointF(east, south);
pj_transform(pjtar, pjsrc, 1, 0, &pt1.rx(), &pt1.ry(), 0);
pj_transform(pjtar, pjsrc, 1, 0, &pt2.rx(), &pt2.ry(), 0);
@@ -83,28 +123,16 @@ void CPlotTrack::updateData()
}
line.clear();
- const CGisItemTrk::trk_t& t = trk->getTrackData();
- foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+ foreach(const QPointF& trkpt, coords)
{
- foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
- {
- if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
- {
- continue;
- }
-
- QPointF pt(trkpt.lon * DEG_TO_RAD, trkpt.lat * DEG_TO_RAD);
- pj_transform(pjtar, pjsrc, 1, 0, &pt.rx(), &pt.ry(), 0);
-
- line << (pt - pt1) * scale;
- }
+ QPointF pt(trkpt.x(), trkpt.y());
+ pj_transform(pjtar, pjsrc, 1, 0, &pt.rx(), &pt.ry(), 0);
+ line << (pt - pt1) * scale;
}
xoff = qRound((buffer.width() - w * scale.x()) / 2);
yoff = qRound((buffer.height() - h * scale.y()) / 2);
-
-
needsRedraw = true;
}
diff --git a/src/plot/CPlotTrack.h b/src/plot/CPlotTrack.h
index 0dc4076..42bb596 100644
--- a/src/plot/CPlotTrack.h
+++ b/src/plot/CPlotTrack.h
@@ -31,6 +31,7 @@ class CPlotTrack : public QWidget
virtual ~CPlotTrack();
void setTrack(CGisItemTrk * track, const QString &proj = "+init=epsg:3857");
+ void setTrack(const QPolygonF &track, const QString &proj = "+init=epsg:3857");
void updateData();
void setMouseMoveFocus(qreal lon, qreal lat);
@@ -47,6 +48,8 @@ class CPlotTrack : public QWidget
bool needsRedraw;
CGisItemTrk * trk;
+ QPolygonF coords;
+
QImage buffer;
QPointF pt1;
diff --git a/src/resources.qrc b/src/resources.qrc
index 80d9ec0..beab307 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -53,6 +53,7 @@
<file>icons/32x32/POIText.png</file>
<file>icons/32x32/Reset.png</file>
<file>icons/32x32/Right.png</file>
+ <file>icons/32x32/Left.png</file>
<file>icons/32x32/Scale.png</file>
<file>icons/32x32/SelectColor.png</file>
<file>icons/32x32/ToBottom.png</file>
@@ -94,9 +95,13 @@
<file>icons/32x32/AddArea.png</file>
<file>icons/32x32/LineMove.png</file>
<file>icons/32x32/PointMove.png</file>
+ <file>icons/32x32/PointHide.png</file>
+ <file>icons/32x32/PointShow.png</file>
<file>icons/32x32/AreaMove.png</file>
<file>icons/32x32/SelectRange.png</file>
<file>icons/32x32/Area.png</file>
+ <file>icons/32x32/Reverse.png</file>
+ <file>icons/32x32/Combine.png</file>
<file>icons/48x48/2DFix.png</file>
<file>icons/48x48/3DFix.png</file>
@@ -132,6 +137,7 @@
<file>icons/48x48/POIText.png</file>
<file>icons/48x48/Reset.png</file>
<file>icons/48x48/Right.png</file>
+ <file>icons/48x48/Left.png</file>
<file>icons/48x48/Scale.png</file>
<file>icons/48x48/SelectColor.png</file>
<file>icons/48x48/ToBottom.png</file>
@@ -173,9 +179,13 @@
<file>icons/48x48/AddArea.png</file>
<file>icons/48x48/LineMove.png</file>
<file>icons/48x48/PointMove.png</file>
+ <file>icons/48x48/PointHide.png</file>
+ <file>icons/48x48/PointShow.png</file>
<file>icons/48x48/AreaMove.png</file>
<file>icons/48x48/SelectRange.png</file>
<file>icons/48x48/Area.png</file>
+ <file>icons/48x48/Reverse.png</file>
+ <file>icons/48x48/Combine.png</file>
<file>icons/cache/32x32/bluepin.png</file>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qmapshack.git
More information about the Pkg-grass-devel
mailing list