[qmapshack] 01/07: Imported Upstream version 0.9.1
Bas Couwenberg
sebastic at xs4all.nl
Fri Jan 2 12:43:32 UTC 2015
This is an automated email from the git hooks/post-receive script.
sebastic-guest pushed a commit to branch master
in repository qmapshack.
commit b27f763456563bc8ce4ace8709c59c2c7c4518cf
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Fri Jan 2 12:48:40 2015 +0100
Imported Upstream version 0.9.1
---
CMakeLists.txt | 2 +-
CMakeLists.txt.user | 6 +-
changelog.txt | 5 +
nsi/QMapShack_Installer.nsi | 7 +-
nsi/QMapShack_Installer32.nsi | 7 +-
nsi/copyfiles.bat | 9 +-
nsi/copyfiles32.bat | 9 +-
src/CMakeLists.txt | 5 +
src/gis/CGisListDB.cpp | 132 ++++-
src/gis/CGisListDB.h | 15 +
src/gis/CGisListWks.cpp | 316 +++++-----
src/gis/CGisListWks.h | 13 +
src/gis/CGisWidget.cpp | 102 ++--
src/gis/CGisWidget.h | 23 +-
src/gis/IGisItem.cpp | 15 +-
src/gis/IGisItem.h | 14 +-
src/gis/IGisWidget.ui | 9 +-
src/gis/db/CDBFolderDatabase.cpp | 7 +-
src/gis/db/CDBFolderGroup.cpp | 4 +-
src/gis/db/CDBFolderLostFound.cpp | 66 ++-
src/gis/db/CDBFolderLostFound.h | 6 +
src/gis/db/CDBFolderOther.cpp | 5 +-
src/gis/db/CDBFolderProject.cpp | 5 +-
src/gis/db/CDBItem.cpp | 31 +-
src/gis/db/CDBItem.h | 4 +-
src/gis/db/CDBProject.cpp | 20 +-
src/gis/db/CDBProject.h | 2 +-
src/gis/db/CLostFoundProject.cpp | 83 +++
.../{CDBFolderLostFound.h => CLostFoundProject.h} | 23 +-
src/gis/db/IDBFolder.cpp | 38 +-
src/gis/db/IDBFolder.h | 9 +-
src/gis/gpx/CGpxProject.cpp | 6 +-
src/gis/ovl/CGisItemOvlArea.cpp | 19 +-
src/gis/ovl/CGisItemOvlArea.h | 6 +-
src/gis/ovl/CScrOptOvlArea.cpp | 8 +
src/gis/ovl/CScrOptOvlArea.h | 1 +
src/gis/ovl/IScrOptOvlArea.ui | 14 +
src/gis/prj/IGisProject.cpp | 112 +++-
src/gis/prj/IGisProject.h | 39 +-
src/gis/qms/CQmsProject.cpp | 7 +-
src/gis/qms/serialization.cpp | 17 +-
src/gis/rte/CGisItemRte.cpp | 14 +-
src/gis/rte/CGisItemRte.h | 6 +-
src/gis/rte/CScrOptRte.cpp | 6 +
src/gis/rte/CScrOptRte.h | 1 +
src/gis/rte/IScrOptRte.ui | 14 +
src/gis/search/CSearchGoogle.cpp | 12 +-
src/gis/trk/CDetailsTrk.cpp | 2 +
src/gis/trk/CGisItemTrk.cpp | 18 +-
src/gis/trk/CGisItemTrk.h | 10 +-
src/gis/trk/CScrOptTrk.cpp | 7 +
src/gis/trk/CScrOptTrk.h | 1 +
src/gis/trk/IScrOptTrk.ui | 26 +-
src/gis/wpt/CGisItemWpt.cpp | 14 +-
src/gis/wpt/CGisItemWpt.h | 6 +-
src/gis/wpt/CScrOptWpt.cpp | 7 +
src/gis/wpt/CScrOptWpt.h | 1 +
src/gis/wpt/IScrOptWpt.ui | 14 +
src/helpers/CHistoryListWidget.cpp | 4 +-
src/helpers/CSelectCopyAction.cpp | 68 +++
.../CSelectCopyAction.h} | 40 +-
src/helpers/CSelectProjectDialog.cpp | 4 +-
src/helpers/ISelectCopyAction.ui | 140 +++++
src/icons/32x32/Copy.png | Bin 415 -> 511 bytes
src/icons/32x32/DatabaseConvert.png | Bin 1905 -> 1554 bytes
src/icons/32x32/Move.png | Bin 0 -> 869 bytes
src/icons/48x48/Copy.png | Bin 517 -> 649 bytes
src/icons/48x48/DatabaseConvert.png | Bin 2840 -> 2617 bytes
src/icons/48x48/Move.png | Bin 0 -> 1126 bytes
src/icons/Copy.svg | 32 +-
src/icons/DatabaseConvert.svg | 53 +-
src/icons/{Copy.svg => Move.svg} | 49 +-
src/locale/qmapshack_cs.ts | 396 ++++++++-----
src/locale/qmapshack_de.ts | 637 +++++++++++++--------
src/locale/qmapshack_es.ts | 398 ++++++++-----
src/mouse/CMouseNormal.cpp | 16 +
src/mouse/CMouseNormal.h | 3 +
src/mouse/CScrOptUnclutter.cpp | 1 +
src/resources.qrc | 2 +
79 files changed, 2198 insertions(+), 1025 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f9247d5..df19f90 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ set(APPLICATION_NAME qmapshack)
set(APPLICATION_VERSION_MAJOR "0")
set(APPLICATION_VERSION_MINOR "9")
-set(APPLICATION_VERSION_PATCH "0")
+set(APPLICATION_VERSION_PATCH "1")
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 cb54a83..7d75880 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.3.0, 2014-12-21T17:44:49. -->
+<!-- Written by QtCreator 3.3.0, 2014-12-30T11:15:51. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -208,9 +208,9 @@
<value type="int">14</value>
</valuelist>
<value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">qmapshack</value>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"> -d</value>
<value type="bool" key="CMakeProjectManager.CMakeRunConfiguration.UseTerminal">false</value>
- <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory">/home/oeichler/Code/cpp/build_QMapShack</value>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmapshack</value>
diff --git a/changelog.txt b/changelog.txt
index cb04987..457cd3c 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,8 @@
+V 0.9.1
+* Complete function of 'Lost & Found' folder
+* Add copy function to all items including dialog to select copy action.
+* Workspace: move status column to column 0
+
V 0.9.0
* Fix sign of area calculation
* Mark item with user focus in item unclutter screen
diff --git a/nsi/QMapShack_Installer.nsi b/nsi/QMapShack_Installer.nsi
index e0ef80d..88f963e 100644
--- a/nsi/QMapShack_Installer.nsi
+++ b/nsi/QMapShack_Installer.nsi
@@ -129,13 +129,14 @@ Section "QMapShack" QMapShack
File Files\Qt5Sensors.dll
File Files\Qt5Sql.dll
File Files\Qt5Svg.dll
+ File Files\Qt5WebChannel.dll
File Files\Qt5WebKit.dll
File Files\Qt5Widgets.dll
File Files\Qt5WebKitWidgets.dll
File Files\Qt5Xml.dll
- File Files\icudt52.dll
- File Files\icuin52.dll
- File Files\icuuc52.dll
+ File Files\icudt53.dll
+ File Files\icuin53.dll
+ File Files\icuuc53.dll
File Files\libEGL.dll
File Files\libGLESv2.dll
diff --git a/nsi/QMapShack_Installer32.nsi b/nsi/QMapShack_Installer32.nsi
index 76dcaf9..3ef9886 100644
--- a/nsi/QMapShack_Installer32.nsi
+++ b/nsi/QMapShack_Installer32.nsi
@@ -130,13 +130,14 @@ Section "QMapShack" QMapShack
File Files32\Qt5Sensors.dll
File Files32\Qt5Sql.dll
File Files32\Qt5Svg.dll
+ File Files32\Qt5WebChannel.dll
File Files32\Qt5WebKit.dll
File Files32\Qt5Widgets.dll
File Files32\Qt5WebKitWidgets.dll
File Files32\Qt5Xml.dll
- File Files32\icudt52.dll
- File Files32\icuin52.dll
- File Files32\icuuc52.dll
+ File Files32\icudt53.dll
+ File Files32\icuin53.dll
+ File Files32\icuuc53.dll
File Files32\libEGL.dll
File Files32\libGLESv2.dll
diff --git a/nsi/copyfiles.bat b/nsi/copyfiles.bat
index cbcca43..d79f62f 100644
--- a/nsi/copyfiles.bat
+++ b/nsi/copyfiles.bat
@@ -6,7 +6,7 @@ rem http://technet.microsoft.com/en-us/library/bb491035.aspx
rem http://vlaurie.com/computers2/Articles/environment.htm
rem Section 1.) Define path to Qt, MSVC, .... installations
-set QMSI_QT_PATH="C:\Qt5\5.3\msvc2013_64"
+set QMSI_QT_PATH="C:\Qt5\5.4\msvc2013_64"
rem get the VC redistributable installer from http://www.microsoft.com/en-us/download/details.aspx?id=40784
set QMSI_VCREDIST_PATH="M:\deploy"
rem set QLGTI_LIBEXIF_PATH="D:\qlgt\tools\libexif"
@@ -33,13 +33,14 @@ copy %QMSI_QT_PATH%\bin\Qt5Script.dll
copy %QMSI_QT_PATH%\bin\Qt5Sensors.dll
copy %QMSI_QT_PATH%\bin\Qt5Sql.dll
copy %QMSI_QT_PATH%\bin\Qt5Svg.dll
+copy %QMSI_QT_PATH%\bin\Qt5WebChannel.dll
copy %QMSI_QT_PATH%\bin\Qt5WebKit.dll
copy %QMSI_QT_PATH%\bin\Qt5WebKitWidgets.dll
copy %QMSI_QT_PATH%\bin\Qt5Widgets.dll
copy %QMSI_QT_PATH%\bin\Qt5Xml.dll
-copy %QMSI_QT_PATH%\bin\icudt52.dll
-copy %QMSI_QT_PATH%\bin\icuin52.dll
-copy %QMSI_QT_PATH%\bin\icuuc52.dll
+copy %QMSI_QT_PATH%\bin\icudt53.dll
+copy %QMSI_QT_PATH%\bin\icuin53.dll
+copy %QMSI_QT_PATH%\bin\icuuc53.dll
copy %QMSI_QT_PATH%\bin\libEGL.dll
copy %QMSI_QT_PATH%\bin\libGLESv2.dll
mkdir imageformats
diff --git a/nsi/copyfiles32.bat b/nsi/copyfiles32.bat
index aa60e26..2fdd170 100644
--- a/nsi/copyfiles32.bat
+++ b/nsi/copyfiles32.bat
@@ -6,7 +6,7 @@ rem http://technet.microsoft.com/en-us/library/bb491035.aspx
rem http://vlaurie.com/computers2/Articles/environment.htm
rem Section 1.) Define path to Qt, MSVC, .... installations
-set QMSI_QT_PATH="C:\Qt5\5.3\msvc2013"
+set QMSI_QT_PATH="C:\Qt5\5.4\msvc2013"
rem get the VC redistributable installer from http://www.microsoft.com/en-us/download/details.aspx?id=40784
set QMSI_VCREDIST_PATH="M:\deploy"
rem set QLGTI_LIBEXIF_PATH="D:\qlgt\tools\libexif"
@@ -33,13 +33,14 @@ copy %QMSI_QT_PATH%\bin\Qt5Script.dll
copy %QMSI_QT_PATH%\bin\Qt5Sensors.dll
copy %QMSI_QT_PATH%\bin\Qt5Sql.dll
copy %QMSI_QT_PATH%\bin\Qt5Svg.dll
+copy %QMSI_QT_PATH%\bin\Qt5WebChannel.dll
copy %QMSI_QT_PATH%\bin\Qt5WebKit.dll
copy %QMSI_QT_PATH%\bin\Qt5WebKitWidgets.dll
copy %QMSI_QT_PATH%\bin\Qt5Widgets.dll
copy %QMSI_QT_PATH%\bin\Qt5Xml.dll
-copy %QMSI_QT_PATH%\bin\icudt52.dll
-copy %QMSI_QT_PATH%\bin\icuin52.dll
-copy %QMSI_QT_PATH%\bin\icuuc52.dll
+copy %QMSI_QT_PATH%\bin\icudt53.dll
+copy %QMSI_QT_PATH%\bin\icuin53.dll
+copy %QMSI_QT_PATH%\bin\icuuc53.dll
copy %QMSI_QT_PATH%\bin\libEGL.dll
copy %QMSI_QT_PATH%\bin\libGLESv2.dll
mkdir imageformats
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index da94615..474a9d4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -26,6 +26,7 @@ set( SRCS
helpers/CWptIconDialog.cpp
helpers/CTextEditWidget.cpp
helpers/CSelectProjectDialog.cpp
+ helpers/CSelectCopyAction.cpp
helpers/CHistoryListWidget.cpp
helpers/CElevationDialog.cpp
helpers/CLinksDialog.cpp
@@ -113,6 +114,7 @@ set( SRCS
gis/db/CDBFolderProject.cpp
gis/db/CDBItem.cpp
gis/db/CDBProject.cpp
+ gis/db/CLostFoundProject.cpp
gis/search/CSearchGoogle.cpp
gis/wpt/CGisItemWpt.cpp
gis/wpt/CScrOptWpt.cpp
@@ -162,6 +164,7 @@ set( HDRS
helpers/CSettings.h
helpers/CInputDialog.h
helpers/CPositionDialog.h
+ helpers/CSelectCopyAction.h
helpers/CWptIconDialog.h
helpers/CTextEditWidget.h
helpers/CSelectProjectDialog.h
@@ -251,6 +254,7 @@ set( HDRS
gis/db/CDBFolderProject.h
gis/db/CDBItem.h
gis/db/CDBProject.h
+ gis/db/CLostFoundProject.h
gis/wpt/CGisItemWpt.h
gis/wpt/CScrOptWpt.h
gis/wpt/CDetailsWpt.h
@@ -296,6 +300,7 @@ set( UIS
helpers/IWptIconDialog.ui
helpers/ITextEditWidget.ui
helpers/ISelectProjectDialog.ui
+ helpers/ISelectCopyAction.ui
helpers/IElevationDialog.ui
helpers/ILinksDialog.ui
canvas/ICanvasSetup.ui
diff --git a/src/gis/CGisListDB.cpp b/src/gis/CGisListDB.cpp
index b28c900..6fb20d2 100644
--- a/src/gis/CGisListDB.cpp
+++ b/src/gis/CGisListDB.cpp
@@ -77,6 +77,9 @@ CGisListDB::CGisListDB(QWidget *parent)
actionAddFolder = menuFolder->addAction(QIcon("://icons/32x32/Add.png"), tr("Add Folder"), this, SLOT(slotAddFolder()));
actionDelFolder = menuFolder->addAction(QIcon("://icons/32x32/DeleteOne.png"), tr("Delete Folder"), this, SLOT(slotDelFolder()));
+ menuItem = new QMenu(this);
+ actionDelItem = menuItem->addAction(QIcon("://icons/32x32/DeleteOne.png"), tr("Delete Item"), this, SLOT(slotDelItem()));
+
menuDatabase = new QMenu(this);
menuDatabase->addAction(actionAddFolder);
actionDelDatabase = menuDatabase->addAction(QIcon("://icons/32x32/DeleteOne.png"), tr("Remove Database"), this, SLOT(slotDelDatabase()));
@@ -84,6 +87,10 @@ CGisListDB::CGisListDB(QWidget *parent)
menuLostFound = new QMenu(this);
actionDelLostFound = menuLostFound->addAction(QIcon("://icons/32x32/Empty.png"), tr("Empty"), this, SLOT(slotDelLostFound()));
+ menuLostFoundItem = new QMenu(this);
+ actionDelLostFoundItem = menuLostFoundItem->addAction(QIcon("://icons/32x32/DeleteOne.png"), tr("Delete Item"), this, SLOT(slotDelLostFoundItem()));
+
+
connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(slotItemExpanded(QTreeWidgetItem*)));
connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(slotItemChanged(QTreeWidgetItem*,int)));
@@ -101,7 +108,7 @@ CGisListDB::~CGisListDB()
CDBFolderDatabase * database = dynamic_cast<CDBFolderDatabase*>(topLevelItem(n));
if(database)
{
- names << database->text(IDBFolder::eColumnName);
+ names << database->text(CGisListDB::eColumnName);
files << database->getFilename();
}
}
@@ -134,7 +141,7 @@ bool CGisListDB::hasDatabase(const QString& name)
for(int i = 0; i < N; i++)
{
CDBFolderDatabase * folder = dynamic_cast<CDBFolderDatabase*>(topLevelItem(i));
- if(folder && (folder->text(IDBFolder::eColumnName) == name))
+ if(folder && (folder->text(CGisListDB::eColumnName) == name))
{
return true;
}
@@ -151,12 +158,15 @@ bool CGisListDB::event(QEvent * e)
{
case eEvtW2DAckInfo:
{
- CEvtW2DAckInfo * evt = (CEvtW2DAckInfo*)e;
- IDBFolder * folder = getDataBase(evt->db);
+ CEvtW2DAckInfo * evt = (CEvtW2DAckInfo*)e;
+ CDBFolderDatabase * folder = getDataBase(evt->db);
if(folder)
{
folder->update(evt);
-
+ if(evt->updateLostFound)
+ {
+ folder->updateLostFound();
+ }
}
e->accept();
return true;
@@ -196,6 +206,22 @@ void CGisListDB::slotContextMenu(const QPoint& point)
menuFolder->exec(p);
return;
}
+
+ CDBItem * item = dynamic_cast<CDBItem*>(currentItem());
+ if(item)
+ {
+ CDBFolderLostFound * lostFound = dynamic_cast<CDBFolderLostFound*>(item->parent());
+ if(lostFound)
+ {
+ menuLostFoundItem->exec(p);
+ }
+ else
+ {
+ menuItem->exec(p);
+ }
+
+ return;
+ }
}
void CGisListDB::slotAddDatabase()
@@ -225,7 +251,7 @@ void CGisListDB::slotDelDatabase()
return;
}
- int res = QMessageBox::question(this, tr("Remove database..."), tr("Do you realy want to remove '%1' from the list?").arg(folder->text(IDBFolder::eColumnName)), QMessageBox::Ok|QMessageBox::Abort, QMessageBox::Ok);
+ int res = QMessageBox::question(this, tr("Remove database..."), tr("Do you realy want to remove '%1' from the list?").arg(folder->text(CGisListDB::eColumnName)), QMessageBox::Ok|QMessageBox::Abort, QMessageBox::Ok);
if(res != QMessageBox::Ok)
{
return;
@@ -298,9 +324,50 @@ void CGisListDB::slotDelLostFound()
return;
}
+ QApplication::setOverrideCursor(Qt::WaitCursor);
folder->clear();
+ QApplication::restoreOverrideCursor();
}
+void CGisListDB::slotDelLostFoundItem()
+{
+ CGisListDBEditLock lock(false, this);
+
+ int res = QMessageBox::question(this, tr("Remove items..."), tr("Are you sure you want to delete all selected items from Lost&Found? This will remove them permanently."), QMessageBox::Ok|QMessageBox::No);
+ if(res != QMessageBox::Ok)
+ {
+ return;
+ }
+
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+ QSet<CDBFolderLostFound*> folders;
+ QList<QTreeWidgetItem*> delItems;
+ QList<QTreeWidgetItem*> items = selectedItems();
+ foreach(QTreeWidgetItem * item, items)
+ {
+
+ CDBItem * dbItem = dynamic_cast<CDBItem*>(item);
+ CDBFolderLostFound * folder = dynamic_cast<CDBFolderLostFound*>(dbItem->parent());
+
+ if(folder && dbItem)
+ {
+ if(folder->delItem(dbItem))
+ {
+ delItems << dbItem;
+ folders << folder;
+ }
+ }
+ }
+
+ qDeleteAll(delItems);
+ foreach(CDBFolderLostFound* folder, folders)
+ {
+ folder->update();
+ }
+ QApplication::restoreOverrideCursor();
+}
+
+
void CGisListDB::slotItemExpanded(QTreeWidgetItem * item)
{
CGisListDBEditLock lock(true, this);
@@ -314,6 +381,57 @@ void CGisListDB::slotItemExpanded(QTreeWidgetItem * item)
folder->expanding();
}
+void CGisListDB::slotDelItem()
+{
+ CGisListDBEditLock lock(false, this);
+
+ int last = QMessageBox::NoButton;
+
+ QList<QTreeWidgetItem*> dbItems;
+ QSet<CDBFolderDatabase*> dbFolders;
+
+ QList<QTreeWidgetItem*> items = selectedItems();
+ foreach(QTreeWidgetItem * item, items)
+ {
+ CDBItem * dbItem = dynamic_cast<CDBItem*>(item);
+ if(dbItem == 0)
+ {
+ continue;
+ }
+
+ IDBFolder * folder = dynamic_cast<IDBFolder*>(dbItem->parent());
+ if(folder == 0)
+ {
+ continue;
+ }
+
+ if(last != QMessageBox::YesToAll)
+ {
+ QString msg = QObject::tr("Are you sure you want to delete '%1' from folder '%2'?").arg(dbItem->text(CGisListDB::eColumnName)).arg(folder->text(CGisListDB::eColumnName));
+ last = QMessageBox::question(0, QObject::tr("Delete..."), msg, QMessageBox::YesToAll|QMessageBox::Cancel|QMessageBox::Ok|QMessageBox::No, QMessageBox::Ok);
+ }
+ if(last == QMessageBox::No)
+ {
+ continue;
+ }
+ if(last == QMessageBox::Cancel)
+ {
+ return;
+ }
+
+ dbItem->remove();
+ dbItems << dbItem;
+ dbFolders << folder->getDBFolder();
+ }
+
+ qDeleteAll(dbItems);
+ foreach(CDBFolderDatabase * dbFolder, dbFolders)
+ {
+ dbFolder->updateLostFound();
+ }
+
+}
+
void CGisListDB::slotItemChanged(QTreeWidgetItem * item, int column)
{
if(isInternalEdit)
@@ -322,7 +440,7 @@ void CGisListDB::slotItemChanged(QTreeWidgetItem * item, int column)
}
CGisListDBEditLock lock(true, this);
- if(column == IDBFolder::eColumnCheckbox)
+ if(column == CGisListDB::eColumnCheckbox)
{
IDBFolder * folder = dynamic_cast<IDBFolder*>(item);
if(folder != 0)
diff --git a/src/gis/CGisListDB.h b/src/gis/CGisListDB.h
index de255b4..f6f8227 100644
--- a/src/gis/CGisListDB.h
+++ b/src/gis/CGisListDB.h
@@ -35,6 +35,12 @@ class CGisListDB : public QTreeWidget
CGisListDB(QWidget * parent);
virtual ~CGisListDB();
+ enum column_e
+ {
+ eColumnCheckbox = 0
+ ,eColumnName = 1
+ };
+
bool hasDatabase(const QString& name);
bool event(QEvent * e);
@@ -46,10 +52,12 @@ class CGisListDB : public QTreeWidget
void slotAddFolder();
void slotDelFolder();
void slotDelLostFound();
+ void slotDelLostFoundItem();
void slotItemExpanded(QTreeWidgetItem * item);
void slotItemChanged(QTreeWidgetItem * item, int column);
void slotAddDatabase();
void slotDelDatabase();
+ void slotDelItem();
private:
friend class CGisListDBEditLock;
@@ -69,9 +77,16 @@ class CGisListDB : public QTreeWidget
QMenu * menuDatabase;
QAction * actionDelDatabase;
+ QMenu * menuItem;
+ QAction * actionDelItem;
+
QMenu * menuLostFound;
QAction * actionDelLostFound;
+ QMenu * menuLostFoundItem;
+ QAction * actionDelLostFoundItem;
+
+
// CDBFolderDatabase * folderDatabase;
};
diff --git a/src/gis/CGisListWks.cpp b/src/gis/CGisListWks.cpp
index c0f1137..fb1de05 100644
--- a/src/gis/CGisListWks.cpp
+++ b/src/gis/CGisListWks.cpp
@@ -22,6 +22,7 @@
#include "gis/CGisWidget.h"
#include "gis/IGisItem.h"
#include "gis/db/CDBProject.h"
+#include "gis/db/CLostFoundProject.h"
#include "gis/db/macros.h"
#include "gis/gpx/CGpxProject.h"
#include "gis/ovl/CGisItemOvlArea.h"
@@ -32,6 +33,7 @@
#include "gis/trk/CGisItemTrk.h"
#include "gis/wpt/CGisItemWpt.h"
#include "helpers/CSelectProjectDialog.h"
+#include "helpers/CSelectCopyAction.h"
#include "helpers/CSettings.h"
#include <QtSql>
@@ -85,20 +87,42 @@ CGisListWks::CGisListWks(QWidget *parent)
connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(slotItemDoubleClicked(QTreeWidgetItem*,int)));
- menuItem = new QMenu(this);
- actionEditDetails = menuItem->addAction(QIcon("://icons/32x32/EditDetails.png"),tr("Edit..."), this, SLOT(slotEditItem()));
- actionMoveWpt = menuItem->addAction(QIcon("://icons/32x32/WptMove.png"),tr("Move Waypoint"), this, SLOT(slotMoveWpt()));
- 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"));
- actionRangeTrk = menuItem->addAction(QIcon("://icons/32x32/SelectRange.png"),tr("Select Range"), this, SLOT(slotRangeTrk()));
- 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()));
- actionEditArea = menuItem->addAction(QIcon("://icons/32x32/AreaMove.png"),tr("Edit Area Points"), this, SLOT(slotEditArea()));
+ menuItemTrk = new QMenu(this);
+ actionEditDetails = menuItemTrk->addAction(QIcon("://icons/32x32/EditDetails.png"),tr("Edit..."), this, SLOT(slotEditItem()));
+ actionCopyItem = menuItemTrk->addAction(QIcon("://icons/32x32/Copy.png"),tr("Copy to..."), this, SLOT(slotCopyItem()));
+ actionFocusTrk = menuItemTrk->addAction(QIcon("://icons/32x32/TrkProfile.png"),tr("Track Profile"));
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()));
+ actionRangeTrk = menuItemTrk->addAction(QIcon("://icons/32x32/SelectRange.png"),tr("Select Range"), this, SLOT(slotRangeTrk()));
+ actionEditTrk = menuItemTrk->addAction(QIcon("://icons/32x32/LineMove.png"),tr("Edit Track Points"), this, SLOT(slotEditTrk()));
+ actionReverseTrk = menuItemTrk->addAction(QIcon("://icons/32x32/Reverse.png"),tr("Reverse Track"), this, SLOT(slotReverseTrk()));
+ actionCombineTrk = menuItemTrk->addAction(QIcon("://icons/32x32/Combine.png"),tr("Combine Tracks"), this, SLOT(slotCombineTrk()));
+ actionDelete = menuItemTrk->addAction(QIcon("://icons/32x32/DeleteOne.png"),tr("Delete"), this, SLOT(slotDeleteItem()));
+
+ menuItemWpt = new QMenu(this);
+ menuItemWpt->addAction(actionEditDetails);
+ menuItemWpt->addAction(actionCopyItem);
+ actionMoveWpt = menuItemWpt->addAction(QIcon("://icons/32x32/WptMove.png"),tr("Move Waypoint"), this, SLOT(slotMoveWpt()));
+ actionProjWpt = menuItemWpt->addAction(QIcon("://icons/32x32/WptProj.png"),tr("Proj. Waypoint..."), this, SLOT(slotProjWpt()));
+ menuItemWpt->addAction(actionDelete);
+
+ menuItemRte = new QMenu(this);
+ menuItemRte->addAction(actionEditDetails);
+ menuItemRte->addAction(actionCopyItem);
+ menuItemRte->addAction(actionDelete);
+
+ menuItemOvl = new QMenu(this);
+ menuItemOvl->addAction(actionEditDetails);
+ menuItemOvl->addAction(actionCopyItem);
+ actionEditArea = menuItemOvl->addAction(QIcon("://icons/32x32/AreaMove.png"),tr("Edit Area Points"), this, SLOT(slotEditArea()));
+ menuItemOvl->addAction(actionDelete);
+
+
+ menuItem = new QMenu(this);
+ menuItem->addAction(actionCopyItem);
+ menuItem->addAction(actionDelete);
+
+ connect(actionFocusTrk, SIGNAL(triggered(bool)), this, SLOT(slotFocusTrk(bool)));
connect(qApp, SIGNAL(aboutToQuit ()), this, SLOT(slotSaveWorkspace()));
SETTINGS;
@@ -315,84 +339,14 @@ void CGisListWks::dragMoveEvent (QDragMoveEvent * e )
void CGisListWks::dropEvent ( QDropEvent * e )
{
- QList<QTreeWidgetItem*> duplicate;
- QList<QTreeWidgetItem*> items = selectedItems();
- QTreeWidgetItem * item2 = itemAt(e->pos());
-
- int cnt = 1;
- int N = items.size();
- QProgressDialog progress("Check for duplicat...", "Abort check", 0, 100, this);
- progress.setWindowModality(Qt::WindowModal);
-
- // collect duplicat items
- foreach(QTreeWidgetItem * item1, items)
- {
- progress.setValue((100 * cnt++) / N);
- if (progress.wasCanceled())
- {
- return;
- }
-
- IGisItem * gisItem1 = dynamic_cast<IGisItem*>(item1);
- IGisItem * gisItem2 = dynamic_cast<IGisItem*>(item2);
- if(gisItem1 && gisItem2)
- {
- // if it is a drop on an item and the other item is in another project
- if(gisItem1->parent() != gisItem2->parent())
- {
- // iterate over all items of the target project and check keys
- QTreeWidgetItem * parent = gisItem2->parent();
- for(int i = 0; i < parent->childCount(); i++)
- {
- IGisItem * gisItem = dynamic_cast<IGisItem*>(parent->child(i));
- if(gisItem)
- {
- if(gisItem->getKey().item == gisItem1->getKey().item)
- {
- duplicate << gisItem1;
- }
- }
- }
- }
- }
- else
- {
- // if it is a drop on a project and the project is different from the source item's project
- IGisProject * parent = dynamic_cast<IGisProject*>(itemAt(e->pos()));
- if(parent && gisItem1 && gisItem1->parent() != parent)
- {
- // iterate over all items of the target project and check keys
- for(int i = 0; i < parent->childCount(); i++)
- {
- IGisItem * gisItem = dynamic_cast<IGisItem*>(parent->child(i));
- if(gisItem)
- {
- if(gisItem->getKey().item == gisItem1->getKey().item)
- {
- duplicate << gisItem1;
- }
- }
- }
- }
- }
- }
-
- // finally, remove all duplicat items from local list of selected item
- foreach(QTreeWidgetItem * item, duplicate)
- {
- items.removeAll(item);
- }
-
- if(items.isEmpty())
- {
- return;
- }
+ QList<QTreeWidgetItem*> items = selectedItems();
if(items.isEmpty())
{
return;
}
+ int lastResult = CSelectCopyAction::eResultNone;
// go on with item insertion
/*
@@ -410,8 +364,7 @@ void CGisListWks::dropEvent ( QDropEvent * e )
5) Test if item under cursor is a project
6) If project and project is not item's project create a copy
- */
-
+ */
if(items.size() == 1)
{
// calc. index offset (below/above item)
@@ -420,6 +373,17 @@ void CGisListWks::dropEvent ( QDropEvent * e )
int y2 = e->pos().y();
int off = y2 > y1 ? 1 : 0;
+ IGisProject * prj1 = dynamic_cast<IGisProject*>(currentItem());
+ IGisProject * prj2 = dynamic_cast<IGisProject*>(itemAt(e->pos()));
+ if(prj1 && prj2)
+ {
+ prj2->setFlags(prj2->flags() & ~Qt::ItemIsDropEnabled);
+ QTreeWidget::dropEvent(e);
+ prj2->setFlags(prj2->flags() | Qt::ItemIsDropEnabled);
+ emit sigChanged();
+ return;
+ }
+
CGisItemWpt * wpt1 = dynamic_cast<CGisItemWpt*>(currentItem());
CGisItemWpt * wpt2 = dynamic_cast<CGisItemWpt*>(itemAt(e->pos()));
@@ -434,7 +398,7 @@ void CGisListWks::dropEvent ( QDropEvent * e )
IGisProject * project = dynamic_cast<IGisProject*>(wpt2->parent());
if(project)
{
- new CGisItemWpt(*wpt1,project, project->indexOfChild(wpt2) + off);
+ project->insertCopyOfItem(wpt1, off, lastResult);
}
}
emit sigChanged();
@@ -455,7 +419,7 @@ void CGisListWks::dropEvent ( QDropEvent * e )
IGisProject * project = dynamic_cast<IGisProject*>(trk2->parent());
if(project)
{
- new CGisItemTrk(*trk1,project, project->indexOfChild(trk2) + off);
+ project->insertCopyOfItem(trk1, off, lastResult);
}
}
emit sigChanged();
@@ -476,7 +440,7 @@ void CGisListWks::dropEvent ( QDropEvent * e )
IGisProject * project = dynamic_cast<IGisProject*>(rte2->parent());
if(project)
{
- new CGisItemRte(*rte1,project, project->indexOfChild(rte2) + off);
+ project->insertCopyOfItem(rte1, off, lastResult);
}
}
emit sigChanged();
@@ -497,7 +461,7 @@ void CGisListWks::dropEvent ( QDropEvent * e )
IGisProject * project = dynamic_cast<IGisProject*>(area2->parent());
if(project)
{
- new CGisItemOvlArea(*area1,project, project->indexOfChild(area2) + off);
+ project->insertCopyOfItem(area1, off, lastResult);
}
}
emit sigChanged();
@@ -522,28 +486,10 @@ void CGisListWks::dropEvent ( QDropEvent * e )
break;
}
- if(project != item->parent())
+ IGisItem * gisItem = dynamic_cast<IGisItem*>(item);
+ if(gisItem)
{
- if(item->type() == IGisItem::eTypeWpt)
- {
- CGisItemWpt * wpt1 = dynamic_cast<CGisItemWpt*>(item);
- new CGisItemWpt(*wpt1, project, -1);
- }
- if(item->type() == IGisItem::eTypeTrk)
- {
- CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(item);
- new CGisItemTrk(*trk1, project, -1);
- }
- if(item->type() == IGisItem::eTypeRte)
- {
- CGisItemRte * rte1 = dynamic_cast<CGisItemRte*>(item);
- new CGisItemRte(*rte1, project, -1);
- }
- if(item->type() == IGisItem::eTypeOvl)
- {
- CGisItemOvlArea * area1 = dynamic_cast<CGisItemOvlArea*>(item);
- new CGisItemOvlArea(*area1, project, -1);
- }
+ project->insertCopyOfItem(gisItem, -1, lastResult);
}
}
}
@@ -716,8 +662,11 @@ void CGisListWks::slotLoadWorkspace()
continue;
}
- project->setToolTip(0,project->getInfo());
- project->setText(1, changed ? "*" : "");
+ project->setToolTip(eColumnName,project->getInfo());
+ if(changed)
+ {
+ project->setText(eColumnDecoration, "*");
+ }
}
emit sigChanged();
@@ -725,9 +674,9 @@ void CGisListWks::slotLoadWorkspace()
void CGisListWks::slotContextMenu(const QPoint& point)
{
+ QPoint p = mapToGlobal(point);
if(selectedItems().isEmpty() && menuNone)
{
- QPoint p = mapToGlobal(point);
menuNone->exec(p);
return;
}
@@ -737,9 +686,7 @@ void CGisListWks::slotContextMenu(const QPoint& point)
IGisProject * project = dynamic_cast<IGisProject*>(currentItem());
if(project != 0)
{
- actionEditPrj->setVisible(false);
-
- QPoint p = mapToGlobal(point);
+ actionEditPrj->setVisible(false);
menuProject->exec(p);
return;
}
@@ -747,18 +694,8 @@ void CGisListWks::slotContextMenu(const QPoint& point)
IGisItem * gisItem = dynamic_cast<IGisItem*>(currentItem());
if(gisItem != 0)
{
- actionEditDetails->setVisible(false);
- actionProjWpt->setVisible(false);
- actionMoveWpt->setVisible(false);
- actionFocusTrk->setVisible(false);
- actionEditTrk->setVisible(false);
- actionReverseTrk->setVisible(false);
- actionCombineTrk->setVisible(false);
- actionRangeTrk->setVisible(false);
- actionEditArea->setVisible(false);
-
- QPoint p = mapToGlobal(point);
menuItem->exec(p);
+ return;
}
return;
}
@@ -768,67 +705,39 @@ void CGisListWks::slotContextMenu(const QPoint& point)
IGisProject * project = dynamic_cast<IGisProject*>(currentItem());
if(project != 0)
{
- actionEditPrj->setVisible(true);
-
- QPoint p = mapToGlobal(point);
- menuProject->exec(p);
- return;
- }
-
- IGisItem * gisItem = dynamic_cast<IGisItem*>(currentItem());
- if(gisItem != 0)
- {
- actionEditDetails->setVisible(true);
-
- // try to cast item to waypoint and hide/show actions on result
- CGisItemWpt * wpt = dynamic_cast<CGisItemWpt*>(gisItem);
- if(wpt == 0)
- {
- actionProjWpt->setVisible(false);
- actionMoveWpt->setVisible(false);
- }
- else
- {
- actionProjWpt->setVisible(true);
- actionMoveWpt->setVisible(true);
- actionMoveWpt->setEnabled(!wpt->isReadOnly());
- actionProjWpt->setEnabled(!wpt->isGeocache());
- }
-
- // try to cast item to track and hide/show actions on result
- CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(gisItem);
- if(trk == 0)
+ if(project->getType() == IGisProject::eTypeLostFound)
{
- actionFocusTrk->setVisible(false);
- actionEditTrk->setVisible(false);
- actionReverseTrk->setVisible(false);
- actionCombineTrk->setVisible(false);
- actionRangeTrk->setVisible(false);
+ actionSave->setVisible(false);
+ actionEditPrj->setVisible(false);
}
else
{
- actionFocusTrk->setVisible(true);
- actionEditTrk->setVisible(true);
- actionReverseTrk->setVisible(true);
- actionCombineTrk->setVisible(true);
- actionRangeTrk->setVisible(true);
- actionFocusTrk->setChecked(trk->hasUserFocus());
- actionEditTrk->setEnabled(!trk->isReadOnly());
+ actionSave->setVisible(true);
+ actionEditPrj->setVisible(true);
}
+ menuProject->exec(p);
+ return;
+ }
- // try to cast item to track and hide/show actions on result
- CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(gisItem);
- if(area == 0)
- {
- actionEditArea->setVisible(false);
- }
- else
+ IGisItem * gisItem = dynamic_cast<IGisItem*>(currentItem());
+ if(gisItem != 0)
+ {
+ switch(gisItem->type())
{
- actionEditArea->setVisible(true);
+ case IGisItem::eTypeTrk:
+ actionFocusTrk->setChecked(gisItem->hasUserFocus());
+ menuItemTrk->exec(p);
+ break;
+ case IGisItem::eTypeWpt:
+ menuItemWpt->exec(p);
+ break;
+ case IGisItem::eTypeRte:
+ menuItemRte->exec(p);
+ break;
+ case IGisItem::eTypeOvl:
+ menuItemOvl->exec(p);
+ break;
}
- // display menu
- QPoint p = mapToGlobal(point);
- menuItem->exec(p);
return;
}
}
@@ -958,7 +867,31 @@ void CGisListWks::slotDeleteItem()
project->postStatus();
}
}
+}
+
+void CGisListWks::slotCopyItem()
+{
+ CGisListWksEditLock lock(false, IGisItem::mutexItems);
+
+ IGisProject * project = CGisWidget::self().selectProject();
+ if(project == 0)
+ {
+ return;
+ }
+
+ int lastResult = CSelectCopyAction::eResultNone;
+
+ QList<QTreeWidgetItem*> items = selectedItems();
+ foreach(QTreeWidgetItem * item, items)
+ {
+ IGisItem * gisItem = dynamic_cast<IGisItem*>(item);
+ if(gisItem == 0)
+ {
+ continue;
+ }
+ project->insertCopyOfItem(gisItem, -1, lastResult);
+ }
}
void CGisListWks::slotProjWpt()
@@ -1122,7 +1055,14 @@ bool CGisListWks::event(QEvent * e)
CDBProject * project = getProjectById(evt->id, evt->db);
if(project == 0)
{
- project = new CDBProject(evt->db, evt->id, this);
+ if(evt->id == 0)
+ {
+ project = new CLostFoundProject(evt->db, this);
+ }
+ else
+ {
+ project = new CDBProject(evt->db, evt->id, this);
+ }
if(!project->isValid())
{
delete project;
@@ -1166,6 +1106,18 @@ bool CGisListWks::event(QEvent * e)
emit sigChanged();
return true;
}
+ case eEvtD2WUpdateLnF:
+ {
+ CEvtD2WUpdateLnF * evt = (CEvtD2WUpdateLnF*)e;
+ CLostFoundProject * project = dynamic_cast<CLostFoundProject*>(getProjectById(evt->id, evt->db));
+ if(project)
+ {
+ project->updateFromDb();
+ }
+ e->accept();
+ emit sigChanged();
+ return true;
+ }
}
return QTreeWidget::event(e);
diff --git a/src/gis/CGisListWks.h b/src/gis/CGisListWks.h
index 46851c0..d595a74 100644
--- a/src/gis/CGisListWks.h
+++ b/src/gis/CGisListWks.h
@@ -36,6 +36,13 @@ class CGisListWks : public QTreeWidget
CGisListWks(QWidget * parent);
virtual ~CGisListWks();
+ enum column_e
+ {
+ eColumnDecoration = 0
+ ,eColumnName = 1
+ };
+
+
void setExternalMenu(QMenu * project);
bool hasProject(IGisProject *project);
@@ -73,6 +80,7 @@ class CGisListWks : public QTreeWidget
void slotAddEmptyProject();
void slotCloseAllProjects();
void slotSearchGoogle(bool on);
+ void slotCopyItem();
private:
@@ -89,7 +97,12 @@ class CGisListWks : public QTreeWidget
QAction * actionClose;
QMenu * menuItem;
+ QMenu * menuItemTrk;
+ QMenu * menuItemWpt;
+ QMenu * menuItemRte;
+ QMenu * menuItemOvl;
QAction * actionEditDetails;
+ QAction * actionCopyItem;
QAction * actionDelete;
QAction * actionProjWpt;
QAction * actionMoveWpt;
diff --git a/src/gis/CGisWidget.cpp b/src/gis/CGisWidget.cpp
index b98ee3e..1e20d52 100644
--- a/src/gis/CGisWidget.cpp
+++ b/src/gis/CGisWidget.cpp
@@ -29,6 +29,7 @@
#include "gis/wpt/CProjWpt.h"
#include "gis/db/CDBProject.h"
#include "helpers/CSelectProjectDialog.h"
+#include "helpers/CSelectCopyAction.h"
#include "helpers/CSettings.h"
#include <QtWidgets>
@@ -76,7 +77,7 @@ void CGisWidget::loadGisProject(const QString& filename)
{
// add project to workspace
QApplication::setOverrideCursor(Qt::WaitCursor);
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
IGisProject * item = 0;
QString suffix = QFileInfo(filename).suffix().toLower();
if(suffix == "gpx")
@@ -101,7 +102,7 @@ void CGisWidget::loadGisProject(const QString& filename)
item = 0;
}
- IGisItem::mutexItems.unlock();
+
QApplication::restoreOverrideCursor();
emit sigChanged();
@@ -122,7 +123,7 @@ void CGisWidget::slotHelpText()
void CGisWidget::slotSaveAll()
{
QApplication::setOverrideCursor(Qt::WaitCursor);
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
IGisProject * item = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -132,7 +133,7 @@ void CGisWidget::slotSaveAll()
}
item->save();
}
- IGisItem::mutexItems.unlock();
+
QApplication::restoreOverrideCursor();
}
@@ -147,7 +148,7 @@ IGisProject * CGisWidget::selectProject()
IGisProject * project = 0;
if(!key.isEmpty())
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
project = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -160,11 +161,11 @@ IGisProject * CGisWidget::selectProject()
break;
}
}
- IGisItem::mutexItems.unlock();
+
}
else if(!name.isEmpty())
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
if(type == CSelectProjectDialog::eTypeGpx)
{
project = new CGpxProject(name, treeWks);
@@ -173,8 +174,6 @@ IGisProject * CGisWidget::selectProject()
{
project = new CQmsProject(name, treeWks);
}
-
- IGisItem::mutexItems.unlock();
}
return(project);
@@ -182,7 +181,7 @@ IGisProject * CGisWidget::selectProject()
void CGisWidget::getItemsByPos(const QPointF& pos, QList<IGisItem*>& items)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
IGisProject * project = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -192,13 +191,13 @@ void CGisWidget::getItemsByPos(const QPointF& pos, QList<IGisItem*>& items)
}
project->getItemByPos(pos, items);
}
- IGisItem::mutexItems.unlock();
+
}
IGisItem * CGisWidget::getItemByKey(const IGisItem::key_t& key)
{
IGisItem * item = 0;
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
IGisProject * project = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -218,13 +217,13 @@ IGisItem * CGisWidget::getItemByKey(const IGisItem::key_t& key)
break;
}
}
- IGisItem::mutexItems.unlock();
+
return(item);
}
void CGisWidget::delItemByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
QMessageBox::StandardButtons last = QMessageBox::NoButton;
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
@@ -250,13 +249,13 @@ void CGisWidget::delItemByKey(const IGisItem::key_t& key)
}
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::editItemByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
IGisProject * project = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -267,13 +266,38 @@ void CGisWidget::editItemByKey(const IGisItem::key_t& key)
project->editItemByKey(key);
}
- IGisItem::mutexItems.unlock();
+
+ emit sigChanged();
+}
+
+void CGisWidget::copyItemByKey(const IGisItem::key_t &key)
+{
+ QMutexLocker lock(&IGisItem::mutexItems);
+
+ IGisItem * item = getItemByKey(key);
+ if(item == 0)
+ {
+
+ return;
+ }
+
+ IGisProject * project = selectProject();
+ if(project == 0)
+ {
+
+ return;
+ }
+
+ int lastResult = CSelectCopyAction::eResultNone;
+ project->insertCopyOfItem(item, -1, lastResult);
+
+
emit sigChanged();
}
void CGisWidget::projWptByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemWpt * wpt = dynamic_cast<CGisItemWpt*>(getItemByKey(key));
if(wpt != 0)
@@ -282,13 +306,13 @@ void CGisWidget::projWptByKey(const IGisItem::key_t& key)
dlg.exec();
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::moveWptByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemWpt * wpt = dynamic_cast<CGisItemWpt*>(getItemByKey(key));
if(wpt != 0)
{
@@ -298,12 +322,12 @@ void CGisWidget::moveWptByKey(const IGisItem::key_t& key)
canvas->setMouseMoveWpt(*wpt);
}
}
- IGisItem::mutexItems.unlock();
+
}
void CGisWidget::focusTrkByKey(bool yes, const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk != 0)
@@ -311,52 +335,52 @@ void CGisWidget::focusTrkByKey(bool yes, const IGisItem::key_t& key)
trk->gainUserFocus(yes);
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::cutTrkByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk != 0 && trk->cut())
{
delete trk;
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::reverseTrkByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk)
{
trk->reverse();
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::combineTrkByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk)
{
trk->combine();
}
- IGisItem::mutexItems.unlock();
+
emit sigChanged();
}
void CGisWidget::editTrkByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk != 0)
@@ -368,12 +392,12 @@ void CGisWidget::editTrkByKey(const IGisItem::key_t& key)
}
}
- IGisItem::mutexItems.unlock();
+
}
void CGisWidget::rangeTrkByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
if(trk != 0)
@@ -385,12 +409,12 @@ void CGisWidget::rangeTrkByKey(const IGisItem::key_t& key)
}
}
- IGisItem::mutexItems.unlock();
+
}
void CGisWidget::editAreaByKey(const IGisItem::key_t& key)
{
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(getItemByKey(key));
if(area != 0)
@@ -402,7 +426,7 @@ void CGisWidget::editAreaByKey(const IGisItem::key_t& key)
}
}
- IGisItem::mutexItems.unlock();
+
}
void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
@@ -411,7 +435,7 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
QList<QRectF> blockedAreas;
QSet<QString> seenKeys;
- IGisItem::mutexItems.lock();
+ QMutexLocker lock(&IGisItem::mutexItems);
// draw mandatory stuff first
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
@@ -446,7 +470,7 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
}
project->drawLabel(p, viewport, blockedAreas, seenKeys, fm, gis);
}
- IGisItem::mutexItems.unlock();
+
}
void CGisWidget::fastDraw(QPainter& p, const QRectF& viewport, CGisDraw *gis)
@@ -455,7 +479,7 @@ void CGisWidget::fastDraw(QPainter& p, const QRectF& viewport, CGisDraw *gis)
Mutex locking will make map moving very slow if there are many GIS items
visible. Remove it for now. But I am not sure if that is a good idea.
*/
- //IGisItem::mutexItems.lock();
+ //QMutexLocker lock(&IGisItem::mutexItems);
for(int i = 0; i < treeWks->topLevelItemCount(); i++)
{
IGisProject * project = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
@@ -466,5 +490,5 @@ void CGisWidget::fastDraw(QPainter& p, const QRectF& viewport, CGisDraw *gis)
project->drawItem(p, viewport, gis);
}
- //IGisItem::mutexItems.unlock();
+ //
}
diff --git a/src/gis/CGisWidget.h b/src/gis/CGisWidget.h
index b1360d4..663333a 100644
--- a/src/gis/CGisWidget.h
+++ b/src/gis/CGisWidget.h
@@ -36,6 +36,7 @@ enum event_types_e
,eEvtD2WHideFolder = QEvent::User + 3
,eEvtD2WShowItems = QEvent::User + 4
,eEvtD2WHideItems = QEvent::User + 5
+ ,eEvtD2WUpdateLnF = QEvent::User + 6
,eEvtW2DAckInfo = QEvent::User + 100
};
@@ -97,15 +98,26 @@ class CEvtD2WHideItems : public QEvent
class CEvtW2DAckInfo : public QEvent
{
public:
- CEvtW2DAckInfo(bool loaded, quint64 id, const QString& db) : QEvent(QEvent::Type(eEvtW2DAckInfo)), isLoaded(loaded), id(id), db(db){}
+ CEvtW2DAckInfo(bool loaded, quint64 id, const QString& db) : QEvent(QEvent::Type(eEvtW2DAckInfo)), isLoaded(loaded), updateLostFound(false), id(id), db(db){}
bool isLoaded;
+ bool updateLostFound;
quint64 id;
QString db;
QSet<QString> keysChildren;
};
+class CEvtD2WUpdateLnF : public QEvent
+{
+ public:
+ CEvtD2WUpdateLnF(quint64 id, const QString& db) : QEvent(QEvent::Type(eEvtD2WUpdateLnF)), id(id), db(db){}
+
+ quint64 id;
+ QString db;
+};
+
+
class CGisWidget : public QWidget, private Ui::IGisWidget
{
@@ -160,9 +172,6 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
/**
@brief Delete all items with matching key from workspace
- As an item can be attached to several projects each one of these items is deleted.
- The method will prompt the user with a message box for each item deleted
-
@param key the item's key as it is returned from IGisItem::getKey()
*/
void delItemByKey(const IGisItem::key_t &key);
@@ -174,6 +183,12 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
void editItemByKey(const IGisItem::key_t &key);
/**
+ @brief Select a project and add a copy of the item to the project
+ @param key the item's key as it is returned from IGisItem::getKey()
+ */
+ void copyItemByKey(const IGisItem::key_t &key);
+
+ /**
@brief Clone waypoint and move clone
@param key the item's key as it is returned from IGisItem::getKey()
*/
diff --git a/src/gis/IGisItem.cpp b/src/gis/IGisItem.cpp
index e747143..743cc15 100644
--- a/src/gis/IGisItem.cpp
+++ b/src/gis/IGisItem.cpp
@@ -17,6 +17,7 @@
**********************************************************************************************/
#include "gis/IGisItem.h"
+#include "gis/CGisListWks.h"
#include "gis/prj/IGisProject.h"
#include "gis/trk/CGisItemTrk.h"
#include "gis/wpt/CGisItemWpt.h"
@@ -189,7 +190,7 @@ void IGisItem::loadFromDb(quint64 id, QSqlDatabase& db)
}
}
-QString IGisItem::getNameEx()
+QString IGisItem::getNameEx() const
{
QString str = getName();
IGisProject * project = dynamic_cast<IGisProject*>(parent());
@@ -204,15 +205,15 @@ QString IGisItem::getNameEx()
void IGisItem::updateDecoration(mark_e enable, mark_e disable)
{
// update text and icon
- setToolTip(0,getInfo());
- setText(0, getName());
+ setToolTip(CGisListWks::eColumnName,getInfo());
+ setText(CGisListWks::eColumnName, getName());
setSymbol();
// update project if necessary
IGisProject * project = dynamic_cast<IGisProject*>(parent());
if(project && (enable & eMarkChanged))
{
- project->setText(1,"*");
+ project->setText(CGisListWks::eColumnDecoration,"*");
}
// set marks in column 1
@@ -226,7 +227,7 @@ void IGisItem::updateDecoration(mark_e enable, mark_e disable)
{
str += "*";
}
- setText(1, str);
+ setText(CGisListWks::eColumnDecoration, str);
}
@@ -349,12 +350,12 @@ void IGisItem::cutHistory()
}
}
-bool IGisItem::isReadOnly()
+bool IGisItem::isReadOnly() const
{
return !(flags & eFlagWriteAllowed);
}
-bool IGisItem::isTainted()
+bool IGisItem::isTainted() const
{
return (flags & eFlagTainted);
}
diff --git a/src/gis/IGisItem.h b/src/gis/IGisItem.h
index 549ca50..ff21eb0 100644
--- a/src/gis/IGisItem.h
+++ b/src/gis/IGisItem.h
@@ -168,19 +168,19 @@ class IGisItem : public QTreeWidgetItem
@brief Get name of this item.
@return A reference to the internal string object
*/
- virtual const QString& getName() = 0;
+ virtual const QString& getName() const = 0;
/**
@brief Get name of this item extended by the project name
@return A string object.
*/
- virtual QString getNameEx();
+ virtual QString getNameEx() const;
/**
@brief Get a short string with the items properties to be displayed in tool tips or similar
@return A string object.
*/
- virtual QString getInfo() = 0;
+ virtual QString getInfo() const = 0;
/**
@brief Edit content of item.
@@ -198,7 +198,7 @@ class IGisItem : public QTreeWidgetItem
@return
*/
- virtual const QRectF& getBoundingRect(){return boundingRect;}
+ virtual const QRectF& getBoundingRect() const {return boundingRect;}
/**
@brief Get screen option object to display and handle actions for this item.
@@ -226,13 +226,13 @@ class IGisItem : public QTreeWidgetItem
@brief Query if this item is read only
@return True if it is read only.
*/
- bool isReadOnly();
+ bool isReadOnly() const;
/**
@brief Query if the item is imported and was changed
@return True if content was changed.
*/
- bool isTainted();
+ bool isTainted() const;
/**
@brief Set the read only mode.
@@ -255,7 +255,7 @@ class IGisItem : public QTreeWidgetItem
@return True if the item has user focus. The default implementation is always false.
*/
- virtual bool hasUserFocus(){return false;}
+ virtual bool hasUserFocus() const {return false;}
/**
diff --git a/src/gis/IGisWidget.ui b/src/gis/IGisWidget.ui
index 3caa9e8..926ff44 100644
--- a/src/gis/IGisWidget.ui
+++ b/src/gis/IGisWidget.ui
@@ -52,14 +52,17 @@
<property name="indentation">
<number>14</number>
</property>
+ <attribute name="headerDefaultSectionSize">
+ <number>40</number>
+ </attribute>
<column>
<property name="text">
- <string notr="true">Name</string>
+ <string notr="true"/>
</property>
</column>
<column>
<property name="text">
- <string>State</string>
+ <string>Name</string>
</property>
</column>
</widget>
@@ -82,7 +85,7 @@
</size>
</property>
<property name="indentation">
- <number>14</number>
+ <number>10</number>
</property>
<column>
<property name="text">
diff --git a/src/gis/db/CDBFolderDatabase.cpp b/src/gis/db/CDBFolderDatabase.cpp
index 23b9939..7f155fa 100644
--- a/src/gis/db/CDBFolderDatabase.cpp
+++ b/src/gis/db/CDBFolderDatabase.cpp
@@ -18,14 +18,15 @@
#include "gis/db/CDBFolderDatabase.h"
#include "gis/db/CDBFolderLostFound.h"
+#include "gis/CGisListDB.h"
CDBFolderDatabase::CDBFolderDatabase(const QString& filename, const QString& name, QTreeWidget *parent)
: IDBFolder(false, IDB::db, eTypeDatabase, 1, parent)
, filename(filename)
{
- setToolTip(eColumnName, QObject::tr("All your data grouped by folders."));
- setIcon(eColumnCheckbox, QIcon("://icons/32x32/Database.png"));
- setText(eColumnName, name);
+ setToolTip(CGisListDB::eColumnName, QObject::tr("All your data grouped by folders."));
+ setIcon(CGisListDB::eColumnCheckbox, QIcon("://icons/32x32/Database.png"));
+ setText(CGisListDB::eColumnName, name);
setupDB(filename, name);
diff --git a/src/gis/db/CDBFolderGroup.cpp b/src/gis/db/CDBFolderGroup.cpp
index de3e099..bffbbb6 100644
--- a/src/gis/db/CDBFolderGroup.cpp
+++ b/src/gis/db/CDBFolderGroup.cpp
@@ -17,12 +17,12 @@
**********************************************************************************************/
#include "gis/db/CDBFolderGroup.h"
+#include "gis/CGisListDB.h"
CDBFolderGroup::CDBFolderGroup(QSqlDatabase& db, quint64 key, QTreeWidgetItem * parent)
: IDBFolder(false, db, eTypeGroup, key, parent)
{
- setIcon(eColumnCheckbox,QIcon("://icons/32x32/PathBlue.png"));
-
+ setIcon(CGisListDB::eColumnCheckbox,QIcon("://icons/32x32/PathBlue.png"));
setupFromDB();
}
diff --git a/src/gis/db/CDBFolderLostFound.cpp b/src/gis/db/CDBFolderLostFound.cpp
index f167b01..a0950dc 100644
--- a/src/gis/db/CDBFolderLostFound.cpp
+++ b/src/gis/db/CDBFolderLostFound.cpp
@@ -19,16 +19,20 @@
#include "gis/db/CDBFolderLostFound.h"
#include "gis/db/CDBItem.h"
#include "gis/db/macros.h"
+#include "gis/CGisListDB.h"
+#include "gis/CGisWidget.h"
#include <QtSql>
CDBFolderLostFound::CDBFolderLostFound(QSqlDatabase& db, QTreeWidgetItem *parent)
- : IDBFolder(false, db, eTypeLostFound, 0, parent)
+ : IDBFolder(true, db, eTypeLostFound, 0, parent)
{
- setToolTip(eColumnName, QObject::tr("All your data grouped by folders."));
- setText(eColumnName, QObject::tr("Lost & Found"));
+ setToolTip(CGisListDB::eColumnName, QObject::tr("All your data grouped by folders."));
+ setupFromDB();
- update();
+ setCheckState(CGisListDB::eColumnCheckbox, Qt::Unchecked);
+ CEvtD2WReqInfo * evt = new CEvtD2WReqInfo(getId(), getDBName());
+ CGisWidget::self().postEventForWks(evt);
}
CDBFolderLostFound::~CDBFolderLostFound()
@@ -36,33 +40,51 @@ CDBFolderLostFound::~CDBFolderLostFound()
}
-void CDBFolderLostFound::update()
+void CDBFolderLostFound::setupFromDB()
{
int cnt = 0;
QSqlQuery query(db);
qDeleteAll(takeChildren());
- query.prepare("SELECT id FROM items AS t1 WHERE NOT EXISTS(SELECT * FROM folder2item WHERE child=t1.id) ORDER BY t1.type, t1.name");
- QUERY_EXEC(return);
+ query.prepare("SELECT id FROM items AS t1 WHERE NOT EXISTS(SELECT * FROM folder2item WHERE child=t1.id) ORDER BY t1.type, t1.name");
+ QUERY_EXEC(return);
while(query.next())
{
- quint64 id = query.value(0).toULongLong();
+ quint64 id = query.value(0).toULongLong();
new CDBItem(db, id, this);
cnt++;
}
if(cnt)
{
- setText(eColumnName, QObject::tr("Lost & Found (%1)").arg(cnt));
- setIcon(eColumnCheckbox, QIcon("://icons/32x32/DeleteMultiple.png"));
+ setText(CGisListDB::eColumnName, QObject::tr("Lost & Found (%1)").arg(cnt));
+ setIcon(CGisListDB::eColumnCheckbox, QIcon("://icons/32x32/DeleteMultiple.png"));
}
else
{
- setText(eColumnName, QObject::tr("Lost & Found"));
- setIcon(eColumnCheckbox, QIcon("://icons/32x32/Empty.png"));
+ setText(CGisListDB::eColumnName, QObject::tr("Lost & Found"));
+ setIcon(CGisListDB::eColumnCheckbox, QIcon("://icons/32x32/Empty.png"));
+ }
+
+ CEvtD2WUpdateLnF * evt = new CEvtD2WUpdateLnF(getId(), getDBName());
+ CGisWidget::self().postEventForWks(evt);
+
+}
+
+void CDBFolderLostFound::update(CEvtW2DAckInfo * info)
+{
+ if(info->id != 0)
+ {
+ return;
}
+ setCheckState(CGisListDB::eColumnCheckbox, info->isLoaded ? Qt::Checked : Qt::Unchecked);
+}
+
+void CDBFolderLostFound::update()
+{
+ setupFromDB();
}
void CDBFolderLostFound::clear()
@@ -72,5 +94,23 @@ void CDBFolderLostFound::clear()
query.prepare("DELETE FROM items WHERE id NOT IN (SELECT child from folder2item)");
QUERY_EXEC(return);
- update();
+ setupFromDB();
+}
+
+bool CDBFolderLostFound::delItem(CDBItem * item)
+{
+ QSqlQuery query(db);
+
+ if(checkState(CGisListDB::eColumnCheckbox) == Qt::Checked)
+ {
+ CEvtD2WHideItems * evt = new CEvtD2WHideItems(getId(), getDBName());
+ evt->keys << item->getKey();
+ CGisWidget::self().postEventForWks(evt);
+ }
+
+ query.prepare("DELETE FROM items WHERE id=:id AND id NOT IN (SELECT child from folder2item)");
+ query.bindValue(":id", item->getId());
+ QUERY_EXEC(return false);
+
+ return true;
}
diff --git a/src/gis/db/CDBFolderLostFound.h b/src/gis/db/CDBFolderLostFound.h
index c97d02d..a620d04 100644
--- a/src/gis/db/CDBFolderLostFound.h
+++ b/src/gis/db/CDBFolderLostFound.h
@@ -27,9 +27,15 @@ class CDBFolderLostFound : public IDBFolder
CDBFolderLostFound(QSqlDatabase &db, QTreeWidgetItem *parent);
virtual ~CDBFolderLostFound();
+ void update(CEvtW2DAckInfo * info);
void update();
void expanding(){}
void clear();
+ bool delItem(CDBItem * item);
+
+
+ protected:
+ void setupFromDB();
};
#endif //CDBFOLDERLOSTFOUND_H
diff --git a/src/gis/db/CDBFolderOther.cpp b/src/gis/db/CDBFolderOther.cpp
index 9f13fc8..ec28e91 100644
--- a/src/gis/db/CDBFolderOther.cpp
+++ b/src/gis/db/CDBFolderOther.cpp
@@ -17,13 +17,12 @@
**********************************************************************************************/
#include "gis/db/CDBFolderOther.h"
+#include "gis/CGisListDB.h"
CDBFolderOther::CDBFolderOther(QSqlDatabase& db, quint64 key, QTreeWidgetItem * parent)
: IDBFolder(true, db, eTypeOther, key, parent)
{
- setIcon(eColumnCheckbox,QIcon("://icons/32x32/PathOrange.png"));
- setCheckState(0, Qt::Unchecked);
-
+ setIcon(CGisListDB::eColumnCheckbox,QIcon("://icons/32x32/PathOrange.png"));
setupFromDB();
}
diff --git a/src/gis/db/CDBFolderProject.cpp b/src/gis/db/CDBFolderProject.cpp
index e574c1f..c1c575a 100644
--- a/src/gis/db/CDBFolderProject.cpp
+++ b/src/gis/db/CDBFolderProject.cpp
@@ -17,13 +17,12 @@
**********************************************************************************************/
#include "gis/db/CDBFolderProject.h"
+#include "gis/CGisListDB.h"
CDBFolderProject::CDBFolderProject(QSqlDatabase& db, quint64 key, QTreeWidgetItem * parent)
: IDBFolder(true, db, eTypeProject, key, parent)
{
- setIcon(eColumnCheckbox,QIcon("://icons/32x32/PathGreen.png"));
- isLoadable = true;
-
+ setIcon(CGisListDB::eColumnCheckbox,QIcon("://icons/32x32/PathGreen.png"));
setupFromDB();
}
diff --git a/src/gis/db/CDBItem.cpp b/src/gis/db/CDBItem.cpp
index 9852c3b..ed86a48 100644
--- a/src/gis/db/CDBItem.cpp
+++ b/src/gis/db/CDBItem.cpp
@@ -20,6 +20,7 @@
#include "gis/db/IDBFolder.h"
#include "gis/db/macros.h"
#include "gis/CGisWidget.h"
+#include "gis/CGisListDB.h"
#include <QtSql>
@@ -39,9 +40,9 @@ CDBItem::CDBItem(QSqlDatabase &db, quint64 id, IDBFolder *parent)
type = query.value(0).toInt();
key = query.value(1).toString();
pixmap.loadFromData(query.value(2).toByteArray(), "PNG");
- setIcon(0, pixmap);
- setText(1, query.value(3).toString());
- setToolTip(1, query.value(4).toString());
+ setIcon(CGisListDB::eColumnCheckbox, pixmap);
+ setText(CGisListDB::eColumnName, query.value(3).toString());
+ setToolTip(CGisListDB::eColumnName, query.value(4).toString());
}
}
@@ -59,7 +60,7 @@ void CDBItem::toggle()
return;
}
- if(checkState(IDBFolder::eColumnCheckbox) == Qt::Checked)
+ if(checkState(CGisListDB::eColumnCheckbox) == Qt::Checked)
{
CEvtD2WShowFolder * evt1 = new CEvtD2WShowFolder(folder->getId(), folder->getDBName());
CGisWidget::self().postEventForWks(evt1);
@@ -75,3 +76,25 @@ void CDBItem::toggle()
CGisWidget::self().postEventForWks(evt2);
}
}
+
+void CDBItem::remove()
+{
+ IDBFolder * folder = dynamic_cast<IDBFolder*>(parent());
+ if(folder == 0)
+ {
+ return;
+ }
+
+ if(checkState(CGisListDB::eColumnCheckbox) == Qt::Checked)
+ {
+ CEvtD2WHideItems * evt = new CEvtD2WHideItems(folder->getId(), folder->getDBName());
+ evt->keys << key;
+ CGisWidget::self().postEventForWks(evt);
+ }
+
+ QSqlQuery query(db);
+ query.prepare("DELETE FROM folder2item WHERE parent=:parent AND child=:child");
+ query.bindValue(":parent", folder->getId());
+ query.bindValue(":child", id);
+ QUERY_EXEC();
+}
diff --git a/src/gis/db/CDBItem.h b/src/gis/db/CDBItem.h
index 81151f0..8048941 100644
--- a/src/gis/db/CDBItem.h
+++ b/src/gis/db/CDBItem.h
@@ -30,10 +30,12 @@ class CDBItem : public QTreeWidgetItem
CDBItem(QSqlDatabase& db, quint64 id, IDBFolder * parent);
virtual ~CDBItem();
+ quint64 getId(){return id;}
const QString& getKey(){return key;}
void toggle();
+ void remove();
- private:
+ private:
QSqlDatabase& db;
quint64 id;
diff --git a/src/gis/db/CDBProject.cpp b/src/gis/db/CDBProject.cpp
index 05a5103..c1aae27 100644
--- a/src/gis/db/CDBProject.cpp
+++ b/src/gis/db/CDBProject.cpp
@@ -31,15 +31,16 @@
#include <QtWidgets>
CDBProject::CDBProject(CGisListWks * parent)
: IGisProject(eTypeDb, "", parent)
+ , id(0)
{
- setIcon(0,QIcon("://icons/32x32/DBProject.png"));
+ setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/DBProject.png"));
}
CDBProject::CDBProject(const QString& dbName, quint64 id, CGisListWks *parent)
: IGisProject(eTypeDb, dbName, parent)
, id(id)
{
- setIcon(0,QIcon("://icons/32x32/DBProject.png"));
+ setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/DBProject.png"));
db = QSqlDatabase::database(dbName);
QSqlQuery query(db);
@@ -71,8 +72,8 @@ CDBProject::CDBProject(const QString& dbName, quint64 id, CGisListWks *parent)
filename = dbName;
}
- setText(0, name);
- setToolTip(0, getInfo());
+ setText(CGisListWks::eColumnName, name);
+ setToolTip(CGisListWks::eColumnName, getInfo());
valid = true;
}
@@ -264,8 +265,9 @@ void CDBProject::save()
query.bindValue(":id", getId());
QUERY_EXEC(throw -1);
+ info->updateLostFound = true;
CGisWidget::self().postEventForDb(info);
- setText(1,"");
+ setText(CGisListWks::eColumnDecoration,"");
}
catch(int n)
{
@@ -275,14 +277,14 @@ void CDBProject::save()
}
else
{
+ info->updateLostFound = true;
CGisWidget::self().postEventForDb(info);
}
}
}
void CDBProject::showItems(CEvtD2WShowItems * evt)
-{
-
+{
foreach(const evt_item_t& item, evt->items)
{
switch(item.type)
@@ -303,7 +305,7 @@ void CDBProject::showItems(CEvtD2WShowItems * evt)
}
}
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
postStatus();
}
@@ -319,7 +321,7 @@ void CDBProject::hideItems(CEvtD2WHideItems * evt)
key.item = k;
delItemByKey(key, last);
}
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
postStatus();
}
diff --git a/src/gis/db/CDBProject.h b/src/gis/db/CDBProject.h
index 70eda75..79aa1c7 100644
--- a/src/gis/db/CDBProject.h
+++ b/src/gis/db/CDBProject.h
@@ -74,7 +74,7 @@ class CDBProject : public IGisProject
void showItems(CEvtD2WShowItems * evt);
void hideItems(CEvtD2WHideItems * evt);
- private:
+ protected:
QSqlDatabase db;
quint64 id;
};
diff --git a/src/gis/db/CLostFoundProject.cpp b/src/gis/db/CLostFoundProject.cpp
new file mode 100644
index 0000000..3f4860b
--- /dev/null
+++ b/src/gis/db/CLostFoundProject.cpp
@@ -0,0 +1,83 @@
+/**********************************************************************************************
+ 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/db/CLostFoundProject.h"
+#include "gis/CGisListWks.h"
+#include "gis/db/macros.h"
+#include "gis/wpt/CGisItemWpt.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+
+#include <QtWidgets>
+#include <QtSql>
+
+
+CLostFoundProject::CLostFoundProject(const QString &dbName, CGisListWks * parent)
+ : CDBProject(parent)
+{
+ type = eTypeLostFound;
+ db = QSqlDatabase::database(dbName);
+ setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/DeleteMultiple.png"));
+
+ filename = dbName;
+ metadata.name = QObject::tr("Lost & Found");
+
+ setupName(dbName);
+
+ valid = true;
+}
+
+CLostFoundProject::~CLostFoundProject()
+{
+
+}
+
+void CLostFoundProject::updateFromDb()
+{
+ qDeleteAll(takeChildren());
+
+ QSqlQuery query(db);
+ query.prepare("SELECT id, type FROM items AS t1 WHERE NOT EXISTS(SELECT * FROM folder2item WHERE child=t1.id) ORDER BY t1.type, t1.name");
+ QUERY_EXEC(return);
+
+ while(query.next())
+ {
+ quint64 id = query.value(0).toULongLong();
+ quint32 type = query.value(1).toUInt();
+
+ switch(type)
+ {
+ case IGisItem::eTypeWpt:
+ new CGisItemWpt(id, db, this);
+ break;
+ case IGisItem::eTypeTrk:
+ new CGisItemTrk(id, db, this);
+ break;
+ case IGisItem::eTypeRte:
+ new CGisItemRte(id, db, this);
+ break;
+ case IGisItem::eTypeOvl:
+ new CGisItemOvlArea(id, db, this);
+ break;
+ default:;
+ }
+ }
+
+ setText(CGisListWks::eColumnDecoration,"");
+}
diff --git a/src/gis/db/CDBFolderLostFound.h b/src/gis/db/CLostFoundProject.h
similarity index 72%
copy from src/gis/db/CDBFolderLostFound.h
copy to src/gis/db/CLostFoundProject.h
index c97d02d..abd998a 100644
--- a/src/gis/db/CDBFolderLostFound.h
+++ b/src/gis/db/CLostFoundProject.h
@@ -16,21 +16,24 @@
**********************************************************************************************/
-#ifndef CDBFOLDERLOSTFOUND_H
-#define CDBFOLDERLOSTFOUND_H
+#ifndef CLOSTFOUNDPROJECT_H
+#define CLOSTFOUNDPROJECT_H
-#include "gis/db/IDBFolder.h"
+#include "gis/db/CDBProject.h"
+#include <QSqlDatabase>
-class CDBFolderLostFound : public IDBFolder
+class CLostFoundProject : public CDBProject
{
public:
- CDBFolderLostFound(QSqlDatabase &db, QTreeWidgetItem *parent);
- virtual ~CDBFolderLostFound();
+ CLostFoundProject(const QString &dbName, CGisListWks * parent);
+
+ virtual ~CLostFoundProject();
+
+ void save(){}
+
+ void updateFromDb();
- void update();
- void expanding(){}
- void clear();
};
-#endif //CDBFOLDERLOSTFOUND_H
+#endif //CLOSTFOUNDPROJECT_H
diff --git a/src/gis/db/IDBFolder.cpp b/src/gis/db/IDBFolder.cpp
index 8765cc4..db36df7 100644
--- a/src/gis/db/IDBFolder.cpp
+++ b/src/gis/db/IDBFolder.cpp
@@ -23,6 +23,7 @@
#include "gis/db/CDBFolderOther.h"
#include "gis/db/CDBItem.h"
#include "gis/db/CDBFolderDatabase.h"
+#include "gis/CGisListDB.h"
#include "gis/IGisItem.h"
#include "gis/CGisWidget.h"
@@ -60,7 +61,7 @@ bool IDBFolder::operator<(const QTreeWidgetItem &other) const
}
- return text(eColumnName) < folder->text(eColumnName);
+ return text(CGisListDB::eColumnName) < folder->text(CGisListDB::eColumnName);
}
IDBFolder * IDBFolder::createFolderByType(QSqlDatabase& db, int type, quint64 id, QTreeWidgetItem * parent)
@@ -150,7 +151,7 @@ void IDBFolder::update(CEvtW2DAckInfo * info)
return;
}
- setCheckState(eColumnCheckbox, info->isLoaded ? Qt::Checked : Qt::Unchecked);
+ setCheckState(CGisListDB::eColumnCheckbox, info->isLoaded ? Qt::Checked : Qt::Unchecked);
QSqlQuery query(db);
// update text and tooltip
@@ -159,8 +160,8 @@ void IDBFolder::update(CEvtW2DAckInfo * info)
QUERY_EXEC(return);
query.next();
- setText(eColumnName, query.value(0).toString());
- setToolTip(eColumnName, query.value(1).toString());
+ setText(CGisListDB::eColumnName, query.value(0).toString());
+ setToolTip(CGisListDB::eColumnName, query.value(1).toString());
// count folders linked to this folder
query.prepare("SELECT COUNT() FROM folder2folder WHERE parent=:id");
@@ -193,20 +194,25 @@ void IDBFolder::update(CEvtW2DAckInfo * info)
qDeleteAll(takeChildren());
addChildren(info->keysChildren);
}
-
-
}
void IDBFolder::toggle()
{
- if(checkState(IDBFolder::eColumnCheckbox) == Qt::Checked)
+ if(checkState(CGisListDB::eColumnCheckbox) == Qt::Checked)
{
CEvtD2WShowFolder * evt1 = new CEvtD2WShowFolder(getId(), getDBName());
CGisWidget::self().postEventForWks(evt1);
QSqlQuery query(db);
- query.prepare("SELECT t1.child, t2.type FROM folder2item AS t1, items AS t2 WHERE t1.parent = :id AND t2.id = t1.child ORDER BY t2.id");
- query.bindValue(":id", getId());
+ if(getId() == 0)
+ {
+ query.prepare("SELECT id, type FROM items AS t1 WHERE NOT EXISTS(SELECT * FROM folder2item WHERE child=t1.id) ORDER BY t1.type, t1.name");
+ }
+ else
+ {
+ query.prepare("SELECT t1.child, t2.type FROM folder2item AS t1, items AS t2 WHERE t1.parent = :id AND t2.id = t1.child ORDER BY t2.id");
+ query.bindValue(":id", getId());
+ }
QUERY_EXEC(return);
CEvtD2WShowItems * evt2 = new CEvtD2WShowItems(getId(), getDBName());
@@ -252,8 +258,8 @@ void IDBFolder::setupFromDB()
query.next();
key = query.value(0).toString();
- setText(eColumnName, query.value(1).toString());
- setToolTip(eColumnName, query.value(2).toString());
+ setText(CGisListDB::eColumnName, query.value(1).toString());
+ setToolTip(CGisListDB::eColumnName, query.value(2).toString());
query.prepare("SELECT EXISTS(SELECT 1 FROM folder2folder WHERE parent=:id LIMIT 1)");
query.bindValue(":id", id);
@@ -278,7 +284,7 @@ void IDBFolder::setupFromDB()
if(isLoadable)
{
- setCheckState(eColumnCheckbox, Qt::Unchecked);
+ setCheckState(CGisListDB::eColumnCheckbox, Qt::Unchecked);
CEvtD2WReqInfo * evt = new CEvtD2WReqInfo(getId(), getDBName());
CGisWidget::self().postEventForWks(evt);
}
@@ -310,7 +316,7 @@ void IDBFolder::addChildren(const QSet<QString>& activeChildren)
{
quint64 idChild = query.value(0).toULongLong();
CDBItem * item = new CDBItem(db, idChild, this);
- item->setCheckState(eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
+ item->setCheckState(CGisListDB::eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
}
// routes 3rd
@@ -322,7 +328,7 @@ void IDBFolder::addChildren(const QSet<QString>& activeChildren)
{
quint64 idChild = query.value(0).toULongLong();
CDBItem * item = new CDBItem(db, idChild, this);
- item->setCheckState(eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
+ item->setCheckState(CGisListDB::eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
}
//waypoints 4th
@@ -334,7 +340,7 @@ void IDBFolder::addChildren(const QSet<QString>& activeChildren)
{
quint64 idChild = query.value(0).toULongLong();
CDBItem * item = new CDBItem(db, idChild, this);
- item->setCheckState(eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
+ item->setCheckState(CGisListDB::eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
}
// overlays 5th
@@ -346,7 +352,7 @@ void IDBFolder::addChildren(const QSet<QString>& activeChildren)
{
quint64 idChild = query.value(0).toULongLong();
CDBItem * item = new CDBItem(db, idChild, this);
- item->setCheckState(eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
+ item->setCheckState(CGisListDB::eColumnCheckbox, activeChildren.contains(item->getKey()) ? Qt::Checked : Qt::Unchecked);
}
}
diff --git a/src/gis/db/IDBFolder.h b/src/gis/db/IDBFolder.h
index 5a7783c..c0c1138 100644
--- a/src/gis/db/IDBFolder.h
+++ b/src/gis/db/IDBFolder.h
@@ -25,6 +25,7 @@
class QSqlDatabase;
class CEvtW2DAckInfo;
class CDBFolderDatabase;
+class CDBItem;
class IDBFolder : public QTreeWidgetItem
{
@@ -38,12 +39,6 @@ class IDBFolder : public QTreeWidgetItem
,eTypeOther = 5
};
- enum column_e
- {
- eColumnCheckbox = 0
- ,eColumnName = 1
- };
-
IDBFolder(bool isLoadable, QSqlDatabase& db, type_e type, quint64 id, QTreeWidgetItem * parent);
IDBFolder(bool isLoadable, QSqlDatabase& db, type_e type, quint64 id, QTreeWidget * parent);
virtual ~IDBFolder();
@@ -63,7 +58,7 @@ class IDBFolder : public QTreeWidgetItem
bool operator<(const QTreeWidgetItem &other) const;
protected:
- void setupFromDB();
+ virtual void setupFromDB();
virtual void addChildren(const QSet<QString> &activeChildren);
virtual void remove(quint64 idParent, quint64 idFolder);
diff --git a/src/gis/gpx/CGpxProject.cpp b/src/gis/gpx/CGpxProject.cpp
index 0b264f9..00d830b 100644
--- a/src/gis/gpx/CGpxProject.cpp
+++ b/src/gis/gpx/CGpxProject.cpp
@@ -33,7 +33,7 @@
CGpxProject::CGpxProject(const QString &filename, CGisListWks *parent)
: IGisProject(eTypeGpx, filename, parent)
{
- setIcon(0,QIcon("://icons/32x32/GpxProject.png"));
+ setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/GpxProject.png"));
// cerate file instance
QFile file(filename);
@@ -43,7 +43,7 @@ CGpxProject::CGpxProject(const QString &filename, CGisListWks *parent)
{
IGisProject::filename.clear();
setupName(filename);
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
valid = true;
return;
}
@@ -120,7 +120,7 @@ CGpxProject::CGpxProject(const QString &filename, CGisListWks *parent)
}
setupName(QFileInfo(filename).baseName().replace("_", " "));
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
valid = true;
}
diff --git a/src/gis/ovl/CGisItemOvlArea.cpp b/src/gis/ovl/CGisItemOvlArea.cpp
index a2ef687..5ce8d3d 100644
--- a/src/gis/ovl/CGisItemOvlArea.cpp
+++ b/src/gis/ovl/CGisItemOvlArea.cpp
@@ -21,6 +21,7 @@
#include "gis/ovl/CDetailsOvlArea.h"
#include "gis/prj/IGisProject.h"
#include "gis/CGisDraw.h"
+#include "gis/CGisListWks.h"
#include "GeoMath.h"
#include <QtWidgets>
@@ -130,13 +131,21 @@ CGisItemOvlArea::CGisItemOvlArea(const QPolygonF& line, const QString &name, IGi
updateDecoration(eMarkChanged, eMarkNone);
}
-CGisItemOvlArea::CGisItemOvlArea(const CGisItemOvlArea& parentArea, IGisProject * project, int idx)
+CGisItemOvlArea::CGisItemOvlArea(const CGisItemOvlArea& parentArea, IGisProject * project, int idx, bool clone)
: IGisItem(project, eTypeOvl, idx)
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
, penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
{
*this = parentArea;
key.project = project->getKey();
+
+ if(clone)
+ {
+ area.name += QObject::tr("_Clone");
+ key.item.clear();
+ }
+
+
setupHistory();
updateDecoration(eMarkChanged, eMarkNone);
}
@@ -386,12 +395,12 @@ IScrOpt * CGisItemOvlArea::getScreenOptions(const QPoint& origin, IMouse * mouse
return scrOpt;
}
-const QString& CGisItemOvlArea::getName()
+const QString& CGisItemOvlArea::getName() const
{
return area.name;
}
-QString CGisItemOvlArea::getInfo()
+QString CGisItemOvlArea::getInfo() const
{
QString unit, val;
QString str = "<div style='font-weight: bold;'>" + getName() + "</div>";
@@ -455,7 +464,7 @@ void CGisItemOvlArea::setDataFromPolyline(const QPolygonF& line)
void CGisItemOvlArea::setName(const QString& str)
{
- setText(0, str);
+ setText(CGisListWks::eColumnName, str);
area.name = str;
changed(QObject::tr("Changed name."), "://icons/48x48/EditText.png");
}
@@ -544,5 +553,5 @@ void CGisItemOvlArea::setIcon(const QString& c)
mask.setMask( icon.createMaskFromColor( Qt::transparent ) );
icon = mask.scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- QTreeWidgetItem::setIcon(0,icon);
+ QTreeWidgetItem::setIcon(CGisListWks::eColumnName,icon);
}
diff --git a/src/gis/ovl/CGisItemOvlArea.h b/src/gis/ovl/CGisItemOvlArea.h
index f2839b5..c891d8c 100644
--- a/src/gis/ovl/CGisItemOvlArea.h
+++ b/src/gis/ovl/CGisItemOvlArea.h
@@ -37,7 +37,7 @@ class CGisItemOvlArea : public IGisItem, public IGisLine
{
public:
CGisItemOvlArea(const QPolygonF& line, const QString &name, IGisProject * project, int idx);
- CGisItemOvlArea(const CGisItemOvlArea &parentArea, IGisProject * project, int idx);
+ CGisItemOvlArea(const CGisItemOvlArea &parentArea, IGisProject * project, int idx, bool clone);
CGisItemOvlArea(const QDomNode &xml, IGisProject *project);
CGisItemOvlArea(const history_t& hist, IGisProject * project);
CGisItemOvlArea(quint64 id, QSqlDatabase& db, IGisProject * project);
@@ -47,9 +47,9 @@ class CGisItemOvlArea : public IGisItem, public IGisLine
QDataStream& operator<<(QDataStream& stream);
QDataStream& operator>>(QDataStream& stream);
- const QString& getName();
+ const QString& getName() const;
int getColorIdx(){return colorIdx;}
- QString getInfo();
+ QString getInfo() const;
void getPolylineFromData(QPolygonF& line);
const QString& getComment(){return area.cmt;}
const QString& getDescription(){return area.desc;}
diff --git a/src/gis/ovl/CScrOptOvlArea.cpp b/src/gis/ovl/CScrOptOvlArea.cpp
index dd309f2..1405f95 100644
--- a/src/gis/ovl/CScrOptOvlArea.cpp
+++ b/src/gis/ovl/CScrOptOvlArea.cpp
@@ -42,6 +42,7 @@ CScrOptOvlArea::CScrOptOvlArea(CGisItemOvlArea *area, const QPoint &point, IMous
connect(toolEditDetails, SIGNAL(clicked()), this, SLOT(slotEditDetails()));
connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
+ connect(toolCopy, SIGNAL(clicked()), this, SLOT(slotCopy()));
connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
}
@@ -56,6 +57,13 @@ void CScrOptOvlArea::slotEditDetails()
deleteLater();
}
+void CScrOptOvlArea::slotCopy()
+{
+ CGisWidget::self().copyItemByKey(key);
+ deleteLater();
+}
+
+
void CScrOptOvlArea::slotDelete()
{
CGisWidget::self().delItemByKey(key);
diff --git a/src/gis/ovl/CScrOptOvlArea.h b/src/gis/ovl/CScrOptOvlArea.h
index 12a740d..883d7c2 100644
--- a/src/gis/ovl/CScrOptOvlArea.h
+++ b/src/gis/ovl/CScrOptOvlArea.h
@@ -38,6 +38,7 @@ class CScrOptOvlArea : public IScrOpt, private Ui::IScrOptOvlArea
private slots:
void slotEditDetails();
+ void slotCopy();
void slotDelete();
void slotEdit();
diff --git a/src/gis/ovl/IScrOptOvlArea.ui b/src/gis/ovl/IScrOptOvlArea.ui
index c2e9c59..9a9fddf 100644
--- a/src/gis/ovl/IScrOptOvlArea.ui
+++ b/src/gis/ovl/IScrOptOvlArea.ui
@@ -46,6 +46,20 @@
</widget>
</item>
<item>
+ <widget class="QToolButton" name="toolCopy">
+ <property name="toolTip">
+ <string>Copy area into another project.</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>
<widget class="QToolButton" name="toolDelete">
<property name="text">
<string>...</string>
diff --git a/src/gis/prj/IGisProject.cpp b/src/gis/prj/IGisProject.cpp
index 51dee1d..fa9624e 100644
--- a/src/gis/prj/IGisProject.cpp
+++ b/src/gis/prj/IGisProject.cpp
@@ -19,8 +19,13 @@
#include "gis/prj/IGisProject.h"
#include "gis/prj/CDetailsPrj.h"
#include "gis/IGisItem.h"
+#include "gis/wpt/CGisItemWpt.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
#include "gis/CGisListWks.h"
#include "gis/CGisDraw.h"
+#include "helpers/CSelectCopyAction.h"
#include "CMainWindow.h"
@@ -74,7 +79,7 @@ void IGisProject::edit()
void IGisProject::setName(const QString& str)
{
metadata.name = str;
- setText(0, str);
+ setText(CGisListWks::eColumnName, str);
changed();
}
@@ -98,7 +103,7 @@ void IGisProject::setLinks(const QList<IGisItem::link_t>& links)
void IGisProject::changed()
{
- setText(1,"*");
+ setText(CGisListWks::eColumnDecoration,"*");
}
@@ -106,19 +111,19 @@ void IGisProject::setupName(const QString &defaultName)
{
if(metadata.name.isEmpty())
{
- setText(0, defaultName);
+ setText(CGisListWks::eColumnName, defaultName);
metadata.name = defaultName;
}
else
{
- setText(0,metadata.name);
+ setText(CGisListWks::eColumnName,metadata.name);
}
}
void IGisProject::markAsSaved()
{
- setText(1,"");
+ setText(CGisListWks::eColumnDecoration,"");
for(int i = 0; i < childCount(); i++)
{
@@ -131,9 +136,9 @@ void IGisProject::markAsSaved()
}
}
-QString IGisProject::getInfo()
+QString IGisProject::getInfo() const
{
- QString str = metadata.name.isEmpty() ? text(0) : metadata.name;
+ QString str = metadata.name.isEmpty() ? text(CGisListWks::eColumnName) : metadata.name;
str = "<div style='font-weight: bold;'>" + str + "</div>";
if(metadata.time.isValid())
@@ -247,7 +252,7 @@ bool IGisProject::delItemByKey(const IGisItem::key_t& key, QMessageBox::Standard
{
if(last != QMessageBox::YesToAll)
{
- QString msg = QObject::tr("Are you sure you want to delete '%1' from project '%2'?").arg(item->getName()).arg(text(0));
+ QString msg = QObject::tr("Are you sure you want to delete '%1' from project '%2'?").arg(item->getName()).arg(text(CGisListWks::eColumnName));
last = QMessageBox::question(0, QObject::tr("Delete..."), msg, QMessageBox::YesToAll|QMessageBox::Cancel|QMessageBox::Ok|QMessageBox::No, QMessageBox::Ok);
if((last == QMessageBox::No) || (last == QMessageBox::Cancel))
{
@@ -290,6 +295,97 @@ void IGisProject::editItemByKey(const IGisItem::key_t& key)
}
}
+
+void IGisProject::insertCopyOfItem(IGisItem * item, int off, int& lastResult)
+{
+ bool clone = false;
+ IGisItem::key_t key = item->getKey();
+ key.project = getKey();
+
+ IGisItem * item2 = getItemByKey(key);
+ if(item2 != 0)
+ {
+
+ int result = lastResult;
+ if(lastResult == CSelectCopyAction::eResultNone)
+ {
+ CSelectCopyAction dlg(item, item2, 0);
+ dlg.exec();
+ result = dlg.getResult();
+ if(dlg.allOthersToo())
+ {
+ lastResult = result;
+ }
+ }
+
+ if(result == CSelectCopyAction::eResultSkip)
+ {
+ return;
+ }
+ if(result == CSelectCopyAction::eResultNone)
+ {
+ return;
+ }
+ if(result == CSelectCopyAction::eResultClone)
+ {
+ clone = true;
+ }
+ else
+ {
+ // replace item2 with item
+ if(item != item2)
+ {
+ delete item2;
+ }
+ else
+ {
+ // replacing an item with itself does not make sense
+ return;
+ }
+ }
+ }
+
+ switch(item->type())
+ {
+ case IGisItem::eTypeTrk:
+ {
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(item);
+ if(trk != 0)
+ {
+ new CGisItemTrk(*trk, this, off, clone);
+ }
+ break;
+ }
+ case IGisItem::eTypeWpt:
+ {
+ CGisItemWpt * wpt = dynamic_cast<CGisItemWpt*>(item);
+ if(wpt != 0)
+ {
+ new CGisItemWpt(*wpt, this, off, clone);
+ }
+ break;
+ }
+ case IGisItem::eTypeRte:
+ {
+ CGisItemRte * rte = dynamic_cast<CGisItemRte*>(item);
+ if(rte != 0)
+ {
+ new CGisItemRte(*rte, this, off, clone);
+ }
+ break;
+ }
+ case IGisItem::eTypeOvl:
+ {
+ CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(item);
+ if(area != 0)
+ {
+ new CGisItemOvlArea(*area, this, off, clone);
+ }
+ break;
+ }
+ }
+}
+
void IGisProject::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, CGisDraw * gis)
{
for(int i = 0; i < childCount(); i++)
diff --git a/src/gis/prj/IGisProject.h b/src/gis/prj/IGisProject.h
index 124e681..d38a4e6 100644
--- a/src/gis/prj/IGisProject.h
+++ b/src/gis/prj/IGisProject.h
@@ -39,6 +39,7 @@ class IGisProject : public QTreeWidgetItem
, eTypeQms
, eTypeGpx
, eTypeDb
+ , eTypeLostFound
};
struct person_t
@@ -77,24 +78,30 @@ class IGisProject : public QTreeWidgetItem
void edit();
+ /**
+ @brief Save the project using it's native format.
+ */
virtual void save() = 0;
+ /**
+ @brief Save the project selecting one of the available formats.
+ */
virtual void saveAs() = 0;
virtual void setFilename(const QString& fn){filename = fn;}
- virtual QString getFilename(){return filename;}
+ virtual QString getFilename() const {return filename;}
- type_e getType(){return type;}
+ type_e getType() const {return type;}
/**
@brief Get unique project key.
@return A MD5 hash string
*/
const QString& getKey(){genKey(); return key;}
- const QString& getName(){return metadata.name;}
- const QDateTime& getTime(){return metadata.time;}
- const QString& getKeywords(){return metadata.keywords;}
- const QString& getDescription(){return metadata.desc;}
- const QList<IGisItem::link_t>& getLinks(){return metadata.links;}
+ const QString& getName() const {return metadata.name;}
+ const QDateTime& getTime() const {return metadata.time;}
+ const QString& getKeywords() const {return metadata.keywords;}
+ const QString& getDescription() const {return metadata.desc;}
+ const QList<IGisItem::link_t>& getLinks() const {return metadata.links;}
void setName(const QString& str);
@@ -106,7 +113,7 @@ class IGisProject : public QTreeWidgetItem
@brief Get a short metadata summary
@return Informational string.
*/
- virtual QString getInfo();
+ virtual QString getInfo() const;
/**
@brief Get a temporary pointer to the item with matching key
@param key
@@ -138,13 +145,27 @@ class IGisProject : public QTreeWidgetItem
void editItemByKey(const IGisItem::key_t &key);
/**
+ @brief Add a copy if the gven item to the project
+
+ Befor the item is inserted the method will use it's key to find a duplicat item.
+ If there is an item with the same item key a copy option dialog is shown. Depending
+ the result the action is performed or aborted. The result will be copied into
+ lastResult to repeat the same decision on subsequent items.
+
+ @param item pointer to item
+ @param off the offset into the tree widget, -1 for none
+ @param lastResult a reference to hold the last result of the copy option dialog
+ */
+ void insertCopyOfItem(IGisItem *item, int off, int &lastResult);
+
+ /**
@brief Check if the project was initialized correctly.
For example a if a GPX file does not load correctly the project is invalid.
@return True if project is valid
*/
- bool isValid(){return valid;}
+ bool isValid() const {return valid;}
void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, CGisDraw * gis);
void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, const QFontMetricsF& fm, CGisDraw * gis);
diff --git a/src/gis/qms/CQmsProject.cpp b/src/gis/qms/CQmsProject.cpp
index be24004..11bc2b0 100644
--- a/src/gis/qms/CQmsProject.cpp
+++ b/src/gis/qms/CQmsProject.cpp
@@ -19,6 +19,7 @@
#include "gis/qms/CQmsProject.h"
#include "gis/gpx/CGpxProject.h"
#include "helpers/CSettings.h"
+#include "gis/CGisListWks.h"
#include <QtWidgets>
@@ -27,7 +28,7 @@
CQmsProject::CQmsProject(const QString &filename, CGisListWks *parent)
: IGisProject(eTypeQms, filename, parent)
{
- setIcon(0,QIcon("://icons/32x32/QmsProject.png"));
+ setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/QmsProject.png"));
// cerate file instance
QFile file(filename);
@@ -37,7 +38,7 @@ CQmsProject::CQmsProject(const QString &filename, CGisListWks *parent)
{
IGisProject::filename.clear();
setupName(filename);
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
valid = true;
return;
}
@@ -57,7 +58,7 @@ CQmsProject::CQmsProject(const QString &filename, CGisListWks *parent)
markAsSaved();
setupName(QFileInfo(filename).baseName().replace("_", " "));
- setToolTip(0, getInfo());
+ setToolTip(CGisListWks::eColumnName, getInfo());
valid = true;
}
diff --git a/src/gis/qms/serialization.cpp b/src/gis/qms/serialization.cpp
index 3e1bd29..b412780 100644
--- a/src/gis/qms/serialization.cpp
+++ b/src/gis/qms/serialization.cpp
@@ -22,6 +22,7 @@
#include "gis/wpt/CGisItemWpt.h"
#include "gis/rte/CGisItemRte.h"
#include "gis/ovl/CGisItemOvlArea.h"
+#include "gis/CGisListWks.h"
#include <QtWidgets>
@@ -434,8 +435,8 @@ QDataStream& CGisItemTrk::operator<<(QDataStream& stream)
deriveSecondaryData();
setColor(trk.color);
- setText(0, trk.name);
- setToolTip(0, getInfo());
+ setText(CGisListWks::eColumnName, trk.name);
+ setToolTip(CGisListWks::eColumnName, getInfo());
return stream;
}
@@ -472,8 +473,8 @@ QDataStream& CGisItemWpt::operator<<(QDataStream& stream)
in >> images;
setIcon();
- setText(0, wpt.name);
- setToolTip(0, getInfo());
+ setText(CGisListWks::eColumnName, wpt.name);
+ setToolTip(CGisListWks::eColumnName, getInfo());
return stream;
}
@@ -536,8 +537,8 @@ QDataStream& CGisItemRte::operator<<(QDataStream& stream)
setSymbol();
deriveSecondaryData();
- setText(0, rte.name);
- setToolTip(0, getInfo());
+ setText(CGisListWks::eColumnName, rte.name);
+ setToolTip(CGisListWks::eColumnName, getInfo());
return stream;
}
@@ -610,8 +611,8 @@ QDataStream& CGisItemOvlArea::operator<<(QDataStream& stream)
deriveSecondaryData();
setColor(str2color(area.color));
- setText(0, area.name);
- setToolTip(0, getInfo());
+ setText(CGisListWks::eColumnName, area.name);
+ setToolTip(CGisListWks::eColumnName, getInfo());
return stream;
}
diff --git a/src/gis/rte/CGisItemRte.cpp b/src/gis/rte/CGisItemRte.cpp
index eea29cd..b6be611 100644
--- a/src/gis/rte/CGisItemRte.cpp
+++ b/src/gis/rte/CGisItemRte.cpp
@@ -21,6 +21,7 @@
#include "gis/prj/IGisProject.h"
#include "gis/WptIcons.h"
#include "gis/CGisDraw.h"
+#include "gis/CGisListWks.h"
#include "canvas/CCanvas.h"
#include <QtWidgets>
@@ -31,12 +32,19 @@ const QPen CGisItemRte::penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap,
IGisItem::key_t CGisItemRte::keyUserFocus;
/// used to create a copy of route with new parent
-CGisItemRte::CGisItemRte(const CGisItemRte& parentRte, IGisProject * project, int idx)
+CGisItemRte::CGisItemRte(const CGisItemRte& parentRte, IGisProject * project, int idx, bool clone)
: IGisItem(project, eTypeRte, idx)
, penForeground(Qt::magenta, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
{
*this = parentRte;
key.project = project->getKey();
+
+ if(clone)
+ {
+ rte.name += QObject::tr("_Clone");
+ key.item.clear();
+ }
+
setupHistory();
updateDecoration(eMarkChanged, eMarkNone);
}
@@ -99,11 +107,11 @@ void CGisItemRte::deriveSecondaryData()
void CGisItemRte::setSymbol()
{
icon = QPixmap("://icons/32x32/Route.png").scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- setIcon(0, icon);
+ setIcon(CGisListWks::eColumnName, icon);
}
-QString CGisItemRte::getInfo()
+QString CGisItemRte::getInfo() const
{
QString str = getName();
diff --git a/src/gis/rte/CGisItemRte.h b/src/gis/rte/CGisItemRte.h
index 7b2784e..6a8b756 100644
--- a/src/gis/rte/CGisItemRte.h
+++ b/src/gis/rte/CGisItemRte.h
@@ -38,7 +38,7 @@ class CGisItemRte : public IGisItem, public IGisLine
};
CGisItemRte(const QDomNode &xml, IGisProject *parent);
- CGisItemRte(const CGisItemRte& parentRte, IGisProject *project, int idx);
+ CGisItemRte(const CGisItemRte& parentRte, IGisProject *project, int idx, bool clone);
CGisItemRte(const history_t& hist, IGisProject * project);
CGisItemRte(quint64 id, QSqlDatabase& db, IGisProject * project);
CGisItemRte(const CQlgtRoute& rte1);
@@ -47,8 +47,8 @@ class CGisItemRte : public IGisItem, public IGisLine
QDataStream& operator<<(QDataStream& stream);
QDataStream& operator>>(QDataStream& stream);
- const QString& getName(){return rte.name;}
- QString getInfo();
+ const QString& getName() const {return rte.name;}
+ QString getInfo() const;
IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
QPointF getPointCloseBy(const QPoint& screenPos);
void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
diff --git a/src/gis/rte/CScrOptRte.cpp b/src/gis/rte/CScrOptRte.cpp
index 1b64362..91578d9 100644
--- a/src/gis/rte/CScrOptRte.cpp
+++ b/src/gis/rte/CScrOptRte.cpp
@@ -40,6 +40,7 @@ CScrOptRte::CScrOptRte(CGisItemRte *rte, const QPoint& point, IMouse *parent)
show();
connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
+ connect(toolCopy, SIGNAL(clicked()), this, SLOT(slotCopy()));
}
CScrOptRte::~CScrOptRte()
@@ -52,6 +53,11 @@ void CScrOptRte::slotDelete()
CGisWidget::self().delItemByKey(key);
}
+void CScrOptRte::slotCopy()
+{
+ CGisWidget::self().copyItemByKey(key);
+ deleteLater();
+}
void CScrOptRte::draw(QPainter& p)
{
diff --git a/src/gis/rte/CScrOptRte.h b/src/gis/rte/CScrOptRte.h
index 9683efe..3f9bb6f 100644
--- a/src/gis/rte/CScrOptRte.h
+++ b/src/gis/rte/CScrOptRte.h
@@ -39,6 +39,7 @@ class CScrOptRte : public IScrOpt, private Ui::IScrOptRte
private slots:
void slotDelete();
+ void slotCopy();
private:
IGisItem::key_t key;
diff --git a/src/gis/rte/IScrOptRte.ui b/src/gis/rte/IScrOptRte.ui
index 7cd0001..12892f5 100644
--- a/src/gis/rte/IScrOptRte.ui
+++ b/src/gis/rte/IScrOptRte.ui
@@ -37,6 +37,20 @@
</widget>
</item>
<item>
+ <widget class="QToolButton" name="toolCopy">
+ <property name="toolTip">
+ <string>Copy route into another project.</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>
<widget class="QToolButton" name="toolDelete">
<property name="toolTip">
<string><html><head/><body><p>Delete</p></body></html></string>
diff --git a/src/gis/search/CSearchGoogle.cpp b/src/gis/search/CSearchGoogle.cpp
index f7548f4..46e1be3 100644
--- a/src/gis/search/CSearchGoogle.cpp
+++ b/src/gis/search/CSearchGoogle.cpp
@@ -45,12 +45,12 @@ CSearchGoogle::CSearchGoogle(CGisListWks * parent)
actSymbol->setObjectName(symName);
connect(actSymbol, SIGNAL(triggered()), this, SLOT(slotChangeSymbol()));
- parent->setItemWidget(this, 0, edit);
+ parent->setItemWidget(this, CGisListWks::eColumnName, edit);
connect(edit, SIGNAL(returnPressed()), this, SLOT(slotStartSearch()));
connect(&networkAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(slotRequestFinished(QNetworkReply*)));
- setIcon(1, QIcon("://icons/32x32/SearchGoogle.png"));
+ setIcon(CGisListWks::eColumnDecoration, QIcon("://icons/32x32/SearchGoogle.png"));
}
CSearchGoogle::~CSearchGoogle()
@@ -119,8 +119,8 @@ void CSearchGoogle::slotRequestFinished(QNetworkReply* reply)
{
status = tr("Unknown response");
QTreeWidgetItem * item = new QTreeWidgetItem(this);
- item->setText(0, status);
- item->setIcon(0,QIcon("://icons/32x32/Error.png"));
+ item->setText(CGisListWks::eColumnName, status);
+ item->setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/Error.png"));
return;
}
@@ -130,8 +130,8 @@ void CSearchGoogle::slotRequestFinished(QNetworkReply* reply)
status = tr("Error: ");
status += root.namedItem("error_message").toElement().text();
QTreeWidgetItem * item = new QTreeWidgetItem(this);
- item->setText(0, status);
- item->setIcon(0,QIcon("://icons/32x32/Error.png"));
+ item->setText(CGisListWks::eColumnName, status);
+ item->setIcon(CGisListWks::eColumnName,QIcon("://icons/32x32/Error.png"));
return;
}
diff --git a/src/gis/trk/CDetailsTrk.cpp b/src/gis/trk/CDetailsTrk.cpp
index dd6af46..3b22b1f 100644
--- a/src/gis/trk/CDetailsTrk.cpp
+++ b/src/gis/trk/CDetailsTrk.cpp
@@ -344,6 +344,7 @@ void CDetailsTrk::slotLinkActivated(const QUrl& url)
{
trk.setComment(dlg.getHtml());
}
+ setupGui();
}
else if(url.toString() == "description")
{
@@ -353,6 +354,7 @@ void CDetailsTrk::slotLinkActivated(const QUrl& url)
{
trk.setDescription(dlg.getHtml());
}
+ setupGui();
}
else if(url.toString() == "links")
{
diff --git a/src/gis/trk/CGisItemTrk.cpp b/src/gis/trk/CGisItemTrk.cpp
index 51ad049..176a533 100644
--- a/src/gis/trk/CGisItemTrk.cpp
+++ b/src/gis/trk/CGisItemTrk.cpp
@@ -149,7 +149,7 @@ CGisItemTrk::CGisItemTrk(const QString &name, qint32 idx1, qint32 idx2, const tr
}
/// used to create a copy of track with new parent
-CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject *project, int idx)
+CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject *project, int idx, bool clone)
: IGisItem(project, eTypeTrk, idx)
, penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
, drawMode(eDrawNormal)
@@ -159,6 +159,12 @@ CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject *project, int
*this = parentTrk;
key.project = project->getKey();
+ if(clone)
+ {
+ trk.name += QObject::tr("_Clone");
+ key.item.clear();
+ }
+
setupHistory();
updateDecoration(eMarkChanged, eMarkNone);
}
@@ -313,7 +319,7 @@ void CGisItemTrk::unregisterPlot(IPlot * plot)
-QString CGisItemTrk::getInfo()
+QString CGisItemTrk::getInfo() const
{
QString val1, unit1, val2, unit2;
QString str = "<div style='font-weight: bold;'>" + getName() + "</div>";
@@ -842,7 +848,7 @@ void CGisItemTrk::reverse()
return;
}
- CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1);
+ CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1, false);
trk1->trk.name = name1;
trk1->trk.segs.clear();
@@ -885,7 +891,7 @@ void CGisItemTrk::combine()
return;
}
- CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1);
+ CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1, false);
trk1->trk.name = name1;
trk1->trk.segs.clear();
@@ -1266,7 +1272,7 @@ void CGisItemTrk::drawRange(QPainter& p)
void CGisItemTrk::setName(const QString& str)
{
- setText(0, str);
+ setText(CGisListWks::eColumnName, str);
trk.name = str;
changed(QObject::tr("Changed name"), "://icons/48x48/EditText.png");
}
@@ -1339,7 +1345,7 @@ void CGisItemTrk::setIcon(const QString& c)
mask.setMask( icon.createMaskFromColor( Qt::transparent ) );
icon = mask.scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- QTreeWidgetItem::setIcon(0,icon);
+ QTreeWidgetItem::setIcon(CGisListWks::eColumnName,icon);
}
void CGisItemTrk::setMouseFocusByDistance(qreal dist, focusmode_e mode, IPlot *initiator)
diff --git a/src/gis/trk/CGisItemTrk.h b/src/gis/trk/CGisItemTrk.h
index 00fdc71..39417b7 100644
--- a/src/gis/trk/CGisItemTrk.h
+++ b/src/gis/trk/CGisItemTrk.h
@@ -35,6 +35,8 @@ class CQlgtTrack;
#define TRK_N_COLORS 17
+#include <QDebug>
+
class CGisItemTrk : public IGisItem, public IGisLine
{
public:
@@ -54,7 +56,7 @@ class CGisItemTrk : public IGisItem, public IGisLine
};
CGisItemTrk(const QString& name, qint32 idx1, qint32 idx2, const trk_t &srctrk, IGisProject *project);
- CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject * project, int idx);
+ CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject * project, int idx, bool clone);
CGisItemTrk(const QPolygonF& l, const QString &name, IGisProject *project, int idx);
CGisItemTrk(const QDomNode &xml, IGisProject *project);
CGisItemTrk(const history_t& hist, IGisProject * project);
@@ -65,9 +67,9 @@ class CGisItemTrk : public IGisItem, public IGisLine
QDataStream& operator<<(QDataStream& stream);
QDataStream& operator>>(QDataStream& stream);
- const QString& getName(){return trk.name;}
+ const QString& getName() const {return trk.name;}
int getColorIdx(){return colorIdx;}
- QString getInfo();
+ QString getInfo() const;
QString getInfoRange();
QString getInfoTrkPt(const trkpt_t& pt);
QString getInfoProgress(const trkpt_t& pt);
@@ -164,7 +166,7 @@ class CGisItemTrk : public IGisItem, public IGisLine
@return True if the track has user focus
*/
- bool hasUserFocus(){return key == keyUserFocus;}
+ bool hasUserFocus() const {return key == keyUserFocus;}
/**
@brief Get the key of the current track with user focus
diff --git a/src/gis/trk/CScrOptTrk.cpp b/src/gis/trk/CScrOptTrk.cpp
index de120c1..129a90b 100644
--- a/src/gis/trk/CScrOptTrk.cpp
+++ b/src/gis/trk/CScrOptTrk.cpp
@@ -43,6 +43,7 @@ CScrOptTrk::CScrOptTrk(CGisItemTrk * trk, const QPoint& point, IMouse *parent)
connect(toolEditDetails, SIGNAL(clicked()), this, SLOT(slotEditDetails()));
connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
+ connect(toolCopy, SIGNAL(clicked()), this, SLOT(slotCopy()));
connect(toolProfile, SIGNAL(toggled(bool)), this, SLOT(slotProfile(bool)));
connect(toolCut, SIGNAL(clicked()), this, SLOT(slotCut()));
connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
@@ -62,6 +63,12 @@ void CScrOptTrk::slotDelete()
deleteLater();
}
+void CScrOptTrk::slotCopy()
+{
+ CGisWidget::self().copyItemByKey(key);
+ deleteLater();
+}
+
void CScrOptTrk::slotEditDetails()
{
CGisWidget::self().editItemByKey(key);
diff --git a/src/gis/trk/CScrOptTrk.h b/src/gis/trk/CScrOptTrk.h
index 355c3c3..fd78e52 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/gis/trk/CScrOptTrk.h
@@ -37,6 +37,7 @@ class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
private slots:
void slotDelete();
+ void slotCopy();
void slotEditDetails();
void slotProfile(bool on);
void slotCut();
diff --git a/src/gis/trk/IScrOptTrk.ui b/src/gis/trk/IScrOptTrk.ui
index 76735f8..633b98a 100644
--- a/src/gis/trk/IScrOptTrk.ui
+++ b/src/gis/trk/IScrOptTrk.ui
@@ -49,19 +49,16 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="toolProfile">
+ <widget class="QToolButton" name="toolCopy">
<property name="toolTip">
- <string>Show on-screen profile and detailed information about points.</string>
+ <string>Copy track into another project.</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>
+ <normaloff>:/icons/32x32/Copy.png</normaloff>:/icons/32x32/Copy.png</iconset>
</property>
</widget>
</item>
@@ -87,6 +84,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="toolRange">
<property name="toolTip">
<string>Select a range of points.</string>
diff --git a/src/gis/wpt/CGisItemWpt.cpp b/src/gis/wpt/CGisItemWpt.cpp
index fa2d37d..8d6ae97 100644
--- a/src/gis/wpt/CGisItemWpt.cpp
+++ b/src/gis/wpt/CGisItemWpt.cpp
@@ -90,7 +90,7 @@ CGisItemWpt::CGisItemWpt(const QPointF& pos, const CGisItemWpt& parentWpt, IGisP
}
/// used to create a copy of waypoint with new parent
-CGisItemWpt::CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int idx)
+CGisItemWpt::CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int idx, bool clone)
: IGisItem(project, eTypeWpt, idx)
, proximity(NOFLOAT)
, posScreen(NOPOINTF)
@@ -98,6 +98,12 @@ CGisItemWpt::CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int
*this = parentWpt;
key.project = project->getKey();
+ if(clone)
+ {
+ wpt.name += QObject::tr("_Clone");
+ key.item.clear();
+ }
+
setupHistory();
updateDecoration(eMarkChanged, eMarkNone);
}
@@ -195,7 +201,7 @@ void CGisItemWpt::getNewPosition(QPointF& pos)
}
-QString CGisItemWpt::getInfo()
+QString CGisItemWpt::getInfo() const
{
QString str = "<div style='font-weight: bold;'>" + getName() + "</div>";
@@ -281,12 +287,12 @@ void CGisItemWpt::setIcon()
icon = getWptIconByName(wpt.sym, focus);
}
- QTreeWidgetItem::setIcon(0,icon);
+ QTreeWidgetItem::setIcon(CGisListWks::eColumnName,icon);
}
void CGisItemWpt::setName(const QString& str)
{
- setText(0, str);
+ setText(CGisListWks::eColumnName, str);
lastName = str;
wpt.name = str;
changed(QObject::tr("Changed name"),"://icons/48x48/EditText.png");
diff --git a/src/gis/wpt/CGisItemWpt.h b/src/gis/wpt/CGisItemWpt.h
index c489b0a..0a879f5 100644
--- a/src/gis/wpt/CGisItemWpt.h
+++ b/src/gis/wpt/CGisItemWpt.h
@@ -103,7 +103,7 @@ class CGisItemWpt : public IGisItem
@param project the project the waypoint is added to
@param idx the index to insert the item. If -1 the item will be appended to it's group
*/
- CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int idx);
+ CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int idx, bool clone);
/**
@brief Create item from GPX.
@param xml the GPX section containing the item
@@ -143,8 +143,8 @@ class CGisItemWpt : public IGisItem
void setDescription(const QString& str);
void setLinks(const QList<link_t>& links);
- const QString& getName(){return wpt.name;}
- QString getInfo();
+ const QString& getName() const {return wpt.name;}
+ QString getInfo() const;
QPointF getPosition(){return QPointF(wpt.lon, wpt.lat);}
qint32 getElevation(){return wpt.ele;}
qreal getProximity(){return proximity;}
diff --git a/src/gis/wpt/CScrOptWpt.cpp b/src/gis/wpt/CScrOptWpt.cpp
index 125750c..b9f272d 100644
--- a/src/gis/wpt/CScrOptWpt.cpp
+++ b/src/gis/wpt/CScrOptWpt.cpp
@@ -47,6 +47,7 @@ CScrOptWpt::CScrOptWpt(CGisItemWpt *wpt, const QPoint& point, IMouse *parent)
connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
+ connect(toolCopy, SIGNAL(clicked()), this, SLOT(slotCopy()));
connect(toolMove, SIGNAL(clicked()), this, SLOT(slotMove()));
connect(toolProj, SIGNAL(clicked()), this, SLOT(slotProj()));
}
@@ -68,6 +69,12 @@ void CScrOptWpt::slotEdit()
deleteLater();
}
+void CScrOptWpt::slotCopy()
+{
+ CGisWidget::self().copyItemByKey(key);
+ deleteLater();
+}
+
void CScrOptWpt::slotMove()
{
CGisWidget::self().moveWptByKey(key);
diff --git a/src/gis/wpt/CScrOptWpt.h b/src/gis/wpt/CScrOptWpt.h
index 6b12523..713092a 100644
--- a/src/gis/wpt/CScrOptWpt.h
+++ b/src/gis/wpt/CScrOptWpt.h
@@ -40,6 +40,7 @@ class CScrOptWpt : public IScrOpt , private Ui::IScrOptWpt
private slots:
void slotDelete();
void slotEdit();
+ void slotCopy();
void slotMove();
void slotProj();
diff --git a/src/gis/wpt/IScrOptWpt.ui b/src/gis/wpt/IScrOptWpt.ui
index 750e5e3..19d49ad 100644
--- a/src/gis/wpt/IScrOptWpt.ui
+++ b/src/gis/wpt/IScrOptWpt.ui
@@ -58,6 +58,20 @@
</widget>
</item>
<item>
+ <widget class="QToolButton" name="toolCopy">
+ <property name="toolTip">
+ <string>Copy waypoint into another project.</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>
<widget class="QToolButton" name="toolDelete">
<property name="toolTip">
<string><html><head/><body><p>Delete</p></body></html></string>
diff --git a/src/helpers/CHistoryListWidget.cpp b/src/helpers/CHistoryListWidget.cpp
index f556169..e269f3f 100644
--- a/src/helpers/CHistoryListWidget.cpp
+++ b/src/helpers/CHistoryListWidget.cpp
@@ -113,8 +113,8 @@ void CHistoryListWidget::slotCutHistory()
}
item->cutHistory();
- item->setText(1,"*");
- item->parent()->setText(1,"*");
+ item->setText(CGisListWks::eColumnDecoration,"*");
+ item->parent()->setText(CGisListWks::eColumnDecoration,"*");
emit sigChanged();
}
diff --git a/src/helpers/CSelectCopyAction.cpp b/src/helpers/CSelectCopyAction.cpp
new file mode 100644
index 0000000..10a226f
--- /dev/null
+++ b/src/helpers/CSelectCopyAction.cpp
@@ -0,0 +1,68 @@
+/**********************************************************************************************
+ 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 "helpers/CSelectCopyAction.h"
+#include "gis/IGisItem.h"
+
+#include <QtWidgets>
+
+CSelectCopyAction::CSelectCopyAction(const IGisItem *src, const IGisItem *tar, QWidget *parent)
+ : QDialog(parent)
+ , result(eResultNone)
+{
+ setupUi(this);
+
+ labelIcon1->setPixmap(src->getIcon());
+ labelInfo1->setText(src->getInfo());
+ labelIcon2->setPixmap(tar->getIcon());
+ labelInfo2->setText(tar->getInfo());
+
+ adjustSize();
+
+ connect(pushCopy, SIGNAL(clicked()), this, SLOT(slotSelectResult()));
+ connect(pushSkip, SIGNAL(clicked()), this, SLOT(slotSelectResult()));
+ connect(pushClone, SIGNAL(clicked()), this, SLOT(slotSelectResult()));
+}
+
+CSelectCopyAction::~CSelectCopyAction()
+{
+
+}
+
+bool CSelectCopyAction::allOthersToo()
+{
+ return checkAllOtherToo->isChecked();
+}
+
+void CSelectCopyAction::slotSelectResult()
+{
+ if(sender() == pushCopy)
+ {
+ result = eResultCopy;
+ }
+ else if(sender() == pushSkip)
+ {
+ result = eResultSkip;
+ }
+ else if(sender() == pushClone)
+ {
+ result = eResultClone;
+ }
+
+ accept();
+}
diff --git a/src/gis/ovl/CScrOptOvlArea.h b/src/helpers/CSelectCopyAction.h
similarity index 60%
copy from src/gis/ovl/CScrOptOvlArea.h
copy to src/helpers/CSelectCopyAction.h
index 12a740d..49847d6 100644
--- a/src/gis/ovl/CScrOptOvlArea.h
+++ b/src/helpers/CSelectCopyAction.h
@@ -16,36 +16,38 @@
**********************************************************************************************/
-#ifndef CSCROPTOVLAREA_H
-#define CSCROPTOVLAREA_H
+#ifndef CSELECTCOPYACTION_H
+#define CSELECTCOPYACTION_H
-#include "mouse/IScrOpt.h"
-#include "gis/IGisItem.h"
+#include <QDialog>
+#include "ui_ISelectCopyAction.h"
-#include "ui_IScrOptOvlArea.h"
+class IGisItem;
-class CGisItemOvlArea;
-class IMouse;
-
-class CScrOptOvlArea : public IScrOpt, private Ui::IScrOptOvlArea
+class CSelectCopyAction : public QDialog, private Ui::ISelectCopyAction
{
Q_OBJECT
public:
- CScrOptOvlArea(CGisItemOvlArea * area, const QPoint &point, IMouse *parent);
- virtual ~CScrOptOvlArea();
+ CSelectCopyAction(const IGisItem * src, const IGisItem * tar, QWidget * parent);
+ virtual ~CSelectCopyAction();
+
+ enum result_e
+ {
+ eResultNone,
+ eResultCopy,
+ eResultSkip,
+ eResultClone
+ };
- void draw(QPainter& p);
+ result_e getResult(){return result;}
+ bool allOthersToo();
private slots:
- void slotEditDetails();
- void slotDelete();
- void slotEdit();
+ void slotSelectResult();
private:
- IGisItem::key_t key;
- QPointF anchor;
-
+ result_e result;
};
-#endif //CSCROPTOVLAREA_H
+#endif //CSELECTCOPYACTION_H
diff --git a/src/helpers/CSelectProjectDialog.cpp b/src/helpers/CSelectProjectDialog.cpp
index ddddfc5..3220dc9 100644
--- a/src/helpers/CSelectProjectDialog.cpp
+++ b/src/helpers/CSelectProjectDialog.cpp
@@ -18,8 +18,10 @@
#include "helpers/CSelectProjectDialog.h"
#include "gis/prj/IGisProject.h"
+#include "gis/CGisListWks.h"
#include "helpers/CSettings.h"
+
#include <QtWidgets>
CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, type_e& type, QTreeWidget * parent)
@@ -40,7 +42,7 @@ CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, type_e&
continue;
}
- QListWidgetItem * item = new QListWidgetItem(project->icon(0), project->text(0),listWidget);
+ QListWidgetItem * item = new QListWidgetItem(project->icon(CGisListWks::eColumnName), project->text(CGisListWks::eColumnName),listWidget);
item->setData(Qt::UserRole, project->getKey());
}
}
diff --git a/src/helpers/ISelectCopyAction.ui b/src/helpers/ISelectCopyAction.ui
new file mode 100644
index 0000000..4f65015
--- /dev/null
+++ b/src/helpers/ISelectCopyAction.ui
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ISelectCopyAction</class>
+ <widget class="QDialog" name="ISelectCopyAction">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>446</width>
+ <height>285</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Copy item...</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="pushCopy">
+ <property name="text">
+ <string>Replace existing item</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelIcon1">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="labelInfo1">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QPushButton" name="pushSkip">
+ <property name="text">
+ <string>Do not copy item</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="labelIcon2">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QLabel" name="labelInfo2">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0" colspan="2">
+ <widget class="Line" name="line_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QPushButton" name="pushClone">
+ <property name="text">
+ <string>Create a clone</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Replace with:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Keep item:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>The clone's name will be appended with '_Clone'</string>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="0" colspan="2">
+ <widget class="Line" name="line_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="11" column="1">
+ <widget class="QCheckBox" name="checkAllOtherToo">
+ <property name="text">
+ <string>And for all other items, too.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/icons/32x32/Copy.png b/src/icons/32x32/Copy.png
index 3142509..b3a7420 100644
Binary files a/src/icons/32x32/Copy.png and b/src/icons/32x32/Copy.png differ
diff --git a/src/icons/32x32/DatabaseConvert.png b/src/icons/32x32/DatabaseConvert.png
index 3108251..8077835 100644
Binary files a/src/icons/32x32/DatabaseConvert.png and b/src/icons/32x32/DatabaseConvert.png differ
diff --git a/src/icons/32x32/Move.png b/src/icons/32x32/Move.png
new file mode 100644
index 0000000..3308906
Binary files /dev/null and b/src/icons/32x32/Move.png differ
diff --git a/src/icons/48x48/Copy.png b/src/icons/48x48/Copy.png
index f7cbf25..e93e024 100644
Binary files a/src/icons/48x48/Copy.png and b/src/icons/48x48/Copy.png differ
diff --git a/src/icons/48x48/DatabaseConvert.png b/src/icons/48x48/DatabaseConvert.png
index 215ece1..738d412 100644
Binary files a/src/icons/48x48/DatabaseConvert.png and b/src/icons/48x48/DatabaseConvert.png differ
diff --git a/src/icons/48x48/Move.png b/src/icons/48x48/Move.png
new file mode 100644
index 0000000..30fe97e
Binary files /dev/null and b/src/icons/48x48/Move.png differ
diff --git a/src/icons/Copy.svg b/src/icons/Copy.svg
index 3cfab55..0e944f4 100644
--- a/src/icons/Copy.svg
+++ b/src/icons/Copy.svg
@@ -13,7 +13,7 @@
height="64px"
id="svg3513"
version="1.1"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.48.5 r10040"
sodipodi:docname="Copy.svg">
<defs
id="defs3515" />
@@ -24,17 +24,17 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="11"
- inkscape:cx="-16.101692"
- inkscape:cy="28.929652"
+ inkscape:zoom="3.8890873"
+ inkscape:cx="1.7772742"
+ inkscape:cy="8.5958721"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
- inkscape:window-height="996"
- inkscape:window-x="-2"
- inkscape:window-y="-3"
+ inkscape:window-height="992"
+ inkscape:window-x="-4"
+ inkscape:window-y="-1"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
@@ -57,25 +57,25 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
- style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76969867999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect3828"
- width="24.230301"
- height="34.230301"
- x="30.521212"
- y="9.4303045" />
- <rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3828-0-5"
width="24.230301"
height="34.230301"
x="15.066664"
y="14.430304" />
<rect
- style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76969867999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3828-0"
width="24.230301"
height="34.230301"
x="15.430301"
y="14.430304" />
+ <rect
+ style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3828"
+ width="24.230301"
+ height="34.230301"
+ x="30.521212"
+ y="9.4303045" />
</g>
</svg>
diff --git a/src/icons/DatabaseConvert.svg b/src/icons/DatabaseConvert.svg
index ae435b7..d240e42 100644
--- a/src/icons/DatabaseConvert.svg
+++ b/src/icons/DatabaseConvert.svg
@@ -16,7 +16,34 @@
inkscape:version="0.48.5 r10040"
sodipodi:docname="DatabaseConvert.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3808"
+ style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path3790"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -25,15 +52,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.229447"
- inkscape:cx="-3.950756"
+ inkscape:cx="6.4926431"
inkscape:cy="18.171979"
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-height="992"
+ inkscape:window-x="-4"
+ inkscape:window-y="-1"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
@@ -51,7 +78,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>
@@ -72,7 +99,7 @@
y="2.2142856" /></flowRegion><flowPara
id="flowPara3865" /></flowRoot> <g
id="g3856"
- transform="matrix(0.46904962,0,0,0.9609277,1.7607232,983.43049)"
+ transform="matrix(0.46904962,0,0,0.4861194,1.7607232,1014.1361)"
style="stroke-width:3.38945651;stroke-miterlimit:4;stroke-dasharray:none">
<path
transform="matrix(0.97628959,0,0,0.90577639,0.75264714,41.745822)"
@@ -166,7 +193,7 @@
y="995.86395" />
<g
id="g3856-5"
- transform="matrix(0.46904962,0,0,0.9609277,40.0963,983.43049)"
+ transform="matrix(0.46904962,0,0,0.4861194,40.0963,1014.1361)"
style="stroke-width:3.38945651;stroke-miterlimit:4;stroke-dasharray:none">
<path
transform="matrix(0.97628959,0,0,0.90577639,0.75264714,41.745822)"
@@ -252,9 +279,11 @@
style="fill:#ffffff;stroke:#000080;stroke-width:3.38945651;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<path
- style="fill:#000080;stroke:#000080;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 30,1000.864 10,20 -10,20 z"
- id="path3058"
- inkscape:connector-curvature="0" />
+ style="fill:none;stroke:#008000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 15,29 C 25,4 45,4 55,29"
+ id="path3007"
+ inkscape:connector-curvature="0"
+ transform="translate(0,988.36218)"
+ sodipodi:nodetypes="cc" />
</g>
</svg>
diff --git a/src/icons/Copy.svg b/src/icons/Move.svg
similarity index 57%
copy from src/icons/Copy.svg
copy to src/icons/Move.svg
index 3cfab55..d26f0ee 100644
--- a/src/icons/Copy.svg
+++ b/src/icons/Move.svg
@@ -13,7 +13,7 @@
height="64px"
id="svg3513"
version="1.1"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.48.5 r10040"
sodipodi:docname="Copy.svg">
<defs
id="defs3515" />
@@ -24,17 +24,17 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="11"
- inkscape:cx="-16.101692"
- inkscape:cy="28.929652"
+ inkscape:zoom="5.5"
+ inkscape:cx="21.998327"
+ inkscape:cy="9.6337227"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1920"
- inkscape:window-height="996"
- inkscape:window-x="-2"
- inkscape:window-y="-3"
+ inkscape:window-height="992"
+ inkscape:window-x="-4"
+ inkscape:window-y="-1"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
@@ -48,7 +48,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>
@@ -57,25 +57,40 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
- style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76969867999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect3828"
- width="24.230301"
- height="34.230301"
- x="30.521212"
- y="9.4303045" />
- <rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3828-0-5"
width="24.230301"
height="34.230301"
x="15.066664"
y="14.430304" />
<rect
- style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76969867999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3828-0"
width="24.230301"
height="34.230301"
x="15.430301"
y="14.430304" />
+ <rect
+ style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.9321835;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3860"
+ width="14"
+ height="4"
+ x="21"
+ y="40" />
+ <rect
+ style="fill:#80b3ff;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3828"
+ width="24.230301"
+ height="34.230301"
+ x="30.521212"
+ y="9.4303045" />
+ <path
+ style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 35.835634,35 4.76171,3e-6 0,4.753904 4.07804,0 0,-4.753907 4.761706,0 0,-4.093642 -4.761706,0 -3e-6,-4.753907 -4.078037,0 -4e-6,4.753912 -4.761706,-5e-6 0,4.093642 z"
+ id="rect3117-7"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/oeichler/Code/cpp/MapRoom/src/icons/16x16/add.png"
+ inkscape:export-xdpi="75.913841"
+ inkscape:export-ydpi="75.913841" />
</g>
</svg>
diff --git a/src/locale/qmapshack_cs.ts b/src/locale/qmapshack_cs.ts
index a1eeb4d..0b6777a 100644
--- a/src/locale/qmapshack_cs.ts
+++ b/src/locale/qmapshack_cs.ts
@@ -227,135 +227,152 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="82"/>
- <source>Remove Database</source>
+ <location filename="../gis/CGisListDB.cpp" line="81"/>
+ <location filename="../gis/CGisListDB.cpp" line="91"/>
+ <source>Delete Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gis/CGisListDB.cpp" line="85"/>
+ <source>Remove Database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="88"/>
<source>Empty</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Remove database...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Do you realy want to remove '%1' from the list?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Delete database folder...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Are you sure you want to delete "%1" from the database?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
<source>Remove items...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
<source>Are you sure you want to delete all items from Lost&Found? This will remove them permanently.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
+ <source>Are you sure you want to delete all selected items from Lost&Found? This will remove them permanently.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>CGisListWks</name>
<message>
- <location filename="../gis/CGisListWks.cpp" line="80"/>
+ <location filename="../gis/CGisListWks.cpp" line="82"/>
<source>Save As...</source>
<translation>Uložit jako...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="81"/>
+ <location filename="../gis/CGisListWks.cpp" line="83"/>
<source>Save</source>
<translation>Uložit</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="82"/>
+ <location filename="../gis/CGisListWks.cpp" line="84"/>
<source>Edit..</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="83"/>
+ <location filename="../gis/CGisListWks.cpp" line="85"/>
<source>Close</source>
<translation>Zavřít</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="89"/>
+ <location filename="../gis/CGisListWks.cpp" line="91"/>
<source>Edit...</source>
<translation>Upravit...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="90"/>
+ <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <source>Copy to...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="104"/>
<source>Move Waypoint</source>
<translation>Přesunout cestovní bod</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="91"/>
+ <location filename="../gis/CGisListWks.cpp" line="105"/>
<source>Proj. Waypoint...</source>
<translation>Promítnout cestovní bod...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <location filename="../gis/CGisListWks.cpp" line="93"/>
<source>Track Profile</source>
<translation>Sledovat profil</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="93"/>
+ <location filename="../gis/CGisListWks.cpp" line="95"/>
<source>Select Range</source>
<translation>Vybrat rozsah</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="94"/>
+ <location filename="../gis/CGisListWks.cpp" line="96"/>
<source>Edit Track Points</source>
<translation>Upravit body stopy</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="95"/>
+ <location filename="../gis/CGisListWks.cpp" line="97"/>
<source>Reverse Track</source>
<translation>Obrátit stopu</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="96"/>
+ <location filename="../gis/CGisListWks.cpp" line="98"/>
<source>Combine Tracks</source>
<translation>Spojit stopy</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="97"/>
+ <location filename="../gis/CGisListWks.cpp" line="117"/>
<source>Edit Area Points</source>
<translation>Upravit body oblasti</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="100"/>
+ <location filename="../gis/CGisListWks.cpp" line="99"/>
<source>Delete</source>
<translation>Smazat</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="621"/>
+ <location filename="../gis/CGisListWks.cpp" line="567"/>
<source>Saving workspace. Please wait.</source>
<translation>Ukládá se pracovní oblast. Počkejte, prosím.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="662"/>
+ <location filename="../gis/CGisListWks.cpp" line="608"/>
<source>Loading workspace. Please wait.</source>
<translation>Nahrává se pracovní oblast. Počkejte, prosím.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>Close all projects...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>This will remove all projects from the workspace.</source>
<translation type="unfinished"></translation>
</message>
@@ -2091,17 +2108,17 @@ není platným vymezením soustavy souřadnic
<translation>Formulář</translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="62"/>
<source>State</source>
- <translation>Stav</translation>
+ <translation type="obsolete">Stav</translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="94"/>
+ <location filename="../gis/IGisWidget.ui" line="65"/>
+ <location filename="../gis/IGisWidget.ui" line="97"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="127"/>
+ <location filename="../gis/IGisWidget.ui" line="130"/>
<source>To add a database do a right click on the database list above.</source>
<translation type="unfinished"></translation>
</message>
@@ -2741,13 +2758,19 @@ nebo
</message>
<message>
<location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="54"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="65"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="83"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+ <source>Copy area into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="112"/>
<source>TextLabel</source>
<translation>Textový štítek</translation>
</message>
@@ -2862,16 +2885,22 @@ nebo
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="31"/>
<location filename="../gis/rte/IScrOptRte.ui" line="45"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="59"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="42"/>
+ <source>Copy route into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/rte/IScrOptRte.ui" line="56"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Smazat</p></body></html></translation>
</message>
<message>
- <location filename="../gis/rte/IScrOptRte.ui" line="71"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="85"/>
<source>TextLabel</source>
<translation>Textový štítek</translation>
</message>
@@ -2889,37 +2918,42 @@ nebo
<translation>Zobrazit podrobnosti a upravit vlastnosti stopy.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <source>Copy track into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="68"/>
<source>Delete</source>
<translation>Smazat</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="89"/>
<source>Show on-screen profile and detailed information about points.</source>
<translation>Ukázat promítnutý profil a podrobné údaje o bodech.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="162"/>
<source>Cut track at selected point into two tracks.</source>
<translation>Vyjmout stopu na vybraném bodu do dvou stop.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
<source>Edit position of track points.</source>
<translation>Upravit polohu bodů stopy.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
<source>Select a range of points.</source>
<translation type="unfinished">Vybrat rozsah bodů.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
<source>Reverse track.</source>
<translation>Obrátit stopu.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>Combine tracks.</source>
<translation>Spojit stopy.</translation>
</message>
@@ -2930,12 +2964,13 @@ nebo
<message>
<location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="74"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="123"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="137"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="151"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="165"/>
<source>...</source>
<translation>...</translation>
</message>
@@ -2944,7 +2979,7 @@ nebo
<translation type="obsolete"><html><head/><body><p>Smazat</p></body></html></translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="177"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="191"/>
<source>TextLabel</source>
<translation>Textový štítek</translation>
</message>
@@ -2964,33 +2999,90 @@ nebo
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="52"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="66"/>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="87"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="80"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="101"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="115"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="63"/>
+ <source>Copy waypoint into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="77"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Smazat</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="84"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
<source><html><head/><body><p>Move waypoint to a new location.</p></body></html></source>
<translation><html><head/><body><p>Přesunout cestovní bod do nového umístění.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="112"/>
<source><html><head/><body><p>Clone waypoint and move clone a given distance and angle.</p></body></html></source>
<translation><html><head/><body><p>Klonovat cestovní bod a přesunout kopii o danou vzdálenost a ve stanoveném úhlu.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="145"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="159"/>
<source>TextLabel</source>
<translation>Textový štítek</translation>
</message>
</context>
<context>
+ <name>ISelectCopyAction</name>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="14"/>
+ <source>Copy item...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="23"/>
+ <source>Replace existing item</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="30"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="40"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="67"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="77"/>
+ <source>TextLabel</source>
+ <translation type="unfinished">Textový štítek</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="60"/>
+ <source>Do not copy item</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="97"/>
+ <source>Create a clone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="104"/>
+ <source>Replace with:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="111"/>
+ <source>Keep item:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="118"/>
+ <source>The clone's name will be appended with '_Clone'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="132"/>
+ <source>And for all other items, too.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ISelectProjectDialog</name>
<message>
<source>Dialog</source>
@@ -3400,69 +3492,75 @@ Areas: %1</source>
Oblasti: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="163"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="168"/>
<source><br/>
Filename: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="180"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="185"/>
<source>Waypoints: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="184"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="189"/>
<source>Tracks: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="188"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="193"/>
<source>Routes: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="192"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="197"/>
<source>Areas: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="250"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="255"/>
<source>Are you sure you want to delete '%1' from project '%2'?</source>
<translation>Jste si jistý, že chcete smazat '%1' z projektu '%2'?</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="251"/>
+ <location filename="../gis/CGisListDB.cpp" line="410"/>
+ <source>Are you sure you want to delete '%1' from folder '%2'?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="411"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="256"/>
<source>Delete...</source>
<translation>Smazat...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open...</source>
<translation>Nepodařilo se otevřít...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open %1</source>
<translation>Nepodařilo se otevřít %1</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="124"/>
+ <location filename="../gis/db/CDBProject.cpp" line="125"/>
<location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="90"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
<source>Save GIS data to...</source>
<translation>Uložit data GIS do...</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Save ...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Abort save</source>
<translation type="unfinished"></translation>
</message>
@@ -3493,112 +3591,112 @@ Filename: %1</source>
<translation>Nepodařilo se zapsat soubor '%1'</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="284"/>
+ <location filename="../gis/IGisItem.cpp" line="285"/>
<source>Initial version.</source>
<translation>Počáteční verze.</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="368"/>
+ <location filename="../gis/IGisItem.cpp" line="369"/>
<source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
<translation>Tento prvek je pravděpodobně pouze pro čtení, protože nebyl vytvořen v programu QMapShack. Obvykle nemáte zájem měnit zavedená data. Ale pokud si myslíte, že je to tentokrát na místě, stiskněte OK.</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="369"/>
+ <location filename="../gis/IGisItem.cpp" line="370"/>
<source>Read Only Mode...</source>
<translation>Režim pouze pro čtení...</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="558"/>
+ <location filename="../gis/IGisItem.cpp" line="559"/>
<source><h4>Comment:</h4></source>
<translation type="unfinished"><h4>Poznámka:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="561"/>
+ <location filename="../gis/IGisItem.cpp" line="562"/>
<source><p>--- no comment ---</p></source>
<translation type="unfinished"><p>--- žádná poznámka ---</p></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="568"/>
- <location filename="../gis/IGisItem.cpp" line="598"/>
+ <location filename="../gis/IGisItem.cpp" line="569"/>
+ <location filename="../gis/IGisItem.cpp" line="599"/>
<source><h4>Description:</h4></source>
<translation type="unfinished"><h4>Popis:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="571"/>
- <location filename="../gis/IGisItem.cpp" line="601"/>
+ <location filename="../gis/IGisItem.cpp" line="572"/>
+ <location filename="../gis/IGisItem.cpp" line="602"/>
<source><p>--- no description ---</p></source>
<translation type="unfinished"><p>--- žádný popis ---</p></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="578"/>
- <location filename="../gis/IGisItem.cpp" line="608"/>
+ <location filename="../gis/IGisItem.cpp" line="579"/>
+ <location filename="../gis/IGisItem.cpp" line="609"/>
<source><h4>Links:</h4></source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="581"/>
- <location filename="../gis/IGisItem.cpp" line="611"/>
+ <location filename="../gis/IGisItem.cpp" line="582"/>
+ <location filename="../gis/IGisItem.cpp" line="612"/>
<source><p>--- no links ---</p></source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="328"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
<source>Length: %1 %2</source>
<translation>Délka: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="341"/>
<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="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="349"/>
<source>Time: %1</source>
<translation>Čas: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="346"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="352"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
<source>, Speed: %1 %2</source>
<translation>, Rychlost: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Moving: %1</source>
<translation>Pohyb: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Start: %1</source>
<translation>Začátek: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="367"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="373"/>
<source>End: %1</source>
<translation>Konec: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
<source>Points: %1 (%2)</source>
<translation>Body: %1 (%2)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="436"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source>Ele.: %1 %2</source>
<translation>Výška: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="439"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="445"/>
<source> slope: %1%3 (%2%)</source>
<translation> sklon: %1%3 (%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="950"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
<source>Hide points.</source>
<translation>Skrýt body.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="984"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
<source>Show points.</source>
<translation>Ukázat body.</translation>
</message>
@@ -3607,37 +3705,37 @@ Filename: %1</source>
<translation type="obsolete"> sklon: %1°(%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="444"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
<source> speed: %1%2</source>
<translation> rychlost: %1%2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="456"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="462"/>
<source>Ascend: %1%2 (%3%)</source>
<translation>Stoupání: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
<source>Ascend: - (-)</source>
<translation>Stoupání: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="470"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
<source> Descend: - (-) </source>
<translation> Klesání: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="491"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
<source> Moving: - (-) </source>
<translation> Pohyb: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
<source> Descend: %1%2 (%3%)</source>
<translation> Klesání: %1%2 (%3%) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="267"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
<translation>Změněny body stop. Obětována veškerá předchozí data.</translation>
</message>
@@ -3646,155 +3744,163 @@ Filename: %1</source>
<translation type="obsolete"> sklon: %1° (%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="483"/>
<source>Dist.: %1%2 (%3%)</source>
<translation>Vzdálenost: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
<source>Dist.: - (-)</source>
<translation>Vzdálenost: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
<source> Moving: %1%2 (%3%)</source>
<translation> Pohyb: %1%2 (%3%) </translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
<source>thin</source>
<translation>Tenký</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
<source>normal</source>
<translation>Obvyklý</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
<source>wide</source>
<translation>Široký</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="99"/>
<source>strong</source>
<translation>Silný</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="400"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="144"/>
+ <location filename="../gis/rte/CGisItemRte.cpp" line="44"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="164"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="103"/>
+ <source>_Clone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="409"/>
<source>Area: %1%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="452"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
<source>Changed area shape.</source>
<translation>Změněn tvar oblasti.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="460"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="469"/>
<source>Changed name.</source>
<translation>Změněn název.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="466"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="475"/>
<source>Changed border width.</source>
<translation>Změněna šířka okraje.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="472"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="481"/>
<source>Changed fill pattern.</source>
<translation>Změněn vzor výplně.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="478"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="487"/>
<source>Changed opacity.</source>
<translation>Změněna neprůhlednost.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="484"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="493"/>
<source>Changed comment.</source>
<translation>Změněna poznámka.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="490"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="499"/>
<source>Changed description.</source>
<translation>Změněn popis.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="496"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
<source>Changed links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="508"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
<source>Changed color</source>
<translation>Změněná barva</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="225"/>
<source>Elevation: %1 %2</source>
<translation>Výška: %1 %2</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="227"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="233"/>
<source>Proximity: %1 %2</source>
<translation>Blízkost: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1271"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="292"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
<source>Changed name</source>
<translation>Změněný název</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<location filename="../mouse/CMouseEditArea.cpp" line="100"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Edit name...</source>
<translation>Upravit název...</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<source>Enter new waypoint name.</source>
<translation>Zadat nový název pro cestovní bod.</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="299"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
<source>Changed position</source>
<translation>Změněná poloha</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
<source>Changed elevation</source>
<translation>Změněná výška</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
<source>Changed proximity</source>
<translation>Změněná blízkost</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
<source>Changed icon</source>
<translation>Změněná ikona</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
<source>Changed comment</source>
<translation>Změněná poznámka</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
<source>Changed description</source>
<translation>Změněný popis</translation>
</message>
@@ -3830,11 +3936,11 @@ Filename: %1</source>
<translation>Toto je souborový typ s neznámým druhem čáry. Nahlašte to, prosím!</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Enter new track name.</source>
<translation>Zadat název nové stopy.</translation>
@@ -3845,19 +3951,19 @@ Filename: %1</source>
<translation>Zadat název nové oblasti.</translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderDatabase.cpp" line="26"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="28"/>
+ <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
<source>All your data grouped by folders.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="29"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="63"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="67"/>
+ <location filename="../gis/db/CLostFoundProject.cpp" line="39"/>
<source>Lost & Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="58"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="62"/>
<source>Lost & Found (%1)</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/locale/qmapshack_de.ts b/src/locale/qmapshack_de.ts
index 3df4860..7d75f5d 100644
--- a/src/locale/qmapshack_de.ts
+++ b/src/locale/qmapshack_de.ts
@@ -115,7 +115,7 @@
<location filename="../gis/prj/CDetailsPrj.cpp" line="56"/>
<location filename="../gis/prj/CDetailsPrj.cpp" line="84"/>
<source>none</source>
- <translation>keine</translation>
+ <translation>keiner</translation>
</message>
<message>
<location filename="../gis/prj/CDetailsPrj.cpp" line="70"/>
@@ -125,17 +125,21 @@
<message>
<location filename="../gis/prj/CDetailsPrj.cpp" line="70"/>
<source>Enter new project name.</source>
- <translation>Geben Sie einen neuen Projektnamen ein.</translation>
+ <translation>Geben Sie einen Projektnamen ein.</translation>
+ </message>
+ <message>
+ <source>Enter new waypoint name.</source>
+ <translation type="obsolete">Name eingeben.</translation>
</message>
<message>
<location filename="../gis/prj/CDetailsPrj.cpp" line="79"/>
<source>Edit keywords...</source>
- <translation>Schlagwörter bearbeiten...</translation>
+ <translation>Stichwörter bearbeiten...</translation>
</message>
<message>
<location filename="../gis/prj/CDetailsPrj.cpp" line="79"/>
<source>Enter keywords.</source>
- <translation>Geben Sie einen neue Schlagwörter an.</translation>
+ <translation>Stichwörter eingeben.</translation>
</message>
</context>
<context>
@@ -224,9 +228,12 @@
<context>
<name>CGisListDB</name>
<message>
- <location filename="../gis/CGisListDB.cpp" line="74"/>
- <source>Add Database</source>
- <translation>Datenbank hinzufügen</translation>
+ <source>Lost & Found</source>
+ <translation type="obsolete">Verloren & Gefunden</translation>
+ </message>
+ <message>
+ <source>Database</source>
+ <translation type="obsolete">Datenbank</translation>
</message>
<message>
<location filename="../gis/CGisListDB.cpp" line="77"/>
@@ -239,75 +246,101 @@
<translation>Ordner löschen</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="82"/>
+ <source>Delete</source>
+ <translation type="obsolete">Löschen</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="74"/>
+ <source>Add Database</source>
+ <translation>Datenbank hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="81"/>
+ <location filename="../gis/CGisListDB.cpp" line="91"/>
+ <source>Delete Item</source>
+ <translation>Element löschen</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="85"/>
<source>Remove Database</source>
<translation>Datenbank entfernen</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="85"/>
+ <location filename="../gis/CGisListDB.cpp" line="88"/>
<source>Empty</source>
- <translation>Leeren</translation>
+ <translation>Leer</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Remove database...</source>
<translation>Datenbank entfernen...</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Do you realy want to remove '%1' from the list?</source>
- <translation>Sind Sie sicher, dass Sie die Datenbank '%1' entfernen wollen?</translation>
+ <translation>Wollen Sie '%1' wirklich aus der Liste entfernen?</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Delete database folder...</source>
- <translation>Datenbankordner löschen... </translation>
+ <translation>Datenbankordner löschen...</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Are you sure you want to delete "%1" from the database?</source>
- <translation>Sind Sie sicher, dass Sie den Ordner "%1" aus der Datenbank löschen wollen?</translation>
+ <translation>Sind Sie sicher, dass Sie "%1" aus der Datenbank löschen wollen? </translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
<source>Remove items...</source>
- <translation>Elemente entfernen...</translation>
+ <translation>Element entfernen...</translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
<source>Are you sure you want to delete all items from Lost&Found? This will remove them permanently.</source>
- <translation>Sind Sie sicher, dass Sie alle Elemente aus Verloren&Gefunden löschen wollen? Das wird die Eelemente für immer löschen.</translation>
+ <translation>Sind Sie sicher, dass Sie alle Elemente in Verloren & Gefunden löschen wollen? Sie werden für immer entfernt.</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
+ <source>Are you sure you want to delete all selected items from Lost&Found? This will remove them permanently.</source>
+ <translation>Sind Sie sicher, dass Sie alle ausgewählten Elemente in Verloren & Gefunden löschen wollen? Sie werden für immer entfernt.</translation>
</message>
</context>
<context>
<name>CGisListWks</name>
<message>
- <location filename="../gis/CGisListWks.cpp" line="81"/>
+ <location filename="../gis/CGisListWks.cpp" line="83"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="80"/>
+ <location filename="../gis/CGisListWks.cpp" line="82"/>
<source>Save As...</source>
- <translation>Speichern als...</translation>
+ <translation>Speichern unter...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="82"/>
+ <location filename="../gis/CGisListWks.cpp" line="84"/>
<source>Edit..</source>
- <translation>Ändern...</translation>
+ <translation>Bearbeiten..</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="83"/>
+ <location filename="../gis/CGisListWks.cpp" line="85"/>
<source>Close</source>
<translation>Schließen</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="89"/>
+ <location filename="../gis/CGisListWks.cpp" line="91"/>
<source>Edit...</source>
<translation>Ändern...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="90"/>
+ <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <source>Copy to...</source>
+ <translation>Kopieren nach...</translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="104"/>
<source>Move Waypoint</source>
<translation>Wegpunkt verschieben</translation>
</message>
@@ -316,64 +349,64 @@
<translation type="obsolete">Wegpunkt verschieben...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="91"/>
+ <location filename="../gis/CGisListWks.cpp" line="105"/>
<source>Proj. Waypoint...</source>
<translation>Wegpunkt Projektion...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <location filename="../gis/CGisListWks.cpp" line="93"/>
<source>Track Profile</source>
<translation>Trackprofil</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="93"/>
+ <location filename="../gis/CGisListWks.cpp" line="95"/>
<source>Select Range</source>
<translation>Bereich wählen</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="94"/>
+ <location filename="../gis/CGisListWks.cpp" line="96"/>
<source>Edit Track Points</source>
<translation>Wegpunkte bearbeiten</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="95"/>
+ <location filename="../gis/CGisListWks.cpp" line="97"/>
<source>Reverse Track</source>
<translation>Track umkehren</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="96"/>
+ <location filename="../gis/CGisListWks.cpp" line="98"/>
<source>Combine Tracks</source>
<translation>Tracks verbinden</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="97"/>
+ <location filename="../gis/CGisListWks.cpp" line="117"/>
<source>Edit Area Points</source>
<translation>Flächenpunkte bearbeiten</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="100"/>
+ <location filename="../gis/CGisListWks.cpp" line="99"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="621"/>
+ <location filename="../gis/CGisListWks.cpp" line="567"/>
<source>Saving workspace. Please wait.</source>
<translation>Ansicht speichern. Bitte warten.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="662"/>
+ <location filename="../gis/CGisListWks.cpp" line="608"/>
<source>Loading workspace. Please wait.</source>
<translation>Ansicht laden. Bitte warten.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>Close all projects...</source>
- <translation>Alle Projekte schließen...</translation>
+ <translation>Alle Projkete schließen...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>This will remove all projects from the workspace.</source>
- <translation>Hiermit werden alle Projekte aus dem Arbeitsplatz entfernt.</translation>
+ <translation>Dies wird alle Projekte aus der Ansicht entfernen.</translation>
</message>
<message>
<source>Add Empty Project</source>
@@ -393,7 +426,7 @@
<message>
<location filename="../grid/CGrid.cpp" line="62"/>
<source>[Grid: %1%2%5 %3%4%5] </source>
- <translation></translation>
+ <translation>[Gitter: %1%2%5 %3%4%5] </translation>
</message>
<message>
<location filename="../grid/CGrid.cpp" line="66"/>
@@ -414,25 +447,25 @@
<message>
<location filename="../qlgt/CImportDatabase.cpp" line="29"/>
<source>Import QLandkarte Database</source>
- <translation>QLandkarte Datenbank importieren</translation>
+ <translation>Importiert eine QLandkarte Datenbank</translation>
</message>
<message>
<location filename="../qlgt/CImportDatabase.cpp" line="74"/>
<source>Select source database...</source>
- <translation>Wählen Sie die Quelldatenbank aus...</translation>
+ <translation>Quelldatenbank wählen...</translation>
</message>
<message>
<location filename="../qlgt/CImportDatabase.cpp" line="95"/>
<source>Select target database...</source>
- <translation>Wählen Sie die Zieldatenbank aus...</translation>
+ <translation>Zieldatenbank wählen...</translation>
</message>
<message>
<source>Select source databse...</source>
- <translation type="obsolete">Wählen Sie die Quelldatenbank aus...</translation>
+ <translation type="obsolete">Quelldatenbank wählen...</translation>
</message>
<message>
<source>Select target databse...</source>
- <translation type="obsolete">Wählen Sie die Zieldatenbank aus...</translation>
+ <translation type="obsolete">Zieldatenbank wählen...</translation>
</message>
</context>
<context>
@@ -871,7 +904,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="360"/>
<source>Man-made area</source>
- <translation></translation>
+ <translation>Fabrikgelände</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="361"/>
@@ -992,7 +1025,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="395"/>
<source>Orchard/Plantation</source>
- <translation></translation>
+ <translation>Obstgarten/Plantage</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="396"/>
@@ -1007,7 +1040,7 @@
<message>
<location filename="../map/CMapIMG.cpp" line="398"/>
<source>Flat</source>
- <translation></translation>
+ <translation>Ebene</translation>
</message>
<message>
<location filename="../map/CMapIMG.cpp" line="399"/>
@@ -1466,27 +1499,27 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="304"/>
<source>Migrating database from version 4 to 5.</source>
- <translation>Führe Datenbank von Version 4 zu Version 5 über.</translation>
+ <translation>Datenbank von Version 4 nach 5 migrieren.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="357"/>
<source>Migrating database from version 5 to 6.</source>
- <translation>Führe Datenbank von Version 5 zu Version 6 über.</translation>
+ <translation>Datenbank von Version 5 nach 6 migrieren.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="414"/>
<source>Migrating database from version 6 to 7.</source>
- <translation>Führe Datenbank von Version 6 zu Version 7 über.</translation>
+ <translation>Datenbank von Version 6 nach 7 migrieren.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="480"/>
<source>Migrating database from version 7 to 8.</source>
- <translation>Führe Datenbank von Version 7 zu Version 8 über.</translation>
+ <translation>Datenbank von Version 7 nach 8 migrieren.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="509"/>
<source>Migrating database from version 8 to 9.</source>
- <translation>Führe Datenbank von Version 8 zu Version 9 über.</translation>
+ <translation>Datenbank von Version 8 nach 9 migrieren.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="532"/>
@@ -1496,52 +1529,56 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="541"/>
<source>Folders: %1</source>
- <translation>Ordner:. %1</translation>
+ <translation>Ordner: %1</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="550"/>
<source>Tracks: %1</source>
- <translation>Tracks: %1</translation>
+ <translation>Tracks: %1</translation>
+ </message>
+ <message>
+ <source>Routes: %1 (not supported yet)</source>
+ <translation type="obsolete">Routen: %1 (noch nicht unterstützt)</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="558"/>
<source>Routes: %1 (Only the basic route will be copied)</source>
- <translation>Routen: %1 (Nur die Basisroute wird kopiert)</translation>
+ <translation>Routen: %1 (Es wird nur die BAsisroute kopiert)</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="566"/>
<source>Waypoints: %1</source>
- <translation>Wegpunkte: %1</translation>
+ <translation>Wegpunkte: %1</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="574"/>
<source>Overlays: %1 (only area overlays will be converted to QMapShack)</source>
- <translation>Overlays: %1 (nur Flächen werden konvertiert)</translation>
+ <translation>Overlays: %1 (Es werden nur Flächenoverlays nach QMapShack konvertiert)</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="581"/>
<source>Diaries: %1</source>
- <translation>Tagebuch: %1</translation>
+ <translation>Tagebücher: %1</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="588"/>
<source>Map selections: %1 (can't be converted to QMapShack)</source>
- <translation>Kartenauswahl: %1 (kann nicht konvertiert werden)</translation>
+ <translation>Kartenselektionen: %1 (können nicht nach QMapShack konvertiert werden)</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="594"/>
<source>------ Start to convert database to %1------</source>
- <translation>------ Start der Konvertierung der Datenbank zu %1------</translation>
+ <translation>------ Konvertierung der Datenbank %1 beginnt ------</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="598"/>
<source>Failed to create target database.</source>
- <translation>Die Zieldatenbank konnte nicht angelegt werden.</translation>
+ <translation>Erstellen der Zieldatenbank fehlgeschlagen.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="599"/>
<source>------ Abort ------</source>
- <translation>------ Abbruch ------</translation>
+ <translation>------ Abbrechen ------</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="627"/>
@@ -1562,7 +1599,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="663"/>
<source>Imported %1 folders and %2 diaries</source>
- <translation>%1 Ordner und %2 Tagebücher wurden imortiert</translation>
+ <translation>Importiert wurden %1 Ordner und %2 Tagebücher</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="669"/>
@@ -1572,17 +1609,17 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="694"/>
<source>Imported %1 tracks, %2 waypoints, %3 routes, %4 areas</source>
- <translation>%1 Tracks, %2 Wegpunkte, %3 Routen, %4 Flächen wurden importiert</translation>
+ <translation>Importiert wurden %1 Tracks, %2 Wegpunkte, %3 Routen, %4 Flächen</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="695"/>
<source>Import folders...</source>
- <translation>Ordner importieren...</translation>
+ <translation>Importiere Ordner...</translation>
</message>
<message>
<location filename="../qlgt/CQlgtDb.cpp" line="747"/>
<source>Overlay of type '%1' cant be converted</source>
- <translation>Overlay des Typs '%1' kann nicht konvertiert werden</translation>
+ <translation>Das Overlay vomTyp '%1' kann nicht konvertiert werden</translation>
</message>
</context>
<context>
@@ -1590,22 +1627,22 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/CQmsDb.cpp" line="46"/>
<source>Existing file...</source>
- <translation>Datei existiert...</translation>
+ <translation>Vorhandene Datei...</translation>
</message>
<message>
<location filename="../qlgt/CQmsDb.cpp" line="46"/>
<source>Remove existing %1?</source>
- <translation>Existierende Datei %1 löschen?</translation>
+ <translation>Entferne vorhandene %1?</translation>
</message>
<message>
<location filename="../qlgt/CQmsDb.cpp" line="51"/>
<source>Remove existing file %1</source>
- <translation>Existierende Datei %1 gelöscht</translation>
+ <translation>Entferne vorhandene Datei %1</translation>
</message>
<message>
<location filename="../qlgt/CQmsDb.cpp" line="158"/>
<source>%1: drop item with QLGT DB ID %2</source>
- <translation>%1: Eintrag %2 aus der QLGT Datenbank geht verloren</translation>
+ <translation>%1: verwerfe das Element mit der QLGT DB ID %2</translation>
</message>
</context>
<context>
@@ -1646,7 +1683,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/db/CSetupDatabase.cpp" line="71"/>
<source>There is already a database with name '%1'</source>
- <translation>Es gibt schon eine Datenbank mit dem namen '%1'</translation>
+ <translation>Es gibt schon eine Datenbank mit dem Namen '%1'</translation>
</message>
<message>
<location filename="../gis/db/CSetupDatabase.cpp" line="85"/>
@@ -1669,7 +1706,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/db/CSetupWorkspace.cpp" line="52"/>
<source>Changes will become active after an application's restart.</source>
- <translation>Änderungen werden nach einem Neustart der Anwendung erst aktiv.</translation>
+ <translation>Änderungen werden erst nach Neustart der Anwendung aktiv.</translation>
</message>
</context>
<context>
@@ -1677,7 +1714,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../helpers/CTextEditWidget.cpp" line="73"/>
<source>&Color...</source>
- <translation>Farbe...</translation>
+ <translation>&Farbe...</translation>
</message>
</context>
<context>
@@ -1789,12 +1826,12 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../dem/IDemPropSetup.ui" line="20"/>
<source><html><head/><body><p>Change opacity of map</p></body></html></source>
- <translation><html><head/><body><p>Ändern Sie die Transparenz der Karte</p></body></html></translation>
+ <translation><html><head/><body><p>Ändert die Transparenz der Karte</p></body></html></translation>
</message>
<message>
<location filename="../dem/IDemPropSetup.ui" line="32"/>
<source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
- <translation><html><head/><body><p>Klicken um die aktuelle Skalierung als minimale Skalierung zu benutzen.</p></body></html></translation>
+ <translation><html><head/><body><p>Klicken, um die aktuelle Skalierung als minimale Skalierung zu benutzen.</p></body></html></translation>
</message>
<message>
<location filename="../dem/IDemPropSetup.ui" line="35"/>
@@ -1805,7 +1842,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../dem/IDemPropSetup.ui" line="56"/>
<source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
- <translation><html><head/><body><p>Stellen Sie den Skalierungsbereich ein, in dem die Karte sichtbar ist. Benutzen Sie die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
+ <translation><html><head/><body><p>Stellt den Skalierungsbereich ein, in dem die Karte sichtbar ist. Benutzen Sie die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
</message>
<message>
<location filename="../dem/IDemPropSetup.ui" line="69"/>
@@ -1965,7 +2002,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../gis/prj/IDetailsPrj.ui" line="68"/>
<source>Keywords:</source>
- <translation>Schlagwörter:</translation>
+ <translation>Stichwörter:</translation>
</message>
</context>
<context>
@@ -2165,19 +2202,19 @@ ist keine gültige Koordinatensystemdefinition:
<translation></translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="62"/>
<source>State</source>
- <translation>Status</translation>
+ <translation type="obsolete">Status</translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="94"/>
+ <location filename="../gis/IGisWidget.ui" line="65"/>
+ <location filename="../gis/IGisWidget.ui" line="97"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="127"/>
+ <location filename="../gis/IGisWidget.ui" line="130"/>
<source>To add a database do a right click on the database list above.</source>
- <translation>Um eine Datenbank hinzuzufügen, müssen Sie mit der rechten Maustaste auf die obige Datenbanklist klicken.</translation>
+ <translation>Um eine Datenbank hinzuzufügen rechtsklicken Sie oben auf die Datenbankliste.</translation>
</message>
</context>
<context>
@@ -2258,7 +2295,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../qlgt/IImportDatabase.ui" line="102"/>
<source>Start</source>
- <translation>Los</translation>
+ <translation></translation>
</message>
</context>
<context>
@@ -2279,7 +2316,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../helpers/ILinksDialog.ui" line="14"/>
<source>Links...</source>
- <translation>Verbindungen...</translation>
+ <translation>Verknüpfungen...</translation>
</message>
<message>
<location filename="../helpers/ILinksDialog.ui" line="23"/>
@@ -2294,8 +2331,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../helpers/ILinksDialog.ui" line="33"/>
<source>Uri</source>
- <translatorcomment>?</translatorcomment>
- <translation>URL</translation>
+ <translation>URI</translation>
</message>
<message>
<location filename="../helpers/ILinksDialog.ui" line="43"/>
@@ -2339,7 +2375,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="111"/>
<source>Tool</source>
- <translation>Werkzeuge</translation>
+ <translation>Werkzeug</translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="128"/>
@@ -2364,7 +2400,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="214"/>
<source>Ctrl+T</source>
- <translation>Crtl+T</translation>
+ <translation></translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="226"/>
@@ -2384,7 +2420,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="250"/>
<source>Ctrl+G</source>
- <translation>Crtl+G</translation>
+ <translation></translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="259"/>
@@ -2394,7 +2430,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="262"/>
<source>Ctrl+Alt+G</source>
- <translation>Ctrl+Alt+G</translation>
+ <translation></translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="274"/>
@@ -2455,7 +2491,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="373"/>
<source>Ctrl+L</source>
- <translation>Ctrl+L</translation>
+ <translation></translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="382"/>
@@ -2470,7 +2506,7 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="388"/>
<source>Ctrl+S</source>
- <translation>Ctrl+S</translation>
+ <translation></translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="397"/>
@@ -2500,32 +2536,36 @@ ist keine gültige Koordinatensystemdefinition:
<message>
<location filename="../IMainWindow.ui" line="439"/>
<source>Setup Units</source>
- <translation>Einheiten einrichten</translation>
+ <translation>Einheiten einstellen</translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="448"/>
<source>Setup Workspace</source>
- <translation>Arbeitsplatz einstellen</translation>
+ <translation>Ansicht einstellen</translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="451"/>
<source>Setup save on exit.</source>
- <translation>Speichern beim Verlassen.</translation>
+ <translation>Speichert Einstellungen beim Beenden.</translation>
</message>
<message>
<location filename="../IMainWindow.ui" line="460"/>
<source>Import Database from QLandkarte</source>
- <translation>Datenbank von QLandkarte importieren</translation>
- </message>
- <message>
- <location filename="../IMainWindow.ui" line="463"/>
- <source>Import QLandkarte GT database</source>
- <translation>QLandkarte GT Datenbank importieren.</translation>
+ <translation>Datenbankimport aus QLandkarte</translation>
</message>
<message>
<source>Setup Database</source>
<translation type="obsolete">Datenbank einrichten</translation>
</message>
+ <message>
+ <source>Import Database</source>
+ <translation type="obsolete">Datenbank importieren</translation>
+ </message>
+ <message>
+ <location filename="../IMainWindow.ui" line="463"/>
+ <source>Import QLandkarte GT database</source>
+ <translation>QLandkarte Gt Datenbank importieren</translation>
+ </message>
</context>
<context>
<name>IMapList</name>
@@ -2817,13 +2857,19 @@ sein</translation>
</message>
<message>
<location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="54"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="65"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="83"/>
<source>...</source>
<translation></translation>
</message>
<message>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+ <source>Copy area into another project.</source>
+ <translation>Fläche in ein anderes Projekt kopieren.</translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="112"/>
<source>TextLabel</source>
<translation>Bezeichnung</translation>
</message>
@@ -2852,7 +2898,7 @@ sein</translation>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="49"/>
<source>Select a range of points.</source>
- <translation>Punktebereich wählen.</translation>
+ <translation>Wähle einen Punktebereich.</translation>
</message>
<message>
<location filename="../mouse/IScrOptPoint.ui" line="63"/>
@@ -2945,21 +2991,27 @@ sein</translation>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="28"/>
<source><html><head/><body><p>View details & Edit</p></body></html></source>
- <translation><html><head/><body><p>Details anzeigen & Bearbeiten</p></body></html></translation>
+ <translation><html><head/><body><p>Details anzeigen; Bearbeiten</p></body></html></translation>
</message>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="31"/>
<location filename="../gis/rte/IScrOptRte.ui" line="45"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="59"/>
<source>...</source>
<translation></translation>
</message>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="42"/>
+ <source>Copy route into another project.</source>
+ <translation>Route in ein anderes Projekt kopieren.</translation>
+ </message>
+ <message>
+ <location filename="../gis/rte/IScrOptRte.ui" line="56"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Löschen</p></body></html></translation>
</message>
<message>
- <location filename="../gis/rte/IScrOptRte.ui" line="71"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="85"/>
<source>TextLabel</source>
<translation>Bezeichnung</translation>
</message>
@@ -2977,37 +3029,42 @@ sein</translation>
<translation>Detailansicht & Trackeigenschaften bearbeiten.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <source>Copy track into another project.</source>
+ <translation>Track in ein anderes Projekt kopieren.</translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="68"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="89"/>
<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="148"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="162"/>
<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="120"/>
<source>Edit position of track points.</source>
<translation>Position von Trackpunkten bearbeiten.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
<source>Select a range of points.</source>
- <translation>Einen Punktebereich wählen.</translation>
+ <translation>Wähle einen Punktebereich.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
<source>Reverse track.</source>
<translation>Track umkehren.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>Combine tracks.</source>
<translation>Tracks verbinden.</translation>
</message>
@@ -3022,12 +3079,13 @@ 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="74"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="123"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="137"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="151"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="165"/>
<source>...</source>
<translation></translation>
</message>
@@ -3048,7 +3106,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="177"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="191"/>
<source>TextLabel</source>
<translation>Bezeichnung</translation>
</message>
@@ -3068,31 +3126,88 @@ sein</translation>
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="52"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="66"/>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="87"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="80"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="101"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="115"/>
<source>...</source>
<translation></translation>
</message>
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="63"/>
+ <source>Copy waypoint into another project.</source>
+ <translation>Wegpunkt in ein anderes Projekt kopieren.</translation>
+ </message>
+ <message>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="77"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Löschen</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="84"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
<source><html><head/><body><p>Move waypoint to a new location.</p></body></html></source>
<translation><html><head/><body><p>Wegpunkt verschieben.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="112"/>
<source><html><head/><body><p>Clone waypoint and move clone a given distance and angle.</p></body></html></source>
<translation><html><head/><body><p>Wegpunkt kopieren und unter Angabe von Entfernung und Winkel verschieben.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="145"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="159"/>
+ <source>TextLabel</source>
+ <translation>Bezeichnung</translation>
+ </message>
+</context>
+<context>
+ <name>ISelectCopyAction</name>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="14"/>
+ <source>Copy item...</source>
+ <translation>Elemente kopieren...</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="23"/>
+ <source>Replace existing item</source>
+ <translation>Bestehendes Element ersetzen</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="30"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="40"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="67"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="77"/>
<source>TextLabel</source>
<translation>Bezeichnung</translation>
</message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="60"/>
+ <source>Do not copy item</source>
+ <translation>Element nicht kopieren</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="97"/>
+ <source>Create a clone</source>
+ <translation>Einen Klon erstellen</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="104"/>
+ <source>Replace with:</source>
+ <translation>Ersetzen mit:</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="111"/>
+ <source>Keep item:</source>
+ <translation>Element behalten:</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="118"/>
+ <source>The clone's name will be appended with '_Clone'</source>
+ <translation>Der Name das Klones wird mit '_Klon' erweitert</translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="132"/>
+ <source>And for all other items, too.</source>
+ <translation>Und auch für alle weiteren Elemente.</translation>
+ </message>
</context>
<context>
<name>ISelectProjectDialog</name>
@@ -3181,7 +3296,7 @@ sein</translation>
<message>
<location filename="../gis/db/ISetupDatabase.ui" line="60"/>
<source>Open existing database.</source>
- <translation>Existierende Datenbank öffnen.</translation>
+ <translation>Öffne eine vorhandene DAtenbank.</translation>
</message>
</context>
<context>
@@ -3209,7 +3324,7 @@ sein</translation>
<message>
<location filename="../gis/db/ISetupFolder.ui" line="59"/>
<source>Other</source>
- <translation>Andere</translation>
+ <translation>Sonstige</translation>
</message>
</context>
<context>
@@ -3222,7 +3337,7 @@ sein</translation>
<message>
<location filename="../gis/db/ISetupWorkspace.ui" line="35"/>
<source>save workspace on exit, and every</source>
- <translation>Den Arbeitsplatz beim Beenden speichern, und alle</translation>
+ <translation>Ansicht beim Beenden speichern, und alle</translation>
</message>
<message>
<location filename="../gis/db/ISetupWorkspace.ui" line="45"/>
@@ -3262,7 +3377,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="266"/>
<source>Ctrl+Z</source>
- <translation>Strg+Z</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="275"/>
@@ -3272,7 +3387,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="278"/>
<source>Ctrl+Shift+Z</source>
- <translation>Strg+Shift+Z</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="287"/>
@@ -3282,7 +3397,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="290"/>
<source>Ctrl+X</source>
- <translation>Strg+X</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="299"/>
@@ -3292,7 +3407,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="302"/>
<source>Ctrl+C</source>
- <translation>Strg+C</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="311"/>
@@ -3302,7 +3417,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="314"/>
<source>Ctrl+V</source>
- <translation>Strg+V</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="326"/>
@@ -3312,7 +3427,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="329"/>
<source>Ctrl+L</source>
- <translation>Strg+L</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="341"/>
@@ -3322,7 +3437,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="344"/>
<source>Ctrl+R</source>
- <translation>Strg+R</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="356"/>
@@ -3332,7 +3447,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="359"/>
<source>Ctrl+E</source>
- <translation>Strg+E</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="371"/>
@@ -3342,7 +3457,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="374"/>
<source>Ctrl+J</source>
- <translation>Strg+J</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="386"/>
@@ -3352,7 +3467,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="389"/>
<source>Ctrl+U</source>
- <translation>Strg+U</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="401"/>
@@ -3362,7 +3477,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="404"/>
<source>Ctrl+B</source>
- <translation>Strg+B</translation>
+ <translation></translation>
</message>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="416"/>
@@ -3372,7 +3487,7 @@ sein</translation>
<message>
<location filename="../helpers/ITextEditWidget.ui" line="419"/>
<source>Ctrl+I</source>
- <translation>Strg+I</translation>
+ <translation></translation>
</message>
</context>
<context>
@@ -3487,70 +3602,76 @@ Areas: %1</source>
<translation type="obsolete">Fläche: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="163"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="168"/>
<source><br/>
Filename: %1</source>
<translation><br/>
Dateiname: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="180"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="185"/>
<source>Waypoints: %1</source>
<translation>Wegpunkte: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="184"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="189"/>
<source>Tracks: %1</source>
<translation>Tracks: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="188"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="193"/>
<source>Routes: %1</source>
<translation>Routen: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="192"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="197"/>
<source>Areas: %1</source>
<translation>Flächen: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="250"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="255"/>
<source>Are you sure you want to delete '%1' from project '%2'?</source>
<translation>Sind Sie sicher, dass Sie '%1' aus dem Projekt '%2' löschen wollen? </translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="251"/>
+ <location filename="../gis/CGisListDB.cpp" line="410"/>
+ <source>Are you sure you want to delete '%1' from folder '%2'?</source>
+ <translation>Sind Sie sicher, dass Sie '%1' aus dem Ordner '%2' löschen wollen? </translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="411"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="256"/>
<source>Delete...</source>
<translation>Löschen...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open...</source>
<translation>Öffnen fehlgeschlagen...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open %1</source>
<translation>Öffnen fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="124"/>
+ <location filename="../gis/db/CDBProject.cpp" line="125"/>
<location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="90"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
<source>Save GIS data to...</source>
<translation>GIS Daten speichern in...</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Save ...</source>
- <translation>Speichern...</translation>
+ <translation>Speichern ...</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Abort save</source>
<translation>Speichern abbrechen</translation>
</message>
@@ -3573,7 +3694,7 @@ Dateiname: %1</translation>
<location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
<location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
<source>Saveing GIS data failed...</source>
- <translation>Speichern der GIS DAten fehlgeschlagen...</translation>
+ <translation>Speichern der GIS Daten fehlgeschlagen...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
@@ -3581,72 +3702,72 @@ Dateiname: %1</translation>
<translation>Datei %1' konnte nicht gespeichert werden</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="267"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
<translation>Wegpunkte geändert, alle vorherigen Daten sind verloren.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="328"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
<source>Length: %1 %2</source>
<translation>Länge: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="341"/>
<source>, %1%2 %3, %4%5 %6</source>
<translation></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="349"/>
<source>Time: %1</source>
<translation>Zeit: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="346"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="352"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
<source>, Speed: %1 %2</source>
<translation>, Geschw.: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Moving: %1</source>
<translation>Bewegung: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Start: %1</source>
<translation>Beginn: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="367"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="373"/>
<source>End: %1</source>
<translation>Ende: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
<source>Points: %1 (%2)</source>
<translation>Punkte: %1 (%2)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="436"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source>Ele.: %1 %2</source>
<translation>Höhe: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="439"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="445"/>
<source> slope: %1%3 (%2%)</source>
- <translation>Neigung: %1%3 (%2%)</translation>
+ <translation> Neigung: %1%3 (%2%)</translation>
</message>
<message>
<source> slope: %1° (%2%)</source>
<translation type="obsolete"> Neigung: %1° (%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="950"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
<source>Hide points.</source>
<translation>Punkte ausblenden.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="984"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
<source>Show points.</source>
<translation>Punkte anzeigen.</translation>
</message>
@@ -3655,185 +3776,193 @@ Dateiname: %1</translation>
<translation type="obsolete">Neigung: %1°(%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="444"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
<source> speed: %1%2</source>
<translation>Geschwindigkeit: %1%2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="456"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="462"/>
<source>Ascend: %1%2 (%3%)</source>
<translation>Anstieg: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
<source>Ascend: - (-)</source>
<translation>Anstieg: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
<source> Descend: %1%2 (%3%)</source>
<translation> Abstieg: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="470"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
<source> Descend: - (-) </source>
<translation> Abstieg: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="483"/>
<source>Dist.: %1%2 (%3%)</source>
<translation>Entf.: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
<source>Dist.: - (-)</source>
<translation>Entf.: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
<source> Moving: %1%2 (%3%)</source>
<translation>Bewegung: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="491"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
<source> Moving: - (-) </source>
<translation> Bewegung: - (-) </translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
<source>thin</source>
<translation>dünn</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
<source>normal</source>
<translation>normal</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
<source>wide</source>
<translation>weit</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="99"/>
<source>strong</source>
<translation>stark</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="400"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="144"/>
+ <location filename="../gis/rte/CGisItemRte.cpp" line="44"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="164"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="103"/>
+ <source>_Clone</source>
+ <translation>_Klon</translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="409"/>
<source>Area: %1%2</source>
<translation>Fläche: %1%2</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="452"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
<source>Changed area shape.</source>
<translation>Flächenform geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="460"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="469"/>
<source>Changed name.</source>
<translation>Name geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="466"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="475"/>
<source>Changed border width.</source>
- <translation>Umrnadungsbreite geändert.</translation>
+ <translation>Umrandungsbreite geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="472"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="481"/>
<source>Changed fill pattern.</source>
<translation>Füllung geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="478"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="487"/>
<source>Changed opacity.</source>
<translation>Durchsichtigkeit geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="484"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="493"/>
<source>Changed comment.</source>
<translation>Kommentar geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="490"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="499"/>
<source>Changed description.</source>
<translation>Beschreibung geändert.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="496"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
<source>Changed links</source>
- <translation>Geänderte Verbindungen</translation>
+ <translation>Geänderte Verknüpfungen</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="508"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
<source>Changed color</source>
<translation>Farbe geändert</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<location filename="../mouse/CMouseEditArea.cpp" line="100"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Edit name...</source>
<translation>Name bearbeiten...</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<source>Enter new waypoint name.</source>
<translation>Name eingeben.</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="225"/>
<source>Elevation: %1 %2</source>
<translation>Höhe: %1 %2</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="227"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="233"/>
<source>Proximity: %1 %2</source>
<translation>Abstand: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1271"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="292"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
<source>Changed name</source>
<translation>Name geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="299"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
<source>Changed position</source>
<translation>Position geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
<source>Changed elevation</source>
<translation>Höhe geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
<source>Changed proximity</source>
<translation>Abstandsalarm geändert</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
<source>Changed icon</source>
<translation>Symbol geändert</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
<source>Changed comment</source>
<translation>Kommentar geändert</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
<source>Changed description</source>
<translation>Beschreibung geändert</translation>
</message>
@@ -3869,60 +3998,60 @@ Dateiname: %1</translation>
<translation>Dieser Dateityp hat eine unbekannte Polyline Kodierung. Bitte mitteilen!</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="284"/>
+ <location filename="../gis/IGisItem.cpp" line="285"/>
<source>Initial version.</source>
<translation>Erstversion.</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="368"/>
+ <location filename="../gis/IGisItem.cpp" line="369"/>
<source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
<translation>Diese Element ist vermutlich schreibgeschützt, da nicht mit QMapShack erstellt. Normalerweise sollten importierte Daten nicht geändert werden. Wenn doch, drücken Sie 'OK'.</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="369"/>
+ <location filename="../gis/IGisItem.cpp" line="370"/>
<source>Read Only Mode...</source>
<translation>Schreibgeschützt...</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="558"/>
+ <location filename="../gis/IGisItem.cpp" line="559"/>
<source><h4>Comment:</h4></source>
<translation><h4>Kommentar:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="561"/>
+ <location filename="../gis/IGisItem.cpp" line="562"/>
<source><p>--- no comment ---</p></source>
<translation><p>--- kein Kommentar ---</p></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="568"/>
- <location filename="../gis/IGisItem.cpp" line="598"/>
+ <location filename="../gis/IGisItem.cpp" line="569"/>
+ <location filename="../gis/IGisItem.cpp" line="599"/>
<source><h4>Description:</h4></source>
<translation><h4>Beschreibung:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="571"/>
- <location filename="../gis/IGisItem.cpp" line="601"/>
+ <location filename="../gis/IGisItem.cpp" line="572"/>
+ <location filename="../gis/IGisItem.cpp" line="602"/>
<source><p>--- no description ---</p></source>
<translation><p>--- keine Beschreibung ---</p></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="578"/>
- <location filename="../gis/IGisItem.cpp" line="608"/>
+ <location filename="../gis/IGisItem.cpp" line="579"/>
+ <location filename="../gis/IGisItem.cpp" line="609"/>
<source><h4>Links:</h4></source>
- <translation><h4>Verbindungen:</h4></translation>
+ <translation><h4>Verknüpfungen:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="581"/>
- <location filename="../gis/IGisItem.cpp" line="611"/>
+ <location filename="../gis/IGisItem.cpp" line="582"/>
+ <location filename="../gis/IGisItem.cpp" line="612"/>
<source><p>--- no links ---</p></source>
- <translation><h4>keine Verbindungen:</h4></translation>
+ <translation><p>--- keine Verknüpfungen ---</p></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Enter new track name.</source>
<translation>Name eingeben.</translation>
@@ -3933,26 +4062,30 @@ Dateiname: %1</translation>
<translation>Name eingeben.</translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderDatabase.cpp" line="26"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="28"/>
+ <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
<source>All your data grouped by folders.</source>
- <translation>Alle Ihre Daten nach Ordnern gruppiert.</translation>
+ <translation>Alle Daten nach Ordnern gruppiert.</translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="29"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="63"/>
+ <source>Database</source>
+ <translation type="obsolete">Datenbank</translation>
+ </message>
+ <message>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="67"/>
+ <location filename="../gis/db/CLostFoundProject.cpp" line="39"/>
<source>Lost & Found</source>
<translation>Verloren & Gefunden</translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="58"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="62"/>
<source>Lost & Found (%1)</source>
<translation>Verloren & Gefunden (%1)</translation>
</message>
<message>
<location filename="../qlgt/converter.cpp" line="196"/>
<source>Copy flag information from QLandkarte GT track</source>
- <translation>Flaginformation aus dem QLandkarte GT track kopiert</translation>
+ <translation>Kopiert das Informationsflag aus dem QLandkarte GT Track</translation>
</message>
<message>
<location filename="../qlgt/CQlgtTrack.cpp" line="158"/>
@@ -3960,23 +4093,23 @@ Dateiname: %1</translation>
<location filename="../qlgt/CQlgtTrack.cpp" line="259"/>
<location filename="../qlgt/CQlgtTrack.cpp" line="285"/>
<source>Corrupt track ...</source>
- <translation>Korrupter Track...</translation>
+ <translation>Beschädigter Track ...</translation>
</message>
<message>
<location filename="../qlgt/CQlgtTrack.cpp" line="158"/>
<source>Number of trackpoints is not equal the number of training data trackpoints.</source>
- <translation></translation>
+ <translation>Anzahl der Trackpunkte entspricht nicht der Anzahl der Trackpunkte der Trainingsdaten.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtTrack.cpp" line="212"/>
<source>Number of trackpoints is not equal the number of extended data trackpoints.</source>
- <translation></translation>
+ <translation>Anzahl der Trackpunkte entspricht nicht der Anzahl der erweiterten Trackpunkte.</translation>
</message>
<message>
<location filename="../qlgt/CQlgtTrack.cpp" line="259"/>
<location filename="../qlgt/CQlgtTrack.cpp" line="285"/>
<source>Number of trackpoints is not equal the number of shadow data trackpoints.</source>
- <translation></translation>
+ <translation>Anzahl der Trackpunkte entspricht nicht der Anzahl der ausgeblendeten Trackpunkte.</translation>
</message>
</context>
</TS>
diff --git a/src/locale/qmapshack_es.ts b/src/locale/qmapshack_es.ts
index 5958546..1e8dda3 100644
--- a/src/locale/qmapshack_es.ts
+++ b/src/locale/qmapshack_es.ts
@@ -223,135 +223,152 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="82"/>
- <source>Remove Database</source>
+ <location filename="../gis/CGisListDB.cpp" line="81"/>
+ <location filename="../gis/CGisListDB.cpp" line="91"/>
+ <source>Delete Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gis/CGisListDB.cpp" line="85"/>
+ <source>Remove Database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="88"/>
<source>Empty</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Remove database...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="228"/>
+ <location filename="../gis/CGisListDB.cpp" line="254"/>
<source>Do you realy want to remove '%1' from the list?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Delete database folder...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="269"/>
+ <location filename="../gis/CGisListDB.cpp" line="295"/>
<source>Are you sure you want to delete "%1" from the database?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
<source>Remove items...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListDB.cpp" line="295"/>
+ <location filename="../gis/CGisListDB.cpp" line="321"/>
<source>Are you sure you want to delete all items from Lost&Found? This will remove them permanently.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="336"/>
+ <source>Are you sure you want to delete all selected items from Lost&Found? This will remove them permanently.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>CGisListWks</name>
<message>
- <location filename="../gis/CGisListWks.cpp" line="81"/>
+ <location filename="../gis/CGisListWks.cpp" line="83"/>
<source>Save</source>
<translation>Guardar</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="80"/>
+ <location filename="../gis/CGisListWks.cpp" line="82"/>
<source>Save As...</source>
<translation>Guardar Como...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="82"/>
+ <location filename="../gis/CGisListWks.cpp" line="84"/>
<source>Edit..</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="83"/>
+ <location filename="../gis/CGisListWks.cpp" line="85"/>
<source>Close</source>
<translation>Cerrar</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="89"/>
+ <location filename="../gis/CGisListWks.cpp" line="91"/>
<source>Edit...</source>
<translation>Editar...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="90"/>
+ <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <source>Copy to...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListWks.cpp" line="104"/>
<source>Move Waypoint</source>
<translation>Mover Waypoint</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="91"/>
+ <location filename="../gis/CGisListWks.cpp" line="105"/>
<source>Proj. Waypoint...</source>
<translation>Proyectar Waypoint...</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="92"/>
+ <location filename="../gis/CGisListWks.cpp" line="93"/>
<source>Track Profile</source>
<translation>Perfil del Track</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="93"/>
+ <location filename="../gis/CGisListWks.cpp" line="95"/>
<source>Select Range</source>
<translation>Seleccionar Rango</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="94"/>
+ <location filename="../gis/CGisListWks.cpp" line="96"/>
<source>Edit Track Points</source>
<translation>Editar Puntos del Track</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="95"/>
+ <location filename="../gis/CGisListWks.cpp" line="97"/>
<source>Reverse Track</source>
<translation>Invertir Track</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="96"/>
+ <location filename="../gis/CGisListWks.cpp" line="98"/>
<source>Combine Tracks</source>
<translation>Combinar Tracks</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="97"/>
+ <location filename="../gis/CGisListWks.cpp" line="117"/>
<source>Edit Area Points</source>
<translation>Editar Puntos del Área</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="100"/>
+ <location filename="../gis/CGisListWks.cpp" line="99"/>
<source>Delete</source>
<translation>Borrar</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="621"/>
+ <location filename="../gis/CGisListWks.cpp" line="567"/>
<source>Saving workspace. Please wait.</source>
<translation>Guardando espacio de trabajo. Por favor espere.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="662"/>
+ <location filename="../gis/CGisListWks.cpp" line="608"/>
<source>Loading workspace. Please wait.</source>
<translation>Cargando espacio de trabajo. Por favor espere.</translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>Close all projects...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/CGisListWks.cpp" line="1070"/>
+ <location filename="../gis/CGisListWks.cpp" line="1003"/>
<source>This will remove all projects from the workspace.</source>
<translation type="unfinished"></translation>
</message>
@@ -2082,17 +2099,13 @@ no es una definición de sistema de coordenadas válido:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="62"/>
- <source>State</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../gis/IGisWidget.ui" line="94"/>
+ <location filename="../gis/IGisWidget.ui" line="65"/>
+ <location filename="../gis/IGisWidget.ui" line="97"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisWidget.ui" line="127"/>
+ <location filename="../gis/IGisWidget.ui" line="130"/>
<source>To add a database do a right click on the database list above.</source>
<translation type="unfinished"></translation>
</message>
@@ -2728,13 +2741,19 @@ o
</message>
<message>
<location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="54"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="65"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="83"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
- <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+ <source>Copy area into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/IScrOptOvlArea.ui" line="112"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
@@ -2849,16 +2868,22 @@ o
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="31"/>
<location filename="../gis/rte/IScrOptRte.ui" line="45"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="59"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
<location filename="../gis/rte/IScrOptRte.ui" line="42"/>
+ <source>Copy route into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/rte/IScrOptRte.ui" line="56"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Borrar</p></body></html></translation>
</message>
<message>
- <location filename="../gis/rte/IScrOptRte.ui" line="71"/>
+ <location filename="../gis/rte/IScrOptRte.ui" line="85"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
@@ -2876,54 +2901,60 @@ o
<translation>Ver detalles & Editar las propiedades del track.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="68"/>
<source>Delete</source>
<translation>Borrar.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="89"/>
<source>Show on-screen profile and detailed information about points.</source>
<translation>Mostrar el perfil en pantalla e información detallada de los puntos.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="162"/>
<source>Cut track at selected point into two tracks.</source>
<translation>Partir el track en dos en el punto seleccionado.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
<source>Edit position of track points.</source>
<translation>Editar la posición de los puntos del track.</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="74"/>
- <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="71"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="123"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="137"/>
<location filename="../gis/trk/IScrOptTrk.ui" line="151"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="165"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+ <source>Copy track into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
<source>Select a range of points.</source>
<translation type="unfinished">Selecciones un rango de puntos.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="120"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
<source>Reverse track.</source>
<translation>Invertir track.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="134"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="148"/>
<source>Combine tracks.</source>
<translation>Combinar tracks.</translation>
</message>
<message>
- <location filename="../gis/trk/IScrOptTrk.ui" line="177"/>
+ <location filename="../gis/trk/IScrOptTrk.ui" line="191"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
@@ -2943,31 +2974,88 @@ o
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="52"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="66"/>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="87"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="80"/>
<location filename="../gis/wpt/IScrOptWpt.ui" line="101"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="115"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
<location filename="../gis/wpt/IScrOptWpt.ui" line="63"/>
+ <source>Copy waypoint into another project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="77"/>
<source><html><head/><body><p>Delete</p></body></html></source>
<translation><html><head/><body><p>Borrar</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="84"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
<source><html><head/><body><p>Move waypoint to a new location.</p></body></html></source>
<translation><html><head/><body><p>Mover el waypoint a una nueva ubicación.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="112"/>
<source><html><head/><body><p>Clone waypoint and move clone a given distance and angle.</p></body></html></source>
<translation><html><head/><body><p>Clonar el waypoibt y moverlo una cierta distancia y ángulo.</p></body></html></translation>
</message>
<message>
- <location filename="../gis/wpt/IScrOptWpt.ui" line="145"/>
+ <location filename="../gis/wpt/IScrOptWpt.ui" line="159"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ISelectCopyAction</name>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="14"/>
+ <source>Copy item...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="23"/>
+ <source>Replace existing item</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="30"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="40"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="67"/>
+ <location filename="../helpers/ISelectCopyAction.ui" line="77"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="60"/>
+ <source>Do not copy item</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="97"/>
+ <source>Create a clone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="104"/>
+ <source>Replace with:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="111"/>
+ <source>Keep item:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="118"/>
+ <source>The clone's name will be appended with '_Clone'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../helpers/ISelectCopyAction.ui" line="132"/>
+ <source>And for all other items, too.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ISelectProjectDialog</name>
@@ -3371,69 +3459,75 @@ Areas: %1</source>
Áreas: %1</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="163"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="168"/>
<source><br/>
Filename: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="180"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="185"/>
<source>Waypoints: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="184"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="189"/>
<source>Tracks: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="188"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="193"/>
<source>Routes: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="192"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="197"/>
<source>Areas: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="250"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="255"/>
<source>Are you sure you want to delete '%1' from project '%2'?</source>
<translation>¿Está seguro de que quiere borrar '%1' del proyecto '%2'?</translation>
</message>
<message>
- <location filename="../gis/prj/IGisProject.cpp" line="251"/>
+ <location filename="../gis/CGisListDB.cpp" line="410"/>
+ <source>Are you sure you want to delete '%1' from folder '%2'?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/CGisListDB.cpp" line="411"/>
+ <location filename="../gis/prj/IGisProject.cpp" line="256"/>
<source>Delete...</source>
<translation>Borrar...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open...</source>
<translation>Fallo al abrir...</translation>
</message>
<message>
<location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="47"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="135"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
<source>Failed to open %1</source>
<translation>Fallo al abrir %1</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="124"/>
+ <location filename="../gis/db/CDBProject.cpp" line="125"/>
<location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
- <location filename="../gis/qms/CQmsProject.cpp" line="90"/>
+ <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
<source>Save GIS data to...</source>
<translation>Guardar los datos GIS en...</translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Save ...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBProject.cpp" line="153"/>
+ <location filename="../gis/db/CDBProject.cpp" line="154"/>
<source>Abort save</source>
<translation type="unfinished"></translation>
</message>
@@ -3464,251 +3558,259 @@ Filename: %1</source>
<translation>Fallo al escribir en el archivo '%1'</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="328"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
<source>Length: %1 %2</source>
<translation>Longitud: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="341"/>
<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="343"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="349"/>
<source>Time: %1</source>
<translation>Tiempo: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="346"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="352"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
<source>, Speed: %1 %2</source>
<translation>, Velocidad: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="359"/>
<source>Moving: %1</source>
<translation>En movimiento: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
<source>Start: %1</source>
<translation>Comienzo: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="367"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="373"/>
<source>End: %1</source>
<translation>Final: %1</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
<source>Points: %1 (%2)</source>
<translation>Puntos: %1 (%2)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="436"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="442"/>
<source>Ele.: %1 %2</source>
<translation>Altitud: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="439"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="445"/>
<source> slope: %1%3 (%2%)</source>
<translation> pendiente: %1%3 (%2%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="444"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
<source> speed: %1%2</source>
<translation> velocidad: %1%2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="456"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="462"/>
<source>Ascend: %1%2 (%3%)</source>
<translation>Ascenso: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
<source>Ascend: - (-)</source>
<translation>Ascenso: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="470"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
<source> Descend: - (-) </source>
<translation> Descenso: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="491"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
<source> Moving: - (-) </source>
<translation> En movimiento: - (-) </translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="950"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
<source>Hide points.</source>
<translation>Ocultar puntos.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="984"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
<source>Show points.</source>
<translation>Mostrar puntos.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="466"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
<source> Descend: %1%2 (%3%)</source>
<translation> Descenso: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="267"/>
<source>Changed trackpoints, sacrificed all previous data.</source>
<translation>Se cambiaron los puntos del track, y descartados todos los datos previos.</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="483"/>
<source>Dist.: %1%2 (%3%)</source>
<translation>Distancia: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
<source>Dist.: - (-)</source>
<translation>Dist.: - (-)</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="487"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
<source> Moving: %1%2 (%3%)</source>
<translation> En movimiento: %1%2 (%3%)</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
<source>thin</source>
<translation>fino</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
<source>normal</source>
<translation>normal</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
<source>wide</source>
<translation>ancho</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="98"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="99"/>
<source>strong</source>
<translation>intenso</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="400"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="144"/>
+ <location filename="../gis/rte/CGisItemRte.cpp" line="44"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="164"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="103"/>
+ <source>_Clone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="409"/>
<source>Area: %1%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="452"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
<source>Changed area shape.</source>
<translation>Se cambió la forma del área.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="460"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="469"/>
<source>Changed name.</source>
<translation>Se cambió el nombre.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="466"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="475"/>
<source>Changed border width.</source>
<translation>Se cambió la anchura del borde.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="472"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="481"/>
<source>Changed fill pattern.</source>
<translation>Se cambió el patró de relleno.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="478"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="487"/>
<source>Changed opacity.</source>
<translation>Se cambió la opacidad.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="484"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="493"/>
<source>Changed comment.</source>
<translation>Se cambió el comentario.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="490"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="499"/>
<source>Changed description.</source>
<translation>Se cambió la descripción.</translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="496"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
<source>Changed links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="508"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+ <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
<source>Changed color</source>
<translation>Se cambió el color</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="225"/>
<source>Elevation: %1 %2</source>
<translation>Altitud: %1 %2</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="227"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="233"/>
<source>Proximity: %1 %2</source>
<translation>Proximidad: %1 %2</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1271"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="292"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
<source>Changed name</source>
<translation>Se cambió el nombre</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<location filename="../mouse/CMouseEditArea.cpp" line="100"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Edit name...</source>
<translation>Editar nombre...</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="173"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
<source>Enter new waypoint name.</source>
<translation>Introduzca el nuevo nombre del waypoint.</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="299"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
<source>Changed position</source>
<translation>Se cambió la posición</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="305"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
<source>Changed elevation</source>
<translation>Se cambió la altitud</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="311"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
<source>Changed proximity</source>
<translation>Se cambió la proximidad</translation>
</message>
<message>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
<source>Changed icon</source>
<translation>Se cambió el icono</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
<source>Changed comment</source>
<translation>Se cambió el comentario</translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
- <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+ <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
<source>Changed description</source>
<translation>Se cambió la descripción</translation>
</message>
@@ -3744,60 +3846,60 @@ Filename: %1</source>
<translation>Este es un fichero TYP con una codificación de polilíneas desconocida. ¡Por favor repórtelo!</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="284"/>
+ <location filename="../gis/IGisItem.cpp" line="285"/>
<source>Initial version.</source>
<translation>Versión inicial</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="368"/>
+ <location filename="../gis/IGisItem.cpp" line="369"/>
<source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
<translation>Este elemento probablemente sea de sólo lectura por no haber sido creado por QMapShack. Habitualmente no deseará cambiar los datos importados. De lo contrario, es correcto pulsar 'OK'.</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="369"/>
+ <location filename="../gis/IGisItem.cpp" line="370"/>
<source>Read Only Mode...</source>
<translation>Modo Sólo Lectura...</translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="558"/>
+ <location filename="../gis/IGisItem.cpp" line="559"/>
<source><h4>Comment:</h4></source>
<translation type="unfinished"><h4>Comentario:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="561"/>
+ <location filename="../gis/IGisItem.cpp" line="562"/>
<source><p>--- no comment ---</p></source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="568"/>
- <location filename="../gis/IGisItem.cpp" line="598"/>
+ <location filename="../gis/IGisItem.cpp" line="569"/>
+ <location filename="../gis/IGisItem.cpp" line="599"/>
<source><h4>Description:</h4></source>
<translation type="unfinished"><h4>Descripción:</h4></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="571"/>
- <location filename="../gis/IGisItem.cpp" line="601"/>
+ <location filename="../gis/IGisItem.cpp" line="572"/>
+ <location filename="../gis/IGisItem.cpp" line="602"/>
<source><p>--- no description ---</p></source>
<translation type="unfinished"><p>---sin descripción---</p></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="578"/>
- <location filename="../gis/IGisItem.cpp" line="608"/>
+ <location filename="../gis/IGisItem.cpp" line="579"/>
+ <location filename="../gis/IGisItem.cpp" line="609"/>
<source><h4>Links:</h4></source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/IGisItem.cpp" line="581"/>
- <location filename="../gis/IGisItem.cpp" line="611"/>
+ <location filename="../gis/IGisItem.cpp" line="582"/>
+ <location filename="../gis/IGisItem.cpp" line="612"/>
<source><p>--- no links ---</p></source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="839"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="882"/>
- <location filename="../gis/trk/CGisItemTrk.cpp" line="1009"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
+ <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
<location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
<source>Enter new track name.</source>
<translation>Introduzca el nombre del nuevo track.</translation>
@@ -3808,19 +3910,19 @@ Filename: %1</source>
<translation>Introduzca el nombre del nuevo área.</translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderDatabase.cpp" line="26"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="28"/>
+ <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
<source>All your data grouped by folders.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="29"/>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="63"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="67"/>
+ <location filename="../gis/db/CLostFoundProject.cpp" line="39"/>
<source>Lost & Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gis/db/CDBFolderLostFound.cpp" line="58"/>
+ <location filename="../gis/db/CDBFolderLostFound.cpp" line="62"/>
<source>Lost & Found (%1)</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/mouse/CMouseNormal.cpp b/src/mouse/CMouseNormal.cpp
index 49adba5..020d185 100644
--- a/src/mouse/CMouseNormal.cpp
+++ b/src/mouse/CMouseNormal.cpp
@@ -51,6 +51,20 @@ CMouseNormal::~CMouseNormal()
}
+void CMouseNormal::stopTracking()
+{
+ const IGisItem::key_t& key = CGisItemTrk::getKeyUserFocus();
+ if(!key.item.isEmpty())
+ {
+ CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+ if(trk != 0)
+ {
+ trk->setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseMove);
+ }
+ }
+
+}
+
void CMouseNormal::mousePressEvent(QMouseEvent * e)
{
point = e->pos();
@@ -144,6 +158,7 @@ void CMouseNormal::mouseReleaseEvent(QMouseEvent *e)
stateItemSel = eStateShowItemOptions;
}
+ stopTracking();
}
break;
}
@@ -151,6 +166,7 @@ void CMouseNormal::mouseReleaseEvent(QMouseEvent *e)
{
screenUnclutter->setOrigin(e->pos());
stateItemSel = eStateUnclutterMultiple;
+ stopTracking();
break;
}
case eStateUnclutterMultiple:
diff --git a/src/mouse/CMouseNormal.h b/src/mouse/CMouseNormal.h
index eefb9d2..0c56b85 100644
--- a/src/mouse/CMouseNormal.h
+++ b/src/mouse/CMouseNormal.h
@@ -52,6 +52,9 @@ class CMouseNormal : public IMouse
void slotCopyPosition();
protected:
+ void stopTracking();
+
+
/// the flag is true if the map moving is in progress
bool mapMove;
/// the flag is true if the map has been moved actually
diff --git a/src/mouse/CScrOptUnclutter.cpp b/src/mouse/CScrOptUnclutter.cpp
index 09837f7..f28961c 100644
--- a/src/mouse/CScrOptUnclutter.cpp
+++ b/src/mouse/CScrOptUnclutter.cpp
@@ -18,6 +18,7 @@
#include "mouse/CScrOptUnclutter.h"
#include "gis/IGisItem.h"
+#include "gis/trk/CGisItemTrk.h"
#include "CMainWindow.h"
#include "canvas/CCanvas.h"
diff --git a/src/resources.qrc b/src/resources.qrc
index 0c280ae..82be419 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -82,6 +82,7 @@
<file>icons/32x32/Cut.png</file>
<file>icons/32x32/CutHistory.png</file>
<file>icons/32x32/Copy.png</file>
+ <file>icons/32x32/Move.png</file>
<file>icons/32x32/Paste.png</file>
<file>icons/32x32/TextLeft.png</file>
<file>icons/32x32/TextRight.png</file>
@@ -189,6 +190,7 @@
<file>icons/48x48/Cut.png</file>
<file>icons/48x48/CutHistory.png</file>
<file>icons/48x48/Copy.png</file>
+ <file>icons/48x48/Move.png</file>
<file>icons/48x48/Paste.png</file>
<file>icons/48x48/TextLeft.png</file>
<file>icons/48x48/TextRight.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