diff -Nru qmapshack-1.8.1/changelog.txt qmapshack-1.9.0/changelog.txt --- qmapshack-1.8.1/changelog.txt 2017-05-14 10:33:50.000000000 +0000 +++ qmapshack-1.9.0/changelog.txt 2017-07-24 15:46:11.000000000 +0000 @@ -1,3 +1,16 @@ +V 1.9.0 +Add: Garmin Maps: Allow external TYP files +Add: Filter items on workspace by string +Add: GPX: Support for Cluetrust extensions +Add: Trk: Add filter to add terrain slope as extension +Fix: Issue with time zone in fit files (Zulu instead of local time zone) +Fix: GeoCaches: Fix regex to find attached images +[Issue #84] Have a floating toolbar with common tools +[Issue #232] Zoom on touchscreen using two fingers is very jumpy +[Issue #226] Display slope under cursor in status bar +[Issue #230] New layout of edit toolbar and POI highlighting +[Issue #229] Failure to add point to track + V 1.8.1 Fix: Various glitches introduced by the new FIT format Fix: Visual tile artefacts in the DEM layer diff -Nru qmapshack-1.8.1/CMakeLists.txt qmapshack-1.9.0/CMakeLists.txt --- qmapshack-1.8.1/CMakeLists.txt 2017-05-14 10:14:03.000000000 +0000 +++ qmapshack-1.9.0/CMakeLists.txt 2017-07-24 15:46:11.000000000 +0000 @@ -30,8 +30,8 @@ set(APPLICATION_NAME qmapshack) set(APPLICATION_VERSION_MAJOR "1") -set(APPLICATION_VERSION_MINOR "8") -set(APPLICATION_VERSION_PATCH "1") +set(APPLICATION_VERSION_MINOR "9") +set(APPLICATION_VERSION_PATCH "0") add_definitions(-DVER_MAJOR=${APPLICATION_VERSION_MAJOR} -DVER_MINOR=${APPLICATION_VERSION_MINOR} -DVER_STEP=${APPLICATION_VERSION_PATCH} -DAPPLICATION_NAME=${PROJECT_NAME}) diff -Nru qmapshack-1.8.1/CMakeLists.txt.user qmapshack-1.9.0/CMakeLists.txt.user --- qmapshack-1.8.1/CMakeLists.txt.user 2017-05-13 18:12:37.000000000 +0000 +++ qmapshack-1.9.0/CMakeLists.txt.user 2017-07-23 14:04:11.000000000 +0000 @@ -1,6 +1,6 @@ - + EnvironmentId @@ -68,7 +68,7 @@ BUILD_FOR_LOCAL_SYSTEM:BOOL=ON - CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-5 + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo UPDATE_TRANSLATIONS:BOOL=OFF /home/oeichler/Code/cpp/build_QMapShack @@ -228,7 +228,7 @@ /home/oeichler/Code/cpp/build_QMapShack/bin -1 - qttest + qttest (deaktiviert) CMakeProjectManager.CMakeRunConfiguration.qttest 3768 diff -Nru qmapshack-1.8.1/debian/changelog qmapshack-1.9.0/debian/changelog --- qmapshack-1.8.1/debian/changelog 2017-07-15 14:03:45.000000000 +0000 +++ qmapshack-1.9.0/debian/changelog 2017-07-24 16:11:29.000000000 +0000 @@ -1,14 +1,9 @@ -qmapshack (1.8.1-1build2) artful; urgency=medium +qmapshack (1.9.0-1) unstable; urgency=medium - * No-change rebuild against latest alglib + * New upstream release. + * Update gbp.conf to use common configuration. - -- Jeremy Bicha Sat, 15 Jul 2017 10:03:45 -0400 - -qmapshack (1.8.1-1build1) artful; urgency=medium - - * Rebuild against new gdal ABI. - - -- Gianfranco Costamagna Thu, 13 Jul 2017 13:33:45 +0200 + -- Bas Couwenberg Mon, 24 Jul 2017 18:11:29 +0200 qmapshack (1.8.1-1) unstable; urgency=medium diff -Nru qmapshack-1.8.1/debian/gbp.conf qmapshack-1.9.0/debian/gbp.conf --- qmapshack-1.8.1/debian/gbp.conf 2016-12-24 10:43:04.000000000 +0000 +++ qmapshack-1.9.0/debian/gbp.conf 2017-07-02 14:23:25.000000000 +0000 @@ -1,3 +1,16 @@ [DEFAULT] + +# The default name for the upstream branch is "upstream". +# Change it if the name is different (for instance, "master"). +upstream-branch = upstream + +# The default name for the Debian branch is "master". +# Change it if the name is different (for instance, "debian/unstable"). +debian-branch = master + +# git-import-orig uses the following names for the upstream tags. +# Change the value if you are not using git-import-orig +upstream-tag = upstream/%(version)s + +# Always use pristine-tar. pristine-tar = True -compression = gz diff -Nru qmapshack-1.8.1/src/canvas/CCanvas.cpp qmapshack-1.9.0/src/canvas/CCanvas.cpp --- qmapshack-1.8.1/src/canvas/CCanvas.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/canvas/CCanvas.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -156,6 +156,15 @@ QApplication::changeOverrideCursor(cursor); } +void CCanvas::triggerCompleteUpdate(CCanvas::redraw_e flags) +{ + CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); + if(canvas) + { + canvas->slotTriggerCompleteUpdate(flags); + } +} + void CCanvas::saveConfig(QSettings& cfg) { map->saveConfig(cfg); @@ -397,7 +406,8 @@ QPointF pos = e->pos(); map->convertPx2Rad(pos); qreal ele = dem->getElevationAt(pos); - emit sigMousePosition(pos * RAD_TO_DEG, ele); + qreal slope = dem->getSlopeAt(pos); + emit sigMousePosition(pos * RAD_TO_DEG, ele, slope); mouse->mouseMoveEvent(e); QWidget::mouseMoveEvent(e); @@ -773,6 +783,16 @@ return dem->getElevationAt(pos, ele); } +qreal CCanvas::getSlopeAt(const QPointF& pos) const +{ + return dem->getSlopeAt(pos); +} + +void CCanvas::getSlopeAt(const QPolygonF& pos, QPolygonF& slope) const +{ + return dem->getSlopeAt(pos, slope); +} + void CCanvas::getElevationAt(SGisLine& line) const { return dem->getElevationAt(line); @@ -944,20 +964,33 @@ { if (QPinchGesture *pinch = dynamic_cast(e->gesture(Qt::PinchGesture))) { - if (pinch->totalChangeFlags() & QPinchGesture::ScaleFactorChanged) + if (pinch->changeFlags() & QPinchGesture::CenterPointChanged) { - QPointF pos = pinch->centerPoint(); - QPointF pt1 = pos; - - map->convertPx2Rad(pt1); - setZoom(pinch->lastScaleFactor() < pinch->scaleFactor(), needsRedraw); - map->convertRad2Px(pt1); - - map->convertRad2Px(posFocus); - posFocus -= (pos - pt1); - map->convertPx2Rad(posFocus); - - update(); + const QPointF & move = pinch->centerPoint() - pinch->lastCenterPoint(); + if (!move.isNull()) + { + moveMap(move); + } + } + if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged) + { + qreal pscale = pinch->totalScaleFactor(); + if (pscale < 0.8f || pscale > 1.25f) + { + const QPointF & center = pinch->centerPoint(); + const QPointF & pos = mapFromGlobal(QPoint(center.x(),center.y())); + QPointF pt1 = pos; + map->convertPx2Rad(pt1); + setZoom(pscale > 1.0f, needsRedraw); + map->convertRad2Px(pt1); + const QPointF & move = pos - pt1; + if (!move.isNull()) + { + moveMap(move); + } + pinch->setTotalScaleFactor(1.0f); + slotTriggerCompleteUpdate(needsRedraw); + } } } return true; diff -Nru qmapshack-1.8.1/src/canvas/CCanvas.h qmapshack-1.9.0/src/canvas/CCanvas.h --- qmapshack-1.8.1/src/canvas/CCanvas.h 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/canvas/CCanvas.h 2017-07-23 13:41:03.000000000 +0000 @@ -58,6 +58,7 @@ static void restoreOverrideCursor(const QString &src); static void changeOverrideCursor(const QCursor& cursor, const QString &src); + void saveConfig(QSettings& cfg); void loadConfig(QSettings& cfg); @@ -85,6 +86,9 @@ void getElevationAt(const QPolygonF& pos, QPolygonF &ele) const; void getElevationAt(SGisLine &line) const; + qreal getSlopeAt(const QPointF &pos) const; + void getSlopeAt(const QPolygonF& pos, QPolygonF& slope) const; + void moveMap(const QPointF &delta); void zoomTo(const QRectF& rect); void displayInfo(const QPoint& px); @@ -100,6 +104,8 @@ , eRedrawAll = 0xFFFFFFFF }; + static void triggerCompleteUpdate(CCanvas::redraw_e flags); + void resetMouse(); void setMouseMoveWpt(CGisItemWpt& wpt); @@ -148,7 +154,7 @@ static qreal gisLayerOpacity; signals: - void sigMousePosition(const QPointF& pos, qreal ele); + void sigMousePosition(const QPointF& pos, qreal ele, qreal slope); void sigZoom(); void sigMove(); diff -Nru qmapshack-1.8.1/src/canvas/IDrawObject.cpp qmapshack-1.9.0/src/canvas/IDrawObject.cpp --- qmapshack-1.8.1/src/canvas/IDrawObject.cpp 2017-04-17 10:41:19.000000000 +0000 +++ qmapshack-1.9.0/src/canvas/IDrawObject.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -206,8 +206,8 @@ qreal dy1 = pPt[0].y() - pPt[1].y(); qreal dx2 = pPt[0].x() - pPt[3].x(); qreal dy2 = pPt[0].y() - pPt[3].y(); - qreal w = /*qRound*/( qSqrt(dx1*dx1 + dy1*dy1)); - qreal h = /*qRound*/( qSqrt(dx2*dx2 + dy2*dy2)); + qreal w = /*qRound*/ ( qSqrt(dx1*dx1 + dy1*dy1)); + qreal h = /*qRound*/ ( qSqrt(dx2*dx2 + dy2*dy2)); // calculate rotation. This is not really a reprojection but might be good enough for close zoom levels qreal a = qAtan(dy1/dx1) * RAD_TO_DEG; diff -Nru qmapshack-1.8.1/src/CMainWindow.cpp qmapshack-1.9.0/src/CMainWindow.cpp --- qmapshack-1.8.1/src/CMainWindow.cpp 2017-03-26 10:12:43.000000000 +0000 +++ qmapshack-1.9.0/src/CMainWindow.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -1,5 +1,6 @@ /********************************************************************************************** Copyright (C) 2014 Oliver Eichler oliver.eichler@gmx.de + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 @@ -31,6 +32,8 @@ #include "gis/trk/CKnownExtension.h" #include "helpers/CProgressDialog.h" #include "helpers/CSettings.h" +#include "helpers/CToolBarConfig.h" +#include "helpers/CToolBarSetupDialog.h" #include "helpers/CWptIconDialog.h" #include "map/CMapDraw.h" #include "map/CMapItem.h" @@ -115,6 +118,7 @@ connect(actionSetupUnits, &QAction::triggered, this, &CMainWindow::slotSetupUnits); connect(actionSetupWorkspace, &QAction::triggered, this, &CMainWindow::slotSetupWorkspace); connect(actionSetupCoordFormat, &QAction::triggered, this, &CMainWindow::slotSetupCoordFormat); + connect(actionSetupToolbar, &QAction::triggered, this, &CMainWindow::slotSetupToolbar); connect(actionImportDatabase, &QAction::triggered, this, &CMainWindow::slotImportDatabase); connect(actionSaveGISData, &QAction::triggered, gisWidget, &CGisWidget::slotSaveAll); connect(actionLoadGISData, &QAction::triggered, this, &CMainWindow::slotLoadGISData); @@ -126,6 +130,7 @@ connect(actionPrintMap, &QAction::triggered, this, &CMainWindow::slotPrintMap); connect(actionSetupWaypointIcons, &QAction::triggered, this, &CMainWindow::slotSetupWptIcons); connect(actionCloseTab, &QAction::triggered, this, &CMainWindow::slotCloseTab); + connect(actionToggleDocks, &QAction::triggered, this, &CMainWindow::slotToggleDocks); connect(tabWidget, &QTabWidget::tabCloseRequested, this, &CMainWindow::slotTabCloseRequest); connect(tabWidget, &QTabWidget::currentChanged, this, &CMainWindow::slotCurrentTabCanvas); @@ -194,13 +199,139 @@ lblElevation = new QLabel(status); status->addPermanentWidget(lblElevation); + lblSlope = new QLabel(status); + status->addPermanentWidget(lblSlope); + lblPosGrid = new QLabel(status); status->addPermanentWidget(lblPosGrid); - menuWindow->addAction(dockMaps->toggleViewAction()); - menuWindow->addAction(dockDem->toggleViewAction()); - menuWindow->addAction(dockGis->toggleViewAction()); - menuWindow->addAction(dockRte->toggleViewAction()); + + docks << dockMaps + << dockDem + << dockGis + << dockRte; + + if (cfg.contains(QStringLiteral("MainWindow/activedocks"))) + { + const QStringList & dockNames = cfg.value(QStringLiteral("MainWindow/activedocks")).toStringList(); + for(QDockWidget * const & dock : docks) + { + if(dockNames.contains(dock->objectName())) + { + activeDocks << dock; + } + } + } + + for (QDockWidget * const & dock : docks) + { + connect(dock, &QDockWidget::visibilityChanged, this, &CMainWindow::slotDockVisibilityChanged); + } + + + QAction * actionToggleToolBar = toolBar->toggleViewAction(); + actionToggleToolBar->setObjectName(QStringLiteral("actionToggleToolBar")); + actionToggleToolBar->setIcon(QIcon(QStringLiteral(":/icons/32x32/ToolBar.png"))); + menuWindow->insertAction(actionSetupToolbar,actionToggleToolBar); + + QAction * actionToggleMaps = dockMaps->toggleViewAction(); + actionToggleMaps->setObjectName(QStringLiteral("actionToggleMaps")); + actionToggleMaps->setIcon(QIcon(QStringLiteral(":/icons/32x32/ToggleMaps.png"))); + menuWindow->insertAction(actionSetupToolbar,actionToggleMaps); + + QAction * actionToggleDem = dockDem->toggleViewAction(); + actionToggleDem->setObjectName(QStringLiteral("actionToggleDem")); + actionToggleDem->setIcon(QIcon(QStringLiteral(":/icons/32x32/ToggleDem.png"))); + menuWindow->insertAction(actionSetupToolbar,actionToggleDem); + + QAction * actionToggleGis = dockGis->toggleViewAction(); + actionToggleGis->setObjectName(QStringLiteral("actionToggleGis")); + actionToggleGis->setIcon(QIcon(QStringLiteral(":/icons/32x32/ToggleGis.png"))); + menuWindow->insertAction(actionSetupToolbar,actionToggleGis); + + QAction * actionToggleRte = dockRte->toggleViewAction(); + actionToggleRte->setObjectName(QStringLiteral("actionToggleRte")); + actionToggleRte->setIcon(QIcon(QStringLiteral(":/icons/32x32/ToggleRouter.png"))); + menuWindow->insertAction(actionSetupToolbar,actionToggleRte); + + menuWindow->insertSeparator(actionSetupToolbar); + + QAction * separator = new QAction(QStringLiteral("---------------"),this); + separator->setSeparator(true); + separator->setObjectName(QStringLiteral("separator")); + + QList availableActions; + availableActions << separator + << actionAddMapView + << actionShowScale + << actionSetupMapFont + << actionShowGrid + << actionSetupGrid + << actionFlipMouseWheel + << actionSetupMapPaths + << actionPOIText + << actionNightDay + << actionMapToolTip + << actionSetupDEMPaths + << actionAbout + << actionHelp + << actionSetupMapView + << actionLoadGISData + << actionSaveGISData + << actionSetupTimeZone + << actionAddEmptyProject + << actionSearchGoogle + << actionCloseAllProjects + << actionSetupUnits + << actionSetupWorkspace + << actionImportDatabase + << actionVrtBuilder + << actionStoreView + << actionLoadView + << actionProfileIsWindow + << actionClose + << actionCloneMapView + << actionCreateRoutinoDatabase + << actionPrintMap + << actionSetupCoordFormat + << actionSetupMapBackground + << actionSetupWaypointIcons + << actionCloseTab + << actionQuickstart + << actionSetupToolbar + << actionToggleMaps + << actionToggleDem + << actionToggleGis + << actionToggleRte + << actionToggleDocks + << actionToggleToolBar; + + QAction * separator1 = new QAction(QStringLiteral("---------------"),this); + separator1->setSeparator(true); + separator1->setObjectName(QStringLiteral("separator")); + + QList defaultActions; + defaultActions << actionSearchGoogle + << actionAddEmptyProject + << actionLoadGISData + << actionSaveGISData + << separator + << actionShowScale + << actionShowGrid + << actionPOIText + << actionNightDay + << actionMapToolTip + << actionProfileIsWindow + << separator1 + << actionSetupToolbar + << actionToggleMaps + << actionToggleDem + << actionToggleGis + << actionToggleRte + << actionToggleDocks; + + toolBarConfig = new CToolBarConfig(this, toolBar, availableActions, defaultActions); + toolBarConfig->loadSettings(); prepareMenuForMac(); @@ -211,7 +342,7 @@ void CMainWindow::prepareMenuForMac() { - dockMaps->toggleViewAction()->setMenuRole(QAction::NoRole); + toolBar->toggleViewAction()->setMenuRole(QAction::NoRole); dockMaps->toggleViewAction()->setMenuRole(QAction::NoRole); dockDem->toggleViewAction()->setMenuRole(QAction::NoRole); dockGis->toggleViewAction()->setMenuRole(QAction::NoRole); @@ -226,7 +357,12 @@ cfg.setValue("MainWindow/state", saveState()); cfg.setValue("MainWindow/geometry", saveGeometry()); cfg.setValue("MainWindow/units", IUnit::self().type); - + QStringList activeDockNames; + for (QDockWidget * const & dock : activeDocks) + { + activeDockNames << dock->objectName(); + } + cfg.setValue("MainWindow/activedocks",activeDockNames); /* The "Canvas" section will hold all settings global to all views @@ -298,6 +434,8 @@ cfg.setValue("Units/time/useShortFormat", useShortFormat); cfg.setValue("Units/coordFormat", IUnit::getCoordFormat()); + + toolBarConfig->saveSettings(); } QWidget * CMainWindow::getBestWidgetForParent() @@ -479,6 +617,49 @@ } } +qreal CMainWindow::getSlopeAt(const QPointF& pos) const +{ + CCanvas * canvas = getVisibleCanvas(); + if(canvas) + { + return canvas->getSlopeAt(pos); + } + else + { + for(int i = 0; i < tabWidget->count(); i++) + { + canvas = dynamic_cast(tabWidget->widget(i)); + if(canvas) + { + return canvas->getSlopeAt(pos); + } + } + } + return NOFLOAT; +} + +void CMainWindow::getSlopeAt(const QPolygonF &pos, QPolygonF& slope) const +{ + CCanvas * canvas = getVisibleCanvas(); + if(canvas) + { + canvas->getSlopeAt(pos, slope); + } + else + { + for(int i = 0; i < tabWidget->count(); i++) + { + canvas = dynamic_cast(tabWidget->widget(i)); + if(canvas) + { + canvas->getSlopeAt(pos, slope); + return; + } + } + slope.clear(); + } +} + void CMainWindow::slotAbout() { CAbout dlg(this); @@ -703,7 +884,7 @@ } } -void CMainWindow::slotMousePosition(const QPointF& pos, qreal ele) +void CMainWindow::slotMousePosition(const QPointF& pos, qreal ele, qreal slope) { QString str; IUnit::degToStr(pos.x(), pos.y(), str); @@ -721,6 +902,18 @@ lblElevation->hide(); } + if(slope != NOFLOAT) + { + QString val; + val.sprintf("%.1f", slope); + lblSlope->setText(tr("Slope: %1%2").arg(val).arg(QChar(0260))); + lblSlope->show(); + } + else + { + lblSlope->hide(); + } + if(actionShowGrid->isChecked()) { CCanvas * canvas = getVisibleCanvas(); @@ -840,6 +1033,12 @@ dlg.exec(); } +void CMainWindow::slotSetupToolbar() +{ + CToolBarSetupDialog dlg(this,toolBarConfig); + dlg.exec(); +} + void CMainWindow::slotImportDatabase() { CImportDatabase * widget = new CImportDatabase(this); @@ -1004,6 +1203,70 @@ } } +void CMainWindow::slotToggleDocks() +{ + bool isHidden = true; + for (QDockWidget * const & dock : docks) + { + if (!dock->isHidden()) + { + isHidden = false; + break; + } + } + + if (isHidden) + { + if (activeDocks.isEmpty()) + { + for (QDockWidget * const & dock : docks) + { + dock->show(); + } + } + else + { + const QList docksToShow(activeDocks); + for (QDockWidget * const & dock : docksToShow) + { + dock->show(); + } + } + } + else + { + activeDocks.clear(); + for (QDockWidget * const & dock : docks) + { + if (!dock->isHidden()) + { + dock->hide(); + activeDocks << dock; + } + } + } +} + +void CMainWindow::slotDockVisibilityChanged(bool visible) +{ + if (visible) + { + activeDocks.clear(); + } + else + { + for (QDockWidget * const & dock : docks) + { + if (!dock->isHidden()) + { + visible = true; + break; + } + } + } + actionToggleDocks->setChecked(visible); +} + #ifdef WIN32 static void sendDeviceEvent(DWORD unitmask, bool add) diff -Nru qmapshack-1.8.1/src/CMainWindow.h qmapshack-1.9.0/src/CMainWindow.h --- qmapshack-1.8.1/src/CMainWindow.h 2017-03-26 10:12:50.000000000 +0000 +++ qmapshack-1.9.0/src/CMainWindow.h 2017-07-01 14:40:11.000000000 +0000 @@ -1,5 +1,6 @@ /********************************************************************************************** Copyright (C) 2014 Oliver Eichler oliver.eichler@gmx.de + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 @@ -27,9 +28,9 @@ class QLabel; class CGisWidget; class CCanvas; +class CToolBarConfig; struct SGisLine; - class CMainWindow : public QMainWindow, private Ui::IMainWindow { Q_OBJECT @@ -70,6 +71,9 @@ qreal getElevationAt(const QPointF &pos) const; void getElevationAt(const QPolygonF& pos, QPolygonF &ele) const; void getElevationAt(SGisLine &line) const; + + qreal getSlopeAt(const QPointF &pos) const; + void getSlopeAt(const QPolygonF &pos, QPolygonF& slope) const; /** @brief Get pointer to the currently visible canvas object. @return If the currently visible tab does not contain a CCanvas object 0 is returned. @@ -107,7 +111,7 @@ void slotCurrentTabCanvas(int i); void slotCurrentTabMaps(int i); void slotCurrentTabDem(int i); - void slotMousePosition(const QPointF& pos, qreal ele); + void slotMousePosition(const QPointF& pos, qreal ele, qreal slope); void slotUpdateCurrentWidget(); void slotSetupMapFont(); void slotSetupMapBackground(); @@ -119,6 +123,7 @@ void slotSetupUnits(); void slotSetupWorkspace(); void slotSetupCoordFormat(); + void slotSetupToolbar(); void slotImportDatabase(); void slotLoadGISData(); void slotBuildVrt(); @@ -131,6 +136,8 @@ void slotLinkActivated(const QString& link); void slotSanityTest(); void slotCloseTab(); + void slotToggleDocks(); + void slotDockVisibilityChanged(bool visible); private: friend int main(int argc, char ** argv); @@ -143,11 +150,17 @@ /// status bar label QLabel * lblPosWGS84; QLabel * lblElevation; + QLabel * lblSlope; QLabel * lblPosGrid; QFont mapFont; CGisWidget * gisWidget; + + CToolBarConfig * toolBarConfig; + + QList docks; + QList activeDocks; }; #endif //CMAINWINDOW_H diff -Nru qmapshack-1.8.1/src/CMakeLists.txt qmapshack-1.9.0/src/CMakeLists.txt --- qmapshack-1.8.1/src/CMakeLists.txt 2017-05-14 09:59:29.000000000 +0000 +++ qmapshack-1.9.0/src/CMakeLists.txt 2017-07-23 13:41:03.000000000 +0000 @@ -99,6 +99,7 @@ widgets/CPhotoAlbum.cpp widgets/CColorLegend.cpp widgets/CColorChooser.cpp + widgets/CSelectDoubleListWidget.cpp helpers/CInputDialog.cpp helpers/CPositionDialog.cpp helpers/CWptIconDialog.cpp @@ -111,6 +112,8 @@ helpers/CDraw.cpp helpers/CValue.cpp helpers/CLimit.cpp + helpers/CToolBarConfig.cpp + helpers/CToolBarSetupDialog.cpp canvas/CCanvas.cpp canvas/CCanvasSetup.cpp canvas/IDrawContext.cpp @@ -191,6 +194,7 @@ gis/CGisListDB.cpp gis/CGisListWks.cpp gis/CSelDevices.cpp + gis/CSetupFilter.cpp gis/prj/IGisProject.cpp gis/prj/CDetailsPrj.cpp gis/gpx/CGpxProject.cpp @@ -257,6 +261,7 @@ gis/trk/filter/CFilterObscureDate.cpp gis/trk/filter/CFilterSpeed.cpp gis/trk/filter/CFilterSplitSegment.cpp + gis/trk/filter/CFilterTerrainSlope.cpp gis/trk/CTrackData.cpp gis/rte/CGisItemRte.cpp gis/rte/CScrOptRte.cpp @@ -380,6 +385,7 @@ widgets/CPhotoAlbum.h widgets/CColorLegend.h widgets/CColorChooser.h + widgets/CSelectDoubleListWidget.h helpers/Platform.h helpers/CFileExt.h helpers/CSettings.h @@ -396,6 +402,8 @@ helpers/CValue.h helpers/CLimit.h helpers/Signals.h + helpers/CToolBarConfig.h + helpers/CToolBarSetupDialog.h canvas/CCanvas.h canvas/CCanvasSetup.h canvas/IDrawContext.h @@ -480,6 +488,7 @@ gis/CGisListDB.h gis/CGisListWks.h gis/CSelDevices.h + gis/CSetupFilter.h gis/qms/CQmsProject.h gis/tnv/CTwoNavProject.h gis/tcx/CTcxProject.h @@ -536,6 +545,7 @@ gis/trk/filter/CFilterObscureDate.h gis/trk/filter/CFilterSpeed.h gis/trk/filter/CFilterSplitSegment.h + gis/trk/filter/CFilterTerrainSlope.h gis/trk/CTrackData.h gis/rte/CGisItemRte.h gis/rte/CScrOptRte.h @@ -656,6 +666,7 @@ widgets/ITextEditWidgetSelMenu.ui widgets/IPhotoAlbum.ui widgets/IColorChooser.ui + widgets/ISelectDoubleListWidget.ui helpers/IInputDialog.ui helpers/IPositionDialog.ui helpers/IWptIconDialog.ui @@ -664,6 +675,7 @@ helpers/IElevationDialog.ui helpers/ILinksDialog.ui helpers/IProgressDialog.ui + helpers/IToolBarSetupDialog.ui canvas/ICanvasSetup.ui dem/IDemList.ui dem/IDemPathSetup.ui @@ -680,6 +692,7 @@ mouse/line/IScrOptRangeLine.ui gis/IGisWidget.ui gis/ISelDevices.ui + gis/ISetupFilter.ui gis/prj/IDetailsPrj.ui gis/db/ISetupDatabase.ui gis/db/ISetupWorkspace.ui @@ -712,6 +725,7 @@ gis/trk/filter/IFilterObscureDate.ui gis/trk/filter/IFilterSpeed.ui gis/trk/filter/IFilterSplitSegment.ui + gis/trk/filter/IFilterTerrainSlope.ui gis/rte/IScrOptRte.ui gis/rte/ICreateRouteFromWpt.ui gis/rte/IDetailsRte.ui Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/cursorAdd.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/cursorAdd.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/cursorMovePoint.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/cursorMovePoint.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/cursorPointAdd.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/cursorPointAdd.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/cursorPointDel.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/cursorPointDel.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/cursorPointMove.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/cursorPointMove.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/cursors/wptHighlightBlue.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/cursors/wptHighlightBlue.png differ diff -Nru qmapshack-1.8.1/src/cursors/wptHighlightBlue.svg qmapshack-1.9.0/src/cursors/wptHighlightBlue.svg --- qmapshack-1.8.1/src/cursors/wptHighlightBlue.svg 2017-03-18 17:41:22.000000000 +0000 +++ qmapshack-1.9.0/src/cursors/wptHighlightBlue.svg 2017-05-17 17:42:32.000000000 +0000 @@ -15,7 +15,10 @@ id="svg2" version="1.1" inkscape:version="0.91 r13725" - sodipodi:docname="wptHighlightBlue.svg"> + sodipodi:docname="wptHighlightBlue.svg" + inkscape:export-filename="/home/oeichler/Code/cpp/QMapShack/src/cursors/wptHighlightBlue.png" + inkscape:export-xdpi="137" + inkscape:export-ydpi="137"> + inkscape:export-ydpi="137.22581" + transform="matrix(0.97281118,0,0,0.97281118,0.87316707,989.09323)" /> + d="m 40.057718,1017.3047 a 10,10.5 0 0 1 -9.98944,10.5 10,10.5 0 0 1 -10.010537,-10.4778 10,10.5 0 0 1 9.9683,-10.5221 10,10.5 0 0 1 10.031588,10.4556" + inkscape:export-xdpi="137" + inkscape:export-ydpi="137" /> diff -Nru qmapshack-1.8.1/src/dem/CDemDraw.cpp qmapshack-1.9.0/src/dem/CDemDraw.cpp --- qmapshack-1.8.1/src/dem/CDemDraw.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/dem/CDemDraw.cpp 2017-06-30 14:25:55.000000000 +0000 @@ -286,6 +286,38 @@ return ele; } +qreal CDemDraw::getSlopeAt(const QPointF& pos) +{ + qreal slope = NOFLOAT; + if(CDemItem::mutexActiveDems.tryLock()) + { + if(demList) + { + for(int i = 0; i < demList->count(); i++) + { + CDemItem * item = demList->item(i); + + if(!item || item->demfile.isNull()) + { + // as all active maps have to be at the top of the list + // it is ok to break as soon as the first map with no + // active files is hit. + break; + } + + slope = item->demfile->getSlopeAt(pos); + if(slope != NOFLOAT) + { + break; + } + } + } + CDemItem::mutexActiveDems.unlock(); + } + return slope; +} + + void CDemDraw::getElevationAt(const QPolygonF& pos, QPolygonF& ele) { qreal basefactor = IUnit::self().basefactor; @@ -297,6 +329,14 @@ } } +void CDemDraw::getSlopeAt(const QPolygonF& pos, QPolygonF& slope) +{ + for(int i = 0; i < pos.size(); i++) + { + slope[i].ry() = getSlopeAt(pos[i]); + } +} + void CDemDraw::getElevationAt(SGisLine& line) { line.updateElevation(this); diff -Nru qmapshack-1.8.1/src/dem/CDemDraw.h qmapshack-1.9.0/src/dem/CDemDraw.h --- qmapshack-1.8.1/src/dem/CDemDraw.h 2017-03-26 10:12:50.000000000 +0000 +++ qmapshack-1.9.0/src/dem/CDemDraw.h 2017-06-30 14:25:55.000000000 +0000 @@ -51,6 +51,9 @@ void getElevationAt(const QPolygonF& pos, QPolygonF& ele); void getElevationAt(SGisLine& line); + qreal getSlopeAt(const QPointF& pos); + void getSlopeAt(const QPolygonF& pos, QPolygonF& slope); + void setProjection(const QString& proj) override; static const QStringList& getDemPaths() diff -Nru qmapshack-1.8.1/src/dem/CDemVRT.cpp qmapshack-1.9.0/src/dem/CDemVRT.cpp --- qmapshack-1.8.1/src/dem/CDemVRT.cpp 2017-04-17 10:11:47.000000000 +0000 +++ qmapshack-1.9.0/src/dem/CDemVRT.cpp 2017-06-05 12:03:34.000000000 +0000 @@ -47,7 +47,7 @@ if(dataset->GetRasterCount() != 1) { - delete dataset; + GDALClose(dataset); dataset = nullptr; QMessageBox::warning(CMainWindow::getBestWidgetForParent(), tr("Error..."), tr("DEM must have one band with 16bit or 32bit data.")); return; @@ -56,7 +56,7 @@ GDALRasterBand *pBand = dataset->GetRasterBand(1); if(nullptr == pBand) { - delete dataset; + GDALClose(dataset); dataset = nullptr; QMessageBox::warning(CMainWindow::getBestWidgetForParent(), tr("Error..."), tr("DEM must have one band with 16bit or 32bit data.")); return; @@ -85,7 +85,7 @@ if(pjsrc == 0) { - delete dataset; + GDALClose(dataset); dataset = nullptr; QMessageBox::warning(0, tr("Error..."), tr("No georeference information found.")); return; @@ -134,7 +134,7 @@ CDemVRT::~CDemVRT() { - delete dataset; + GDALClose(dataset); } qreal CDemVRT::getElevationAt(const QPointF& pos) @@ -182,6 +182,47 @@ return ele; } +qreal CDemVRT::getSlopeAt(const QPointF& pos) +{ + if(pjsrc == 0) + { + return NOFLOAT; + } + + QPointF pt = pos; + + pj_transform(pjtar, pjsrc, 1, 0, &pt.rx(), &pt.ry(), 0); + + if(!boundingBox.contains(pt)) + { + return NOFLOAT; + } + + pt = trInv.map(pt); + + qreal x = pt.x() - qFloor(pt.x()); + qreal y = pt.y() - qFloor(pt.y()); + + qint16 win[eWinsize4x4]; + mutex.lock(); + CPLErr err = dataset->RasterIO(GF_Read, qFloor(pt.x())-1, qFloor(pt.y())-1, 4, 4, &win, 4, 4, GDT_Int16, 1, 0, 0, 0, 0); + mutex.unlock(); + if(err == CE_Failure) + { + return NOFLOAT; + } + for(int i=0; i& data, qreal x, qreal y, int dx, qint16* w) +{ + x = qFloor(x); + y = qFloor(y); + + w[0] = getValue(data, x - 1, y - 1, dx); + w[1] = getValue(data, x, y - 1, dx); + w[2] = getValue(data, x + 1, y - 1, dx); + w[3] = getValue(data, x + 2, y - 1, dx); + w[4] = getValue(data, x - 1, y, dx); + w[5] = getValue(data, x, y, dx); + w[6] = getValue(data, x + 1, y, dx); + w[7] = getValue(data, x + 2, y, dx); + w[8] = getValue(data, x - 1, y + 1, dx); + w[9] = getValue(data, x, y + 1, dx); + w[10] = getValue(data, x + 1, y + 1, dx); + w[11] = getValue(data, x + 2, y + 1, dx); + w[12] = getValue(data, x - 1, y + 2, dx); + w[13] = getValue(data, x, y + 2, dx); + w[14] = getValue(data, x + 1, y + 2, dx); + w[15] = getValue(data, x + 2, y + 2, dx); +} + const struct SlopePresets IDem::slopePresets[7] { /* http://www.alpenverein.de/bergsport/sicherheit/skitouren-schneeschuh-sicher-im-schnee/dav-snowcard_aid_10619.html */ @@ -193,7 +216,7 @@ unsigned char* scan = img.scanLine(m - 1); for(unsigned int n = 1; n <= w; n++) { - qint16 win[9]; + qint16 win[eWinsize3x3]; fillWindow(data, n, m, wp2, win); if(hasNoData && win[4] == noData) @@ -222,6 +245,52 @@ } } +qreal IDem::slopeOfWindowInterp(qint16* win2, winsize_e size, qreal x, qreal y) +{ + for(int i = 0; i < size; i++) + { + if(hasNoData && win2[i] == noData) + { + return NOFLOAT; + } + } + + qreal win[eWinsize3x3]; + switch(size) + { + case eWinsize3x3: + for(int i = 0; i < 9; i++) + { + win[i] = win2[i]; + } + break; + + case eWinsize4x4: + win[0] = win2[0] + x * (win2[1]-win2[0]) + y * (win2[4]-win2[0]) + x*y*(win2[0]-win2[1]-win2[4]+win2[5]); + win[1] = win2[1] + x * (win2[2]-win2[1]) + y * (win2[5]-win2[1]) + x*y*(win2[1]-win2[2]-win2[5]+win2[6]); + win[2] = win2[2] + x * (win2[3]-win2[2]) + y * (win2[6]-win2[2]) + x*y*(win2[2]-win2[3]-win2[6]+win2[7]); + + win[3] = win2[4] + x * (win2[5]-win2[4]) + y * (win2[8]-win2[4]) + x*y*(win2[4]-win2[5]-win2[8]+win2[9]); + win[4] = win2[5] + x * (win2[6]-win2[5]) + y * (win2[9]-win2[5]) + x*y*(win2[5]-win2[6]-win2[9]+win2[10]); + win[5] = win2[6] + x * (win2[7]-win2[6]) + y * (win2[10]-win2[6]) + x*y*(win2[6]-win2[7]-win2[10]+win2[11]); + + win[6] = win2[8] + x * (win2[9]-win2[8]) + y * (win2[12]-win2[8]) + x*y*(win2[8]-win2[9]-win2[12]+win2[13]); + win[7] = win2[9] + x * (win2[10]-win2[9]) + y * (win2[13]-win2[9]) + x*y*(win2[9]-win2[10]-win2[13]+win2[14]); + win[8] = win2[10] + x * (win2[11]-win2[10]) + y * (win2[14]-win2[10]) + x*y*(win2[10]-win2[11]-win2[14]+win2[15]); + break; + + default: + return NOFLOAT; + } + + qreal dx = ((win[0] + win[3] + win[3] + win[6]) - (win[2] + win[5] + win[5] + win[8])) / (xscale); + qreal dy = ((win[6] + win[7] + win[7] + win[8]) - (win[0] + win[1] + win[1] + win[2])) / (yscale); + qreal k = dx * dx + dy * dy; + qreal slope = qAtan(qSqrt(k) / (8 * 1.0)) * 180.0 / M_PI; + + return slope; +} + void IDem::slopecolor(QVector& data, qreal w, qreal h, QImage &img) { int wp2 = w + 2; @@ -231,13 +300,9 @@ unsigned char* scan = img.scanLine(m - 1); for(unsigned int n = 1; n <= w; n++) { - qint16 win[9]; + qint16 win[eWinsize3x3]; fillWindow(data, n, m, wp2, win); - - qreal dx = ((win[0] + win[3] + win[3] + win[6]) - (win[2] + win[5] + win[5] + win[8])) / (xscale); - qreal dy = ((win[6] + win[7] + win[7] + win[8]) - (win[0] + win[1] + win[1] + win[2])) / (yscale); - qreal k = dx * dx + dy * dy; - qreal slope = qAtan(qSqrt(k) / (8 * 1.0)) * 180.0 / M_PI; + qreal slope = slopeOfWindowInterp(win, eWinsize3x3, 0, 0); const qreal *currentSlopeStepTable = getCurrentSlopeStepTable(); diff -Nru qmapshack-1.8.1/src/dem/IDem.h qmapshack-1.9.0/src/dem/IDem.h --- qmapshack-1.8.1/src/dem/IDem.h 2017-05-12 16:10:23.000000000 +0000 +++ qmapshack-1.9.0/src/dem/IDem.h 2017-07-04 16:44:15.000000000 +0000 @@ -50,6 +50,7 @@ virtual void draw(IDrawContext::buffer_t& buf) = 0; virtual qreal getElevationAt(const QPointF& pos) = 0; + virtual qreal getSlopeAt(const QPointF& pos) = 0; bool activated() { @@ -96,6 +97,8 @@ void setSlopeStepTable(int idx); void setSlopeStepTableCustomValue(int idx, int val); + enum winsize_e {eWinsize3x3 = 9, eWinsize4x4 = 16}; + public slots: void slotSetHillshading(bool yes) { @@ -116,6 +119,16 @@ void slopecolor(QVector& data, qreal w, qreal h, QImage &img); /** + @brief Slope in degrees based on a window. Origin is at point (1,1), counting from zero. + @param win2 window data + @param size size of window (eWinsize3x3 or eWinsize4x4) + @param x Fractional value (0..1) for interpolation in x (4x4 window only) + @param y Fractional value (0..1) for interpolation in y (4x4 window only) + @return Slope in degrees + */ + qreal slopeOfWindowInterp(qint16* win2, winsize_e size, qreal x, qreal y); + + /** @brief Reproject (translate, rotate, scale) tile before drawing it. @param img the tile as QImage @param l a 4 point polygon to fit the tile in diff -Nru qmapshack-1.8.1/src/gis/CGisListWks.cpp qmapshack-1.9.0/src/gis/CGisListWks.cpp --- qmapshack-1.8.1/src/gis/CGisListWks.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/CGisListWks.cpp 2017-07-24 15:41:33.000000000 +0000 @@ -1591,11 +1591,7 @@ searchGoogle = new CSearchGoogle(this); } - CCanvas *canvas = CMainWindow::self().getVisibleCanvas(); - if(nullptr != canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } void CGisListWks::slotSyncWksDev() @@ -1705,7 +1701,8 @@ { if(e->type() > QEvent::User) { - CGisListWksEditLock lock(true, IGisItem::mutexItems); + const bool doWaitCursoer = (eEvtA2WCutTrk != event_types_e(e->type())); + CGisListWksEditLock lock(doWaitCursoer, IGisItem::mutexItems); switch(e->type()) { diff -Nru qmapshack-1.8.1/src/gis/CGisWidget.cpp qmapshack-1.9.0/src/gis/CGisWidget.cpp --- qmapshack-1.8.1/src/gis/CGisWidget.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/CGisWidget.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -20,6 +20,7 @@ #include "device/IDevice.h" #include "gis/CGisDraw.h" #include "gis/CGisWidget.h" +#include "gis/CSetupFilter.h" #include "gis/IGisItem.h" #include "gis/db/CDBProject.h" #include "gis/db/CSelectDBFolder.h" @@ -50,15 +51,21 @@ pSelf = this; setupUi(this); + lineFilter->addAction(actionClearFilter,QLineEdit::TrailingPosition); + lineFilter->addAction(actionSetupFilter, QLineEdit::LeadingPosition); + treeWks->setExternalMenu(menuProject); SETTINGS; treeWks->header()->restoreState(cfg.value("Workspace/treeWks/state", treeWks->header()->saveState()).toByteArray()); treeDB->header()->restoreState(cfg.value("Workspace/treeDB/state", treeDB->header()->saveState()).toByteArray()); + IGisProject::filterMode = IGisProject::filter_mode_e(cfg.value("Workspace/projects/filterMode", IGisProject::filterMode).toInt()); connect(treeWks, &CGisListWks::sigChanged, this, &CGisWidget::sigChanged); connect(treeDB, &CGisListDB::sigChanged, this, &CGisWidget::slotHelpText); connect(sliderOpacity, &QSlider::valueChanged, this, &CGisWidget::slotSetGisLayerOpacity); + connect(lineFilter, &QLineEdit::textChanged, this, &CGisWidget::slotFilter); + connect(actionSetupFilter, &QAction::triggered, this, &CGisWidget::slotSetupFilter); slotHelpText(); @@ -70,7 +77,7 @@ SETTINGS; cfg.setValue("Workspace/treeWks/state", treeWks->header()->saveState()); cfg.setValue("Workspace/treeDB/state", treeDB->header()->saveState()); - + cfg.setValue("Workspace/projects/filterMode", IGisProject::filterMode); /* Explicitly delete workspace here, as database projects use CGisWidget upon destruction to signal the database their destruction. @@ -134,6 +141,42 @@ } } +void CGisWidget::applyFilter() +{ + slotFilter(lineFilter->text()); +} + +void CGisWidget::slotFilter(const QString& str) +{ + CCanvas::setOverrideCursor(Qt::WaitCursor, "slotFilter"); + QMutexLocker lock(&IGisItem::mutexItems); + + const int N = treeWks->topLevelItemCount(); + for(int n = 0; n < N; n++) + { + IGisProject * item = dynamic_cast(treeWks->topLevelItem(n)); + if(item == nullptr) + { + continue; + } + + item->filter(str.toUpper()); + item->setExpanded(!str.isEmpty()); + } + + CCanvas::restoreOverrideCursor("slotFilter"); + + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); +} + +void CGisWidget::slotSetupFilter() +{ + CSetupFilter * setupFilter = new CSetupFilter(this); + setupFilter->adjustSize(); + setupFilter->move(lineFilter->geometry().topLeft()); + setupFilter->show(); +} + void CGisWidget::slotSaveAll() { CCanvas::setOverrideCursor(Qt::WaitCursor, "slotSaveAll"); @@ -445,11 +488,7 @@ project->blockUpdateItems(false); } - CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); - if(canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } void CGisWidget::editItemByKey(const IGisItem::key_t& key) @@ -524,19 +563,18 @@ } project->blockUpdateItems(false); - CCanvas *canvas = CMainWindow::self().getVisibleCanvas(); - if(nullptr != canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } void CGisWidget::changeWptSymByKey(const QList& keys, const QString& sym) { QMutexLocker lock(&IGisItem::mutexItems); + PROGRESS_SETUP(tr("Change waypoint symbols."), 0, keys.count(), this); + int cnt = 0; for(const IGisItem::key_t& key : keys) { + PROGRESS(cnt++, break); CGisItemWpt *wpt = dynamic_cast(getItemByKey(key)); if(nullptr != wpt) { diff -Nru qmapshack-1.8.1/src/gis/CGisWidget.h qmapshack-1.9.0/src/gis/CGisWidget.h --- qmapshack-1.8.1/src/gis/CGisWidget.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/gis/CGisWidget.h 2017-07-23 13:41:03.000000000 +0000 @@ -319,7 +319,7 @@ /** @brief Add a new waypoint by Position - @param pt the position in [°] + @param pt the position in [?] */ void addWptByPos(QPointF pt, const QString& label = QString::Null(), const QString& desc = QString::Null()) const; @@ -390,6 +390,8 @@ void setOpacity(qreal val); + void applyFilter(); + signals: void sigChanged(); @@ -399,6 +401,8 @@ private slots: void slotHelpText(); void slotSetGisLayerOpacity(int val); + void slotFilter(const QString& str); + void slotSetupFilter(); private: diff -Nru qmapshack-1.8.1/src/gis/CSetupFilter.cpp qmapshack-1.9.0/src/gis/CSetupFilter.cpp --- qmapshack-1.8.1/src/gis/CSetupFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/CSetupFilter.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -0,0 +1,51 @@ +/********************************************************************************************** + Copyright (C) 2017 Oliver Eichler oliver.eichler@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 . + +**********************************************************************************************/ + +#include "gis/CGisWidget.h" +#include "gis/CSetupFilter.h" +#include "gis/prj/IGisProject.h" + +CSetupFilter::CSetupFilter(CGisWidget *parent) + : QWidget(parent) + , gisWidget(parent) +{ + setupUi(this); + + switch (IGisProject::filterMode) + { + case IGisProject::eFilterModeName: + radioName->setChecked(true); + break; + + case IGisProject::eFilterModeText: + radioText->setChecked(true); + break; + } + + connect(radioName, &QRadioButton::clicked, this, &CSetupFilter::slotSelect); + connect(radioText, &QRadioButton::clicked, this, &CSetupFilter::slotSelect); +} + + +void CSetupFilter::slotSelect() +{ + IGisProject::filterMode = radioName->isChecked() ? IGisProject::eFilterModeName : IGisProject::eFilterModeText; + gisWidget->applyFilter(); + deleteLater(); +} + diff -Nru qmapshack-1.8.1/src/gis/CSetupFilter.h qmapshack-1.9.0/src/gis/CSetupFilter.h --- qmapshack-1.8.1/src/gis/CSetupFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/CSetupFilter.h 2017-07-23 13:41:03.000000000 +0000 @@ -0,0 +1,42 @@ +/********************************************************************************************** + Copyright (C) 2017 Oliver Eichler oliver.eichler@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 . + +**********************************************************************************************/ + +#ifndef CSETUPFILTER_H +#define CSETUPFILTER_H + +#include "ui_ISetupFilter.h" +#include + +class CGisWidget; + +class CSetupFilter : public QWidget, private Ui::ISetupFilter +{ + Q_OBJECT +public: + CSetupFilter(CGisWidget *parent); + virtual ~CSetupFilter() = default; + +private slots: + void slotSelect(); + +private: + CGisWidget * gisWidget; +}; + +#endif //CSETUPFILTER_H + diff -Nru qmapshack-1.8.1/src/gis/fit/CFitProject.cpp qmapshack-1.9.0/src/gis/fit/CFitProject.cpp --- qmapshack-1.8.1/src/gis/fit/CFitProject.cpp 2017-04-06 18:50:16.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/CFitProject.cpp 2017-06-30 14:25:55.000000000 +0000 @@ -142,7 +142,13 @@ } // ql:area is not directly available in FIT (could be calculated) - setupName(QFileInfo(filename).completeBaseName().replace("_", " ")); + QString tmp = QFileInfo(filename).completeBaseName().replace("_", " "); + if(!name.isEmpty()) + { + tmp += QString("(%1)").arg(name); + } + + setupName(tmp); } CFitProject::~CFitProject() diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitByteDataTransformer.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitByteDataTransformer.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitByteDataTransformer.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitByteDataTransformer.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -37,9 +37,11 @@ case eBaseTypeNrUint32: case eBaseTypeNrUint32z: return getUint32(rawData); + case eBaseTypeNrUint64: case eBaseTypeNrUint64z: return getUint64(rawData); + default: return 0; } @@ -57,9 +59,10 @@ case eBaseTypeNrSint32: return getSint32(rawData); - + case eBaseTypeNrSint64: return getSint64(rawData); + default: return 0; } @@ -121,10 +124,10 @@ qint64 CFitByteDataTransformer::getSint64(quint8* rawData) { - return ((qint64) rawData[7] << 56) | ((qint64) rawData[6] << 48) - | ((qint64) rawData[5] << 40) | ((qint64) rawData[4] << 32) - | ((qint64) rawData[3] << 24) | ((qint64) rawData[2] << 16) - | ((qint64) rawData[1] << 8) | rawData[0]; + return ((qint64) rawData[7] << 56) | ((qint64) rawData[6] << 48) + | ((qint64) rawData[5] << 40) | ((qint64) rawData[4] << 32) + | ((qint64) rawData[3] << 24) | ((qint64) rawData[2] << 16) + | ((qint64) rawData[1] << 8) | rawData[0]; } qreal CFitByteDataTransformer::getFloat32(quint8* rawData) diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitDecoder.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitDecoder.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitDecoder.cpp 2017-05-12 16:10:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitDecoder.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -18,9 +18,9 @@ #include "gis/fit/decoder/CFitCrcState.h" #include "gis/fit/decoder/CFitDecoder.h" +#include "gis/fit/decoder/CFitDevFieldDefinitionState.h" #include "gis/fit/decoder/CFitFieldDataState.h" #include "gis/fit/decoder/CFitFieldDefinitionState.h" -#include "gis/fit/decoder/CFitDevFieldDefinitionState.h" #include "gis/fit/decoder/CFitHeaderState.h" #include "gis/fit/decoder/CFitRecordContentState.h" #include "gis/fit/decoder/CFitRecordHeaderState.h" @@ -94,9 +94,9 @@ void printByte(QFile& file, decode_state_e state, quint8 dataByte) { FITDEBUG(3, qDebug() << QString("decoding byte %1 - %2 - %3") - .arg(file.pos(), 6, 10, QLatin1Char(' ')) - .arg(dataByte, 8, 2, QLatin1Char('0')) - .arg(decoderStateNames.at(state))); + .arg(file.pos(), 6, 10, QLatin1Char(' ')) + .arg(dataByte, 8, 2, QLatin1Char('0')) + .arg(decoderStateNames.at(state))); } void CFitDecoder::decode(QFile &file) diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitDefinitionMessage.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitDefinitionMessage.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitDefinitionMessage.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitDefinitionMessage.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -42,7 +42,7 @@ CFitDefinitionMessage::CFitDefinitionMessage(quint8 localMesgNr, bool devFlag) : globalMesgNr(fitGlobalMesgNrInvalid), architecture(0), nrOfFields(0), nrOfDevFields(0), localMesgNr(localMesgNr), - devFlag(devFlag), fields(), devFields(), messageProfile(CFitProfileLookup::getProfile(fitGlobalMesgNrInvalid)) + devFlag(devFlag), fields(), devFields(), messageProfile(CFitProfileLookup::getProfile(fitGlobalMesgNrInvalid)) { } diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitDefinitionMessage.h qmapshack-1.9.0/src/gis/fit/decoder/CFitDefinitionMessage.h --- qmapshack-1.8.1/src/gis/fit/decoder/CFitDefinitionMessage.h 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitDefinitionMessage.h 2017-07-04 16:44:15.000000000 +0000 @@ -19,8 +19,8 @@ #ifndef CFITMESSAGEDEFINTION_H #define CFITMESSAGEDEFINTION_H -#include "gis/fit/decoder/CFitFieldDefinition.h" #include "gis/fit/decoder/CFitDevFieldDefinition.h" +#include "gis/fit/decoder/CFitFieldDefinition.h" #include diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitDevFieldDefinition.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitDevFieldDefinition.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitDevFieldDefinition.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitDevFieldDefinition.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -49,6 +49,7 @@ return size; } -quint8 CFitDevFieldDefinition::getDevDataIndex() const { +quint8 CFitDevFieldDefinition::getDevDataIndex() const +{ return devDataIndex; } \ No newline at end of file diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitDevFieldDefinitionState.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitDevFieldDefinitionState.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitDevFieldDefinitionState.cpp 2017-05-12 16:10:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitDevFieldDefinitionState.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -17,8 +17,8 @@ **********************************************************************************************/ #include "gis/fit/decoder/CFitDevFieldDefinitionState.h" -#include "gis/fit/defs/fit_const.h" #include "gis/fit/defs/CFitBaseType.h" +#include "gis/fit/defs/fit_const.h" /** * byte diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldBuilder.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldBuilder.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldBuilder.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldBuilder.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -23,8 +23,8 @@ #include "gis/fit/decoder/CFitMessage.h" #include "gis/fit/defs/CFitBaseType.h" #include "gis/fit/defs/CFitFieldProfile.h" -#include "gis/fit/defs/CFitProfileLookup.h" #include "gis/fit/defs/CFitProfile.h" +#include "gis/fit/defs/CFitProfileLookup.h" void CFitFieldBuilder::evaluateSubfieldsAndExpandComponents(CFitMessage& mesg) diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldDataState.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldDataState.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldDataState.cpp 2017-05-12 16:10:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldDataState.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -18,11 +18,11 @@ #include "gis/fit/decoder/CFitFieldBuilder.h" #include "gis/fit/decoder/CFitFieldDataState.h" -#include "gis/fit/defs/fit_const.h" -#include "gis/fit/defs/fit_fields.h" -#include "gis/fit/defs/fit_enums.h" #include "gis/fit/defs/CFitBaseType.h" #include "gis/fit/defs/CFitProfileLookup.h" +#include "gis/fit/defs/fit_const.h" +#include "gis/fit/defs/fit_enums.h" +#include "gis/fit/defs/fit_fields.h" void CFitFieldDataState::reset() { @@ -160,55 +160,72 @@ quint8 natvieMesgNum = 0; quint8 nativeFieldNum = 0; - for (const CFitField field : mesg.getFields()) { - if (field.isValidValue()) { - switch (field.getFieldDefNr()) { - case eFieldDescriptionDeveloperDataIndex: - devDataIdx = (quint8) field.getValue().toUInt(); - break; - case eFieldDescriptionFieldDefinitionNumber: - fieldDefNr = (quint8) field.getValue().toUInt(); - break; - case eFieldDescriptionFitBaseTypeId: - baseType = (quint8) field.getValue().toUInt(); // enum - break; - case eFieldDescriptionFieldName: - fieldName = field.getValue().toString(); - break; - case eFieldDescriptionArray: - array = (quint8) field.getValue().toUInt(); - break; - case eFieldDescriptionComponents: - components = field.getValue().toString(); - break; - case eFieldDescriptionScale: - scale = (qreal) field.getValue().toDouble(); - break; - case eFieldDescriptionOffset: - offset = (qint16) field.getValue().toInt(); - break; - case eFieldDescriptionUnits: - units = field.getValue().toString(); - break; - case eFieldDescriptionBits: - bits = field.getValue().toString(); - break; - case eFieldDescriptionAccumulate: - accumulate = field.getValue().toString(); - break; - case eFieldDescriptionFitBaseUnitId: - baseUnitId = (quint8) field.getValue().toUInt(); // enum - break; - case eFieldDescriptionNativeMesgNum: - natvieMesgNum = (quint8) field.getValue().toUInt(); // enum - break; - case eFieldDescriptionNativeFieldNum: - nativeFieldNum = (quint8) field.getValue().toUInt(); - break; - default: - throw tr("FIT decoding error: invalid field def nr %1 while creating dev field profile.") - .arg(field.getFieldDefNr()); - break; + for (const CFitField field : mesg.getFields()) + { + if (field.isValidValue()) + { + switch (field.getFieldDefNr()) + { + case eFieldDescriptionDeveloperDataIndex: + devDataIdx = (quint8) field.getValue().toUInt(); + break; + + case eFieldDescriptionFieldDefinitionNumber: + fieldDefNr = (quint8) field.getValue().toUInt(); + break; + + case eFieldDescriptionFitBaseTypeId: + baseType = (quint8) field.getValue().toUInt(); // enum + break; + + case eFieldDescriptionFieldName: + fieldName = field.getValue().toString(); + break; + + case eFieldDescriptionArray: + array = (quint8) field.getValue().toUInt(); + break; + + case eFieldDescriptionComponents: + components = field.getValue().toString(); + break; + + case eFieldDescriptionScale: + scale = (qreal) field.getValue().toDouble(); + break; + + case eFieldDescriptionOffset: + offset = (qint16) field.getValue().toInt(); + break; + + case eFieldDescriptionUnits: + units = field.getValue().toString(); + break; + + case eFieldDescriptionBits: + bits = field.getValue().toString(); + break; + + case eFieldDescriptionAccumulate: + accumulate = field.getValue().toString(); + break; + + case eFieldDescriptionFitBaseUnitId: + baseUnitId = (quint8) field.getValue().toUInt(); // enum + break; + + case eFieldDescriptionNativeMesgNum: + natvieMesgNum = (quint8) field.getValue().toUInt(); // enum + break; + + case eFieldDescriptionNativeFieldNum: + nativeFieldNum = (quint8) field.getValue().toUInt(); + break; + + default: + throw tr("FIT decoding error: invalid field def nr %1 while creating dev field profile.") + .arg(field.getFieldDefNr()); + break; } } } diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldDefinition.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldDefinition.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitFieldDefinition.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitFieldDefinition.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -16,8 +16,8 @@ **********************************************************************************************/ -#include "gis/fit/decoder/CFitFieldDefinition.h" #include "gis/fit/decoder/CFitDefinitionMessage.h" +#include "gis/fit/decoder/CFitFieldDefinition.h" #include "gis/fit/defs/CFitBaseType.h" #include "gis/fit/defs/CFitFieldProfile.h" #include "gis/fit/defs/CFitProfileLookup.h" @@ -27,12 +27,12 @@ CFitFieldDefinition::CFitFieldDefinition(CFitDefinitionMessage* parent, CFitFieldProfile* fieldProfile, quint8 defNr, quint8 size, quint8 type) - : defNr(defNr), size(size), type(type), baseType(CFitBaseTypeMap::get(type)), parentDefintion(parent), fieldProfile(fieldProfile) + : defNr(defNr), size(size), type(type), baseType(CFitBaseTypeMap::get(type)), parentDefintion(parent), fieldProfile(fieldProfile) { } CFitFieldDefinition::CFitFieldDefinition(CFitDefinitionMessage* parent, quint8 defNr, quint8 size, quint8 type) - : CFitFieldDefinition(parent, nullptr, defNr, size, type) + : CFitFieldDefinition(parent, nullptr, defNr, size, type) { fieldProfile = CFitProfileLookup::getFieldForProfile(parentDefintion ? parentDefintion->getGlobalMesgNr() : fitGlobalMesgNrInvalid, defNr); diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitMessage.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitMessage.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitMessage.cpp 2017-05-12 16:10:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitMessage.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -18,8 +18,8 @@ #include "gis/fit/decoder/CFitDefinitionMessage.h" #include "gis/fit/decoder/CFitMessage.h" -#include "gis/fit/defs/CFitProfile.h" #include "gis/fit/defs/CFitFieldProfile.h" +#include "gis/fit/defs/CFitProfile.h" #include "gis/fit/defs/CFitProfileLookup.h" #include "gis/fit/defs/fit_const.h" diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/CFitRecordContentState.cpp qmapshack-1.9.0/src/gis/fit/decoder/CFitRecordContentState.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/CFitRecordContentState.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/CFitRecordContentState.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -78,7 +78,8 @@ def->setNrOfFields(nrOfFields); // only reset if developer flag not set, else developer fields follow - if(! def->developerFlag()) { + if(!def->developerFlag()) + { reset(); } if (nrOfFields == 0) @@ -89,6 +90,7 @@ // the fields definitions follows return eDecoderStateFieldDef; break; + case 5: // number of development fields nrOfFields = dataByte; @@ -103,6 +105,7 @@ // the fields definitions follows return eDecoderStateDevFieldDef; break; + default: throw tr("FIT decoding error: invalid offset %1 for state 'record content'").arg(offset); } diff -Nru qmapshack-1.8.1/src/gis/fit/decoder/IFitDecoderState.cpp qmapshack-1.9.0/src/gis/fit/decoder/IFitDecoderState.cpp --- qmapshack-1.8.1/src/gis/fit/decoder/IFitDecoderState.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/decoder/IFitDecoderState.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -122,7 +122,7 @@ if(devFieldProfile(fieldProfile.getFieldDefNum())->getFieldDefNum() == fieldProfile.getFieldDefNum()) { throw tr("FIT decoding error: a development field with the field_definition_number %1 already exists.") - .arg(fieldProfile.getFieldDefNum()); + .arg(fieldProfile.getFieldDefNum()); } data.devFieldProfiles.append(fieldProfile); } diff -Nru qmapshack-1.8.1/src/gis/fit/defs/CFitFieldProfile.cpp qmapshack-1.9.0/src/gis/fit/defs/CFitFieldProfile.cpp --- qmapshack-1.8.1/src/gis/fit/defs/CFitFieldProfile.cpp 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/defs/CFitFieldProfile.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -125,17 +125,17 @@ QString CFitFieldProfile::fieldProfileInfo() { QString str = QString("%1 %2 (%3): %4 %5") - .arg(QString("field profile")) - .arg(getName()) - .arg(getFieldDefNum()) - .arg(getUnits()) - .arg(getBaseType().name()); + .arg(QString("field profile")) + .arg(getName()) + .arg(getFieldDefNum()) + .arg(getUnits()) + .arg(getBaseType().name()); if(getBaseType().isNumber()) { str += QString(" (%1-%2)") - .arg(getScale()) - .arg(getOffset()); + .arg(getScale()) + .arg(getOffset()); } return str; } diff -Nru qmapshack-1.8.1/src/gis/fit/defs/CFitFieldProfile.h qmapshack-1.9.0/src/gis/fit/defs/CFitFieldProfile.h --- qmapshack-1.8.1/src/gis/fit/defs/CFitFieldProfile.h 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/defs/CFitFieldProfile.h 2017-07-04 16:44:15.000000000 +0000 @@ -26,7 +26,8 @@ class CFitComponentfieldProfile; class CFitBaseType; -typedef enum { +typedef enum +{ eFieldTypeFit = 0, eFieldTypeDevelopment = 1, } field_type_e; diff -Nru qmapshack-1.8.1/src/gis/fit/defs/fit_enums.h qmapshack-1.9.0/src/gis/fit/defs/fit_enums.h --- qmapshack-1.8.1/src/gis/fit/defs/fit_enums.h 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/defs/fit_enums.h 2017-07-04 16:44:15.000000000 +0000 @@ -20,7 +20,8 @@ #define FIT_PROFILE_H // ----------- start generated code ----------- -typedef enum { +typedef enum +{ eFileDevice = 1, eFileSettings = 2, eFileSport = 3, @@ -43,7 +44,8 @@ eFileMfgRangeMax = 0xFE } file_e; -typedef enum { +typedef enum +{ eMesgNumFileId = 0, eMesgNumCapabilities = 1, eMesgNumDeviceSettings = 2, @@ -124,47 +126,56 @@ eMesgNumMfgRangeMax = 0xFFFE } mesg_num_e; -typedef enum { +typedef enum +{ eChecksumClear = 0, eChecksumOk = 1 } checksum_e; -typedef enum { +typedef enum +{ eFileFlagsRead = 0x02, eFileFlagsWrite = 0x04, eFileFlagsErase = 0x08 } file_flags_e; -typedef enum { +typedef enum +{ eMesgCountNumPerFile = 0, eMesgCountMaxPerFile = 1, eMesgCountMaxPerFileType = 2 } mesg_count_e; -typedef enum { +typedef enum +{ eDateTimeMin = 0x10000000 } date_time_e; -typedef enum { +typedef enum +{ eLocalDateTimeMin = 0x10000000 } local_date_time_e; -typedef enum { +typedef enum +{ eMessageIndexSelected = 0x8000, eMessageIndexReserved = 0x7000, eMessageIndexMask = 0x0FFF } message_index_e; -typedef enum { +typedef enum +{ eDeviceIndexCreator = 0 } device_index_e; -typedef enum { +typedef enum +{ eGenderFemale = 0, eGenderMale = 1 } gender_e; -typedef enum { +typedef enum +{ eLanguageEnglish = 0, eLanguageFrench = 1, eLanguageItalian = 2, @@ -206,7 +217,8 @@ eLanguageCustom = 254 } language_e; -typedef enum { +typedef enum +{ eLanguageBits0English = 0x01, eLanguageBits0French = 0x02, eLanguageBits0Italian = 0x04, @@ -217,7 +229,8 @@ eLanguageBits0Danish = 0x80 } language_bits_0_e; -typedef enum { +typedef enum +{ eLanguageBits1Dutch = 0x01, eLanguageBits1Finnish = 0x02, eLanguageBits1Greek = 0x04, @@ -228,7 +241,8 @@ eLanguageBits1Slovakian = 0x80 } language_bits_1_e; -typedef enum { +typedef enum +{ eLanguageBits2Slovenian = 0x01, eLanguageBits2Swedish = 0x02, eLanguageBits2Russian = 0x04, @@ -239,7 +253,8 @@ eLanguageBits2Farsi = 0x80 } language_bits_2_e; -typedef enum { +typedef enum +{ eLanguageBits3Bulgarian = 0x01, eLanguageBits3Romanian = 0x02, eLanguageBits3Chinese = 0x04, @@ -250,7 +265,8 @@ eLanguageBits3Hebrew = 0x80 } language_bits_3_e; -typedef enum { +typedef enum +{ eLanguageBits4BrazilianPortuguese = 0x01, eLanguageBits4Indonesian = 0x02, eLanguageBits4Malaysian = 0x04, @@ -259,7 +275,8 @@ eLanguageBits4Mongolian = 0x20 } language_bits_4_e; -typedef enum { +typedef enum +{ eTimeZoneAlmaty = 0, eTimeZoneBangkok = 1, eTimeZoneBombay = 2, @@ -368,24 +385,28 @@ eTimeZoneAutomatic = 254 } time_zone_e; -typedef enum { +typedef enum +{ eDisplayMeasureMetric = 0, eDisplayMeasureStatute = 1, eDisplayMeasureNautical = 2 } display_measure_e; -typedef enum { +typedef enum +{ eDisplayHeartBpm = 0, eDisplayHeartMax = 1, eDisplayHeartReserve = 2 } display_heart_e; -typedef enum { +typedef enum +{ eDisplayPowerWatts = 0, eDisplayPowerPercentFtp = 1 } display_power_e; -typedef enum { +typedef enum +{ eDisplayPositionDegree = 0, eDisplayPositionDegreeMinute = 1, eDisplayPositionDegreeMinuteSecond = 2, @@ -430,13 +451,15 @@ eDisplayPositionSwedishRef99Grid = 41 } display_position_e; -typedef enum { +typedef enum +{ eSwitchOff = 0, eSwitchOn = 1, eSwitchAuto = 2 } switch_e; -typedef enum { +typedef enum +{ eSportGeneric = 0, eSportRunning = 1, eSportCycling = 2, @@ -489,7 +512,8 @@ eSportAll = 254 } sport_e; -typedef enum { +typedef enum +{ eSportBits0Generic = 0x01, eSportBits0Running = 0x02, eSportBits0Cycling = 0x04, @@ -500,7 +524,8 @@ eSportBits0Soccer = 0x80 } sport_bits_0_e; -typedef enum { +typedef enum +{ eSportBits1Tennis = 0x01, eSportBits1AmericanFootball = 0x02, eSportBits1Training = 0x04, @@ -511,7 +536,8 @@ eSportBits1Rowing = 0x80 } sport_bits_1_e; -typedef enum { +typedef enum +{ eSportBits2Mountaineering = 0x01, eSportBits2Hiking = 0x02, eSportBits2Multisport = 0x04, @@ -522,7 +548,8 @@ eSportBits2Boating = 0x80 } sport_bits_2_e; -typedef enum { +typedef enum +{ eSportBits3Driving = 0x01, eSportBits3Golf = 0x02, eSportBits3HangGliding = 0x04, @@ -533,7 +560,8 @@ eSportBits3RockClimbing = 0x80 } sport_bits_3_e; -typedef enum { +typedef enum +{ eSportBits4Sailing = 0x01, eSportBits4IceSkating = 0x02, eSportBits4SkyDiving = 0x04, @@ -544,7 +572,8 @@ eSportBits4Wakeboarding = 0x80 } sport_bits_4_e; -typedef enum { +typedef enum +{ eSportBits5WaterSkiing = 0x01, eSportBits5Kayaking = 0x02, eSportBits5Rafting = 0x04, @@ -555,11 +584,13 @@ eSportBits5Boxing = 0x80 } sport_bits_5_e; -typedef enum { +typedef enum +{ eSportBits6FloorClimbing = 0x01 } sport_bits_6_e; -typedef enum { +typedef enum +{ eSubSportGeneric = 0, eSubSportTreadmill = 1, eSubSportStreet = 2, @@ -616,7 +647,8 @@ eSubSportAll = 254 } sub_sport_e; -typedef enum { +typedef enum +{ eSportEventUncategorized = 0, eSportEventGeocaching = 1, eSportEventFitness = 2, @@ -628,26 +660,30 @@ eSportEventTouring = 8 } sport_event_e; -typedef enum { +typedef enum +{ eActivityManual = 0, eActivityAutoMultiSport = 1 } activity_e; -typedef enum { +typedef enum +{ eIntensityActive = 0, eIntensityRest = 1, eIntensityWarmup = 2, eIntensityCooldown = 3 } intensity_e; -typedef enum { +typedef enum +{ eSessionTriggerActivityEnd = 0, eSessionTriggerManual = 1, eSessionTriggerAutoMultiSport = 2, eSessionTriggerFitnessEquipment = 3 } session_trigger_e; -typedef enum { +typedef enum +{ eAutolapTriggerTime = 0, eAutolapTriggerDistance = 1, eAutolapTriggerPositionStart = 2, @@ -657,7 +693,8 @@ eAutolapTriggerOff = 6 } autolap_trigger_e; -typedef enum { +typedef enum +{ eLapTriggerManual = 0, eLapTriggerTime = 1, eLapTriggerDistance = 2, @@ -669,7 +706,8 @@ eLapTriggerFitnessEquipment = 8 } lap_trigger_e; -typedef enum { +typedef enum +{ eTimeModeHour12 = 0, eTimeModeHour24 = 1, eTimeModeMilitary = 2, @@ -678,7 +716,8 @@ eTimeModeUtc = 5 } time_mode_e; -typedef enum { +typedef enum +{ eBacklightModeOff = 0, eBacklightModeManual = 1, eBacklightModeKeyAndMessages = 2, @@ -688,12 +727,14 @@ eBacklightModeKeyAndMessagesAndSmartNotifications = 6 } backlight_mode_e; -typedef enum { +typedef enum +{ eDateModeDayMonth = 0, eDateModeMonthDay = 1 } date_mode_e; -typedef enum { +typedef enum +{ eEventTimer = 0, eEventWorkout = 3, eEventWorkoutStep = 4, @@ -732,7 +773,8 @@ eEventCommTimeout = 47 } event_e; -typedef enum { +typedef enum +{ eEventTypeStart = 0, eEventTypeStop = 1, eEventTypeConsecutiveDepreciated = 2, @@ -745,44 +787,51 @@ eEventTypeStopDisableAll = 9 } event_type_e; -typedef enum { +typedef enum +{ eTimerTriggerManual = 0, eTimerTriggerAuto = 1, eTimerTriggerFitnessEquipment = 2 } timer_trigger_e; -typedef enum { +typedef enum +{ eFitnessEquipmentStateReady = 0, eFitnessEquipmentStateInUse = 1, eFitnessEquipmentStatePaused = 2, eFitnessEquipmentStateUnknown = 3 } fitness_equipment_state_e; -typedef enum { +typedef enum +{ eAutoscrollNone = 0, eAutoscrollSlow = 1, eAutoscrollMedium = 2, eAutoscrollFast = 3 } autoscroll_e; -typedef enum { +typedef enum +{ eActivityClassLevel = 0x7F, eActivityClassLevelMax = 100, eActivityClassAthlete = 0x80 } activity_class_e; -typedef enum { +typedef enum +{ eHrZoneCalcCustom = 0, eHrZoneCalcPercentMaxHr = 1, eHrZoneCalcPercentHrr = 2 } hr_zone_calc_e; -typedef enum { +typedef enum +{ ePwrZoneCalcCustom = 0, ePwrZoneCalcPercentFtp = 1 } pwr_zone_calc_e; -typedef enum { +typedef enum +{ eWktStepDurationTime = 0, eWktStepDurationDistance = 1, eWktStepDurationHrLessThan = 2, @@ -814,7 +863,8 @@ eWktStepDurationRepetitionTime = 28 } wkt_step_duration_e; -typedef enum { +typedef enum +{ eWktStepTargetSpeed = 0, eWktStepTargetHeartRate = 1, eWktStepTargetOpen = 2, @@ -830,7 +880,8 @@ eWktStepTargetHeartRateLap = 13 } wkt_step_target_e; -typedef enum { +typedef enum +{ eGoalTime = 0, eGoalDistance = 1, eGoalCalories = 2, @@ -840,7 +891,8 @@ eGoalActiveMinutes = 6 } goal_e; -typedef enum { +typedef enum +{ eGoalRecurrenceOff = 0, eGoalRecurrenceDaily = 1, eGoalRecurrenceWeekly = 2, @@ -849,18 +901,21 @@ eGoalRecurrenceCustom = 5 } goal_recurrence_e; -typedef enum { +typedef enum +{ eGoalSourceAuto = 0, eGoalSourceCommunity = 1, eGoalSourceUser = 2 } goal_source_e; -typedef enum { +typedef enum +{ eScheduleWorkout = 0, eScheduleCourse = 1 } schedule_e; -typedef enum { +typedef enum +{ eCoursePointGeneric = 0, eCoursePointSummit = 1, eCoursePointValley = 2, @@ -889,7 +944,8 @@ eCoursePointSegmentEnd = 25 } course_point_e; -typedef enum { +typedef enum +{ eManufacturerGarmin = 1, eManufacturerGarminFr405Antfs = 2, eManufacturerZephyr = 3, @@ -1022,7 +1078,8 @@ eManufacturerActigraphcorp = 5759 } manufacturer_e; -typedef enum { +typedef enum +{ eGarminProductHrm1 = 1, eGarminProductAxh01 = 2, eGarminProductAxb01 = 3, @@ -1172,7 +1229,8 @@ eGarminProductConnect = 65534 } garmin_product_e; -typedef enum { +typedef enum +{ eAntplusDeviceTypeAntfs = 1, eAntplusDeviceTypeBikePower = 11, eAntplusDeviceTypeEnvironmentSensorLegacy = 12, @@ -1198,14 +1256,16 @@ eAntplusDeviceTypeStrideSpeedDistance = 124 } antplus_device_type_e; -typedef enum { +typedef enum +{ eAntNetworkPublic = 0, eAntNetworkAntplus = 1, eAntNetworkAntfs = 2, eAntNetworkPrivate = 3 } ant_network_e; -typedef enum { +typedef enum +{ eWorkoutCapabilitiesInterval = 0x00000001, eWorkoutCapabilitiesCustom = 0x00000002, eWorkoutCapabilitiesFitnessEquipment = 0x00000004, @@ -1222,7 +1282,8 @@ eWorkoutCapabilitiesProtected = 0x00004000 } workout_capabilities_e; -typedef enum { +typedef enum +{ eBatteryStatusNew = 1, eBatteryStatusGood = 2, eBatteryStatusOk = 3, @@ -1232,12 +1293,14 @@ eBatteryStatusUnknown = 7 } battery_status_e; -typedef enum { +typedef enum +{ eHrTypeNormal = 0, eHrTypeIrregular = 1 } hr_type_e; -typedef enum { +typedef enum +{ eCourseCapabilitiesProcessed = 0x00000001, eCourseCapabilitiesValid = 0x00000002, eCourseCapabilitiesTime = 0x00000004, @@ -1251,19 +1314,23 @@ eCourseCapabilitiesBikeway = 0x00000400 } course_capabilities_e; -typedef enum { +typedef enum +{ eWeightCalculating = 0xFFFE } weight_e; -typedef enum { +typedef enum +{ eWorkoutHrBpmOffset = 100 } workout_hr_e; -typedef enum { +typedef enum +{ eWorkoutPowerWattsOffset = 1000 } workout_power_e; -typedef enum { +typedef enum +{ eBpStatusNoError = 0, eBpStatusErrorIncompleteData = 1, eBpStatusErrorNoMeasurement = 2, @@ -1271,7 +1338,8 @@ eBpStatusErrorIrregularHeartRate = 4 } bp_status_e; -typedef enum { +typedef enum +{ eUserLocalIdLocalMin = 0x0000, eUserLocalIdLocalMax = 0x000F, eUserLocalIdStationaryMin = 0x0010, @@ -1280,7 +1348,8 @@ eUserLocalIdPortableMax = 0xFFFE } user_local_id_e; -typedef enum { +typedef enum +{ eSwimStrokeFreestyle = 0, eSwimStrokeBackstroke = 1, eSwimStrokeBreaststroke = 2, @@ -1290,7 +1359,8 @@ eSwimStrokeIm = 6 } swim_stroke_e; -typedef enum { +typedef enum +{ eActivityTypeGeneric = 0, eActivityTypeRunning = 1, eActivityTypeCycling = 2, @@ -1302,7 +1372,8 @@ eActivityTypeAll = 254 } activity_type_e; -typedef enum { +typedef enum +{ eActivitySubtypeGeneric = 0, eActivitySubtypeTreadmill = 1, eActivitySubtypeStreet = 2, @@ -1325,33 +1396,39 @@ eActivitySubtypeAll = 254 } activity_subtype_e; -typedef enum { +typedef enum +{ eActivityLevelLow = 0, eActivityLevelMedium = 1, eActivityLevelHigh = 2 } activity_level_e; -typedef enum { +typedef enum +{ eSideRight = 0, eSideLeft = 1 } side_e; -typedef enum { +typedef enum +{ eLeftRightBalanceMask = 0x7F, eLeftRightBalanceRight = 0x80 } left_right_balance_e; -typedef enum { +typedef enum +{ eLeftRightBalance100Mask = 0x3FFF, eLeftRightBalance100Right = 0x8000 } left_right_balance_100_e; -typedef enum { +typedef enum +{ eLengthTypeIdle = 0, eLengthTypeActive = 1 } length_type_e; -typedef enum { +typedef enum +{ eDayOfWeekSunday = 0, eDayOfWeekMonday = 1, eDayOfWeekTuesday = 2, @@ -1361,7 +1438,8 @@ eDayOfWeekSaturday = 6 } day_of_week_e; -typedef enum { +typedef enum +{ eConnectivityCapabilitiesBluetooth = 0x00000001, eConnectivityCapabilitiesBluetoothLe = 0x00000002, eConnectivityCapabilitiesAnt = 0x00000004, @@ -1396,14 +1474,16 @@ eConnectivityCapabilitiesInstantInput = 0x80000000 } connectivity_capabilities_e; -typedef enum { +typedef enum +{ eWeatherReportCurrent = 0, eWeatherReportForecast = 1, eWeatherReportHourlyForecast = 1, eWeatherReportDailyForecast = 2 } weather_report_e; -typedef enum { +typedef enum +{ eWeatherStatusClear = 0, eWeatherStatusPartlyCloudy = 1, eWeatherStatusMostlyCloudy = 2, @@ -1427,7 +1507,8 @@ eWeatherStatusCloudy = 22 } weather_status_e; -typedef enum { +typedef enum +{ eWeatherSeverityUnknown = 0, eWeatherSeverityWarning = 1, eWeatherSeverityWatch = 2, @@ -1435,7 +1516,8 @@ eWeatherSeverityStatement = 4 } weather_severity_e; -typedef enum { +typedef enum +{ eWeatherSevereTypeUnspecified = 0, eWeatherSevereTypeTornado = 1, eWeatherSevereTypeTsunami = 2, @@ -1523,7 +1605,8 @@ eWeatherSevereTypeSpecialWeather = 84 } weather_severe_type_e; -typedef enum { +typedef enum +{ eStrokeTypeNoEvent = 0, eStrokeTypeOther = 1, eStrokeTypeServe = 2, @@ -1532,7 +1615,8 @@ eStrokeTypeSmash = 5 } stroke_type_e; -typedef enum { +typedef enum +{ eBodyLocationLeftLeg = 0, eBodyLocationLeftCalf = 1, eBodyLocationLeftShin = 2, @@ -1575,12 +1659,14 @@ eBodyLocationWaistRight = 39 } body_location_e; -typedef enum { +typedef enum +{ eSegmentLapStatusEnd = 0, eSegmentLapStatusFail = 1 } segment_lap_status_e; -typedef enum { +typedef enum +{ eSegmentLeaderboardTypeOverall = 0, eSegmentLeaderboardTypePersonalBest = 1, eSegmentLeaderboardTypeConnections = 2, @@ -1594,18 +1680,21 @@ eSegmentLeaderboardTypeClubLeader = 10 } segment_leaderboard_type_e; -typedef enum { +typedef enum +{ eSegmentDeleteStatusDoNotDelete = 0, eSegmentDeleteStatusDeleteOne = 1, eSegmentDeleteStatusDeleteAll = 2 } segment_delete_status_e; -typedef enum { +typedef enum +{ eSegmentSelectionTypeStarred = 0, eSegmentSelectionTypeSuggested = 1 } segment_selection_type_e; -typedef enum { +typedef enum +{ eSourceTypeAnt = 0, eSourceTypeAntplus = 1, eSourceTypeBluetooth = 2, @@ -1614,7 +1703,8 @@ eSourceTypeLocal = 5 } source_type_e; -typedef enum { +typedef enum +{ eDisplayOrientationAuto = 0, eDisplayOrientationPortrait = 1, eDisplayOrientationLandscape = 2, @@ -1622,37 +1712,43 @@ eDisplayOrientationLandscapeFlipped = 4 } display_orientation_e; -typedef enum { +typedef enum +{ eWatchfaceModeDigital = 0, eWatchfaceModeAnalog = 1, eWatchfaceModeConnectIq = 2 } watchface_mode_e; -typedef enum { +typedef enum +{ eDigitalWatchfaceLayoutTraditional = 0, eDigitalWatchfaceLayoutModern = 1, eDigitalWatchfaceLayoutBold = 2 } digital_watchface_layout_e; -typedef enum { +typedef enum +{ eAnalogWatchfaceLayoutMinimal = 0, eAnalogWatchfaceLayoutTraditional = 1, eAnalogWatchfaceLayoutModern = 2 } analog_watchface_layout_e; -typedef enum { +typedef enum +{ eRiderPositionTypeSeated = 0, eRiderPositionTypeStanding = 1 } rider_position_type_e; -typedef enum { +typedef enum +{ ePowerPhaseTypePowerPhaseStartAngle = 0, ePowerPhaseTypePowerPhaseEndAngle = 1, ePowerPhaseTypePowerPhaseArcLength = 2, ePowerPhaseTypePowerPhaseCenter = 3 } power_phase_type_e; -typedef enum { +typedef enum +{ eCameraEventTypeVideoStart = 0, eCameraEventTypeVideoSplit = 1, eCameraEventTypeVideoEnd = 2, @@ -1668,41 +1764,47 @@ eCameraEventTypeVideoSecondStreamResume = 14 } camera_event_type_e; -typedef enum { +typedef enum +{ eSensorTypeAccelerometer = 0, eSensorTypeGyroscope = 1, eSensorTypeCompass = 2 } sensor_type_e; -typedef enum { +typedef enum +{ eBikeLightNetworkConfigTypeAuto = 0, eBikeLightNetworkConfigTypeIndividual = 4, eBikeLightNetworkConfigTypeHighVisibility = 5, eBikeLightNetworkConfigTypeTrail = 6 } bike_light_network_config_type_e; -typedef enum { +typedef enum +{ eCommTimeoutTypeWildcardPairingTimeout = 0, eCommTimeoutTypePairingTimeout = 1, eCommTimeoutTypeConnectionLost = 2, eCommTimeoutTypeConnectionTimeout = 3 } comm_timeout_type_e; -typedef enum { +typedef enum +{ eCameraOrientationTypeCameraOrientation0 = 0, eCameraOrientationTypeCameraOrientation90 = 1, eCameraOrientationTypeCameraOrientation180 = 2, eCameraOrientationTypeCameraOrientation270 = 3 } camera_orientation_type_e; -typedef enum { +typedef enum +{ eAttitudeStageFailed = 0, eAttitudeStageAligning = 1, eAttitudeStageDegraded = 2, eAttitudeStageValid = 3 } attitude_stage_e; -typedef enum { +typedef enum +{ eAttitudeValidityTrackAngleHeadingValid = 0x0001, eAttitudeValidityPitchValid = 0x0002, eAttitudeValidityRollValid = 0x0004, @@ -1718,14 +1820,16 @@ eAttitudeValidityMagneticHeading = 0x1000 } attitude_validity_e; -typedef enum { +typedef enum +{ eAutoSyncFrequencyNever = 0, eAutoSyncFrequencyOccasionally = 1, eAutoSyncFrequencyFrequent = 2, eAutoSyncFrequencyOnceADay = 3 } auto_sync_frequency_e; -typedef enum { +typedef enum +{ eExdLayoutFullScreen = 0, eExdLayoutHalfVertical = 1, eExdLayoutHalfHorizontal = 2, @@ -1736,7 +1840,8 @@ eExdLayoutHalfHorizontalTopSplit = 7 } exd_layout_e; -typedef enum { +typedef enum +{ eExdDisplayTypeNumerical = 0, eExdDisplayTypeSimple = 1, eExdDisplayTypeGraph = 2, @@ -1750,7 +1855,8 @@ eExdDisplayTypeGauge = 10 } exd_display_type_e; -typedef enum { +typedef enum +{ eExdDataUnitsNoUnits = 0, eExdDataUnitsLaps = 1, eExdDataUnitsMilesPerHour = 2, @@ -1803,7 +1909,8 @@ eExdDataUnitsEightCardinal = 49 } exd_data_units_e; -typedef enum { +typedef enum +{ eExdQualifiersNoQualifier = 0, eExdQualifiersInstantaneous = 1, eExdQualifiersAverage = 2, @@ -1849,7 +1956,8 @@ eExdQualifiersZone1 = 250 } exd_qualifiers_e; -typedef enum { +typedef enum +{ eExdDescriptorsBikeLightBatteryStatus = 0, eExdDescriptorsBeamAngleStatus = 1, eExdDescriptorsBateryLevel = 2, @@ -1948,7 +2056,8 @@ eExdDescriptorsPressure = 95 } exd_descriptors_e; -typedef enum { +typedef enum +{ eAutoActivityDetectNone = 0x00000000, eAutoActivityDetectRunning = 0x00000001, eAutoActivityDetectCycling = 0x00000002, @@ -1958,7 +2067,8 @@ eAutoActivityDetectSedentary = 0x00000400 } auto_activity_detect_e; -typedef enum { +typedef enum +{ eSupportedExdScreenLayoutsFullScreen = 0x00000001, eSupportedExdScreenLayoutsHalfVertical = 0x00000002, eSupportedExdScreenLayoutsHalfHorizontal = 0x00000004, @@ -1969,7 +2079,8 @@ eSupportedExdScreenLayoutsHalfHorizontalTopSplit = 0x00000080 } supported_exd_screen_layouts_e; -typedef enum { +typedef enum +{ eFitBaseTypeEnum = 0, eFitBaseTypeSint8 = 1, eFitBaseTypeUint8 = 2, @@ -1989,7 +2100,8 @@ eFitBaseTypeUint64Z = 144 } fit_base_type_e; -typedef enum { +typedef enum +{ eTurnTypeArrivingIdx = 0, eTurnTypeArrivingLeftIdx = 1, eTurnTypeArrivingRightIdx = 2, @@ -2030,12 +2142,14 @@ eTurnTypeIconIdxCnt = 37 } turn_type_e; -typedef enum { +typedef enum +{ eBikeLightBeamAngleModeManual = 0, eBikeLightBeamAngleModeAuto = 1 } bike_light_beam_angle_mode_e; -typedef enum { +typedef enum +{ eFitBaseUnitOther = 0, eFitBaseUnitKilogram = 1, eFitBaseUnitPound = 2 diff -Nru qmapshack-1.8.1/src/gis/fit/defs/fit_fields.h qmapshack-1.9.0/src/gis/fit/defs/fit_fields.h --- qmapshack-1.8.1/src/gis/fit/defs/fit_fields.h 2017-04-04 17:29:23.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/defs/fit_fields.h 2017-07-04 16:44:15.000000000 +0000 @@ -19,7 +19,8 @@ #ifndef FIT_FIELDS_H #define FIT_FIELDS_H // ----------- start generated code ----------- -typedef enum { +typedef enum +{ eFileIdType = 0, eFileIdManufacturer = 1, eFileIdProduct = 2, @@ -29,12 +30,14 @@ eFileIdProductName = 8 } message_file_id_e; -typedef enum { +typedef enum +{ eFileCreatorSoftwareVersion = 0, eFileCreatorHardwareVersion = 1 } message_file_creator_e; -typedef enum { +typedef enum +{ eTimestampCorrelationTimestamp = 253, eTimestampCorrelationFractionalTimestamp = 0, eTimestampCorrelationSystemTimestamp = 1, @@ -44,25 +47,29 @@ eTimestampCorrelationSystemTimestampMs = 5 } message_timestamp_correlation_e; -typedef enum { +typedef enum +{ eSoftwareMessageIndex = 254, eSoftwareVersion = 3, eSoftwarePartNumber = 5 } message_software_e; -typedef enum { +typedef enum +{ eSlaveDeviceManufacturer = 0, eSlaveDeviceProduct = 1 } message_slave_device_e; -typedef enum { +typedef enum +{ eCapabilitiesLanguages = 0, eCapabilitiesSports = 1, eCapabilitiesWorkoutsSupported = 21, eCapabilitiesConnectivitySupported = 23 } message_capabilities_e; -typedef enum { +typedef enum +{ eFileCapabilitiesMessageIndex = 254, eFileCapabilitiesType = 0, eFileCapabilitiesFlags = 1, @@ -71,7 +78,8 @@ eFileCapabilitiesMaxSize = 4 } message_file_capabilities_e; -typedef enum { +typedef enum +{ eMesgCapabilitiesMessageIndex = 254, eMesgCapabilitiesFile = 0, eMesgCapabilitiesMesgNum = 1, @@ -79,7 +87,8 @@ eMesgCapabilitiesCount = 3 } message_mesg_capabilities_e; -typedef enum { +typedef enum +{ eFieldCapabilitiesMessageIndex = 254, eFieldCapabilitiesFile = 0, eFieldCapabilitiesMesgNum = 1, @@ -87,7 +96,8 @@ eFieldCapabilitiesCount = 3 } message_field_capabilities_e; -typedef enum { +typedef enum +{ eDeviceSettingsActiveTimeZone = 0, eDeviceSettingsUtcOffset = 1, eDeviceSettingsTimeOffset = 2, @@ -112,7 +122,8 @@ eDeviceSettingsSmartNotificationDisplayOrientation = 95 } message_device_settings_e; -typedef enum { +typedef enum +{ eUserProfileMessageIndex = 254, eUserProfileFriendlyName = 0, eUserProfileGender = 1, @@ -142,7 +153,8 @@ eUserProfileUserWalkingStepLength = 32 } message_user_profile_e; -typedef enum { +typedef enum +{ eHrmProfileMessageIndex = 254, eHrmProfileEnabled = 0, eHrmProfileHrmAntId = 1, @@ -150,7 +162,8 @@ eHrmProfileHrmAntIdTransType = 3 } message_hrm_profile_e; -typedef enum { +typedef enum +{ eSdmProfileMessageIndex = 254, eSdmProfileEnabled = 0, eSdmProfileSdmAntId = 1, @@ -161,7 +174,8 @@ eSdmProfileOdometerRollover = 7 } message_sdm_profile_e; -typedef enum { +typedef enum +{ eBikeProfileMessageIndex = 254, eBikeProfileName = 0, eBikeProfileSport = 1, @@ -196,7 +210,8 @@ eBikeProfileShimanoDi2Enabled = 44 } message_bike_profile_e; -typedef enum { +typedef enum +{ eConnectivityBluetoothEnabled = 0, eConnectivityBluetoothLeEnabled = 1, eConnectivityAntEnabled = 2, @@ -212,17 +227,20 @@ eConnectivityGrouptrackEnabled = 12 } message_connectivity_e; -typedef enum { +typedef enum +{ eWatchfaceSettingsMessageIndex = 254, eWatchfaceSettingsMode = 0, eWatchfaceSettingsLayout = 1 } message_watchface_settings_e; -typedef enum { +typedef enum +{ eOhrSettingsEnabled = 0 } message_ohr_settings_e; -typedef enum { +typedef enum +{ eZonesTargetMaxHeartRate = 1, eZonesTargetThresholdHeartRate = 2, eZonesTargetFunctionalThresholdPower = 3, @@ -230,44 +248,51 @@ eZonesTargetPwrCalcType = 7 } message_zones_target_e; -typedef enum { +typedef enum +{ eSportSport = 0, eSportSubSport = 1, eSportName = 3 } message_sport_e; -typedef enum { +typedef enum +{ eHrZoneMessageIndex = 254, eHrZoneHighBpm = 1, eHrZoneName = 2 } message_hr_zone_e; -typedef enum { +typedef enum +{ eSpeedZoneMessageIndex = 254, eSpeedZoneHighValue = 0, eSpeedZoneName = 1 } message_speed_zone_e; -typedef enum { +typedef enum +{ eCadenceZoneMessageIndex = 254, eCadenceZoneHighValue = 0, eCadenceZoneName = 1 } message_cadence_zone_e; -typedef enum { +typedef enum +{ ePowerZoneMessageIndex = 254, ePowerZoneHighValue = 1, ePowerZoneName = 2 } message_power_zone_e; -typedef enum { +typedef enum +{ eMetZoneMessageIndex = 254, eMetZoneHighBpm = 1, eMetZoneCalories = 2, eMetZoneFatCalories = 3 } message_met_zone_e; -typedef enum { +typedef enum +{ eGoalMessageIndex = 254, eGoalSport = 0, eGoalSubSport = 1, @@ -283,7 +308,8 @@ eGoalSource = 11 } message_goal_e; -typedef enum { +typedef enum +{ eActivityTimestamp = 253, eActivityTotalTimerTime = 0, eActivityNumSessions = 1, @@ -294,7 +320,8 @@ eActivityEventGroup = 6 } message_activity_e; -typedef enum { +typedef enum +{ eSessionMessageIndex = 254, eSessionTimestamp = 253, eSessionEvent = 0, @@ -416,7 +443,8 @@ eSessionAvgVam = 139 } message_session_e; -typedef enum { +typedef enum +{ eLapMessageIndex = 254, eLapTimestamp = 253, eLapEvent = 0, @@ -525,7 +553,8 @@ eLapAvgVam = 121 } message_lap_e; -typedef enum { +typedef enum +{ eLengthMessageIndex = 254, eLengthTimestamp = 253, eLengthEvent = 0, @@ -546,7 +575,8 @@ eLengthZoneCount = 21 } message_length_e; -typedef enum { +typedef enum +{ eRecordTimestamp = 253, eRecordPositionLat = 0, eRecordPositionLong = 1, @@ -608,7 +638,8 @@ eRecordStepLength = 85 } message_record_e; -typedef enum { +typedef enum +{ eEventTimestamp = 253, eEventEvent = 0, eEventEventType = 1, @@ -624,7 +655,8 @@ eEventDeviceIndex = 13 } message_event_e; -typedef enum { +typedef enum +{ eDeviceInfoTimestamp = 253, eDeviceInfoDeviceIndex = 0, eDeviceInfoDeviceType = 1, @@ -645,7 +677,8 @@ eDeviceInfoProductName = 27 } message_device_info_e; -typedef enum { +typedef enum +{ eTrainingFileTimestamp = 253, eTrainingFileType = 0, eTrainingFileManufacturer = 1, @@ -654,11 +687,13 @@ eTrainingFileTimeCreated = 4 } message_training_file_e; -typedef enum { +typedef enum +{ eHrvTime = 0 } message_hrv_e; -typedef enum { +typedef enum +{ eWeatherConditionsTimestamp = 253, eWeatherConditionsWeatherReport = 0, eWeatherConditionsTemperature = 1, @@ -677,7 +712,8 @@ eWeatherConditionsLowTemperature = 14 } message_weather_conditions_e; -typedef enum { +typedef enum +{ eWeatherAlertTimestamp = 253, eWeatherAlertReportId = 0, eWeatherAlertIssueTime = 1, @@ -686,7 +722,8 @@ eWeatherAlertType = 4 } message_weather_alert_e; -typedef enum { +typedef enum +{ eGpsMetadataTimestamp = 253, eGpsMetadataTimestampMs = 0, eGpsMetadataPositionLat = 1, @@ -698,7 +735,8 @@ eGpsMetadataVelocity = 7 } message_gps_metadata_e; -typedef enum { +typedef enum +{ eCameraEventTimestamp = 253, eCameraEventTimestampMs = 0, eCameraEventCameraEventType = 1, @@ -706,7 +744,8 @@ eCameraEventCameraOrientation = 3 } message_camera_event_e; -typedef enum { +typedef enum +{ eGyroscopeDataTimestamp = 253, eGyroscopeDataTimestampMs = 0, eGyroscopeDataSampleTimeOffset = 1, @@ -718,7 +757,8 @@ eGyroscopeDataCalibratedGyroZ = 7 } message_gyroscope_data_e; -typedef enum { +typedef enum +{ eAccelerometerDataTimestamp = 253, eAccelerometerDataTimestampMs = 0, eAccelerometerDataSampleTimeOffset = 1, @@ -733,7 +773,8 @@ eAccelerometerDataCompressedCalibratedAccelZ = 10 } message_accelerometer_data_e; -typedef enum { +typedef enum +{ eMagnetometerDataTimestamp = 253, eMagnetometerDataTimestampMs = 0, eMagnetometerDataSampleTimeOffset = 1, @@ -745,7 +786,8 @@ eMagnetometerDataCalibratedMagZ = 7 } message_magnetometer_data_e; -typedef enum { +typedef enum +{ eThreeDSensorCalibrationTimestamp = 253, eThreeDSensorCalibrationSensorType = 0, eThreeDSensorCalibrationCalibrationFactor = 1, @@ -755,13 +797,15 @@ eThreeDSensorCalibrationOrientationMatrix = 5 } message_three_d_sensor_calibration_e; -typedef enum { +typedef enum +{ eVideoFrameTimestamp = 253, eVideoFrameTimestampMs = 0, eVideoFrameFrameNumber = 1 } message_video_frame_e; -typedef enum { +typedef enum +{ eObdiiDataTimestamp = 253, eObdiiDataTimestampMs = 0, eObdiiDataTimeOffset = 1, @@ -773,13 +817,15 @@ eObdiiDataStartTimestampMs = 7 } message_obdii_data_e; -typedef enum { +typedef enum +{ eNmeaSentenceTimestamp = 253, eNmeaSentenceTimestampMs = 0, eNmeaSentenceSentence = 1 } message_nmea_sentence_e; -typedef enum { +typedef enum +{ eAviationAttitudeTimestamp = 253, eAviationAttitudeTimestampMs = 0, eAviationAttitudeSystemTime = 1, @@ -794,25 +840,29 @@ eAviationAttitudeValidity = 10 } message_aviation_attitude_e; -typedef enum { +typedef enum +{ eVideoUrl = 0, eVideoHostingProvider = 1, eVideoDuration = 2 } message_video_e; -typedef enum { +typedef enum +{ eVideoTitleMessageIndex = 254, eVideoTitleMessageCount = 0, eVideoTitleText = 1 } message_video_title_e; -typedef enum { +typedef enum +{ eVideoDescriptionMessageIndex = 254, eVideoDescriptionMessageCount = 0, eVideoDescriptionText = 1 } message_video_description_e; -typedef enum { +typedef enum +{ eVideoClipClipNumber = 0, eVideoClipStartTimestamp = 1, eVideoClipStartTimestampMs = 2, @@ -822,14 +872,16 @@ eVideoClipClipEnd = 7 } message_video_clip_e; -typedef enum { +typedef enum +{ eCourseSport = 4, eCourseName = 5, eCourseCapabilities = 6, eCourseSubSport = 7 } message_course_e; -typedef enum { +typedef enum +{ eCoursePointMessageIndex = 254, eCoursePointTimestamp = 1, eCoursePointPositionLat = 2, @@ -840,7 +892,8 @@ eCoursePointFavorite = 8 } message_course_point_e; -typedef enum { +typedef enum +{ eSegmentIdName = 0, eSegmentIdUuid = 1, eSegmentIdSport = 2, @@ -852,7 +905,8 @@ eSegmentIdSelectionType = 8 } message_segment_id_e; -typedef enum { +typedef enum +{ eSegmentLeaderboardEntryMessageIndex = 254, eSegmentLeaderboardEntryName = 0, eSegmentLeaderboardEntryType = 1, @@ -862,7 +916,8 @@ eSegmentLeaderboardEntryActivityIdString = 5 } message_segment_leaderboard_entry_e; -typedef enum { +typedef enum +{ eSegmentPointMessageIndex = 254, eSegmentPointPositionLat = 1, eSegmentPointPositionLong = 2, @@ -871,7 +926,8 @@ eSegmentPointLeaderTime = 5 } message_segment_point_e; -typedef enum { +typedef enum +{ eSegmentLapMessageIndex = 254, eSegmentLapTimestamp = 253, eSegmentLapEvent = 0, @@ -960,7 +1016,8 @@ eSegmentLapManufacturer = 83 } message_segment_lap_e; -typedef enum { +typedef enum +{ eSegmentFileMessageIndex = 254, eSegmentFileFileUuid = 1, eSegmentFileEnabled = 3, @@ -972,14 +1029,16 @@ eSegmentFileDefaultRaceLeader = 11 } message_segment_file_e; -typedef enum { +typedef enum +{ eWorkoutSport = 4, eWorkoutCapabilities = 5, eWorkoutNumValidSteps = 6, eWorkoutWktName = 8 } message_workout_e; -typedef enum { +typedef enum +{ eWorkoutStepMessageIndex = 254, eWorkoutStepWktStepName = 0, eWorkoutStepDurationType = 1, @@ -992,7 +1051,8 @@ eWorkoutStepNotes = 8 } message_workout_step_e; -typedef enum { +typedef enum +{ eScheduleManufacturer = 0, eScheduleProduct = 1, eScheduleSerialNumber = 2, @@ -1002,7 +1062,8 @@ eScheduleScheduledTime = 6 } message_schedule_e; -typedef enum { +typedef enum +{ eTotalsMessageIndex = 254, eTotalsTimestamp = 253, eTotalsTimerTime = 0, @@ -1015,7 +1076,8 @@ eTotalsSportIndex = 9 } message_totals_e; -typedef enum { +typedef enum +{ eWeightScaleTimestamp = 253, eWeightScaleWeight = 0, eWeightScalePercentFat = 1, @@ -1031,7 +1093,8 @@ eWeightScaleUserProfileIndex = 12 } message_weight_scale_e; -typedef enum { +typedef enum +{ eBloodPressureTimestamp = 253, eBloodPressureSystolicPressure = 0, eBloodPressureDiastolicPressure = 1, @@ -1045,7 +1108,8 @@ eBloodPressureUserProfileIndex = 9 } message_blood_pressure_e; -typedef enum { +typedef enum +{ eMonitoringInfoTimestamp = 253, eMonitoringInfoLocalTimestamp = 0, eMonitoringInfoActivityType = 1, @@ -1054,7 +1118,8 @@ eMonitoringInfoRestingMetabolicRate = 5 } message_monitoring_info_e; -typedef enum { +typedef enum +{ eMonitoringTimestamp = 253, eMonitoringDeviceIndex = 0, eMonitoringCalories = 1, @@ -1086,7 +1151,8 @@ eMonitoringVigorousActivityMinutes = 34 } message_monitoring_e; -typedef enum { +typedef enum +{ eHrTimestamp = 253, eHrFractionalTimestamp = 0, eHrTime256 = 1, @@ -1095,14 +1161,16 @@ eHrEventTimestamp12 = 10 } message_hr_e; -typedef enum { +typedef enum +{ eMemoGlobPartIndex = 250, eMemoGlobMemo = 0, eMemoGlobMessageNumber = 1, eMemoGlobMessageIndex = 2 } message_memo_glob_e; -typedef enum { +typedef enum +{ eAntChannelIdChannelNumber = 0, eAntChannelIdDeviceType = 1, eAntChannelIdDeviceNumber = 2, @@ -1110,7 +1178,8 @@ eAntChannelIdDeviceIndex = 4 } message_ant_channel_id_e; -typedef enum { +typedef enum +{ eAntRxTimestamp = 253, eAntRxFractionalTimestamp = 0, eAntRxMesgId = 1, @@ -1119,7 +1188,8 @@ eAntRxData = 4 } message_ant_rx_e; -typedef enum { +typedef enum +{ eAntTxTimestamp = 253, eAntTxFractionalTimestamp = 0, eAntTxMesgId = 1, @@ -1128,14 +1198,16 @@ eAntTxData = 4 } message_ant_tx_e; -typedef enum { +typedef enum +{ eExdScreenConfigurationScreenIndex = 0, eExdScreenConfigurationFieldCount = 1, eExdScreenConfigurationLayout = 2, eExdScreenConfigurationScreenEnabled = 3 } message_exd_screen_configuration_e; -typedef enum { +typedef enum +{ eExdDataFieldConfigurationScreenIndex = 0, eExdDataFieldConfigurationConceptField = 1, eExdDataFieldConfigurationFieldId = 2, @@ -1144,7 +1216,8 @@ eExdDataFieldConfigurationTitle = 5 } message_exd_data_field_configuration_e; -typedef enum { +typedef enum +{ eExdDataConceptConfigurationScreenIndex = 0, eExdDataConceptConfigurationConceptField = 1, eExdDataConceptConfigurationFieldId = 2, @@ -1158,7 +1231,8 @@ eExdDataConceptConfigurationIsSigned = 11 } message_exd_data_concept_configuration_e; -typedef enum { +typedef enum +{ eFieldDescriptionDeveloperDataIndex = 0, eFieldDescriptionFieldDefinitionNumber = 1, eFieldDescriptionFitBaseTypeId = 2, @@ -1175,7 +1249,8 @@ eFieldDescriptionNativeFieldNum = 15 } message_field_description_e; -typedef enum { +typedef enum +{ eDeveloperDataIdDeveloperId = 0, eDeveloperDataIdApplicationId = 1, eDeveloperDataIdManufacturerId = 2, diff -Nru qmapshack-1.8.1/src/gis/fit/serialization.cpp qmapshack-1.9.0/src/gis/fit/serialization.cpp --- qmapshack-1.8.1/src/gis/fit/serialization.cpp 2017-04-06 18:50:16.000000000 +0000 +++ qmapshack-1.9.0/src/gis/fit/serialization.cpp 2017-07-11 19:52:23.000000000 +0000 @@ -45,7 +45,6 @@ { QDateTime dateTime; dateTime.setTime_t(sec1970to1990 + timestamp); - dateTime.setTimeSpec(Qt::UTC); return dateTime; } diff -Nru qmapshack-1.8.1/src/gis/gpx/CGpxProject.cpp qmapshack-1.9.0/src/gis/gpx/CGpxProject.cpp --- qmapshack-1.8.1/src/gis/gpx/CGpxProject.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/gpx/CGpxProject.cpp 2017-07-10 19:52:50.000000000 +0000 @@ -149,6 +149,10 @@ { CKnownExtension::initGarminTPXv1(IUnit::self(), ns); } + else if(att.value() == gpxdata_ns) + { + CKnownExtension::initClueTrustTPXv1(IUnit::self(), ns); + } } } diff -Nru qmapshack-1.8.1/src/gis/gpx/serialization.cpp qmapshack-1.9.0/src/gis/gpx/serialization.cpp --- qmapshack-1.8.1/src/gis/gpx/serialization.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/gpx/serialization.cpp 2017-07-10 19:52:50.000000000 +0000 @@ -38,6 +38,7 @@ const QString IGisProject::ql_ns = "http://www.qlandkarte.org/xmlschemas/v1.1"; const QString IGisProject::gs_ns = "http://www.groundspeak.com/cache/1/0"; const QString IGisProject::tp1_ns = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1"; +const QString IGisProject::gpxdata_ns= "http://www.cluetrust.com/XML/GPXDATA/1/0"; static void readXml(const QDomNode& xml, const QString& tag, qint32& value) @@ -299,7 +300,7 @@ static void readXml(const QDomNode& node, const QString& parentTags, QHash& extensions) { QString tag = node.nodeName(); - if(tag.left(3) == "ql:") + if(tag.left(8) == "ql:flags") { return; } @@ -454,13 +455,17 @@ gpx.setAttribute("xmlns:rmc", rmc_ns); gpx.setAttribute("xmlns:ql", ql_ns); gpx.setAttribute("xmlns:tp1", tp1_ns); + gpx.setAttribute("xmlns:gpxdata",gpxdata_ns); + + schemaLocation = QString() + gpx_ns + " http://www.topografix.com/GPX/1/1/gpx.xsd " + gpxx_ns + " http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd " + gpxtpx_ns + " http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd " + wptx1_ns + " http://www.garmin.com/xmlschemas/WaypointExtensionv1.xsd " - + ql_ns + " http://www.qlandkarte.org/xmlschemas/v1.1/ql-extensions.xsd "; + + ql_ns + " http://www.qlandkarte.org/xmlschemas/v1.1/ql-extensions.xsd " + + gpxdata_ns+ " http://www.cluetrust.com/Schemas/gpxdata10.xsd"; } else { diff -Nru qmapshack-1.8.1/src/gis/IGisItem.h qmapshack-1.9.0/src/gis/IGisItem.h --- qmapshack-1.8.1/src/gis/IGisItem.h 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/gis/IGisItem.h 2017-07-04 16:44:15.000000000 +0000 @@ -440,7 +440,7 @@ /** @brief Remove all history entries older than the current selected one. - */ + */ void cutHistoryBefore(); /** diff -Nru qmapshack-1.8.1/src/gis/IGisWidget.ui qmapshack-1.9.0/src/gis/IGisWidget.ui --- qmapshack-1.8.1/src/gis/IGisWidget.ui 2017-01-14 08:29:06.000000000 +0000 +++ qmapshack-1.9.0/src/gis/IGisWidget.ui 2017-07-23 13:41:03.000000000 +0000 @@ -30,27 +30,21 @@ 0 - - + + 3 - + 3 - - 3 - - - 3 - - + Opacity - + Change the opacity of all GIS Items on the map. @@ -66,6 +60,20 @@ + + + + Filter + + + + + + + false + + + @@ -188,6 +196,24 @@ + + + + :/icons/32x32/Cancel.png:/icons/32x32/Cancel.png + + + Clear Filter + + + + + + :/icons/32x32/Apply.png:/icons/32x32/Apply.png + + + Setup Filter + + @@ -204,5 +230,22 @@ - + + + actionClearFilter + triggered() + lineFilter + clear() + + + -1 + -1 + + + 228 + 34 + + + + diff -Nru qmapshack-1.8.1/src/gis/ISetupFilter.ui qmapshack-1.9.0/src/gis/ISetupFilter.ui --- qmapshack-1.8.1/src/gis/ISetupFilter.ui 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/ISetupFilter.ui 2017-07-23 13:41:03.000000000 +0000 @@ -0,0 +1,60 @@ + + + ISetupFilter + + + + 0 + 0 + 123 + 78 + + + + Form + + + true + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + Apply filter to + + + + + + + name only + + + + + + + complete text + + + + + + + + diff -Nru qmapshack-1.8.1/src/gis/Poi.h qmapshack-1.9.0/src/gis/Poi.h --- qmapshack-1.8.1/src/gis/Poi.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/gis/Poi.h 2017-07-04 16:44:15.000000000 +0000 @@ -27,6 +27,7 @@ QString name; QString desc; QPointF pos; + QSize symbolSize; }; #endif //POI_H diff -Nru qmapshack-1.8.1/src/gis/prj/IGisProject.cpp qmapshack-1.9.0/src/gis/prj/IGisProject.cpp --- qmapshack-1.8.1/src/gis/prj/IGisProject.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/prj/IGisProject.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -49,7 +49,7 @@ const QString IGisProject::filedialogSaveFilters = filedialogFilterGPX + ";; " + filedialogFilterQMS + ";; " + filedialogFilterTCX; const QString IGisProject::filedialogLoadFilters = filedialogAllSupported + ";; " + filedialogFilterGPX + ";; " + filedialogFilterTCX + ";; " + filedialogFilterQMS + ";; " + filedialogFilterSLF + ";;" + filedialogFilterFIT; - +IGisProject::filter_mode_e IGisProject::filterMode = IGisProject::eFilterModeName; IGisProject::IGisProject(type_e type, const QString &filename, CGisListWks *parent) : QTreeWidgetItem(parent) @@ -593,7 +593,7 @@ for(int i = 0; i < childCount(); i++) { IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -615,7 +615,7 @@ for(int i = 0; i < childCount(); i++) { IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -637,7 +637,7 @@ for(int i = 0; i < childCount(); i++) { IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -652,7 +652,7 @@ for(int i = childCount(); i > 0; i--) { IGisItem * item = dynamic_cast(child(i-1)); - if(nullptr == item) + if(nullptr == item ) { continue; } @@ -818,7 +818,7 @@ } IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -837,7 +837,7 @@ for(int i = 0; i < childCount(); i++) { IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -862,7 +862,7 @@ } IGisItem * item = dynamic_cast(child(i)); - if(nullptr == item) + if(nullptr == item || item->isHidden()) { continue; } @@ -1098,3 +1098,37 @@ break; } } + +void IGisProject::filter(const QString& str) +{ + const int N = childCount(); + + if(str.isEmpty()) + { + for(int n = 0; n < N; n++) + { + child(n)->setHidden(false); + } + return; + } + + for(int n = 0; n < N; n++) + { + IGisItem * item = dynamic_cast(child(n)); + if(item == nullptr) + { + continue; + } + + switch(filterMode) + { + case eFilterModeName: + item->setHidden(!item->getName().toUpper().contains(str)); + break; + + case eFilterModeText: + item->setHidden(!item->getInfo(true, true).toUpper().contains(str)); + break; + } + } +} diff -Nru qmapshack-1.8.1/src/gis/prj/IGisProject.h qmapshack-1.9.0/src/gis/prj/IGisProject.h --- qmapshack-1.8.1/src/gis/prj/IGisProject.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/gis/prj/IGisProject.h 2017-07-23 13:41:03.000000000 +0000 @@ -62,6 +62,12 @@ ,eSortFolderSymbol }; + enum filter_mode_e + { + eFilterModeName + ,eFilterModeText + }; + struct person_t { QString name; @@ -103,6 +109,8 @@ static const QString filedialogSaveFilters; static const QString filedialogLoadFilters; + static filter_mode_e filterMode; + IGisProject(type_e type, const QString &filename, CGisListWks *parent); IGisProject(type_e type, const QString &filename, IDevice *parent); virtual ~IGisProject(); @@ -478,6 +486,8 @@ return noUpdate; } + void filter(const QString& str); + protected: void genKey() const; virtual void setupName(const QString& defaultName); @@ -510,6 +520,7 @@ // Those are standard GPX/XML namespaces static const QString gpx_ns; static const QString xsi_ns; + static const QString gpxdata_ns; QPointer dlgDetails; diff -Nru qmapshack-1.8.1/src/gis/rte/CGisItemRte.cpp qmapshack-1.9.0/src/gis/rte/CGisItemRte.cpp --- qmapshack-1.8.1/src/gis/rte/CGisItemRte.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/gis/rte/CGisItemRte.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -860,6 +860,9 @@ rtept->fakeSubpt.type = subpt_t::eTypeWpt; rtept->fakeSubpt.instruction = QString(next->desc1) + ".\n" + QString(next->desc2) + "."; + + rte.totalDistance = rtept->fakeSubpt.distance; + rte.totalTime = rtept->fakeSubpt.time.toTime_t() - time.toTime_t(); } else if(rtept != nullptr) { diff -Nru qmapshack-1.8.1/src/gis/rte/router/CRouterRoutino.cpp qmapshack-1.9.0/src/gis/rte/router/CRouterRoutino.cpp --- qmapshack-1.8.1/src/gis/rte/router/CRouterRoutino.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/gis/rte/router/CRouterRoutino.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -358,11 +358,7 @@ mutex.unlock(); - CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); - if(canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } diff -Nru qmapshack-1.8.1/src/gis/search/CSearchGoogle.cpp qmapshack-1.9.0/src/gis/search/CSearchGoogle.cpp --- qmapshack-1.8.1/src/gis/search/CSearchGoogle.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/search/CSearchGoogle.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -160,9 +160,6 @@ } setExpanded(true); - CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); - if(canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } diff -Nru qmapshack-1.8.1/src/gis/trk/CDetailsTrk.cpp qmapshack-1.9.0/src/gis/trk/CDetailsTrk.cpp --- qmapshack-1.8.1/src/gis/trk/CDetailsTrk.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/CDetailsTrk.cpp 2017-06-30 14:25:55.000000000 +0000 @@ -33,6 +33,7 @@ #include "gis/trk/filter/CFilterSpeed.h" #include "gis/trk/filter/CFilterSplitSegment.h" #include "gis/trk/filter/CFilterSubPt2Pt.h" +#include "gis/trk/filter/CFilterTerrainSlope.h" #include "helpers/CLinksDialog.h" #include "helpers/CSettings.h" #include "helpers/Signals.h" @@ -173,7 +174,7 @@ addFilterGroup (treeFilter, trk, tr("Change timestamp of track points"), "://icons/48x48/Time.png"); - addFilterGroup + addFilterGroup (treeFilter, trk, tr("Miscellaneous"), "://icons/48x48/CSrcUnknown.png"); @@ -449,13 +450,12 @@ widgetColorActivity->setVisible(enabledActivity); widgetColorActivity->setEnabled(enabledActivity); + X_____________UnBlockAllSignals_____________X(this); // refill comboboxes to select track property to be displayed by graphs loadGraphSource(comboGraph2, 2, CKnownExtension::internalSpeed); loadGraphSource(comboGraph3, 3, CKnownExtension::internalProgress); - X_____________UnBlockAllSignals_____________X(this); - CFilterDeleteExtension *filter = treeFilter->findChild(); if(nullptr != filter) { diff -Nru qmapshack-1.8.1/src/gis/trk/CGisItemTrk.cpp qmapshack-1.9.0/src/gis/trk/CGisItemTrk.cpp --- qmapshack-1.8.1/src/gis/trk/CGisItemTrk.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/CGisItemTrk.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -1977,13 +1977,7 @@ resetMouseRange(); mouseFocusOwner = (mode == eModeRange) ? owner : ""; - - CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); - if(nullptr != canvas) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } - + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); return true; } diff -Nru qmapshack-1.8.1/src/gis/trk/CGisItemTrk.h qmapshack-1.9.0/src/gis/trk/CGisItemTrk.h --- qmapshack-1.8.1/src/gis/trk/CGisItemTrk.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/CGisItemTrk.h 2017-06-30 14:25:55.000000000 +0000 @@ -524,6 +524,7 @@ /** @param speed speed in meter per seconds */ void filterSpeed(qreal speed); + void filterTerrainSlope(); void filterReplaceElevation(); void filterInterpolateElevation(); void filterReset(); diff -Nru qmapshack-1.8.1/src/gis/trk/CKnownExtension.cpp qmapshack-1.9.0/src/gis/trk/CKnownExtension.cpp --- qmapshack-1.8.1/src/gis/trk/CKnownExtension.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/CKnownExtension.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -24,10 +24,13 @@ const QString CKnownExtension::internalSpeed = "::ql:speed"; const QString CKnownExtension::internalEle = "::ql:ele"; const QString CKnownExtension::internalProgress = "::ql:progress"; +const QString CKnownExtension::internalTerrainSlope = "::ql:terrainslope"; QHash CKnownExtension::knownExtensions; QSet CKnownExtension::registeredNS; +static const int NOORDER = std::numeric_limits::max(); + static fTrkPtGetVal getExtensionValueFunc(const QString ext) { return [ext](const CTrackData::trkpt_t &p) @@ -83,26 +86,57 @@ { // support for extensions used by MIO Cyclo ver. 4.2 (who needs xml namespaces?!) knownExtensions.insert("heartrate", - { tr("Heart Rate"), std::numeric_limits::max(), 0., 300., 1., "bpm", "://icons/32x32/CSrcHR.png", true, false, + { tr("Heart Rate"), NOORDER, 0., 300., 1., "bpm", "://icons/32x32/CSrcHR.png", true, false, getExtensionValueFunc("heartrate")}); knownExtensions.insert("cadence", - { tr("Cadence"), std::numeric_limits::max(), 0., 500., 1., "rpm", "://icons/32x32/CSrcCAD.png", true, false, + { tr("Cadence"), NOORDER, 0., 500., 1., "rpm", "://icons/32x32/CSrcCAD.png", true, false, getExtensionValueFunc("cadence")}); knownExtensions.insert("speed", - { tr("Speed"), std::numeric_limits::max(), 0., 600., units.speedfactor, units.speedunit, "://icons/32x32/CSrcSpeed.png", true, false, + { tr("Speed"), NOORDER, 0., 600., units.speedfactor, units.speedunit, "://icons/32x32/CSrcSpeed.png", true, false, getExtensionValueFunc("speed")}); knownExtensions.insert("acceleration", - { tr("Acceleration"), std::numeric_limits::max(), std::numeric_limits::lowest(), std::numeric_limits::max(), units.basefactor, units.baseunit + "/s²", "://icons/32x32/CSrcAccel.png", true, false, + { tr("Acceleration"), NOORDER, std::numeric_limits::lowest(), std::numeric_limits::max(), units.basefactor, units.baseunit + "/s²", "://icons/32x32/CSrcAccel.png", true, false, getExtensionValueFunc("acceleration")}); knownExtensions.insert("course", - { tr("Course"), std::numeric_limits::max(), -3.2, 3.2, 1., "rad", "://icons/32x32/CSrcCourse.png", true, false, + { tr("Course"), NOORDER, -3.2, 3.2, 1., "rad", "://icons/32x32/CSrcCourse.png", true, false, getExtensionValueFunc("course")}); } +void CKnownExtension::initClueTrustTPXv1(const IUnit &units, const QString &ns) +{ + knownExtensions.insert(ns % ":cadence", + { tr("Cadence"), 0, 0., 500., 1., "rpm", "://icons/32x32/CSrcCAD.png", true, false, + getExtensionValueFunc(ns % ":cadence")}); + + knownExtensions.insert(ns % ":temp", + { tr("Temperature"), 1, -100., 100., 1., "°C", "://icons/32x32/CSrcATemp.png", true, false, + getExtensionValueFunc(ns % ":temp")}); + + knownExtensions.insert(ns % ":distance", + { tr("Distance"), 2, 0., +100000000., units.basefactor, units.baseunit, "://icons/32x32/CSrcDistance.png", true, false, + getExtensionValueFunc(ns % ":distance") }); + + knownExtensions.insert(ns % ":altitude", + { tr("Elevation"), 3, -1000., +10000., units.basefactor, units.baseunit, "://icons/32x32/CSrcElevation.png", true, false, + getExtensionValueFunc(ns % ":altitude") }); + + knownExtensions.insert(ns % ":seaLevelPressure", + { tr("Sea Level Pressure"), 4, 0., 1500., 1., "hPa", "://icons/32x32/CSrcSeaLevelPressure.png", true, false, + getExtensionValueFunc(ns % ":seaLevelPressure") }); + + knownExtensions.insert(ns % ":speed", + { tr("Speed"), 5, 0., 600., units.speedfactor, units.speedunit, "://icons/32x32/CSrcSpeed.png", true, false, + getExtensionValueFunc(ns % ":speed")}); + + knownExtensions.insert(ns % ":verticalSpeed", + { tr("Speed (vertical)"), 6, 0., 50., units.speedfactor, units.speedunit, "://icons/32x32/CSrcVertSpeed.png", true, false, + getExtensionValueFunc(ns % ":verticalSpeed")}); +} + void CKnownExtension::init(const IUnit &units) { knownExtensions = @@ -125,6 +159,11 @@ {internalProgress, { tr("Progress"), -1, 0., NOFLOAT, units.basefactor, units.baseunit, "://icons/32x32/Progress.png", true, true, [](const CTrackData::trkpt_t &p) { return p.distance; }} + }, + + {internalTerrainSlope, + { tr("Terrain slope"), -1, 0, 90., 1., "°", "://icons/32x32/CSrcSlope.png", true, false, + getExtensionValueFunc(internalTerrainSlope)} } }; @@ -132,11 +171,12 @@ initGarminTPXv1(units, "tp1"); initMioTPX(units); + initClueTrustTPXv1(units, "gpxdata"); } const CKnownExtension CKnownExtension::get(const QString &name) { - CKnownExtension def("", std::numeric_limits::max(), -100000., 100000., 1., "", "://icons/32x32/CSrcUnknown.png", false, true, + CKnownExtension def("", NOORDER, -100000., 100000., 1., "", "://icons/32x32/CSrcUnknown.png", false, true, getExtensionValueFunc(name) ); return knownExtensions.value(name, def); diff -Nru qmapshack-1.8.1/src/gis/trk/CKnownExtension.h qmapshack-1.9.0/src/gis/trk/CKnownExtension.h --- qmapshack-1.8.1/src/gis/trk/CKnownExtension.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/CKnownExtension.h 2017-07-23 13:41:03.000000000 +0000 @@ -40,10 +40,13 @@ */ static void initGarminTPXv1(const IUnit &units, const QString &ns); + static void initClueTrustTPXv1(const IUnit &units, const QString &ns); + static const QString internalSlope; //< name of internally derived slope static const QString internalSpeed; //< name of internally derived speed static const QString internalEle; //< name of internally derived elevation (DEM) static const QString internalProgress; //< name of internally derived progress + static const QString internalTerrainSlope; //< name of internally derived terrain slope /** @brief Get extension descriptor for name diff -Nru qmapshack-1.8.1/src/gis/trk/filter/CFilterTerrainSlope.cpp qmapshack-1.9.0/src/gis/trk/filter/CFilterTerrainSlope.cpp --- qmapshack-1.8.1/src/gis/trk/filter/CFilterTerrainSlope.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/filter/CFilterTerrainSlope.cpp 2017-06-30 14:25:55.000000000 +0000 @@ -0,0 +1,37 @@ +/********************************************************************************************** + Copyright (C) 2014 Oliver Eichler oliver.eichler@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 . + +**********************************************************************************************/ + +#include "canvas/CCanvas.h" +#include "gis/trk/CGisItemTrk.h" +#include "gis/trk/filter/CFilterTerrainSlope.h" + +CFilterTerrainSlope::CFilterTerrainSlope(CGisItemTrk &trk, QWidget *parent) + : QWidget(parent) + , trk(trk) +{ + setupUi(this); + + connect(toolApply, &QToolButton::clicked, this, &CFilterTerrainSlope::slotApply); +} + +void CFilterTerrainSlope::slotApply() +{ + CCanvas::setOverrideCursor(Qt::WaitCursor,"CFilterTerrainSlope"); + trk.filterTerrainSlope(); + CCanvas::restoreOverrideCursor("CFilterTerrainSlope"); +} diff -Nru qmapshack-1.8.1/src/gis/trk/filter/CFilterTerrainSlope.h qmapshack-1.9.0/src/gis/trk/filter/CFilterTerrainSlope.h --- qmapshack-1.8.1/src/gis/trk/filter/CFilterTerrainSlope.h 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/filter/CFilterTerrainSlope.h 2017-06-30 14:25:55.000000000 +0000 @@ -0,0 +1,42 @@ +/********************************************************************************************** + Copyright (C) 2014 Oliver Eichler oliver.eichler@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 . + +**********************************************************************************************/ + +#ifndef CFILTERTERRAINSLOPE_H +#define CFILTERTERRAINSLOPE_H + +#include "ui_IFilterTerrainSlope.h" +#include + +class CGisItemTrk; + +class CFilterTerrainSlope : public QWidget, private Ui::IFilterTerrainSlope +{ + Q_OBJECT +public: + CFilterTerrainSlope(CGisItemTrk& trk, QWidget * parent); + virtual ~CFilterTerrainSlope() = default; + +private slots: + void slotApply(); + +private: + CGisItemTrk& trk; +}; + +#endif //CFILTERTERRAINSLOPE_H + diff -Nru qmapshack-1.8.1/src/gis/trk/filter/filter.cpp qmapshack-1.9.0/src/gis/trk/filter/filter.cpp --- qmapshack-1.8.1/src/gis/trk/filter/filter.cpp 2017-03-26 10:12:45.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/filter/filter.cpp 2017-06-30 14:25:55.000000000 +0000 @@ -199,6 +199,28 @@ changed(tr("Smoothed profile with a Median filter of size %1").arg(points), "://icons/48x48/SetEle.png"); } +void CGisItemTrk::filterTerrainSlope() +{ + QPolygonF line; + for(const CTrackData::trkpt_t &pt : trk) + { + line << pt.radPoint(); + } + + QPolygonF slope(line.size()); + CMainWindow::self().getSlopeAt(line, slope); + + int cnt = 0; + for(CTrackData::trkpt_t& pt : trk) + { + pt.extensions[CKnownExtension::internalTerrainSlope] = slope[cnt].ry(); + ++cnt; + } + + deriveSecondaryData(); + changed(tr("Added terrain slope from DEM file."), "://icons/48x48/CSrcSlope.png"); +} + void CGisItemTrk::filterReplaceElevation() { QPolygonF line; diff -Nru qmapshack-1.8.1/src/gis/trk/filter/IFilterTerrainSlope.ui qmapshack-1.9.0/src/gis/trk/filter/IFilterTerrainSlope.ui --- qmapshack-1.8.1/src/gis/trk/filter/IFilterTerrainSlope.ui 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/gis/trk/filter/IFilterTerrainSlope.ui 2017-06-30 14:26:24.000000000 +0000 @@ -0,0 +1,99 @@ + + + IFilterTerrainSlope + + + + 0 + 0 + 996 + 69 + + + + Form + + + + 3 + + + 0 + + + 0 + + + 0 + + + 3 + + + + + + 0 + 0 + + + + + + + :/icons/48x48/CSrcSlope.png + + + + + + + <b>Calculate Terrain Slope</b> + + + + + + + 3 + + + + + Calculate slope of the terrain based on loaded DEM files. + + + + + + + ... + + + + :/icons/32x32/Apply.png:/icons/32x32/Apply.png + + + + 22 + 22 + + + + + + + + + + Qt::Horizontal + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/gis/wpt/CDetailsGeoCache.cpp qmapshack-1.9.0/src/gis/wpt/CDetailsGeoCache.cpp --- qmapshack-1.8.1/src/gis/wpt/CDetailsGeoCache.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/gis/wpt/CDetailsGeoCache.cpp 2017-07-10 19:52:50.000000000 +0000 @@ -221,7 +221,7 @@ } QRegExp re1(".*CachePageImages.*"); - QRegExp re2("(http://.*\\.jpg).*>(.*)"); + QRegExp re2("(https://.*\\.jpg).*>(.*)"); re2.setMinimal(true); bool watchOut = false; diff -Nru qmapshack-1.8.1/src/helpers/CProgressDialog.cpp qmapshack-1.9.0/src/helpers/CProgressDialog.cpp --- qmapshack-1.8.1/src/helpers/CProgressDialog.cpp 2017-03-26 10:14:54.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/CProgressDialog.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -45,7 +45,8 @@ // add a timer to update the elapsed time QTimer * timer = new QTimer(this); timer->start(1000); - connect(timer, &QTimer::timeout, this, [this]{setValue(0);}); + connect(timer, &QTimer::timeout, this, [this] {setValue(0); + }); } hide(); QTimer::singleShot(1000, this, SLOT(show())); diff -Nru qmapshack-1.8.1/src/helpers/CToolBarConfig.cpp qmapshack-1.9.0/src/helpers/CToolBarConfig.cpp --- qmapshack-1.8.1/src/helpers/CToolBarConfig.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/CToolBarConfig.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,110 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#include "CSettings.h" +#include "helpers/CToolBarConfig.h" +#include +#include + +CToolBarConfig::CToolBarConfig(QObject * const & parent, QToolBar * const & toolBar, const QList & availableActions, const QList & defaultActions) + : QObject(parent), + toolBar(toolBar), + available(availableActions), + defaultActions(defaultActions) +{ +} + +CToolBarConfig::~CToolBarConfig() +{ +} + +void CToolBarConfig::loadSettings() +{ + SETTINGS; + QStringList actions = cfg.value(QStringLiteral("ToolBar/actions")).toStringList(); + if (actions.isEmpty()) + { + setDefaultConfiguredActions(); + } + else + { + setConfiguredActionsByName(actions); + } +} + +void CToolBarConfig::saveSettings() const +{ + SETTINGS; + QStringList configuredNames; + for (QAction * const & action : configuredActions()) + { + configuredNames << action->objectName(); + } + cfg.setValue(QStringLiteral("ToolBar/actions"),configuredNames); +} + +const QList & CToolBarConfig::availableActions() const +{ + return available; +} + +const QList & CToolBarConfig::configuredActions() const +{ + return configured; +} + +void CToolBarConfig::setConfiguredActionsByName(const QStringList & names) +{ + QList actions; + for (const QString & name : names) + { + for (QAction * const & action : available) + { + if (action->objectName() == name) + { + if (action->isSeparator()) + { + QAction * separator = new QAction(this); + separator->setObjectName(QStringLiteral("separator")); + separator->setSeparator(true); + actions << separator; + } + else + { + actions << action; + } + break; + } + } + } + setConfiguredActions(actions); +} + +void CToolBarConfig::setDefaultConfiguredActions() +{ + setConfiguredActions(defaultActions); +} + +void CToolBarConfig::setConfiguredActions(const QList & actions) +{ + configured.clear(); + configured << actions; + toolBar->clear(); + toolBar->addActions(actions); +} diff -Nru qmapshack-1.8.1/src/helpers/CToolBarConfig.h qmapshack-1.9.0/src/helpers/CToolBarConfig.h --- qmapshack-1.8.1/src/helpers/CToolBarConfig.h 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/CToolBarConfig.h 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,51 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#ifndef CTOOLBARCONFIG_H +#define CTOOLBARCONFIG_H + +#include +class T; +template <> +class QList; +class QAction; +class QToolBar; + +class CToolBarConfig : public QObject +{ + Q_OBJECT +public: + CToolBarConfig(QObject * const & parent, QToolBar * const & toolBar, const QList & availableActions, const QList & defaultActions); + virtual ~CToolBarConfig(); + + void loadSettings(); + void saveSettings() const; + const QList & availableActions() const; + const QList & configuredActions() const; + void setConfiguredActionsByName(const QStringList & actions); + void setConfiguredActions(const QList & actions); + void setDefaultConfiguredActions(); + +private: + QToolBar * const toolBar; + const QList available; + const QList defaultActions; + QList configured; +}; +#endif //CTOOLBARCONFIG_H diff -Nru qmapshack-1.8.1/src/helpers/CToolBarSetupDialog.cpp qmapshack-1.9.0/src/helpers/CToolBarSetupDialog.cpp --- qmapshack-1.8.1/src/helpers/CToolBarSetupDialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/CToolBarSetupDialog.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,107 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#include "helpers/CToolBarConfig.h" +#include "helpers/CToolBarSetupDialog.h" + +bool CToolBarSetupDialog::CItemFilter::shouldBeMoved(QListWidgetItem *item) +{ + CDialogItem * dialogItem = dynamic_cast(item); + if (dialogItem != nullptr) + { + return dialogItem->actionName != QStringLiteral("separator"); + } + return true; +} + +CToolBarSetupDialog::CToolBarSetupDialog(QWidget * const & parent, CToolBarConfig * const & config) : QDialog(parent), config(config) +{ + setupUi(this); + + selectActionsWidget->setFilter(new CItemFilter(this)); + + connect(buttonBox, &QDialogButtonBox::clicked, this, &CToolBarSetupDialog::slotButtonClicked); + + configure(); + + selectActionsWidget->setLabelAvailable(tr("Available Actions")); + selectActionsWidget->setLabelSelected(tr("Selected Actions")); +} + +CToolBarSetupDialog::~CToolBarSetupDialog() +{ + selectActionsWidget->clear(); +} + +void CToolBarSetupDialog::accept() +{ + QStringList actionNames; + for (const QListWidgetItem * const selectedItem : selectActionsWidget->selected()) + { + const CDialogItem * const setupDialogItem = dynamic_cast(selectedItem); + if (setupDialogItem != nullptr) + { + actionNames << setupDialogItem->actionName; + } + } + config->setConfiguredActionsByName(actionNames); + QDialog::accept(); +} + +void CToolBarSetupDialog::slotButtonClicked(QAbstractButton *button) const +{ + if(buttonBox->buttonRole(button) == QDialogButtonBox::ResetRole) + { + config->setDefaultConfiguredActions(); + configure(); + } +} + +void CToolBarSetupDialog::configure() const +{ + QList availableItems; + QList selectedItems; + + for(QAction * const & action : config->availableActions()) + { + availableItems << new CDialogItem(action->icon(),action->iconText(),action->objectName()); + } + for(QAction * const & action : config->configuredActions()) + { + if (action->isSeparator()) + { + selectedItems << new CDialogItem(action->icon(),QStringLiteral("---------------"),action->objectName()); + } + else + { + QString configuredName = action->objectName(); + for(QListWidgetItem * const & item : availableItems) + { + if(configuredName == dynamic_cast(item)->actionName) + { + selectedItems << item; + break; + } + } + } + } + selectActionsWidget->setSelected(selectedItems); + selectActionsWidget->setAvailable(availableItems); +} + diff -Nru qmapshack-1.8.1/src/helpers/CToolBarSetupDialog.h qmapshack-1.9.0/src/helpers/CToolBarSetupDialog.h --- qmapshack-1.8.1/src/helpers/CToolBarSetupDialog.h 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/CToolBarSetupDialog.h 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,63 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#ifndef CTOOLBARSETUPDIALOG_H +#define CTOOLBARSETUPDIALOG_H + +#include "ui_IToolBarSetupDialog.h" + +class CToolBarConfig; + +class CToolBarSetupDialog : public QDialog, private Ui::IToolBarSetupDialog +{ + Q_OBJECT +public: + CToolBarSetupDialog(QWidget * const &parent, CToolBarConfig * const &config); + virtual ~CToolBarSetupDialog(); + +public slots: + void accept() override; + void slotButtonClicked(QAbstractButton * button) const; + +private: + class CDialogItem : public QListWidgetItem + { +public: + CDialogItem(QIcon icon, QString text, QString name) + : QListWidgetItem(icon, text, nullptr, QListWidgetItem::UserType), + actionName(name) {} + ~CDialogItem() override {} + QListWidgetItem * clone() const override { return new CDialogItem(this->icon(),this->text(),this->actionName); } +private: + const QString actionName; + friend class CToolBarSetupDialog; + }; + + class CItemFilter : public QObject, public CSelectDoubleListWidget::IItemFilter + { +public: + CItemFilter(QObject *parent) : QObject(parent) {} + ~CItemFilter() override {} + bool shouldBeMoved(QListWidgetItem *item) override; + }; + + void configure() const; + CToolBarConfig * config; +}; +#endif //CTOOLBARSETUPDIALOG_H diff -Nru qmapshack-1.8.1/src/helpers/IToolBarSetupDialog.ui qmapshack-1.9.0/src/helpers/IToolBarSetupDialog.ui --- qmapshack-1.8.1/src/helpers/IToolBarSetupDialog.ui 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/helpers/IToolBarSetupDialog.ui 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,72 @@ + + + IToolBarSetupDialog + + + + 0 + 0 + 847 + 549 + + + + Setup Toolbar + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults + + + + + + + + CSelectDoubleListWidget + QWidget +
widgets/CSelectDoubleListWidget.h
+ 1 +
+
+ + + + buttonBox + accepted() + IToolBarSetupDialog + accept() + + + 423 + 526 + + + 423 + 274 + + + + + buttonBox + rejected() + IToolBarSetupDialog + reject() + + + 423 + 526 + + + 423 + 274 + + + + +
Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/CSrcDistance.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/CSrcDistance.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/CSrcSeaLevelPressure.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/CSrcSeaLevelPressure.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/CSrcVertSpeed.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/CSrcVertSpeed.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/PointAdd.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/PointAdd.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/PointDel.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/PointDel.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/PointMove.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/PointMove.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToggleDem.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToggleDem.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToggleDocks.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToggleDocks.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToggleGis.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToggleGis.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToggleMaps.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToggleMaps.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToggleRouter.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToggleRouter.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToolBar.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToolBar.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/32x32/ToolBarSetup.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/32x32/ToolBarSetup.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/CSrcDistance.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/CSrcDistance.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/CSrcSeaLevelPressure.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/CSrcSeaLevelPressure.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/CSrcVertSpeed.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/CSrcVertSpeed.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/PointAdd.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/PointAdd.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/PointDel.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/PointDel.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/PointMove.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/PointMove.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToggleDem.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToggleDem.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToggleDocks.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToggleDocks.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToggleGis.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToggleGis.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToggleMaps.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToggleMaps.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToggleRouter.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToggleRouter.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToolBar.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToolBar.png differ Binary files /tmp/tmprg8cUl/8HpAjC3POT/qmapshack-1.8.1/src/icons/48x48/ToolBarSetup.png and /tmp/tmprg8cUl/f_XP8KOo2z/qmapshack-1.9.0/src/icons/48x48/ToolBarSetup.png differ diff -Nru qmapshack-1.8.1/src/icons/CSrcDistance.svg qmapshack-1.9.0/src/icons/CSrcDistance.svg --- qmapshack-1.8.1/src/icons/CSrcDistance.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/CSrcDistance.svg 2017-07-10 19:52:50.000000000 +0000 @@ -0,0 +1,121 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/CSrcSeaLevelPressure.svg qmapshack-1.9.0/src/icons/CSrcSeaLevelPressure.svg --- qmapshack-1.8.1/src/icons/CSrcSeaLevelPressure.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/CSrcSeaLevelPressure.svg 2017-07-10 19:52:50.000000000 +0000 @@ -0,0 +1,127 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/CSrcVertSpeed.svg qmapshack-1.9.0/src/icons/CSrcVertSpeed.svg --- qmapshack-1.8.1/src/icons/CSrcVertSpeed.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/CSrcVertSpeed.svg 2017-07-10 19:52:50.000000000 +0000 @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/PointAdd.svg qmapshack-1.9.0/src/icons/PointAdd.svg --- qmapshack-1.8.1/src/icons/PointAdd.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/PointAdd.svg 2017-05-19 14:53:52.000000000 +0000 @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/PointDel.svg qmapshack-1.9.0/src/icons/PointDel.svg --- qmapshack-1.8.1/src/icons/PointDel.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/PointDel.svg 2017-05-19 14:53:52.000000000 +0000 @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/PointMove.svg qmapshack-1.9.0/src/icons/PointMove.svg --- qmapshack-1.8.1/src/icons/PointMove.svg 2015-05-22 16:29:44.000000000 +0000 +++ qmapshack-1.9.0/src/icons/PointMove.svg 2017-05-19 14:53:52.000000000 +0000 @@ -13,11 +13,137 @@ height="64px" id="svg3513" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.91 r13725" sodipodi:docname="PointMove.svg"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml - + @@ -124,39 +310,100 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> - - - - - + style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4284" + width="64" + height="64" + x="0" + y="0" /> + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToggleDem.svg qmapshack-1.9.0/src/icons/ToggleDem.svg --- qmapshack-1.8.1/src/icons/ToggleDem.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToggleDem.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,97 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToggleDocks.svg qmapshack-1.9.0/src/icons/ToggleDocks.svg --- qmapshack-1.8.1/src/icons/ToggleDocks.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToggleDocks.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,214 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToggleGis.svg qmapshack-1.9.0/src/icons/ToggleGis.svg --- qmapshack-1.8.1/src/icons/ToggleGis.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToggleGis.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,125 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToggleMaps.svg qmapshack-1.9.0/src/icons/ToggleMaps.svg --- qmapshack-1.8.1/src/icons/ToggleMaps.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToggleMaps.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,99 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToggleRouter.svg qmapshack-1.9.0/src/icons/ToggleRouter.svg --- qmapshack-1.8.1/src/icons/ToggleRouter.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToggleRouter.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,128 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToolBarSetup.svg qmapshack-1.9.0/src/icons/ToolBarSetup.svg --- qmapshack-1.8.1/src/icons/ToolBarSetup.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToolBarSetup.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,126 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/icons/ToolBar.svg qmapshack-1.9.0/src/icons/ToolBar.svg --- qmapshack-1.8.1/src/icons/ToolBar.svg 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/icons/ToolBar.svg 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,121 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff -Nru qmapshack-1.8.1/src/IMainWindow.ui qmapshack-1.9.0/src/IMainWindow.ui --- qmapshack-1.8.1/src/IMainWindow.ui 2017-02-06 17:00:38.000000000 +0000 +++ qmapshack-1.9.0/src/IMainWindow.ui 2017-07-01 14:40:11.000000000 +0000 @@ -55,7 +55,7 @@ 0 0 800 - 23 + 22 @@ -103,7 +103,9 @@ Window + + @@ -279,6 +281,17 @@ + + + Toolbar + + + TopToolBarArea + + + false + + @@ -804,6 +817,33 @@ Quickstart Help + + + + :/icons/32x32/ToolBarSetup.png:/icons/32x32/ToolBarSetup.png + + + Setup Toolbar + + + + + true + + + + :/icons/32x32/ToggleDocks.png:/icons/32x32/ToggleDocks.png + + + Toggle Docks + + + Toggle visibility of dockable windows + + + Ctrl+D + + diff -Nru qmapshack-1.8.1/src/locale/qmapshack_cs.ts qmapshack-1.9.0/src/locale/qmapshack_cs.ts --- qmapshack-1.8.1/src/locale/qmapshack_cs.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_cs.ts 2017-07-23 13:41:03.000000000 +0000 @@ -122,7 +122,7 @@ Pohled %1 - + Setup Map Background Nastavit pozadí mapy @@ -559,32 +559,32 @@ CDetailsTrk - + Reduce visible track points Omezit poÄet viditelných bodů stopy - + Change elevation of track points ZmÄ›nit informace o výškách bodů stopy - + Change timestamp of track points ZmÄ›nit Äasová razítka bodů stopy - + Miscellaneous - + Color Barva - + Activity ÄŒinnost @@ -615,7 +615,7 @@ Obrázek %1 - + Unknown Neznámý @@ -728,7 +728,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. Chyba pÅ™i dekódování FIT: NeoÄekávaný konec souboru %1. @@ -744,12 +744,12 @@ CFitFieldDataState - + Missing field definition for development field. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. @@ -788,7 +788,7 @@ Chyba pÅ™i dekódování FIT: Architektura %1 není podporována. - + FIT decoding error: invalid offset %1 for state 'record content' Chyba pÅ™i dekódování FIT: Neplatný posun %1 pro stav 'zaznamenaný obsah' @@ -972,7 +972,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. Soubor FIT %1 neobsahuje žádná data GPS. @@ -1228,37 +1228,37 @@ Ukázat body. - + Changed name ZmÄ›nÄ›ný název - + Changed comment ZmÄ›nÄ›ná poznámka - + Changed description ZmÄ›nÄ›ný popis - + Changed links ZmÄ›nÄ›né odkazy - + Changed elevation of point %1 to %2 %3 Výška bodu %1 byla zmÄ›nÄ›na na %2 %3 - + Changed activity to '%1' for complete track. ÄŒinnost byla pro celou stopu zmÄ›nÄ›na na '%1'. - + Changed activity to '%1' for range(%2..%3). ÄŒinnost byla zmÄ›nÄ›na pro oblast (%2...%3) na '%1'. @@ -1289,51 +1289,56 @@ + Added terrain slope from DEM file. + + + + Replaced elevation data with data from DEM files. Výšková data nahrazena daty ze souborů s digitálním výškovým modelem (DEM). - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. Výšková data posunuta o %1%2. - + Changed start of track to %1. ZaÄátek stopy zmÄ›nÄ›n na %1. - + Remove timestamps. Odstranit Äasová razítka. - + Set artificial timestamps with delta of %1 sec. UmÄ›le utvoÅ™ená Äasová razítka nastavena s odstupem %1 s. - + Changed speed to %1%2. Rychlost zmÄ›nÄ›na na %1%2. - + %1 (Segment %2) %1 (Äást %2) - + Removed extension %1 from all Track Points Rozšíření %1 bylo odstranÄ›no ze vÅ¡ech bodů stopy - + Converted subpoints from routing to track points @@ -1346,17 +1351,17 @@ CGisItemWpt - + Archived Archivováno - + Available Dostupné - + Not Available Nedostupné @@ -1676,8 +1681,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> <b>Aktualizovat zařízení</b><p>Aktualizovat %1<br/>PoÄkejte, prosím...</p> @@ -1786,27 +1791,32 @@ CGisWidget - + Load project... Nahrát projekt... - + The project "%1" is already in the workspace. Projekt "%1" je již náhrán do pracovního prostoru. - + Copy items... Kopírovat prvky... - + + Change waypoint symbols. + + + + Cut Track... Rozkrojit stopu... - + Do you want to delete the original track? Opravdu chcete smazat původní stopu? @@ -1838,27 +1848,27 @@ Není souborem GPX: %1 - + File exists ... Soubor existuje... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> Soubor existuje a nebyl vytvoÅ™en programem QMapShack. Pokud stisknete Ano, budou vÅ¡echna data v tomto souboru ztracena. I když by tento soubor obsahoval data GPX a byl nahrán programem QMapShack, QMapShack nemusí být schopen nahrát a uložit vÅ¡echny prvky tohoto souboru. Tyto prvky budou ztraceny. DoporuÄuje se použít jiný soubor. <b>Opravdu chcete soubor pÅ™epsat?</b> - + Failed to create file '%1' NepodaÅ™ilo se vytvoÅ™it soubor '%1' - + Failed to write file '%1' NepodaÅ™ilo se zapsat soubor '%1' - + Saving GIS data failed... NepodaÅ™ilo se uložit data GIS... @@ -1889,27 +1899,27 @@ CHistoryListWidget - + by %1 od %1 - + Cut history before - + Cut history after - + History removal - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> @@ -1935,67 +1945,95 @@ CKnownExtension - + Air Temperature Teplota vzduchu - + Water Temperature Teplota vody - + Depth Hloubka - - + + Heart Rate Tep srdce - - + + + Cadence Rychlost chůze - + + Speed Rychlost - + Acceleration Zrychlení - + Course SmÄ›r - + + Temperature + + + + + Distance + + + + + Sea Level Pressure + + + + + Speed (vertical) + + + + Slope* Sklon* - + Speed* Rychlost* - + + Elevation Výška - + Progress Postup + + + Terrain slope + + CLostFoundProject @@ -2008,48 +2046,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. Použít <b>Nabídka → Pohled → PÅ™idat pohled na mapu</b> k otevÅ™ení nového pohledu. Nebo <b>Nabídka → Soubor → Nahrát pohled na mapu</b> k obnovení uložené. Nebo klepnÄ›te <a href='newview'>sem</a>. - + Ele: %1%2 Výška: %1%2 - + + Slope: %1%2 + + + + [Grid: %1] [Mřížka: %1] - + Load GIS Data... Nahrát data GIS... - + Select output file Vybrat výstupní soubor - - + + QMapShack View (*.view) Pohled QMapShack (*.view) - + Select file to load Vybrat soubor k nahrání - + Fatal... Kritické... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. @@ -2072,620 +2115,631 @@ NepodaÅ™ilo se... - + Unspecified NeurÄeno - + French Francouzský - + German NÄ›mecký - + Dutch Holandský - + English Anglický - + Italian Italský - + Finnish Finský - + Swedish Å védský - + Spanish Å panÄ›lský - + Basque Baskický - + Catalan Katalánský - + Galician Galicijský - + Welsh VelÅ¡ský - + Gaelic Gaelský - + Danish Dánský - + Norwegian Norský - + Portuguese Portugalský - + Slovak Slovenský - + Czech ÄŒeský - + Croatian Chorvatský - + Hungarian MaÄarský - + Polish Polský - + Turkish Turecký - + Greek Řecký - + Slovenian Slovinský - + Russian Ruský - + Estonian Estonský - + Latvian LotyÅ¡ský - + Romanian Rumunský - + Albanian Albánský - + Bosnian Bosenský - + Lithuanian Litevský - + Serbian Srbský - + Macedonian Makedonský - + Bulgarian Bulharský - + Major highway Dálnice - + Principal highway Silnice první třídy - + Other highway Jiné rychlostní silnice - + Arterial road Rychlostní silnice - + Collector road Státní silnice - + Residential street Silnice v obytné oblasti - + Alley/Private road Soukromá cesta - + Highway ramp, low speed Nájezd na dálnici/sjezd z dálnice - + Highway ramp, high speed Nájezd na dálnici/sjezd z dálnice - + Unpaved road Neasfaltovaná cesta - + Major highway connector DalniÄní pÅ™ivadÄ›Ä - + Roundabout Kruhový objezd - + Railroad Železnice, koleje - + Shoreline BÅ™eh - + Trail Cesta - + Stream Proud - + Time zone ÄŒasové pásmo - - + + Ferry Přívoz - + State/province border Státní/Zemská hranice - + County/parish border Krajská/Obecní hranice - + International border Mezinárodní hranice - + River Řeka - + Minor land contour Malá vrstevnice - + Intermediate land contour StÅ™ední vrstevnice - + Major land contour Velká vrstevnice - + Minor depth contour Malá hloubková Äára - + Intermediate depth contour StÅ™ední hloubková Äára - + Major depth contour Velká hloubková Äára - + Intermittent stream PÅ™eruÅ¡ovaný potok (Wadi) - - + + Airport runway PÅ™istávací dráha - + Pipeline Dálkové potrubí - + Powerline Elektrické vedení - + Marine boundary Hranice moÅ™e - + Hazard boundary NebezpeÄná hranice - + Large urban area (&gt;200K) VelkomÄ›stská oblast (&gt;200 000) - + Small urban area (&lt;200K) MalomÄ›stská oblast (&gt;200 000) - + Rural housing area MÄ›stská obytná oblast - + Military base Vojenská základna - + Parking lot ParkoviÅ¡tÄ› - + Parking garage Parkovací budova - + Airport LetiÅ¡tÄ› - + Shopping center Nákupní stÅ™edisko - + Marina Přístav - + University/College Univerzita/Vysoká Å¡kola - + Hospital Nemocnice - + Industrial complex Průmyslový celek - + Reservation ChránÄ›né území - + Man-made area Zástavba - + Sports complex Oblast pro tÄ›lesné Äinnosti - + Golf course Golfové hÅ™iÅ¡tÄ› - + Cemetery HÅ™bitov - - - + + + National park Národní park - + City park MÄ›stské sady - - - + + + State park Státní park - + Forest Les - + Ocean Oceán - - - + + + Blue (unknown) Modrá (neznámé) - + Sea MoÅ™e - - - + + + Large lake Velké jezero - - + + Medium lake StÅ™ední jezero - - + + Small lake Malé jezero - - + + Major lake Velmi velké jezero - + Major River Veletok - + Large River Velká Å™eka - + Medium River StÅ™ední Å™eka - + Small River Malá Å™eka - + Intermittent water PÅ™eruÅ¡ovaná voda - + Wetland/Swamp MoÄál/Bažina - + Glacier Ledovec - + Orchard/Plantation Sad/Plantáž - + Scrub KÅ™oví - + Tundra Tundra - + Flat Rovina - + ??? ??? - + + Read external type file... + + + + + Failed to read type file: %1 +Fall back to internal types. + + + + Failed to read: NepodaÅ™ilo se pÅ™eÄíst: - + Failed to open: NepodaÅ™ilo se otevřít: - - + + Bad file format: Å patný formát souboru: - + Failed to read file structure: NepodaÅ™ilo se pÅ™eÄíst stavbu souboru: - + Loading %1 Nahrává se %1 - + User abort: ZruÅ¡eno uživatelem: - + File is NT format. QMapShack is unable to read map files with NT format: Soubor je ve formátu NT. QMapShack nedokáže Äíst mapové soubory ve formátu NT: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. Soubor obsahuje zamknutá/zaÅ¡ifrovaná data. Garmin nechce, aby byl tento soubor použit s jiným programem než dodaným Garminem. - - - + + + Point of Interest Podivuhodnost - + Unknown Neznámý - - - + + + Area Oblast @@ -2745,6 +2799,14 @@ + CMapPropSetup + + + Select type file... + + + + CMapRMAP @@ -3179,7 +3241,7 @@ Uplynulý Äas: %1 - + Elapsed time: %1 seconds. Uplynulý Äas: %1 sekund. @@ -3796,27 +3858,27 @@ - + error renaming file %1 to %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) - + being downloaded: %1 of %2 - + no local data, online available: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) @@ -3836,12 +3898,12 @@ - + local data up to date (%1, %2) - + no routing-data available @@ -3849,13 +3911,13 @@ CRouterBRouterToolShell - + !!! done !!! Hotovo! - + !!! failed !!! NepodaÅ™ilo se! @@ -4194,7 +4256,7 @@ - + Calculate route with %1 SpoÄítat cestu s %1 @@ -4572,6 +4634,19 @@ + CToolBarSetupDialog + + + Available Actions + + + + + Selected Actions + + + + CTwoNavProject @@ -6163,6 +6238,29 @@ + IFilterTerrainSlope + + + Form + Formulář + + + + <b>Calculate Terrain Slope</b> + + + + + Calculate slope of the terrain based on loaded DEM files. + + + + + ... + ... + + + IFitDecoderState @@ -6343,31 +6441,46 @@ Formulář - + Opacity Neprůhlednost - + Change the opacity of all GIS Items on the map. - - + + Filter + Filtr + + + + Name Název - + Age VÄ›k - + To add a database do a right click on the database list above. Pro pÅ™idání databáze klepnÄ›te pravým tlaÄítkem myÅ¡i na seznam s databázemi výše. + + + Clear Filter + + + + + Setup Filter + + IGridSetup @@ -6523,338 +6636,363 @@ Okno - + ? NápovÄ›da - + Project Projekt - + Tool Nástroj - + Maps Mapy - + Dig. Elev. Model (DEM) Digitální výškový model - + Data Data - + Ctrl+T Ctrl+T - + Show Scale Ukázat měřítko - + Setup Map Font Nastavit písmo mapy - + Show Grid Ukázat mřížku - + Ctrl+G Ctrl+G - + Setup Grid Nastavit mřížku - + Ctrl+Alt+G Ctrl+Alt+G - + Flip Mouse Wheel Obrátit koleÄko myÅ¡i - - + + Setup Map Paths Nastavit cesty k mapám - + POI Text Text POI - + Night / Day Noc/Den - + Map Tool Tip Rada k nástroji pro mapu - + Setup DEM Paths Nastavit cesty k výškovým modelům - + About O programu - + Help NápovÄ›da - + Route Cesta - - + + Toolbar + + + + + Add Map View PÅ™idat pohled na mapu - + Ctrl+I Ctrl+I - + F1 F1 - - + + Setup Map View Nastavit pohled na mapu - + Load GIS Data Nahrát data GIS - + Load projects from file Nahrát projekty ze souboru - + Ctrl+L Ctrl+L - + Save All GIS Data Uložit vÅ¡echna data GIS - + Save all projects in the workspace Uložit vÅ¡echny projekty nacházející se v pracovním prostoru - + Ctrl+S Ctrl+S - + Setup Time Zone Nastavit Äasové pásmo - + Add empty project PÅ™idat prázdný projekt - + Search Google Hledat pomocí Google - + Close all projects Zavřít vÅ¡echny projekty - + F8 F8 - + Setup Units Nastavit jednotky - + Setup Workspace Nastavit pracovní prostor - + Setup save on exit. Nastavit uložení pÅ™i ukonÄení. - + Import Database from QLandkarte Zavést databázi z QLandkarte - + Import QLandkarte GT database Zavést databázi GT QLandkarte - + VRT Builder SestavovaÄ VRT - + GUI front end to gdalbuildvrt Rozhraní pro gdalbuildvrt - + Store Map View Uložit pohled na mapu - + Write current active map and DEM list including the properties to a file Zapsat nynÄ›jší Äinnou mapu a seznam výškových modelů vÄetnÄ› vlastností do souboru - + Load Map View Nahrát pohled na mapu - + Restore view with active map and DEM list including the properties from a file Obnovit pohled s Äinnou mapou a seznam výškových modelů vÄetnÄ› vlastností ze souboru - + Ext. Profile Ext. Profil - + Ctrl+E Ctrl+E - + Close Zavřít - + Ctrl+Q Ctrl+Q - + Clone Map View Klonovat pohled na mapu - + Ctrl+Shift+T Ctrl+Shift+T - + Create Routino Database VytvoÅ™it databázi Routino - + Save(Print) Map Screenshot Uložit (vytisknout) snímek obrazovky s mapou - + Print a selected area of the map Vytisknout vybranou oblast mapy - + Ctrl+P Ctrl+P - + Setup Coord. Format Nastavit formát souÅ™adnic - + Change the format coordinates are displayed ZmÄ›nit formát, v nÄ›mž jsou souÅ™adnice zobrazeny - + Setup Map Background Nastavit pozadí mapy - + Setup Waypoint Icons Stanovit ikony cestovních bodů - + Setup path to custom icons Stanovit cestu k vlastním ikonám - + Close Tab - + Ctrl+W - + Quickstart Help + + + Setup Toolbar + + + + + Toggle Docks + + + + + Toggle visibility of dockable windows + + + + + Ctrl+D + Ctrl+D + IMapList @@ -6964,6 +7102,8 @@ + + ... ... @@ -7008,6 +7148,21 @@ Cesta k vyrovnávací pamÄ›ti + + Type File: + + + + + Forget external type file and use internal types. + + + + + Load an external type file. + + + Cache Size (MB) Velikost vyrovnávací pamÄ›ti (MB) @@ -8137,8 +8292,8 @@ - Select all itmes that are completely inside the selected area. - Vybrat vÅ¡echny prvky, které jsou úplnÄ› uvnitÅ™ vybrané oblasti. + Select all items that are completely inside the selected area. + @@ -8411,6 +8566,52 @@ + ISelectDoubleListWidget + + + Form + Formulář + + + + Available + Dostupné + + + + Add to selected items + + + + + Remove from selected items + + + + + Selected + + + + + Move selected items up + + + + + Move selected items down + + + + + + + + ... + ... + + + ISelectProjectDialog @@ -8589,6 +8790,29 @@ + ISetupFilter + + + Form + Formulář + + + + Apply filter to + + + + + name only + + + + + complete text + + + + ISetupFolder @@ -9022,6 +9246,14 @@ + IToolBarSetupDialog + + + Setup Toolbar + + + + IToolShell diff -Nru qmapshack-1.8.1/src/locale/qmapshack_de.ts qmapshack-1.9.0/src/locale/qmapshack_de.ts --- qmapshack-1.8.1/src/locale/qmapshack_de.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_de.ts 2017-07-23 13:41:03.000000000 +0000 @@ -1,6 +1,6 @@ - + CAbout @@ -122,7 +122,7 @@ Ansicht %1 - + Setup Map Background Kartenhintergrund einstellen @@ -559,32 +559,32 @@ CDetailsTrk - + Reduce visible track points Sichtbare Trackpunkte reduzieren - + Change elevation of track points Höhe von Trackpunkten ändern - + Change timestamp of track points Zeitstempel von Trackpunkten ändern - + Miscellaneous Verschiedenes - + Color Farbe - + Activity Aktivität @@ -615,7 +615,7 @@ Bild %1 - + Unknown Unbekannt @@ -728,7 +728,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. FIT Dekodierfehler: Unerwartetes Ende der Datei %1. @@ -744,14 +744,14 @@ CFitFieldDataState - + Missing field definition for development field. - + - + FIT decoding error: invalid field def nr %1 while creating dev field profile. - + @@ -788,7 +788,7 @@ FIT Dekodierfehler: Architektur %1 wird nicht unterstützt. - + FIT decoding error: invalid offset %1 for state 'record content' FIT Dekodierfehler: Ungültiger Offset %1 für Status 'aufgezeichneter Inhalt' @@ -972,7 +972,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. FIT Dekodierfehler: Datei %1 enthält keine GPS Daten. @@ -1228,37 +1228,37 @@ Punkte anzeigen. - + Changed name Name geändert - + Changed comment Kommentar geändert - + Changed description Beschreibung geändert - + Changed links Geänderte Verknüpfungen - + Changed elevation of point %1 to %2 %3 Höhe von Punkt %1 auf %2 %3 geändert - + Changed activity to '%1' for complete track. Die Aktivität wurde für den gesamten Track auf '%1' geändert. - + Changed activity to '%1' for range(%2..%3). Die Aktivität wurde für den Bereich (%2..%3) auf '%1' geändert. @@ -1289,51 +1289,56 @@ + Added terrain slope from DEM file. + Hangneigung aus dem Höhenmodell hinzufügen. + + + Replaced elevation data with data from DEM files. Höhendaten durch Daten von DEM Dateien ersetzt. - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) Höhenwerte durch interpolierte Werte ersetzt. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. Versatz der Höhendaten um %1 %2. - + Changed start of track to %1. Trackanfang auf %1 verschoben. - + Remove timestamps. Zeitstempel entfernt. - + Set artificial timestamps with delta of %1 sec. Künstliche Zeitstempel mit einem Abstand von %1 Sek. gesetzt. - + Changed speed to %1%2. Geschwindigkeit auf %1 %2 geändert. - + %1 (Segment %2) - + Removed extension %1 from all Track Points Erweiterung %1 wurde von allen Trackpunkten entfernt - + Converted subpoints from routing to track points Punkte vom autom. Routing in Trackpunkte umgewandelt @@ -1346,17 +1351,17 @@ CGisItemWpt - + Archived Archiviert - + Available Verfügbar - + Not Available Nicht verfügbar @@ -1681,8 +1686,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> <b>Aktualisieren der Geräte</b><p>Aktualisiere %1<br/>Bitte warten...</p> @@ -1786,27 +1791,32 @@ CGisWidget - + Load project... Lade Projekt... - + The project "%1" is already in the workspace. Das Projekt "%1" ist schon im Arbeitsplatz geladen. - + Copy items... Elemente kopieren... - + + Change waypoint symbols. + Symbol der Wegpunkte wird geändert. + + + Cut Track... Track teilen... - + Do you want to delete the original track? Wollen Sie den ursprünglichen Track löschen? @@ -1838,27 +1848,27 @@ Keine GPX Datei: %1 - + File exists ... Datei existiert... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> Diese Datei wurde nicht mit QMapShack erstellt. Wenn Sie 'Ja' drücken werden alle Daten dieser Datei gelöscht. Selbst wenn diese Datei GPX Daten enthält und mit QMapShack geladen wurde, können nicht alle Elemente dieser Datei durch QMapShack geladen und gespeichert werden. Diese Elemente sind verloren. Ich empfehle die Nutzung einer anderen Datei. <b>Wollen Sie die Datei wirklich überschreiben?</b> - + Failed to create file '%1' Datei '%1' konnte nicht erstellt werden - + Failed to write file '%1' Datei '%1' konnte nicht geschrieben werden - + Saving GIS data failed... Das Speichern der GIS Daten ist fehlgeschlagen... @@ -1889,29 +1899,29 @@ CHistoryListWidget - + by %1 von %1 - + Cut history before - + Historie davor verkürzen - + Cut history after - + Historie danach verkürzen - + History removal - + Historie entfernen - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> - + Das Entfernen ist permanent und kann nicht rückgängig gemacht werden. <p> Wollen Sie wirklich die Historie vor diesem Eintrag löschen?</b> @@ -1935,67 +1945,95 @@ CKnownExtension - + Air Temperature Lufttemperatur - + Water Temperature Wassertemperatur - + Depth Tiefe - - + + Heart Rate Pulsrate - - + + + Cadence Trittfrequenz - + + Speed Geschwindigkeit - + Acceleration Beschleunigung - + Course Kurs - + + Temperature + Temperatur + + + + Distance + Entfernung + + + + Sea Level Pressure + Luftdruck Meereshöhe + + + + Speed (vertical) + Geschwindigkeit (vertikal) + + + Slope* Neigung* - + Speed* Geschwindigkeit* - + + Elevation Höhe - + Progress Verlauf + + + Terrain slope + Hangneigung + CLostFoundProject @@ -2008,48 +2046,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. Benützen Sie <b>Menü->Ansicht->Kartenansicht hinzufügen</b>, um eine neue Ansicht zu öffnen. Oder <b>Menü->Datei->Kartenansicht laden</b>, um eine gespeicherte wieder herzustellen. Oder Sie klicken einfach <a href='newview'>hier</a>. - + Ele: %1%2 Höhe: %1%2 - + + Slope: %1%2 + Hangneigung: %1%2 + + + [Grid: %1] [Gitter: %1] - + Load GIS Data... GIS Daten laden... - + Select output file Ausgabedatei auswählen - - + + QMapShack View (*.view) QMapShack Ansicht (*.view) - + Select file to load Zu ladende Datei auswählen - + Fatal... Schwerer Fehler... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. QMapShack hat eine unvollständig installierte Proj4 Bibliothek gefunden. Die Ãœbersetzungstabellen für EPSG Projektionen, die normalerweise in /usr/share/proj installiert sind, fehlen. Bitte kontaktieren Sie den Paketbetreuer ihrer Distribution, um das zu beheben. @@ -2074,621 +2117,633 @@ Fehlgeschlagen... - + Unspecified Nicht angegeben - + French Französisch - + German Deutsch - + Dutch Niederländisch - + English Englisch - + Italian Italienisch - + Finnish Finnisch - + Swedish Schwedisch - + Spanish Spanisch - + Basque Baskisch - + Catalan Katalanisch - + Galician Galizisch - + Welsh Walisisch - + Gaelic Gälisch - + Danish Dänisch - + Norwegian Norwegisch - + Portuguese Portugiesisch - + Slovak Slowakisch - + Czech Tschechisch - + Croatian Kroatisch - + Hungarian Ungarisch - + Polish Polnisch - + Turkish Türkisch - + Greek Griechisch - + Slovenian Slowenisch - + Russian Russisch - + Estonian Estnisch - + Latvian Lettisch - + Romanian Rumänisch - + Albanian Albanisch Albanisch - + Bosnian Bosnisch - + Lithuanian Litauisch - + Serbian Serbisch - + Macedonian Makedonisch - + Bulgarian Bulgarisch - + Major highway Autobahn - + Principal highway Bundesstraße - + Other highway Schnellstraße - + Arterial road Fernstraße - + Collector road Sammelstraße - + Residential street Wohnstraße - + Alley/Private road Allee/Privatstraße - + Highway ramp, low speed Auffahrt (langsam) - + Highway ramp, high speed Auffahrt (schnell) - + Unpaved road Unbefestigte Straße - + Major highway connector Autobahnzubringer - + Roundabout Kreisverkehr - + Railroad Eisenbahn - + Shoreline Küstenlinie - + Trail - + Stream Bach - + Time zone Zeitzone - - + + Ferry Fähre - + State/province border Staats-/Landesgrenze - + County/parish border Kreis-/Gemeindegrenze - + International border Internationale Grenze - + River Fluss - + Minor land contour Höhenlinie klein - + Intermediate land contour Höhenlinie mittel - + Major land contour Höhenlinie groß - + Minor depth contour Tiefenlinie klein - + Intermediate depth contour Tiefenlinie mittel - + Major depth contour Tiefenlinie groß - + Intermittent stream Intermittierender Bach - - + + Airport runway Landebahn - + Pipeline Pipeline - + Powerline Stromleitung - + Marine boundary Meeresgrenze - + Hazard boundary Gefahrbereichgrenze - + Large urban area (&gt;200K) Großes Wohngebiet (&gt;200K) - + Small urban area (&lt;200K) Kleines Wohngebiet (&lt;200K) - + Rural housing area Ländliches Wohngebiet - + Military base Militärbasis - + Parking lot Parkplatz - + Parking garage Parkhaus - + Airport Flugplatz - + Shopping center Einkaufszentrum - + Marina Jachthafen - + University/College Universität/Hochschule - + Hospital Krankenhaus - + Industrial complex Industrie - + Reservation Schutzgebiet - + Man-made area Fabrikgelände - + Sports complex Sportanlage - + Golf course Golfplatz - + Cemetery Friedhof - - - + + + National park Nationalpark - + City park Stadtpark - - - + + + State park - + Forest Wald - + Ocean Ozean - - - + + + Blue (unknown) - + Sea Meer - - - + + + Large lake See - - + + Medium lake See - - + + Small lake See - - + + Major lake See - + Major River Strom - + Large River Fluss - + Medium River Fluss - + Small River Fluss - + Intermittent water Gewässer - + Wetland/Swamp Feuchtgebiet/Sumpf - + Glacier Gletscher - + Orchard/Plantation Obstgarten/Plantage - + Scrub Buschwerk - + Tundra Tundra - + Flat Ebene - + ??? - + + Read external type file... + Externe TYP Datei einlesen... + + + + Failed to read type file: %1 +Fall back to internal types. + Lesen der TYP Datei fehlgeschlagen: %1 +Interne Typen werden wiederhergestellt. + + + Failed to read: Lesen fehlgeschlagen: - + Failed to open: Öffnen fehlgeschlagen: - - + + Bad file format: Falsches Format: - + Failed to read file structure: Lesen der Dateistruktur fehlgeschlagen: - + Loading %1 Lädt %1 - + User abort: Benutzerabbruch: - + File is NT format. QMapShack is unable to read map files with NT format: Die Datei hat das NT Format. QMapShack kann dieses Format nicht lesen: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. Die Datei enthält verschlüsselte Daten. Garmin möchte nicht, dass diese Datei mit einer anderen Software, als der von Garmin bereitgestellten, benutzt wird. - - - + + + Point of Interest Ort von Interesse - + Unknown Unbekannt - - - + + + Area Gebiet @@ -2748,6 +2803,14 @@ + CMapPropSetup + + + Select type file... + TYP Datei auswählen... + + + CMapRMAP @@ -3181,7 +3244,7 @@ Verstrichene Zeit: %1 - + Elapsed time: %1 seconds. Verstrichene Zeit: %1 Sekunden. @@ -3798,27 +3861,27 @@ Fehler beim Schreiben der Datei %1: %2 - + error renaming file %1 to %2: %3 Fehler beim Umbenennen der Datei von %1 nach %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) Aktuell: %1 (%2), Veraltet: %3 (%4), noch Herunterzuladen: %5 (%6) - + being downloaded: %1 of %2 wird heruntergeladen: %1 von %2 - + no local data, online available: %1 (%2) lokale keine Daten. Verfügbar: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) lokale Daten veraltet (%1, %2 - auf dem Server: %3, %4) @@ -3838,12 +3901,12 @@ ungültige Anwort, keine Dateien gefunden - + local data up to date (%1, %2) lokale Daten sind aktuell (%1, %2) - + no routing-data available keine Routing-daten verfügbar @@ -3851,13 +3914,13 @@ CRouterBRouterToolShell - + !!! done !!! !!! erledigt !!! - + !!! failed !!! !!! fehlgeschlagen !!! @@ -4197,7 +4260,7 @@ - + Calculate route with %1 Berechne Route mit %1 @@ -4575,6 +4638,19 @@ + CToolBarSetupDialog + + + Available Actions + Verfügbare Werkzeuge + + + + Selected Actions + Ausgewählte Werkzeuge + + + CTwoNavProject @@ -6165,6 +6241,29 @@ + IFilterTerrainSlope + + + Form + + + + + <b>Calculate Terrain Slope</b> + <b>Hangneigung berechnen</b> + + + + Calculate slope of the terrain based on loaded DEM files. + Berechnet die Hangneigung basierend auf dem geladenen Höhenmodell. + + + + ... + + + + IFitDecoderState @@ -6174,7 +6273,7 @@ FIT decoding error: a development field with the field_definition_number %1 already exists. - + @@ -6344,31 +6443,46 @@ - + Opacity Transparenz - + Change the opacity of all GIS Items on the map. Ändert die Transparenz von allen GIS Elementen auf der Karte. - - + + Filter + Filter + + + + Name Name - + Age Alter - + To add a database do a right click on the database list above. Eine neue Datenbank wird über einen Rechtsklick im Fenster erstellt. + + + Clear Filter + Filter zurücksetzen + + + + Setup Filter + Filter einstellen + IGridSetup @@ -6524,335 +6638,360 @@ Fenster - + ? ? - + Project Projekt - + Tool Werkzeug - + Maps Karten - + Dig. Elev. Model (DEM) Dig. Höhenmodell (DEM) - + Data Daten - + Route - - + + Toolbar + Werkzeugleiste + + + + Add Map View Kartenansicht hinzufügen - + Ctrl+T - + Show Scale Maßstab - + Setup Map Font Kartenfont einstellen - + Show Grid Gitter - + Ctrl+G - + Setup Grid Gitter einstellen - + Ctrl+Alt+G - + Flip Mouse Wheel Mausrad umdrehen - - + + Setup Map Paths Kartenverzeichnisse angeben - + POI Text POI Text - + Night / Day Nacht / Tag - + Map Tool Tip Kartentooltip - + Ctrl+I - + Setup DEM Paths DEM Verzeichnisse angeben - + About Ãœber - + Help Hilfe - + F1 - - + + Setup Map View Kartenansicht einstellen - + VRT Builder VRT Builder - + GUI front end to gdalbuildvrt Eine graphische Benutzerschnittstelle zu gdalbuildvrt - + Store Map View Kartenansicht speichern - + Write current active map and DEM list including the properties to a file Speichert die aktiven Karten und DEM Dateien inklusive der Eigenschaften in einer Datei - + Load Map View Kartenansicht laden - + Restore view with active map and DEM list including the properties from a file Stellt die aktiven Karten und DEM Dateien inklusive der Eigenschaften aus einer Datei wieder her - + Ext. Profile Erw. Profil - + Ctrl+E - + Close Schließen - + Ctrl+Q - + Clone Map View Kartenansicht klonen - + Ctrl+Shift+T - + Create Routino Database Routino Datenbank erstellen - + Save(Print) Map Screenshot Kartenausschnitt speichern (drucken) - + Print a selected area of the map Einen ausgewählten Bereich der Karte drucken - + Ctrl+P - + Setup Coord. Format Koordinatenformat einstellen - + Change the format coordinates are displayed Ändert das Format der angezeigten Koordinaten - + Setup Map Background Kartenhintergrund einstellen - + Setup Waypoint Icons Wegpunktsymbole konfigurieren - + Setup path to custom icons Pfad zu individuellen Symbolen einrichten - + Close Tab Reiter schließen - + Ctrl+W - + Quickstart Help Schnellstartanleitung - + + Setup Toolbar + Werkzeugleiste einstellen + + + + Toggle Docks + Fenster umschalten + + + + Toggle visibility of dockable windows + Sichtbarkeit der andockbaren Fenster umschalten + + + + Ctrl+D + + + + Load GIS Data GIS Daten laden - + Load projects from file Lade Datei als Projekt - + Ctrl+L - + Save All GIS Data Alle GIS Daten speichern - + Save all projects in the workspace Alle Projekte, die sich auf dem Arbeitsplatz befinden, speichern - + Ctrl+S - + Setup Time Zone Zeitzone einstellen - + Add empty project Leeres Projekt hinzufügen - + Search Google Mit Google suchen - + Close all projects Alle Projekte schließen - + F8 - + Setup Units Einheiten einstellen - + Setup Workspace Arbeitsplatz konfigurieren - + Setup save on exit. Speichert Einstellungen beim Beenden. - + Import Database from QLandkarte Datenbankimport aus QLandkarte - + Import QLandkarte GT database QLandkarte GT Datenbank importieren @@ -6965,6 +7104,8 @@ + + ... @@ -7009,6 +7150,21 @@ Speicherpfad + + Type File: + TYP Datei: + + + + Forget external type file and use internal types. + Externe TYP Datei vergessen und interne Typen verwenden. + + + + Load an external type file. + Externe TYP Datei laden. + + Cache Size (MB) Cache (MB) @@ -8140,8 +8296,8 @@ - Select all itmes that are completely inside the selected area. - Wählt alle Elemente, die vollständig innerhalb des gewählten Bereiches liegen. + Select all items that are completely inside the selected area. + Alle Elemente auswählen, die komplett innerhalb des ausgewählten Gebietes sind. @@ -8414,6 +8570,52 @@ + ISelectDoubleListWidget + + + Form + + + + + Available + Verfügbar + + + + Add to selected items + Zu den ausgewählten Einträgen hinzufügen + + + + Remove from selected items + Von den ausgewählten Einträgen entfernen + + + + Selected + Ausgewählt + + + + Move selected items up + Ausgewählte Einträge nach oben + + + + Move selected items down + Ausgewählte Einträge nach unten + + + + + + + ... + + + + ISelectProjectDialog @@ -8592,6 +8794,29 @@ + ISetupFilter + + + Form + + + + + Apply filter to + Filter anwenden auf + + + + name only + den Namen + + + + complete text + den vollständigen Text + + + ISetupFolder @@ -9026,6 +9251,14 @@ + IToolBarSetupDialog + + + Setup Toolbar + Werkzeugleiste einstellen + + + IToolShell diff -Nru qmapshack-1.8.1/src/locale/qmapshack_es.ts qmapshack-1.9.0/src/locale/qmapshack_es.ts --- qmapshack-1.8.1/src/locale/qmapshack_es.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_es.ts 2017-07-23 13:41:03.000000000 +0000 @@ -16,7 +16,7 @@ (no DBUS: device detection and handling disabled) - + detección y manipulación de dispositivos desactivados @@ -24,94 +24,94 @@ Foot - + A pié Bicycle - + Bicicleta Motor Bike - + Moto Car - + Coche Cable Car - + Teleférico Swim - + Natación Ship - + Barco Ski/Winter - + Esquí Ascent: - + Ascenso: Descent: - + Descenso: Aeronautics - + Aeronáutica Distance: - + Distancia: Speed Moving: - + Velocidad en movimiento: Speed Total: - + Velocidad Total: Time Moving: - + Tiempo en movimiento: Time Total: - + Tiempo Total: None - + Ninguno @@ -122,9 +122,9 @@ Vista %1 - + Setup Map Background - + Configuracion del Mapa de Fondo @@ -140,32 +140,32 @@ Print debug output to console. - + Imprimir salida de depuración en la consola. Print debug output to logfile (temp. path). - + Imprimir salida de depuración en archivo (carpeta temporal). Do not show splash screen. - + No mostrar pantalla de bienvenida File with QMapShack configuration. - + Archivo con la configuración de QMapShack file - + Archivo Files for future use. - + Archivos para uso futuro @@ -173,7 +173,7 @@ route - + Ruta @@ -181,17 +181,17 @@ All your data grouped by folders. - Todos tus datos agrupados en carpetas. + Todos tus datos agrupados en carpetas. Lost & Found (%1) - Objetos Perdidos (%1) + Objetos Perdidos (%1) Lost & Found - Objetos Perdidos + Objetos Perdidos @@ -199,28 +199,28 @@ All your data grouped by folders. - Todos tus datos agrupados en carpetas. + Todos tus datos agrupados en carpetas. MySQL Database - + Mi base de datos SQL Server: - + Servidor: (No PW) - + (Sin PW) Error: - Error: + Error: @@ -228,22 +228,22 @@ All your data grouped by folders. - Todos tus datos agrupados en carpetas. + Todos tus datos agrupados en carpetas. SQLite Database - + Base de Datos SQLite File: - + Archivo: Error: - Error: + Error: @@ -261,7 +261,7 @@ %1 days - + %1 dias @@ -269,86 +269,90 @@ Failed to load... - + Falló al cargar... Can't load file "%1" . It will be skipped. - + No se puede cargar el archivo "%1" . Se omitirá. Project already in database... - + Proyecto ya en base de datos ... The project "%1" has already been imported into the database. It will be skipped. - + El proyecto "%1" Ya se ha importado a la base de datos. Se omitirá. The item %1 has been changed by %2 (%3). To solve this conflict you can create and save a clone, force your version or drop your version and take the one from the database - + El elemento %1 se ha cambiado por %2 (%3). + +Para resolver este conflicto puedes crear y guardar una copia, forzar o eliminar tu versión y tomar la de la base de datos Conflict with database... - + Conflicto con la base de datos... Clone && Save - + Duplicar y Guardar Force Save - + Forzar guardado Take remote - + Toma remota Missing folder... - + Falta la carpeta Failed to save project. The folder has been deleted in the database. - + Error al guardar el proyecto. La carpeta se ha eliminado de la base de datos. Save ... - Guardar... + Guardar... Error - Error + Error There was an unexpected database error: %1 - + Se produjo un error de base de datos inesperado: + +% 1 The project '%1' is about to update itself from the database. However there are changes not saved. - + El proyecto '%1' Está a punto de actualizarse desde la base de datos. Sin embargo, hay cambios no guardados. Save changes? - + ¿Guardar cambios? @@ -415,7 +419,7 @@ ??? - + ??? @@ -472,27 +476,27 @@ From Start - + Desde el inicio To Next - + Al siguiente To End - + Al Final distance: - + Distancia: ascent: - + Ascenso: @@ -502,27 +506,27 @@ You want to sort waypoints along a track, but you switched off track and waypoint correlation. Do you want to switch it on again? - + Desea ordenar waypoints a lo largo de un track, pero ha desactivado la correlación de track y waypoint. ¿Desea volver a encenderlo? Correlation... - + Correlación.. <b>Summary over all tracks in project</b><br/> - + <b>Resumen de todos los tracks del proyecto</b><br/> descent: - + descenso: <h2>Routes</h2> - + <h2>Rutas</h2> @@ -555,44 +559,44 @@ CDetailsTrk - + Reduce visible track points Reducir puntos visibles del track - + Change elevation of track points - Cambiar elevación de puntos del track + Cambiar altitud de puntos del track - + Change timestamp of track points Cambiar fecha/hora de puntos del track - + Miscellaneous - + Diversos - + Color - Color + Color - + Activity - + Actividad Reset activities... - + Reiniciar actividades... This will remove all activities from the track. Proceed? - + Esto eliminará las actividades del track. ¿Proceder? @@ -608,12 +612,12 @@ Picture%1 - + foto%1 - + Unknown - Desconocido + Desconocido @@ -621,12 +625,12 @@ Archive - expand to load - + Archivo: expanda para cargar Archive - loaded - + Archivo - cargado @@ -642,7 +646,7 @@ Select export path... - + Seleccionar ruta de exportación ... @@ -651,40 +655,40 @@ Create %1 - + Crear %1 Failed to create %1 - + Fallo al crear %1 Done! - + ¡Hecho! Abort by user! - + ¡Cancelado por el usuario! Database Error: %1 - + Error de base de datos: %1 Save project as %1 - + Guardar proyecto como %1 Failed! - + ¡Falló! @@ -692,7 +696,7 @@ No extension available - + Extensión no disponible @@ -700,17 +704,17 @@ coarse - + grueso medium - + medio fine - + fino @@ -718,15 +722,15 @@ FIT decoding error : invalid CRC. - + Error decodificando FIT : CRC inválido. CFitDecoder - + FIT decoding error: unexpected end of file %1. - + FIT error de descodificación: final inesperado del archivo% 1. @@ -734,20 +738,20 @@ FIT decoding error: unknown base type %1. - + Error de descodificación FIT: tipo de base desconocido% 1. CFitFieldDataState - + Missing field definition for development field. - + Falta la definición de campo para el campo de desarrollo. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. - + Error de decodificación FIT: campo no válido def nr %1 al crear el perfil de campo dev @@ -755,12 +759,12 @@ FIT decoding error: protocol %1 version not supported. - + Error de descodificación FIT: la versión del protocolo% 1 no es compatible. FIT decoding error: file header signature mismatch. File is not FIT. - + Error de descodificación de FIT: falta de coincidencia de firma de encabezado de archivo. El archivo no es FIT. @@ -768,12 +772,12 @@ Failed to load file %1... - + Falló al cargar archivo %1 Failed to open FIT file %1. - + Falló al cargar archivo FIT %1 @@ -781,12 +785,12 @@ FIT decoding error: architecture %1 not supported. - + Error decodificacion FIT: Arquitectura %1 no soportada - + FIT decoding error: invalid offset %1 for state 'record content' - + FIT error de decodificación: desplazamiento no válido %1 para el contenido de registro de estado' @@ -795,17 +799,17 @@ Warning... - Aviso... + Aviso... This is a typ file with unknown polygon encoding. Please report! - Este es un fichero TYP con una codificación de polígonos desconocida. ¡Por favor repórtelo! + Este es un fichero TYP con una codificación de polígonos desconocida. ¡Por favor repórtelo! This is a typ file with unknown polyline encoding. Please report! - Este es un fichero TYP con una codificación de polilíneas desconocida. ¡Por favor repórtelo! + Este es un fichero TYP con una codificación de polilíneas desconocida. ¡Por favor repórtelo! @@ -813,77 +817,77 @@ thin - fino + fino normal - normal + normal wide - ancho + ancho strong - intenso + intenso _Clone - + Duplicar Area: %1%2 - + Ãrea: %1%2 Changed area shape. - Se cambió la forma del área. + Se cambió la forma del área. Changed name. - Se cambió el nombre. + Se cambió el nombre. Changed border width. - Se cambió la anchura del borde. + Se cambió la anchura del borde. Changed fill pattern. - Se cambió el patró de relleno. + Se cambió el patró de relleno. Changed opacity. - Se cambió la opacidad. + Se cambió la opacidad. Changed comment. - Se cambió el comentario. + Se cambió el comentario. Changed description. - Se cambió la descripción. + Se cambió la descripción. Changed links - Se cambió el enlace + Se cambió el enlace Changed color - Se cambió el color + Se cambió el color @@ -891,7 +895,7 @@ _Clone - + _Duplicar @@ -901,43 +905,43 @@ Changed name. - Se cambió el nombre. + Se cambió el nombre. Changed comment - Se cambió el comentario + Se cambió el comentario Changed description - Se cambió la descripción + Se cambió la descripción Changed links - Se cambió el enlace + Se cambió el enlace Length: %1 %2 - Longitud: %1 %2 + Longitud: %1 %2 Length: - - + Longitud: Time: %1 %2 - Tiempo: %1 %2 + Tiempo: %1 %2 Time: - - + Tiempo: @@ -947,30 +951,30 @@ Last time routed:<br/>%1 - + Última vez enrutado:<br/>%1 with %1 - + con %1 Distance: %1 %2 - + Distancia: %1 %2 Changed route points. - + Puntos de ruta modificados. CGisItemTrk - + FIT file %1 contains no GPS data. - + Archivo FIT %1 no contiene datos GPS. @@ -979,129 +983,129 @@ Error... - Error... + Error... Failed to open %1. - Fallo al abrir %1. + Fallo al abrir %1. Only support lon/lat WGS 84 format. - Solamente soporta formato lon/lat WGS84. + Solamente soporta formato lon/lat WGS84. Failed to read data. - Fallo al leer los datos. + Fallo al leer los datos. _Clone - + _Duplicar Changed trackpoints, sacrificed all previous data. - Se cambiaron los puntos del track, y descartados todos los datos previos. + Se cambiaron los puntos del track, y descartados todos los datos previos. Length: %1 %2 - Longitud: %1 %2 + Longitud: %1 %2 , %1%2 %3, %4%5 %6 - , %1%2 %3, %4%5 %6 + , %1%2 %3, %4%5 %6 Start: %1 - Comienzo: %1 + Inicio: %1 Start: - - + Inicio: - End: %1 - Final: %1 + Final: %1 End: - - + Final: - Points: %1 (%2) - Puntos: %1 (%2) + Puntos: %1 (%2) Invalid elevations! - + ¡Datos de altitud invalidos! Invalid timestamps! - + ¡Marcas de tiempo no válidas! Invalid positions! - + ¡Posiciones invalidas! Activities: %1 - + Actividades: %1 Index: %1 - + Indice: %1 Index: visible %1, total %2 - + Indice: visible %1. total %2 Ele.: %1 %2 - Altitud: %1 %2 + Altitud: %1 %2 slope: %1%3 (%2%) - pendiente: %1%3 (%2%) + pendiente: %1%3 (%2%) speed: %1%2 - velocidad: %1%2 + velocidad: %1%2 ... and %1 tags not displayed - + Y %1 etiquetas no mostradas Distance: - (-) - + Distancia: - (-) Moving: - (-) - + En movimiento: - (-) @@ -1115,17 +1119,17 @@ Hide point %1. - + Ocultar punto %1 Hide points %1..%2. - + Ocultar puntos %1..%2 Moving: %1%2 (%3%) - En movimiento: %1%2 (%3%) + En movimiento: %1%2 (%3%) @@ -1136,7 +1140,7 @@ Time: %1%2 - + Tiempo: %1%2 @@ -1146,280 +1150,285 @@ Time: %1, Speed: %2 %3 - + Tiempo: %1, Velocidad: %2 %3 Time: -, Speed: - - + Tiempo: -, Velocidad: - Moving: %1, Speed: %2 %3 - + En movimiento: %1, Velocidad: %2 %3 Moving: -, Speed: - - + En movimiento: -, Velocidad: - Ascent: - (-) - + Ascenso: - (-) Descent: - (-) - + Descenso: - (-) Ascent: %1%2 (%3%) - + Ascenso: %1%2 (%3%) Descent: %1%2 (%3%) - + Descenso: %1%2 (%3%) Distance: %1%2 (%3%) - + Distancia: %1%2 (%3%) Ascent: - - + Ascenso: - Descent: - - + Descenso: - Ascent: %1%2 - + Ascenso: %1%2 Descent: %1%2 - + Descenso: %1%2 Distance: %1%2 - + Distancia: %1%2 Permanently removed points %1..%2 - + Puntos eliminados definitivamente %1..%2 Show points. - Mostrar puntos. + Mostrar puntos. - + Changed name - Se cambió el nombre + Se cambió el nombre - + Changed comment - Se cambió el comentario + Se cambió el comentario - + Changed description - Se cambió la descripción + Se cambió la descripción - + Changed links - Se cambió el enlace + Se cambió el enlace - + Changed elevation of point %1 to %2 %3 - + Se cambió altitud de los puntos %1 a %2 %3 - + Changed activity to '%1' for complete track. - + Actividad cambiada a '%1' para todo el track. - + Changed activity to '%1' for range(%2..%3). - + Actividad cambiada a '%1' para el rango (%2..%3). Hide points by Douglas Peuker algorithm (%1%2) - Ocultar puntos con algoritmo Douglas Peuker (%1%2) + Ocultar puntos con algoritmo Douglas Peuker (%1%2) Hide points with invalid data. - + Ocultar puntos con datos inválidos Reset all hidden track points to visible - Restaurados todos los puntos a visible + Restaurados todos los puntos a visible Permanently removed all hidden track points - Elminados definitivamente todos los puntos ocultos del track + Elminados definitivamente todos los puntos ocultos del track Smoothed profile with a Median filter of size %1 - Pefil suavizado con Mediana de %1 puntos + Pefil suavizado con Mediana de %1 puntos + Added terrain slope from DEM file. + Añadida pendiente del terreno desde archivo DEM + + + Replaced elevation data with data from DEM files. - Datos de elevación sustituidos por valores de fichero DEM. + Datos de altitud sustituidos por valores de fichero DEM. - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) - + Reemplazados datos de altitud con valores interpolados. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. - Elevación desplazada %1%2. + altitud desplazada %1%2. - + Changed start of track to %1. - Cambiado el inicio de track a %1. + Cambiado el inicio de track a %1. - + Remove timestamps. - Eliminadas las marcas de tiempo. + Eliminadas las marcas de tiempo. - + Set artificial timestamps with delta of %1 sec. - Marcas de tiempo ficticias con incremento de %1 sec. + Marcas de tiempo ficticias con incremento de %1 sec. - + Changed speed to %1%2. - Velocidad modificada a %1%2. + Velocidad modificada a %1%2. - + %1 (Segment %2) - + %1 (Segmento %2) - + Removed extension %1 from all Track Points - + Eliminada extensión %1 a todos los puntos del track - + Converted subpoints from routing to track points - + Convertidos puntos secundarios del ruteo a puntos de track Copy flag information from QLandkarte GT track - + Copiar información del encabezado del track de QLandkarte GT CGisItemWpt - + Archived - Archivado + Archivado - + Available - Disponible + Disponible - + Not Available - No Disponible + No Disponible _Clone - + Duplicar Elevation: %1 %2 - Altitud: %1 %2 + Altitud: %1 %2 Proximity: %1 %2 - Proximidad: %1 %2 + Proximidad: %1 %2 Changed name - Se cambió el nombre + Se cambió el nombre Changed position - Se cambió la posición + Se cambió la posición Changed elevation - Se cambió la altitud + Se cambió la altitud Changed proximity - Se cambió la proximidad + Se cambió la proximidad Changed icon - Se cambió el icono + Se cambió el icono Changed comment - Se cambió el comentario + Se cambió el comentario Changed description - Se cambió la descripción + Se cambió la descripción Changed links - Se cambió el enlace + Se cambió el enlace Changed images - Se cambió la imagen + Se cambió la imagen Add image - Añadir Imagen + Añadir Imagen @@ -1427,12 +1436,12 @@ Due to changes in the database system QMapShack forgot about the filename of your database '%1'. You have to select it again in the next step. - + Debido a cambios en el sistema de base de datos QMapShack olvidó el nombre de archivo de su base de datos '%1'. Debe seleccionarlo de nuevo en el siguiente paso. Select database file. - + Seleccionar archivo de base de datos. @@ -1447,17 +1456,17 @@ Rename Folder - + Renombrar carpeta Copy Folder - + Copiar carpeta Move Folder - + Mover carpeta @@ -1467,12 +1476,12 @@ Import from Files... - + Importar desde archivos.. Export to GPX... - + Exportar a GPX... @@ -1483,12 +1492,12 @@ Search Database - + Buscar base de datos Sync. with Database - + Sincronizar con base de datos @@ -1508,47 +1517,47 @@ Do you really want to remove '%1' from the list? - + ¿Seguro que quiere eliminar '%1' de la lista? Are you sure you want to delete selected folders and all subfolders from the database? - + ¿Está seguro que quiere borrar las carpetas seleccionadas y sus subcarpetas de la base de datos? Bad operation.... - + Mala operación... The target folder is a subfolder of the one to move. This will not work. - + La carpeta de destino es una subcarpeta de la que se va a mover. Esto no funcionará. Folder name... - + Nombre de carpeta... Rename folder: - + Renombrar carpeta: Are you sure you want to delete '%1' from folder '%2'? - ¿Desea realmente eleiminar '%1' de la carpeta '%2'? + ¿Desea realmente eleiminar '%1' de la carpeta '%2'? Delete... - Borrar... + Borrar... Import GIS Data... - + Importar datos GIS... @@ -1608,17 +1617,17 @@ Save as... - + Guardar como... Copy Track with Waypoints - + Copiar tracks y waypoints Show Bubble - + Mostrar burbuja de texto @@ -1633,59 +1642,59 @@ Route Instructions - + Instrucciones de ruta Calculate Route - + Calcular ruta Reset Route - + Recalcular ruta Edit Route - + Editar ruta Convert to Track - + Convertir en track Create Route - + Crear ruta Change Icon (sel. waypt. only) - + Cambiar icono Drop items... - + Descartar elementos - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> - <b>Actualizar dispositivos</b><p>Actualizar %1<br/>Por favor espere...</p> + <b>Actualizar dispositivos</b><p>Actualizar %1<br/>Por favor espere...</p> Delete project... - Eliminar Proyecto... + Eliminar Proyecto... Do you really want to delete %1? - ¿Desea realmente eliminar %1? + ¿Desea realmente eliminar %1? @@ -1695,37 +1704,37 @@ Show on Map - + Mostrar en el mapa Hide from Map - + Ocultar en el mapa Sort by Time - + Ordenar por fecha Sort by Name - + Ordenar por nombre Save as GPX 1.1 w/o ext... - + Guardar como GPX 1.1 w/o ext... Send to Devices - + Enviar a dispositivo Sync. with Database - + Sincronizar con base de datos @@ -1776,33 +1785,38 @@ This will remove all projects from the workspace. - Esto quitará.todos los proyectos.del espacio de trabajo. + Esto eliminará todos los proyectos del espacio de trabajo. CGisWidget - + Load project... - + Cargar proyecto - + The project "%1" is already in the workspace. - + El proyecto "%1" ya está en el area de trabajo. - + Copy items... - Copia elementos.... + Copia elementos.... - + + Change waypoint symbols. + + + + Cut Track... - Partir Track... + Dividir Track... - + Do you want to delete the original track? ¿Desea borrar el track original? @@ -1812,51 +1826,51 @@ Failed to load file %1... - + Fallo al cargar archivo %1... Failed to open %1 - Fallo al abrir %1 + Fallo al abrir %1 Failed to read: %1 line %2, column %3: %4 - Fallo al leer: %1 + Fallo al leer: %1 línea %2, columna %3. %4 Not a GPX file: %1 - + No es un archivo GPX: %1 - + File exists ... - El archivo ya existe ... + El archivo ya existe ... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> - El archivo ya existe y no lo ha creado QMapShack. Si pulsa 'sí' todos los datos de este archivo se perderán. Incluso si el archivo contiene datos GPX y QMapShack lo ha leído, QMapShack podría no ser capaz de leer y almacenar todos los elementos en el archivo, y aquellos que no haya leído se perderán. Se le recomienda usar otro archivo distinto. <b>¿Quiere realmente sobrescribir el archivo</b> + El archivo ya existe y no lo ha creado QMapShack. Si pulsa 'sí' todos los datos de este archivo se perderán. Incluso si el archivo contiene datos GPX y QMapShack lo ha leído, QMapShack podría no ser capaz de leer y almacenar todos los elementos en el archivo, y aquellos que no haya leído se perderán. Se le recomienda usar otro archivo distinto. <b>¿Quiere realmente sobrescribir el archivo</b> - + Failed to create file '%1' - Fallo al crear el archivo '%1' + Fallo al crear el archivo '%1' - + Failed to write file '%1' - Fallo al escribir en el archivo '%1' + Fallo al escribir en el archivo '%1' - + Saving GIS data failed... - + Fallo guardando datos GIS... @@ -1885,29 +1899,29 @@ CHistoryListWidget - + by %1 - + de %1 - + Cut history before - + Cortar historial antes - + Cut history after - + Cortar historial despues - + History removal - + Borrar historial - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> - + El borrado es permanente y no se puede deshacer. <b>¿Esta seguro de querer borrar el historial anterior a este paso? @@ -1915,7 +1929,7 @@ Import QLandkarte Database - Importar Base de Datos de Qlandkarte + Importar Base de Datos de QLandKarteGT @@ -1931,66 +1945,94 @@ CKnownExtension - + Air Temperature - + Temperatura del aire - + Water Temperature - + Temperatura del agua - + Depth - + Profundidad - - + + Heart Rate - + Ritmo cardiaco - - + + + Cadence - + Cadencia - + + Speed - Velocidad + Velocidad - + Acceleration - + Aceleración - + Course + Rumbo + + + + Temperature - - Slope* + + Distance - - Speed* + + Sea Level Pressure + + + + + Speed (vertical) - + + Slope* + Pendiente + + + + Speed* + Velocidad + + + + Elevation - Altitud + Altitud - + Progress - Progreso + Progreso + + + + Terrain slope + Pendiente del terreno @@ -1998,56 +2040,61 @@ Lost & Found - Objetos Perdidos + Objetos Perdidos CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. - + Usar <b>Menu->ver->Añadir vista de mapa</b> para abrir nueva vista, o <b>Menu->archivo->cargar vista de mapa</b> para restaurar una vista guardada. Or click <a href='newview'>here</a>. - + Ele: %1%2 Alt: %1%2 - + + Slope: %1%2 + Pendiente: %1%2 + + + [Grid: %1] - + [Malla: %1] - + Load GIS Data... Cargar Datos GIS... - + Select output file - + Seleccionar archivo de salida - - + + QMapShack View (*.view) - + Vista de QMapShack (*.view) - + Select file to load - + Seleccionar archivo a cargar - + Fatal... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. - + QMapShack detectó una biblioteca Proj4 mal instalada. Las tablas de traducción para las proyecciones EPSG usualmente almacenadas en / usr / share / proj faltan. Póngase en contacto con el responsable del paquete de su distribución para solucionarlo. @@ -2057,7 +2104,9 @@ There are no maps right now. QMapShack is no fun without maps. You can install maps by pressing the 'Help! I want maps!' button in the 'Maps' dock window. Or you can press the F1 key to open the online documentation that tells you how to use QMapShack. If it's no fun, why don't you provide maps? Well to host maps ready for download and installation requires a good server. And this is not a free service. The project lacks the money. Additionally map and DEM data has a copyright. Therefore the copyright holder has to be asked prior to package the data. This is not that easy as it might sound and for some data you have to pay royalties. The project simply lacks resources to do this. And we think installing the stuff yourself is not that much to ask from you. After all the software is distributed without a fee. - + No hay mapas en este momento. QMapShack no es divertido sin mapas. Puede instalar mapas al presionar la tecla Ayuda! ¡Quiero mapas! En el botón ' mapas ',o puede presionar la tecla F1 para abrir la documentación en línea que le indica cómo usar QMapShack. + +Si no es divertido, ¿por qué no proporciona mapas? Bueno para alojar mapas listos para descargar e instalar requiere un buen servidor. Y esto no es un servicio gratuito. El proyecto carece de dinero. Además, los datos de mapa y DEM tienen un copyright. Por lo tanto, el titular de los derechos de autor tiene que ser preguntado antes de empaquetar los datos. Esto no es tan fácil como podría sonar y para algunos datos que tiene que pagar royalties. El proyecto simplemente carece de recursos para hacer esto. Y pensamos que instalar las cosas por ti mismo no es mucho pedir de ti. Después de todo el software se distribuye sin una cuota. @@ -2068,620 +2117,631 @@ Falló ... - + Unspecified No especificado - + French Francés - + German Alemán - + Dutch Holandés - + English Inglés - + Italian Italiano - + Finnish Finés - + Swedish Sueco - + Spanish Español - + Basque Euskera - + Catalan Catalán - + Galician Gallego - + Welsh Galés - + Gaelic Gaélico - + Danish Danés - + Norwegian Noruego - + Portuguese Portugués - + Slovak Eslovaco - + Czech Checo - + Croatian Croata - + Hungarian Húngaro - + Polish Polaco - + Turkish Turco - + Greek Griego - + Slovenian Esloveno - + Russian Ruso - + Estonian Estonio - + Latvian Letón - + Romanian Rumano - + Albanian Albanés - + Bosnian Bosnio - + Lithuanian Lituano - + Serbian Serbio - + Macedonian Macedonio - + Bulgarian Búlgaro - + Major highway Autovía Primaria - + Principal highway Autovía secundaria - + Other highway Otras autovías - + Arterial road Carretera principal - + Collector road Carretera secundaria - + Residential street Calle residencial - + Alley/Private road Callejón/Carretera privada - + Highway ramp, low speed Acceso a autopista, baja velocidad - + Highway ramp, high speed Acceso a autopista, alta velocidad - + Unpaved road Carretera sin asfaltar - + Major highway connector Conexión con autovía principal - + Roundabout Rotonda - + Railroad Ferrocarril - + Shoreline Línea de costa - + Trail Sendero - + Stream Arroyo - + Time zone Zona horaria - - + + Ferry Ferry - + State/province border Frontera de estado/provincia - + County/parish border Frontera de condado/término municipal - + International border Frontera internacional - + River Río - + Minor land contour Curva altimétrica menor - + Intermediate land contour Curva altimétrica intermedia - + Major land contour Curva altimétrica principal - + Minor depth contour Curva batimétrica menor - + Intermediate depth contour Curva batimétrica intermedia - + Major depth contour Curva batimétrica principal - + Intermittent stream Curso intermitente - - + + Airport runway Pista de aterrizaje - + Pipeline Tubería - + Powerline Línea eléctrica - + Marine boundary Límite marítimo - + Hazard boundary Límite de peligro - + Large urban area (&gt;200K) Ãrea urbana grande (&gt;200K) - + Small urban area (&lt;200K) Ãrea urbana pequeña (&lt;200K) - + Rural housing area Ãrea de alojamienos rurales - + Military base Base militar - + Parking lot Aparcamiento - + Parking garage Garaje - + Airport Aeropuerto - + Shopping center Centro comercial - + Marina Puerto deportivo - + University/College Universidad/Facultad - + Hospital Hospital - + Industrial complex Complejo industrial - + Reservation Reserva natural - + Man-made area Ãrea creada por el hombre - + Sports complex Complejo deportivo - + Golf course Recorrido de golf - + Cemetery Cementerio - - - + + + National park Parque nacional - + City park Parque urbano - - - + + + State park Parque regional - + Forest Bosque - + Ocean Océano - - - + + + Blue (unknown) Azul (desconocido) - + Sea Mar - - - + + + Large lake Lago grande - - + + Medium lake Lago mediano - - + + Small lake Lago pequeño - - + + Major lake Lago principal - + Major River Río Principal - + Large River Río Grande - + Medium River Río Mediano - + Small River Río Pequeño - + Intermittent water Agua intermitente - + Wetland/Swamp Marisma/Ciénaga - + Glacier Glaciar - + Orchard/Plantation Invernadero/Plantación - + Scrub Monte bajo - + Tundra Tundra - + Flat Llanura - + ??? - + + Read external type file... + + + + + Failed to read type file: %1 +Fall back to internal types. + + + + Failed to read: Fallo al leer: - + Failed to open: Fallo al abrir: - - + + Bad file format: Formato de archivo incorrecto: - + Failed to read file structure: Fallo al leer la estructura del archivo: - + Loading %1 Cargando %1 - + User abort: - Abortado por el usuario: + Cancelado por el usuario: - + File is NT format. QMapShack is unable to read map files with NT format: El archivo está en formato NT. QMapShack no puede leer archivos en formato NT: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. - + El archivo contiene datos bloqueados y/o encriptados. Garmin no desea que utilice este archivo con ningún otro software que el suministrado por ellos. - - - + + + Point of Interest Punto de Interés - + Unknown Desconocido - - - + + + Area Ãrea @@ -2701,7 +2761,7 @@ Where do you want to store maps? - + ¿Dónde desea almacenar mapas? @@ -2737,6 +2797,14 @@ Select root path... + Seleccionar carpeta raiz + + + + CMapPropSetup + + + Select type file... @@ -2757,7 +2825,7 @@ This is not a TwoNav RMAP file. - Éste no es un archivo en formato TwoNav RMAP. + Éste no es un archivo en formato RMAP de TwoNav. @@ -2814,7 +2882,7 @@ This map requires OpenSSL support. However due to legal restrictions in some countries OpenSSL is not packaged with QMapShack. You can have a look at the <a href='https://www.openssl.org/community/binaries.html'>OpenSSL Homepage</a> for binaries. You have to copy libeay32.dll and ssleay32.dll into the QMapShack program directory. - + Este mapa requiere soporte de OpenSSL. Sin embargo, debido a restricciones legales en algunos países, OpenSSL no se incluye con QMapShack. Puede consultar la página < a href = < https: //www.openssl.org/community/binaries.html '> OpenSSL Homepage</a> Para binarios. Tienes que copiar libeay32.dll y ssleay32.dll en el directorio del programa QMapShack. @@ -2870,7 +2938,7 @@ !!! done !!! - + ¡¡¡ hecho !!! @@ -2909,12 +2977,12 @@ Unexpected service. '* WMTS 1.0.0' is expected. '%1 %2' is read. - + Servicio inesperado. '* WMTS 1.0.0' es el esperado. '%1 %2' esta cargado This map requires OpenSSL support. However due to legal restrictions in some countries OpenSSL is not packaged with QMapShack. You can have a look at the <a href='https://www.openssl.org/community/binaries.html'>OpenSSL Homepage</a> for binaries. You have to copy libeay32.dll and ssleay32.dll into the QMapShack program directory. - + Este mapa requiere soporte de OpenSSL. Sin embargo, debido a restricciones legales en algunos países, OpenSSL no se incluye con QMapShack. Puede consultar la página < a href = < https: //www.openssl.org/community/binaries.html '> OpenSSL Homepage</a> Para binarios. Tienes que copiar libeay32.dll y ssleay32.dll en el directorio del programa QMapShack. @@ -2933,17 +3001,17 @@ Area - Ãrea + Ãrea <b>Edit Area</b><br/>Select a function and a routing mode via the tool buttons. Next select a point of the line. Only points marked with a large square can be changed. The ones with a black dot are subpoints introduced by routing.<br/> - + <b>Editar área</b><br/>Seleccione una función y un modo de enrutamiento a través de los botones de herramientas. A continuación, seleccione un punto de la línea. Sólo se pueden cambiar los puntos marcados con un cuadrado grande. Los que tienen un punto negro son subpuntos introducidos por el enrutamiento.<br/> area - + área @@ -2952,17 +3020,17 @@ Route - + Ruta <b>Edit Route Points</b><br/>Select a function and a routing mode via the tool buttons. Next select a point of the line. Only points marked with a large square can be changed. The ones with a black dot are subpoints introduced by routing.<br/> - + </b>Editar puntos de ruta<br/>Seleccione una función y un modo de enrutamiento a través de los botones de herramientas. A continuación, seleccione un punto de la línea. Sólo se pueden cambiar los puntos marcados con un cuadrado grande. Los que tienen un punto negro son subpuntos introducidos por el enrutamiento.<br/> route - + Ruta @@ -2971,22 +3039,22 @@ Track - + <b>Edit Track Points</b><br/>Select a function and a routing mode via the tool buttons. Next select a point of the line. Only points marked with a large square can be changed. The ones with a black dot are subpoints introduced by routing.<br/> - + <b>Editar puntos del track</b><br/>Seleccione una función y un modo de enrutamiento a través de los botones de herramientas. A continuación, seleccione un punto del track. Sólo se pueden cambiar los puntos marcados con un cuadrado grande. Los que tienen un punto negro son subpuntos introducidos por el enrutamiento.<br/> Warning! - ¡Cuidado! + ¡Cuidado! This will replace all data of the original by a simple line of coordinates. All other data will be lost permanently. - Esto sustituirá todos los datos del original con una simple línea de coordenadas. Todos los demás datos se perderán definitivamente. + Esto sustituirá todos los datos del original con una simple línea de coordenadas. Todos los demás datos se perderán definitivamente. @@ -2999,7 +3067,7 @@ Add POI as Waypoint - + Añadir POI como Waypoint @@ -3014,7 +3082,7 @@ Add Route - + Añadir ruta @@ -3024,7 +3092,7 @@ Select Items On Map - + Seleccionar elementos del mapa @@ -3034,7 +3102,7 @@ Copy position (Grid) - + Copiar posicion (malla) @@ -3042,7 +3110,7 @@ <b>Save(Print) Map</b><br/>Select a rectangular area on the map. Use the left mouse button and move the mouse. Abort with a right click. Adjust the selection by point-click-move on the corners. - + <b>Guardar/imprimir mapa</b><br/>Seleccionar un area rectangular en el mapa. Pulse el boton izquierdo del ratón y muevalo. Cancele con el boton derecho. Ajuste la seleccion haciendo clic y moviendo las esquinas. @@ -3050,7 +3118,7 @@ <b>Select Range</b><br/>Select first track point with left mouse button. And then a second one. Leave range selection with a click of the right mouse button.<br/> - + <b>Seleccionar rango</b><br/>Primero seleccione un punto del track con el botón izquierdo del raton. Despues por segunda vez. Seleccine el rango con un clic del botón derecho del ratón<br/> @@ -3058,12 +3126,12 @@ <b>Select Items On Map</b><br/>Select a rectangular area on the map. Use the left mouse button and move the mouse. Abort with a right click. Adjust the selection by point-click-move on the corners. - + <b>Seleccionar elementos en el mapa</b><br/>Seleccionar un area rectangular con el boton izquierdo del ratón. Cancelar con clic derecho. Ajuste la seleccion haciendo clic en las esquinas y moviendo. <b>Selected:</b><br/> - + <b>Seleccionado:</b><br/> @@ -3078,12 +3146,12 @@ %1 routes<br/> - + %1 rutas<br/> %1 areas<br/> - + %1 áreas<br/> @@ -3099,12 +3167,12 @@ distance [%1] - distancia [%1] + distancia [%1] time - tiempo + tiempo @@ -3125,22 +3193,22 @@ Print Map... - + Imprimir mapa... Save Map as Image... - + Guardar mapa como imagen... Printer Properties... - + Imprimir propiedades... Pages: %1 x %2 - + Páginas: %1 x %2 @@ -3149,17 +3217,21 @@ %1x%2 pixel x: %3 m/px y: %4 m/px - + Zoom con la rueda del ratón en el mapa inferior para cambiar la resolución: + +%1x%2 pixel +x: %3 m/px +y: %4 m/px Printing pages. - + Imprimir páginas. Save map... - + Guardar mapa... @@ -3167,12 +3239,12 @@ Elapsed time: %1 - + Tiempo transcurrido: %1 - + Elapsed time: %1 seconds. - + Tiempo transcurrido: %1 segundos. @@ -3262,7 +3334,7 @@ Routes: %1 (Only the basic route will be copied) - Routes: %1 (Only the basic route will be copied) + Rutas: %1 (Sólo se copiará la ruta básica) @@ -3272,7 +3344,7 @@ Overlays: %1 (areas will be converted as areas, distance lines will be converted to tracks, all other overlay items will be lost) - + Superposiciones: %1 (las áreas se convertirán como áreas, las líneas de distancia se convertirán en tracks, todos los demás elementos de superposición se perderán @@ -3297,7 +3369,7 @@ ------ Abort ------ - ------ Abortar ------ + ------ Cancelar ------ @@ -3343,23 +3415,23 @@ Corrupt track ... - Track corrupto... + Track corrupto... Number of trackpoints is not equal the number of training data trackpoints. - + El número de puntos del track no es igual al número de puntos de datos de entrenamiento. Number of trackpoints is not equal the number of extended data trackpoints. - + El número de puntos de track no es igual al número de datos extendidos Number of trackpoints is not equal the number of shadow data trackpoints. - + El número de puntos del track no es igual al número de datos extendidos ocultos. @@ -3367,22 +3439,22 @@ Existing file... - + Archivo existente... Remove existing %1? - + ¿Eliminar los %1? Remove existing file %1 - + Eliminar el archivo %1 %1: drop item with QLGT DB ID %2 - + Descartar elemento %2 de la base de datos de QLandKarteGT @@ -3391,13 +3463,13 @@ Failed to open... - Fallo al abrir... + Fallo al abrir... Failed to open %1 - Fallo al abrir %1 + Fallo al abrir %1 @@ -3410,17 +3482,17 @@ first alternative - + Primera alternativa second alternative - + Segunda alternativa third alternative - + Tercera alternativa @@ -3435,79 +3507,79 @@ profile: %1, alternative: %2 - + perfil: %1, alternativa: %2 response is empty - + La respuesta está vacía Bad response from server: %1 - + Mala respuesta del servidor: %1 <b>BRouter</b><br/>Routing request sent to server. Please wait... - + <b>BRouter</b><br/>Solicitud de enrutamiento enviada al servidor. por favor espere... Calculate route with %1 - + Calcular ruta con %1 <b>BRouter</b><br/>Bad response from server:<br/>%1 - + <b>BRouter</b><br/>Mala respuesta del servidor:<br/>%1 <br/>Calculation time: %1s - + Tiempo empleado en el cálculo: %1s Error - Error + Error running - + En marcha starting - + comenzando QMapShack communicates with BRouter via a network connection. Usually this is done on a special address that can't be reached from outside your device. However BRouter listens for connections on all available interfaces. If you are in your own private network with an active firewall, this is not much of a problem. If you are in a public network every open port is a risk as it can be used by someone else to compromise your system. We do not recommend to use the local BRouter service in this case. - + QMapShack se comunica con BRouter a través de una conexión de red. Por lo general, esto se hace en una dirección especial que no se puede alcanzar desde fuera de su dispositivo. Sin embargo BRouter escucha las conexiones en todas las interfaces disponibles. Si usted está en su propia red privada con un cortafuegos activo, esto no es un gran problema. Si usted está en una red pública cada puerto abierto es un riesgo, ya que puede ser utilizado por otra persona para comprometer su sistema. No recomendamos utilizar el servicio local de BRouter en este caso. Warning... - Aviso... + Aviso... I understand the risk. Don't tell me again. - + Comprendo el riesgo. No avisar de nuevo stopped - + Parado not installed - + No instalado @@ -3520,22 +3592,22 @@ %1 not accessible - + %1 no accessible %1 invalid result - + %1 resultado inválido Error parsing online-config: - + Error al analizar configuración online: Network error: - + Error de red @@ -3543,164 +3615,164 @@ Restore Default Values - + Restablecer valores por defecto Open Directory - + Abrir carpeta select Java Executable - + Seleccionar ejecutable Java please select BRouter installation directory - + Seleccione carpeta de instalacion de BRouter selected directory does not exist - + La carpeta seleccionada no existe create directory and install BRouter there - + Cree una carpeta e instale BRouter allí existing BRouter installation - + Instalacion de BRouter exixtente update existing BRouter installation - + Actualizar instalación de BRouter empty directory, create new BRouter installation here - + Carpeta vacia, instale BRouter aquí create new BRouter installation - + Crear nueva instalacion de BRouter seems to be a valid Java-executable - + Parece ser un ejecutable Java válido doesn't seem to be a valid Java-executable - + no parece un ejecutable Java válido Java Executable not found - + Ejecutable Java no encontrado Error loading installation-page at %1 - + Error al cargar la página de instalación en %1 no brouter-version to install selected - + Ninguna versión de BRouter para instalar seleccionada selected %1 for download and installation - + Seleccione %1 para descargar e instalar Warning... - Aviso... + Aviso... Download: %1<br/><br/>This will download and install a zip file from a download location that is not secured by any standard at all, using plain HTTP. Usually this should be HTTPS. The risk is someone redirecting the request and sending you a replacement zip with malware. There is no way for QMapShack to detect this. <br/>If you do not understand this or if you are in doubt, do not proceed and abort. Use the Web version of BRouter instead. - + Descarga:%1<br/><br/> Esto descargará e instalará un archivo zip desde una ubicación de descarga que no está protegida por ningún estándar, usando HTTP normal. Normalmente esto debe ser HTTPS. El riesgo es que alguien redireccione la solicitud y le envíe un código postal de reemplazo con malware. No es posible que QMapShack lo detecte. <br/> Si no entiende esto o si tiene alguna duda, no proceda y cancele. Utilice la versión web de BRouter en su lugar. I understand the risk and wish to proceed. - + Entiendo el riesgo, continuar. download %1 started - + Iniciada descarga %1 Network Error: %1 - + Error de red: %1 download %1 finished - + Finalizada descarga %1 unzipping: - + Descomprimiendo: ready. - + Preparado download of brouter failed: %1 - + Descarga de BRouter fallida: %1 retrieving available profiles from %1 - + Recuperar los perfiles disponibles de %1 content of profile - + Contenido del perfil Error: - + Error creating directory %1 - + Error creando la carpeta %1 Error directory %1 does not exist - + Error: La carpeta %1 no existe Error creating file %1 - + Error creando archivo %1 Error writing to file %1 - + Error escribiendo el archivo %1 @@ -3708,7 +3780,7 @@ Continue with Setup - + Continuar con la configuración @@ -3716,140 +3788,140 @@ available routing-data is being determined. - + Se están determinando los datos de enrutamiento disponibles. Select outdated - + Selección caducada Clear Selection - + Borrar selección Delete selection - + Borrar Selección Download - + Descargar Error creating segments directory %1 - + Error al crear la carpeta de segmentos cannot parse: %1 is not a date - + No se puede analizar: %1 no es una fecha cannot parse: %1 is not a valid size - + No se puede analizar: %1 No es un tamaño válido Error retrieving available routing data from %1: %2 - + Error al recuperar los datos de enrutamiento disponibles de %1: %2 segments directory does not exist: - + Carpeta de segmentos no existe: error creating file %1: %2 - + Error creando archivo %1: %2 no valid request for filename %1 - + %1 : Solicitud no válida de nombre de archivo no open file assigned to request for %1 - + Ningún archivo abierto asignado a la solicitud de %1 error writing to file %1: %2 - + Error al escribir el archivo %1: %2 - + error renaming file %1 to %2: %3 - + Error renombrando archivo %1 a %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) - + actualizado: %1 (%2), obsoleto: %3 (%4), Para descargar: %5 (%6) - + being downloaded: %1 of %2 - + Descargando: %1 of %2 - + no local data, online available: %1 (%2) - + Sin datos locales, disponible online: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) - + Datos locales obsoletos (%1, %2 - remoto%3, %4) Error removing %1: %2 - + Error eliminando %1: %2 Network Error - + Error de red invalid result, no files found - + Resultado no válido, no se encuentran archivos - + local data up to date (%1, %2) - + Datos locales actualizados (%1, %2) - + no routing-data available - + Datos de ruteo no disponibles CRouterBRouterToolShell - + !!! done !!! - + ¡¡¡Hecho!!! - + !!! failed !!! - !!! fallo !!! + !!! fallo !!! @@ -3857,123 +3929,123 @@ Fastest - + Más rapido Shortest - + Más corto Bicycle - + Bicicleta Pedestrian - + Peatón US English - + Inglés USA British English - + Inglés UK Danish - Danés + Danés Dutch - Holandés + Holandés French - Francés + Francés German - Alemán + Alemán Italian - Italiano + Italiano Norwegian - Noruego + Noruego Spanish - Español + Español Swedish - Sueco + Sueco mode "%1" - + modo "%1" no highways - + Evitar autopistas no toll roads - + Evitar peajes no seasonal - + Evitar estacionales no unpaved - + Evitar no pavimentadas no ferry - + Evitar Ferrys no crossing of country borders - + No cruzar fronteras <b>MapQuest</b><br/>Routing request sent to server. Please wait... - + <b>MapQuest</b><br/>Solicitud de ruta enviada al servidor. Por favor,espere... <b>MapQuest</b><br/>Bad response from server:<br/>%1 - + <b>MapQuest</b><br/>Mala respuesta del servidor:<br/>%1 <br/>Calculation time: %1s - + Tiempo calculando: %1s @@ -3981,218 +4053,218 @@ Foot - + A pie Horse - + A caballo Wheelchair - + Silla de ruedas Bicycle - + Bicicleta Moped - + Ciclomotor Motorcycle - + Moto Motorcar - + Automóvil Goods - + Mercancias Shortest - + El más corto Found Routino with a wrong version. Expected %1 found %2 - + Routino se encuentra en una versión incorrecta. Esperado %1 encontrado %2 Quickest - + El más rápido English - Inglés + Inglés German - Alemán + Alemán French - Francés + Francés Hungarian - Húngaro + Húngaro Dutch - Holandés + Holandés Russian - Ruso + Ruso Polish - Polaco + Polaco A function was called without the database variable set. - + Se llamó una función sin la variable de base de datos establecida. A function was called without the profile variable set. - + Se llamó una función sin la variable de perfil establecida. A function was called without the translation variable set. - + Se llamó una función sin el conjunto de variables de traducción The specified database to load did not exist. - + La base de datos especificada no existe The specified database could not be loaded. - + No se pudo cargar la base de datos especificada The specified profiles XML file did not exist. - + El archivo XML de perfiles no existe The specified profiles XML file could not be loaded. - + El archivo XML de perfiles especificado no está cargado The specified translations XML file did not exist. - + El archivo XML de traducción especificado no existe The specified translations XML file could not be loaded. - + El archivo XML de traducción especificado no está cargado The requested profile name does not exist in the loaded XML file. - + El nombre del perfil solicitado no existe en el archivo XML cargado The requested translation language does not exist in the loaded XML file. - + El idioma solicitado no existe en el archivo XML cargado The profile and database do not work together. - + El perfil y la base de datos no funcionan juntos The profile being used has not been validated. - + El perfil que se utiliza no ha sido validado The user specified profile contained invalid data. - + El perfil especificado por el usuario contenía datos no válidos The routing options specified are not consistent with each other. - + Las opciones de enrutamiento especificadas no son coherentes entre sí There is a mismatch between the library and caller API version. - + Hay un desajuste entre la biblioteca y la versión de la API del llamante Route calculation was aborted by user. - + El cálculo de la ruta ha sido cancelado por el usuario A route could not be found to waypoint %1. - + No se pudo encontrar una ruta al waypoint %1 Unknown error: %1 - + Error desconocido: %1 profile "%1" - + perfil "%1" , mode "%1" - + , modo "%1" Warning... - Aviso... + Aviso... In the routing database there is no highway near the coordinates to place a waypoint. - + En la base de datos de enrutamiento no hay ninguna carretera cerca de las coordenadas para colocar un waypoint. - + Calculate route with %1 - + Calcular ruta con %1 <br/>Calculation time: %1s - + <br/>Tiempo de cálculo: %1s @@ -4200,12 +4272,12 @@ Add or remove paths containing Routino data. There can be multiple databases in a path but no sub-path is parsed. - + Agregar o quitar carpetas que contienen datos de Routino. Puede haber varias bases de datos en una carpeta, pero no se analiza ninguna subcarpeta Select routing data file path... - + Seleccione la carpeta del archivo de datos de enrutamiento @@ -4231,23 +4303,23 @@ Create Routino Database - + Crear base de datos de Routino Select files... - Seleccionar ficheros de origen... + Seleccionar ficheros de origen... Select target path... - + Seleccionar carpeta de destino !!! done !!! - + ¡¡¡Hecho!!! @@ -4255,7 +4327,7 @@ No range selected - + No hay rango seleccionado @@ -4268,37 +4340,37 @@ <b>Intersecting Mode</b><br/>All selected items have to be inside or at least intersect the selected area.<br/> - + Modo de intersección</b><br/>Todos los elementos seleccionados deben estar dentro o al menos intersecar el área seleccionada.<br/> <b>Add Tracks</b><br/>Add tracks to list of selected items<br/> - + <b>Agregar tracks</b><br/>Agregar tracks a la lista de elementos seleccionados<br/> <b>Add Waypoints</b><br/>Add waypoints to list of selected items<br/> - + <b>Agregar waypoints</b><br/>Agregar waypoints a la lista de elementos seleccionados<br/> <b>Add Routes</b><br/>Add routes to list of selected items<br/> - + <b>Agregar rutas</b><br/>Agregar rutas a la lista de elementos seleccionados <br/> <b>Add Areas</b><br/>Add areas to list of selected items<br/> - + <b>Agregar áreas</b><br/>Agregar áreas a la lista de elementos seleccionados<br/> <b>Ignore Tracks</b><br/>Ignore tracks in list of selected items<br/> - + <b>Ignorar tracks</b><br/>Ignorar tracks de la lista de elementos seleccionados<br/> <b>Ignore Waypoints</b><br/>Ignore waypoints in list of selected items<br/> - + <b>Ignorar Waypoints</b><br/>Ignorar waypoints de la lista de elementos seleccionados<br/> @@ -4308,7 +4380,7 @@ <b>Ignore Areas</b><br/>Ignore areas in list of selected items<br/> - + Ignorar áreas</b><br/>Ignorar áreas de la lista de elementos seleccionados<br/> @@ -4316,7 +4388,7 @@ Search database '%1': - + Buscar base de datos '%1': @@ -4337,12 +4409,12 @@ Missing Requirement - + Falta un requisito MySQL cannot be used at this point, because the corresponding driver (QMYSQL) is not available.<br />Please make sure you have installed the corresponding package.<br />If you don't know what to do now you should have <a href="%1">a look at the wiki</a>. - + SQL no se puede utilizar en este momento, ya que el controlador correspondiente (QMYSQL) no está disponible.<br />Asegúrese de haber instalado el paquete correspondiente.<br />Si usted no sabe qué hacer ahora debe <a href="%1">consultar la wiki</a>. @@ -4383,7 +4455,7 @@ Failed to load file %1... - + Fallo al cargar el archivo %1 @@ -4391,46 +4463,46 @@ Failed to parse timestamp `%1` - + Error al analizar la marca de tiempo %1 %1 does not exist - + %1 no existe Failed to open %1 - Fallo al abrir %1 + Fallo al abrir %1 Failed to read: %1 line %2, column %3: %4 - Fallo al leer: %1 + Fallo al leer: %1 línea %2, columna %3. %4 Not a SLF file: %1 - + %1 no es un archivo SLF Unsupported revision %1: %2 - + Revisión no admitida %1: %2 Break %1 - + Pausa %1 Lap %1 - + Vuelta %1 @@ -4438,7 +4510,7 @@ Double click to edit elevation value - + Doble clic para editar datos de altitud @@ -4456,97 +4528,97 @@ Failed to load file %1... - + Fallo al cargar el archivo %1... Failed to open %1 - Fallo al abrir %1 + Fallo al abrir %1 Failed to read: %1 line %2, column %3: %4 - Fallo al leer: %1 + Fallo al leer: %1 línea %2, columna %3. %4 Not a TCX file: %1 - + %1 no es un archivo TCX This TCX file contains at least 1 workout, but neither an activity nor a course. As workouts do not contain position data, they can not be imported to QMapShack. - + Este archivo TCX contiene al menos un entrenamiento, pero ninguna actividad ni carrera. Como los entrenamientos no contienen datos de posición, no se pueden importar a QMapShack This TCX file does not contain any activity or course: %1 - + El archivo TCX %1 no contiene ninguna actividad ni carrera File exists ... - El archivo ya existe ... + El archivo ya existe ... The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> - + El archivo existe y no ha sido creado por QMapShack. Si pulsa 'yes' Se perderán todos los datos de este archivo. Incluso si este archivo contiene datos y ha sido cargado por QMapShack, QMapShack puede no ser capaz de cargar y almacenar todos los elementos de este archivo. Estos elementos se perderán. Se recomienda usar otro archivo. <b>¿Realmente desea sobrescribir el archivo?</b> The track <b>%1</b> you have selected contains trackpoints with invalid timestamps. Device might not accept the generated TCX course file if left as is. <b>Do you want to apply a filter with constant speed (10 m/s) and continue?</b> - + El track <b>%1</b> Que ha seleccionado contiene puntos y marcas de tiempo no válidas. Es posible que el dispositivo no acepte el archivo de curso TCX generado si se deja como está <b>¿Desea aplicar un filtro con velocidad constante (10 m / s) y continuar?</b> Course - + Carrera Activity - + Actividad Cancel - + Cancelar Track with invalid timestamps... - + Track con marcas de tiempo inválidas. Activity or course? - + ¿Actividad o carrera? QMapShack does not know how track <b>%1</b> should be saved. <b>Do you want to save it as a course or as an activity? </b>Remember that only waypoints close enough to the track will be saved when saving as a course. Waypoints will not be saved when saving as an activity. - + QMapShack no sabe cómo <b>%1</b> Debe ser guardado. <b>¿Desea guardarlo como carrera o como actividad? </b>Recuerde que sólo se guardarán waypoints lo suficientemente cerca del track al guardar como carrera. Los waypoints no se guardarán al guardar como actividad. Failed to create file '%1' - Fallo al crear el archivo '%1' + Fallo al crear el archivo '%1' Failed to write file '%1' - Fallo al escribir en el archivo '%1' + Fallo al escribir en el archivo '%1' Saving GIS data failed... - + Error al guardar datos GIS @@ -4559,7 +4631,20 @@ Reset format - + Restablecer formato + + + + CToolBarSetupDialog + + + Available Actions + Acciones disponibles + + + + Selected Actions + Acciones seleccionadas @@ -4574,32 +4659,32 @@ Error... - Error... + Error... Failed to open %1. - Fallo al abrir %1. + Fallo al abrir %1. Save GIS data to... - Guardar los datos GIS en... + Guardar los datos GIS en... Only support lon/lat WGS 84 format. - Solamente soporta formato lon/lat WGS84. + Solamente soporta formato lon/lat WGS84. Failed to read data. - Fallo al leer los datos. + Fallo al leer los datos. @@ -4607,7 +4692,7 @@ Path to user icons... - + Carpeta de iconos de usuario @@ -4629,7 +4714,7 @@ TextLabel - + Denominación @@ -4654,12 +4739,12 @@ Czech: - + checo: German: - + Alemán: @@ -4669,12 +4754,12 @@ Dutch: - + holandés: French: - + Francés: @@ -4684,7 +4769,7 @@ Russian: - + Ruso: @@ -4704,7 +4789,7 @@ <b>Translation:</b> - + <b>Traducción:</b> @@ -4714,7 +4799,7 @@ Spanish: - + Español: @@ -4729,17 +4814,17 @@ <b>Binaries:</b> - + <b>Binarios:</b> <b>Contributors:</b> - + <b>Colaboradores:</b> Jose Luis Domingo Lopez - + Jose Luis Domingo, Javi Segovia @@ -4754,7 +4839,7 @@ ...and thanks to all Linux binary maintainers for doing a great job. Special thanks to Dan Horák and Bas Couwenberg for showing presence on the mailing list to discuss distribution related topics. - + ... y gracias a todos los mantenedores de Linux por hacer un gran trabajo. Agradecimientos especiales a Dan Horák y Bas Couwenberg por estar presentes en la lista de correo para discutir temas relacionados con la distribución @@ -4766,7 +4851,7 @@ This software is licensed under GPL3 or any later version - + Este software esta bajo licencia GPL3 o posterior @@ -4789,17 +4874,17 @@ Scales - + Escalas Logarithmic - + Logarítmico Square (optimized for TMS and WTMS tiles) - + Cuadrado (optimizado para teselas TMS y WTMS) @@ -4807,7 +4892,7 @@ Dialog - + Diálogo @@ -4820,7 +4905,7 @@ Available Tracks - + Tracks disponibles @@ -4833,7 +4918,7 @@ Combined Tracks - + Tracks combinados @@ -4841,7 +4926,7 @@ Coordinate Format... - + Formato de coordenadas @@ -4864,13 +4949,13 @@ Create Route from Waypoints - + Crear rutas con los waypoints ... - ... + ... @@ -4878,27 +4963,27 @@ Cut Track - + Dividir track Delete first part of the track and keep second one - + Borrar primera parte del track y conservar la segunda Keep both parts of the track - + Mantener ambas partes del track Keep first part of the track and delete second one - + Conservar primera parte del track y borrar la segunda Cut Mode: - + Modo de división @@ -4907,12 +4992,16 @@ If you keep both parts of the track you have to create new ones. If you want to keep just one half you can simply remove the points, or check this to create a new track. - + Compruebe esto para almacenar el resultado en un nuevo track. + +Si mantiene ambas partes del track, tiene que crear otros nuevos. + +Si desea mantener sólo una mitad puede simplemente eliminar los puntos, o marcar esto para crear un nuevo track Create a new track - + Crear nuevo track @@ -4920,58 +5009,62 @@ The internal database format of '%1' has changed. QMapShack will migrate your database, now. After the migration the database won't be usable with older versions of QMapShack. It is recommended to backup the database first. - + Compruebe esto para almacenar el resultado en un nuevo track. + +Si mantiene ambas partes del track tiene que crear otras nuevas. + +Si desea mantener sólo una mitad puede simplemente eliminar los puntos, o marcar esto para crear un nuevo track Migrate database... - + Migrar base de datos. Migration aborted by user - + Migracion cancelada por el usuario Failed to migrate '%1'. - + Fallo al migrar '%1'. Error... - Error... + Error... Migration failed - + La migración falló The database version of '%1' is more advanced as the one understood by your QMapShack installation. This won't work. - + La versión de base de datos '%1' Está más avanzado que el entendido por su instalación de QMapShack. Esto no funcionará. Initialization failed - + Inicializacion fallida Wrong database version... - + Versión errónea de la base de datos Database created by newer version of QMapShack - + Base de datos creada por la nueva versión de QMapShack Failed to initialize '%1'. - + Fallo al iniciar '%1'. @@ -4979,17 +5072,17 @@ Password... - + Contraseña... Password for database '%1': - + Contraseña de la base de datos Update to database version 5. Migrate all GIS items. - + Actualizar base de datos a versión 5. Migrar todos los elementos GIS @@ -4997,17 +5090,17 @@ Update to database version 3. Migrate all GIS items. - + Actualizar base de datos a versión 3. Migrar todos los elementos GIS Update to database version 5. Migrate all GIS items. - + Actualizar base de datos a versión 5. Migrar todos los elementos GIS Update to database version 6. Migrate all GIS items. - + Actualizar base de datos a versión 6. Migrar todos los elementos GIS @@ -5015,7 +5108,7 @@ Setup DEM file paths - + Configurar carpeta de archivos DEM @@ -5055,7 +5148,7 @@ <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> - <html><head/><body><p>Controle el rango de escalas para las cuales desea que se muestre el mapa. Use los dos botones a izquierda y derecha para definir la escala actual como bien la escala mínima o máxima para el mapa.</p></body></html> + <html><head/><body><p>Controle el rango de escalas para las cuales desea que se muestre el mapa. Use los dos botones a izquierda y derecha para definir la escala actual como la escala mínima o máxima para el mapa.</p></body></html> @@ -5079,7 +5172,7 @@ ° - º + º @@ -5097,7 +5190,7 @@ TextLabel - + Denominación @@ -5110,7 +5203,7 @@ To add files with elevation data use <b>File->Setup DEM Paths</b>. Or click <a href='setup'><b>here</b></a> - + Para añadir archivos con datos de altitud <b>File->configure rutas de DEM</b>. O clic <a href='setup'><b>aqui</b></a> @@ -5125,27 +5218,27 @@ Move Up - + Subir Hide DEM behind previous one - + Ocultar DEM detrás del anterior Move down - + Bajar Show DEM on top of next one - + Mostrar DEM encima del siguiente Reload DEM - + Recargar DEM's @@ -5153,7 +5246,7 @@ Dialog - + Diálogo @@ -5194,7 +5287,7 @@ Update spoilers - + Actualizar spoilers @@ -5210,7 +5303,7 @@ TextLabel - + Denominación @@ -5218,17 +5311,17 @@ Dialog - + Diálogo The area was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. - + El área se importó a QMapShack y se cambió. Ya no muestra los datos originales. Consulte el historial de cambios Toggle read only mode. You have to open the lock to edit the item. - + Cambia el modo de sólo lectura. Debe abrir el bloqueo para editar el elemento. @@ -5258,7 +5351,7 @@ Info - Información + Información @@ -5304,17 +5397,17 @@ Keep order of project - + Mantenga el orden del proyecto Sort along track (multiple) - + Ordenar a lo largo del track (múltiples) Sort along track (single) - + Ordenar a lo largo del track (único) @@ -5332,12 +5425,12 @@ Info - Información + Información The route was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. - + La ruta se importó a QMapShack y se cambió. Ya no muestra los datos originales. Consulte el historial de cambios. @@ -5347,17 +5440,17 @@ Toggle read only mode. You have to open the lock to edit the item. - + Cambia el modo de sólo lectura. Debe abrir el bloqueo para editar el elemento. ... - ... + ... Hist. - Historial + Historial @@ -5365,7 +5458,7 @@ Form - + @@ -5378,22 +5471,22 @@ Use/edit user defined visibility of arrows for this track - + Utilizar / editar la visibilidad definida por el usuario de las flechas de este track Use/edit system's visibility of arrows for all tracks - + Utilizar / editar la visibilidad definida por el usuario de las flechas de todos los track Use/edit user defined scale factor for this track - + Utilizar / editar el factor de escala de este track Use/edit system's default factor for all tracks - + Utilice / edite el factor predeterminado del sistema para todas los tracks @@ -5420,7 +5513,7 @@ User defined limits for this track - + Límites definidos por el usuario para este track @@ -5428,7 +5521,7 @@ Automatic limits - + Límites automáticos @@ -5436,7 +5529,7 @@ User defined limits for all tracks - + Límites definidos por el usuario para todos los track @@ -5446,7 +5539,7 @@ Toggle read only mode. You have to open the lock to edit the item. - + Cambia el modo de sólo lectura. Debe abrir el bloqueo para editar el elemento. @@ -5472,22 +5565,22 @@ Style - Estilo + Estilo Source - + Atributo Maximum - + Máximo Minimum - + Mínimo @@ -5504,47 +5597,47 @@ The track was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. - + El track que se ha importado a QMapShack ha cambiado. No muestra los datos originales. Consulte historial de cambios Width - + Anchura with arrows - + Con flechas Color - Color + Color Graphs - + Gráficos Activity - + Actividad Set Track Activity - + Establecer actividad del track Remove Track Activity - + Eliminar actividad del track To differentiate the track statistics select an activity from the list for the complete track. Or select a part of the track to assign an activity. - + Para diferenciar las estadísticas seleccione una actividad de la lista para todo el track,o bien, seleccione una parte para asignar una actividad. @@ -5559,7 +5652,7 @@ Ele. - Altitud + Altitud. @@ -5594,12 +5687,12 @@ Ascent - + Ascenso Descent - + Descenso @@ -5617,17 +5710,17 @@ Dialog - + Diálogo The waypoint was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. - + El waypoint se importó a QMapShack y se cambió. Ya no muestra los datos originales. Consulte el historial de cambios. Toggle read only mode. You have to open the lock to edit the item. - + Cambia el modo de sólo lectura. Debe abrir el bloqueo para editar el elemento. @@ -5645,7 +5738,7 @@ Info - Información + Información @@ -5658,7 +5751,7 @@ Ele. - + Altitud. @@ -5668,7 +5761,7 @@ Hist. - Historial + Historial @@ -5691,7 +5784,7 @@ There is another project with the same name. If you press 'ok' it will be removed and replaced. - + Hay otro proyecto con el mismo nombre. Si pulsa 'ok'será eliminado y reemplazado @@ -5727,42 +5820,42 @@ Export database to GPX... - + Exportar base de datos a GPX ... - ... + ... Export Path: - + Carpeta de exportación - - - + - GPX 1.1 without extensions - + GPX 1.1 sin extensiones Start - Comenzar + Comenzar Abort - Abortar + Cancelar Close - Cerrar + Cerrar @@ -5798,17 +5891,17 @@ <b>Remove Extension from all Track Points</b> - + <b>Eliminar extensión para todos los puntos del track</b> Remove - + Eliminar from all Track Points - + de todos los puntos del track @@ -5859,27 +5952,27 @@ <b>Interpolate Elevation Data</b> - + <b>Interpolar datos de altitud</b> Replace elevation of track points with interpolated data. - + Sustituir la altitud de los puntos del track con datos interpolados. Quality - + Calidad Preview - + Vista previa ... - ... + ... @@ -5892,17 +5985,17 @@ Hide Invalid Points - + Ocultar puntos inválidos Hide points with invalid data. - + Ocultar puntos con datos inválidos ... - ... + ... @@ -5920,7 +6013,7 @@ Smooth deviation of the track points elevation with a Median filter of size - Suavizar el desvio de la elevación de los puntos del track con la Mediana de + Suavizar el desvio de la altitud de los puntos del track con la Mediana de @@ -5958,7 +6051,7 @@ - - - + - @@ -6009,7 +6102,7 @@ <b>Offset Elevation</b> - <b>Desplazar Elevación</b> + <b>Desplazar altitud</b> @@ -6019,7 +6112,7 @@ to track points elevation. - a la elevación de los puntos del track. + a la altitud de los puntos del track. @@ -6037,12 +6130,12 @@ <b>Replace Elevation Data</b> - <b>Reemplazar Datos de Elevación</b> + <b>Reemplazar Datos de altitud</b> Replace elevation of track points with the values from loaded DEM files. - Reemplazar elevación de los puntos del track utilizando los valores del fichero DEM cargado. + Reemplazar altitud de los puntos del track utilizando los valores del fichero DEM cargado. @@ -6111,17 +6204,17 @@ <html><head/><body><p><span style=" font-weight:600;">Split Segments into Tracks</span></p></body></html> - + <html><head/><body><p><span style=" font-weight:600;">Dividir el track en segmentos</span></p></body></html> Creates a new track for every segment within this track. - + Crea un nuevo track por cada segmento de este track ... - ... + ... @@ -6134,17 +6227,40 @@ <b>Convert track subpoints to points</b> - + <b>Convertir subpuntos de track en puntos</b> Convert subpoints obtained from routing to ordinary track points - + Convierta subpuntos obtenidos por el enrutamiento a puntos de track ordinarios ... - ... + ... + + + + IFilterTerrainSlope + + + Form + + + + + <b>Calculate Terrain Slope</b> + <b>Calcular pendiente del terreno</b> + + + + Calculate slope of the terrain based on loaded DEM files. + Calcular pendiente del terreno en base a los DEM cargados + + + + ... + ... @@ -6152,12 +6268,12 @@ FIT decoding error: Decoder not in correct state %1 after last data byte in file. - + Error decodificando FIT: El decodificador no está en el estado correcto %1 después del último byte de datos en el archivo. FIT decoding error: a development field with the field_definition_number %1 already exists. - + Error decodificando FIT: Ya existe un campo con el número de definición %1. @@ -6165,87 +6281,88 @@ [no name] - + [sin nombre] The item is not part of the project in the database. - + El elemento no forma parte del proyecto en la base de datos. It is either a new item or it has been deleted in the database by someone else. - + +Es un elemento nuevo o ha sido eliminado en la base de datos por otra persona The item is not in the database. - + El elemento no está en la base de datos The item might need to be saved - + Es posible que deba guardar el elemento Initial version. - Versión inicial + Versión inicial <h3>%1</h3> 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'. - + <h3>%1</h3> Posiblemente este elemento es de sólo lectura porque no lo creó QMapShack. Por lo general no es conveniente cambiar los datos importados. Pero si piensa que esta bien, presione 'Ok'. Read Only Mode... - Modo Sólo Lectura... + Modo Sólo Lectura... <h4>Description:</h4> - <h4>Descripción:</h4> + <h4>Descripción:</h4> <p>--- no description ---</p> - <p>---sin descripción---</p> + <p>---sin descripción---</p> <h4>Comment:</h4> - <h4>Comentario:</h4> + <h4>Comentario:</h4> <p>--- no comment ---</p> - + <p>--- Sin comentario ---</p> <h4>Links:</h4> - + <h4>Enlaces:</h4> <p>--- no links ---</p> - <p>--- sin links ---</p> + <p>--- sin enlaces ---</p> Edit name... - Editar nombre... + Editar nombre... Enter new %1 name. - + Introducir nuevo nombre de %1 @@ -6253,39 +6370,40 @@ Save project? - + ¿Guardar proyecto? <h3>%1</h3>The project was changed. Save before closing it? - + <h3>%1</h3>Ha habido cambios en el proyecto. ¿Guardar antes de cerrar? %1: Correlate tracks and waypoints. - + %1: Correlacionar tracks y waypoints <h3>%1</h3>Did that take too long for you? Do you want to skip correlation of tracks and waypoints for this project in the future? - + <h3>%1</h3>¿Desea omitir la correlación de pistas y waypoints para este proyecto en el futuro? Canceled correlation... - + Correlación cancelada Save "%1" to... - + Guardar "%1" como... <br/> Filename: %1 - + <br/> +Nombre de archivo %1 @@ -6300,22 +6418,22 @@ Routes: %1 - + Rutas: %1 Areas: %1 - + Ãreas: %1 Are you sure you want to delete '%1' from project '%2'? - ¿Desea realmente eleiminar '%1' del proyecto '%2'? + ¿Desea realmente eliminar '%1' del proyecto '%2'? Delete... - Borrar... + Borrar... @@ -6326,31 +6444,46 @@ - + Opacity - Opacidad + Opacidad - + Change the opacity of all GIS Items on the map. - + Cambiar opacidad para todos los elementos GIS del mapa + + + + Filter + Filtro - - + + Name Nombre - + Age - + Edad - + To add a database do a right click on the database list above. Para añadir una base de datos haga click-derecho en el espacio superior. + + + Clear Filter + + + + + Setup Filter + + IGridSetup @@ -6367,7 +6500,7 @@ restore default - restaurar predeterminado + restaurar valores predeterminados @@ -6395,7 +6528,7 @@ setup grid color - configurar el color de la malla + Configurar el color de la malla @@ -6443,7 +6576,7 @@ TextLabel - + Denominación @@ -6451,7 +6584,7 @@ Routing - + Enrutamiento @@ -6459,7 +6592,7 @@ Links... - Links... + Enlaces... @@ -6506,337 +6639,362 @@ Ventana - + ? ? - + Project Proyecto - + Tool Herramientas - + Maps Mapas - + Dig. Elev. Model (DEM) Modelo Digital del Terreno (DEM) - + Data Datos - + Route - + Ruta + + + + Toolbar + Barra de herramientas - - + + Add Map View Añadir Vista de Mapa - + Ctrl+T Ctrl+T - + Show Scale Mostrar Escala - + Setup Map Font Configurar Fuente del Mapa - + Show Grid Mostrar Malla - + Ctrl+G Ctrl+G - + Setup Grid Configurar Malla - + Ctrl+Alt+G Ctrl+Alt+G - + Flip Mouse Wheel Invertir la Rueda del Ratón - - + + Setup Map Paths Configurar Rutas de Mapas - + POI Text Texto del POI - + Night / Day Noche / Día - + Map Tool Tip - Mostrar Tooltips en los Mapas + Mostrar descripción emergente en los Mapas - + Ctrl+I Ctrl+I - + Setup DEM Paths Configurar Rutas a los DEM - + About Acerca de - + Help Ayuda - + F1 - - + + Setup Map View Configurar Vista de Mapa - + VRT Builder Asistente VRT - + GUI front end to gdalbuildvrt - + GUI front end para gdalbuildvrt - + Store Map View - + Guardar vista de mapa - + Write current active map and DEM list including the properties to a file - + Guardar en un archivo el mapa activo actual y la lista de DEM's incluyendo sus propiedades - + Load Map View - + Cargar vista de mapa - + Restore view with active map and DEM list including the properties from a file - + Restaurar vista de mapa activo y lista de DEM's incluyendo sus propiedades desde un archivo - + Ext. Profile - + Perfil en ventana externa - + Ctrl+E Ctrl+E - + Close - Cerrar + Cerrar - + Ctrl+Q - + Clone Map View - + Duplicar vista de mapa - + Ctrl+Shift+T - + Create Routino Database - + Crear base de datos de Routino - + Save(Print) Map Screenshot - + Guardar/Imprimir captura de pantalla de mapa - + Print a selected area of the map - + Imprimir area seleccionada del mapa - + Ctrl+P - + Setup Coord. Format - + Configurar formato de coordenadas - + Change the format coordinates are displayed - + Cambiar el formato de coordenadas que se muestran - + Setup Map Background - + Configuración del Mapa de Fondo - + Setup Waypoint Icons - + Configurar iconos de Waypoint - + Setup path to custom icons - + Configurar ruta de iconos personalizados - + Close Tab - + Cerrar pestaña - + Ctrl+W - + Quickstart Help + Guia de inicio rápido + + + + Setup Toolbar + Configurar barra de herramientas + + + + Toggle Docks + Panel de herramientas + + + + Toggle visibility of dockable windows + Ver panel de herramientas + + + + Ctrl+D - + Load GIS Data Cargar Datos GIS - + Load projects from file Cargar proyectos desde archivo - + Ctrl+L Ctrl+L - + Save All GIS Data - Guardar Todos los Datos GIS + Guardar todos los Datos GIS - + Save all projects in the workspace Guardar todos los proyectos del espacio de trabajo - + Ctrl+S Ctrl+S - + Setup Time Zone Configurar Zona Horaria - + Add empty project Añadir proyecto vacío - + Search Google Buscar en Google - + Close all projects Cerrar todos los proyectos - + F8 - + Setup Units Configurar Unidades - + Setup Workspace Configurar Espacio de trabajo - + Setup save on exit. - + Guardar configuración al salir - + Import Database from QLandkarte Importar base de datos de Qlandkarte - + Import QLandkarte GT database - + Importar base de datos de QLandKarteGT @@ -6849,7 +7007,7 @@ To add maps use <b>File->Setup Map Paths</b>. Or click <a href='setup'><b>here</b></a> - + Para añadir mapas haga<b>Archivo->Configurar rutas de mapas</b>. O haga clic <a href='setup'><b>aqui</b></a> @@ -6860,7 +7018,8 @@ Help! I want maps! I don't want to read the documentation! - + Quiero mapas +No quiero leer la documentación! @@ -6870,27 +7029,27 @@ Move Up - + Subir Hide map behind previous map - + Ocultar mapa detrás del anterior Move down - + Bajar Show map on top of next map - + Mostrar mapa encima del siguiente Reload Maps - + Recargar mapas @@ -6903,7 +7062,7 @@ Root path of tile cache for online maps: - + Carpeta para la caché de mapas online @@ -6916,7 +7075,8 @@ Help! I want maps! I don't want to read the documentation! - + Quiero mapas +No quiero ver la documentación @@ -6945,6 +7105,8 @@ + + ... ... @@ -6976,7 +7138,7 @@ Details - + Detalle @@ -6986,6 +7148,21 @@ Cache Path + Carpeta Caché + + + + Type File: + + + + + Forget external type file and use internal types. + + + + + Load an external type file. @@ -7038,67 +7215,67 @@ <b>New Line</b><br/>Move the mouse and use the left mouse button to drop points. When done use the right mouse button to stop.<br/> - + <b>Nueva linea</b><br/>Mueva el ratón y pulse el botón izquierdo del ratón para crear puntos. Para terminar pulse botón derecho del ratón.<br/> <b>Delete Point</b><br/>Move the mouse close to a point and press the left button to delete it.<br/> - + <b>Borrar punto</b><br/>Mueva el ratón hasta un punto y pulse el botón izquierdo para eliminarlo.<br/> <b>Select Range of Points</b><br/>Left click on first point to start selection. Left click second point to complete selection and choose from options. Use the right mouse button to cancel.<br/> - + <b>Seleccionar Rango de Puntos</b><br/>Haga clic izquierdo en el primer punto para iniciar la selección. Haga clic izquierdo en el segundo punto para completar la selección y elija entre las opciones. Utilice el botón derecho del ratón para cancelar.<br/> <b>Move Point</b><br/>Move the mouse close to a point and press the left button to make it stick to the cursor. Move the mouse to move the point. Drop the point by a left click. Use the right mouse button to cancel.<br/> - + <b>Mover punto</b><br/>Mueva el ratón hasta un punto y presione el botón izquierdo para que se adhiera al cursor. Mueve el ratón para mover el punto. Suelte el punto con un clic izquierdo.Botón derecho para terminar.<br/> <b>Add Point</b><br/>Move the mouse close to a line segment and press the left button to add a point. The point will stick to the cursor and you can move it. Drop the point by a left click. Use the right mouse button to cancel.<br/> - + <b>Añadir punto</b><br/>Mueva el ratón cerca de una línea y presione el botón izquierdo para agregar un punto. El punto se pegará al cursor y se puede mover. Suelte el punto con un clic izquierdo. Utilice el botón derecho del ratón para cancelar.<br/> <b>No Routing</b><br/>All points will be connected with a straight line.<br/> - + <b>Sin enrutamiento</b><br/>Todos los puntos se conectarán con una línea recta.<br/> <b>Auto Routing</b><br/>The current router setup is used to derive a route between points. <b>Note:</b> The selected router must be able to route on-the-fly. Offline routers usually can do, online routers can't.<br/> - + <b>Enrutamiento automático</b><br/>La configuración actual del enrutador se utiliza para calcular una ruta entre los puntos. <b>Nota:</b> El enrutador seleccionado debe ser capaz de trabajar al vuelo,por lo general, solo son capaces de hacerlo los instalados localmente.<br/> <b>Vector Routing</b><br/>Connect points with a line from a loaded vector map if possible.<br/> - + <b>Enrutamiento vectorial</b><br/>Conecte puntos con una línea de un mapa vectorial.<br/> <b>%1 Metrics</b> - + <b>Datos %1 </b> Distance: - + Distancia: Ascent: - + Ascenso: Descent: - + Descenso: <br/><b>Move the map</b><br/>If you keep the left mouse button pressed and move the mouse, you will move the map.<br/><br/> - + <br/><b>Mover el mapa</b><br/>Si mantiene pulsado el botón izquierdo del ratón y mueve, moverá el mapa.<br/><br/> @@ -7120,33 +7297,34 @@ Reset Zoom - + Restablecer zoom Stop Range - + Rango de parada Save... - + Guardar... Add Waypoint - Añadir Waypoint + Añadir Waypoint Cut... - + Cortar. Hold CTRL key for vertical zoom, only. Hold ALT key for horizontal zoom, only. - + Pulse tecla CTRL para zoom vertical unicamente. +Pulse tecla ALT para zoom horizontal unicamente @@ -7156,7 +7334,7 @@ Select output file - + Seleccione archivo de salida @@ -7188,34 +7366,34 @@ Print map... - + Imprimir mapa... When printing online maps make sure that the map has been loaded into the cache for the extent to be printed. - + Al imprimir mapas en línea asegúrese de que el mapa se ha cargado en la memoria caché en la medida en que desea imprimir Save - Guardar + Guardar When saving online maps make sure that the map has been loaded into the cache for the extent to be saved. - + Al guardar mapas en línea asegúrese de que el mapa se ha cargado en la memoria caché en la medida en la que desea guardarlo. TextLabel - + Denominación Print - + Imprimir @@ -7223,13 +7401,13 @@ Please wait... - + Por favor,espere... TextLabel - + Denominación @@ -7310,7 +7488,7 @@ Clone waypoint and move by: - Clonar el waypoint y moverlo: + Duplicar el waypoint y moverlo: @@ -7333,29 +7511,29 @@ Profile - Perfil + Perfil Alternative - + Alternativa display selected routing profile - + Mostrar el perfil de enrutamiento seleccionado ... - ... + ... on-the-fly routing - + Enrutamiento al vuelo @@ -7365,7 +7543,7 @@ not running - + Parado @@ -7375,17 +7553,17 @@ show BRouter console - + Mostrar consola de BRouter Setup - + Configuración Caution! BRouter is listening on all ports for connections. - + ¡Precaución! BRouter está escuchando en todos los puertos para las conexiones. @@ -7393,12 +7571,12 @@ BRouter Profile - + Perfil de BRouter TextLabel - + Denominación @@ -7406,12 +7584,12 @@ BRouter Setup - + Configuración de BRouter choose which BRouter to use - + Elija que BRouter usar @@ -7421,22 +7599,22 @@ local Installation - + Instalación local Expert Mode - + Modo experto local BRouter Installation directory: - + Carpeta de instalación de BRouter local select installation directory - + Seleccionar carpeta de instalación @@ -7446,7 +7624,7 @@ ... - ... + ... @@ -7456,12 +7634,12 @@ create or update installation - + Crear o actualizar instalacion Java Executable - + Ejecutable Java @@ -7471,52 +7649,52 @@ search for installed java - + Buscando Java instalado Download and install BRouter Version - + Descargar e instalar BRouter about:blank - about:blank + about:blank File to install - + Archivo para instalar Download and Install - + Descargar e instalar available Profiles - + Perfiles disponibles install profile - + Instalar perfil remove profile - + Eliminar perfil installed Profiles - + Perfiles instalados content of profile - + Contenido del perfil @@ -7541,42 +7719,42 @@ Port - + Puerto Profile directory - + Carpeta de perfiles Segments directory - + Carpeta de segmentos Custom Profiles dir - + Carpeta de perfiles personalizados Max Runtime - + Tiempo máximo de ejecución Number Threads - + Número de hilos Java Options - + Opciones de Java Profiles Url - + URL de perfiles @@ -7589,52 +7767,52 @@ Highways - + Autopistas Seasonal - + Estacional Language - + Lenguaje Country Border - + Fronteras Profile - Perfil + Perfil Avoid: - + Evitar: Ferry - Ferry + Ferry Toll Road - + Carreteras de peaje Unpaved - + Sin pavimentar <p>Directions Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> </p> - + <p>Direcciones cortesía de <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> </p> @@ -7647,37 +7825,37 @@ Profile - Perfil + Perfil Mode - + Modo Database - + Base de datos Add paths with Routino database. - + Añadir carpeta con base de datos de Routino ... - ... + ... Language - + Lenguaje To use offline routing you need to define paths to local routing data. Use the setup tool button to register a path. You can create your own routing data with <b>Tool->Create Routino Database</b>. - + Para utilizar el enrutamiento sin conexión es necesario definir rutas de acceso a los datos de enrutamiento locales. Utilice el botón de la herramienta de configuración para indicar una carpeta. Puede crear sus propios datos de enrutamiento con la <b>herramienta->Crear base de datos de Routino</b>. @@ -7685,18 +7863,18 @@ Setup Routino database... - + Configurar base de datos de Routino ... - ... + ... - - - + - @@ -7718,32 +7896,32 @@ ... - ... + ... Select source files: - Seleccionar ficheros de origen: + Seleccionar ficheros de origen: Start - Comenzar + Comenzar Target Path: - + Carpeta de destino - - - + - File Prefix - + Prefijo del archivo @@ -7761,17 +7939,17 @@ Save as new - Guardar como nuevo + Guardar como nuevo... Abort - Abortar + Cancelar Move points. (Ctrl+M) - + Mover puntos. (Ctrl+M) @@ -7781,7 +7959,7 @@ Add new points. (Ctrl++) - + Añadir puntos. (Ctrl++) @@ -7791,7 +7969,7 @@ Select a range of points. (Ctrl+R) - + Seleccionar rango de puntos. (Ctrl+R) @@ -7801,7 +7979,7 @@ Delete a point. (Ctrl+D) - + Borrar un punto. (Ctrl+D) @@ -7811,7 +7989,7 @@ No auto-routing or line snapping (Ctrl+O) - + Sin enrutamiento automático ni ajuste de línea (Ctrl + O) @@ -7821,7 +7999,7 @@ Use auto-routing to between points. (Ctrl+A) - + Utilice el enrutamiento automático entre los puntos. (Ctrl+A) @@ -7831,7 +8009,7 @@ Snap line along lines of a vector map. (Ctrl+V) - + Seguir linea de mapa vectorial. (Ctrl+V) @@ -7841,7 +8019,7 @@ ... - ... + ... @@ -7861,17 +8039,17 @@ Ctrl+V - Ctrl+V + Ctrl+V Undo last change - + Deshacer Redo last change - + Rehacer @@ -7884,7 +8062,7 @@ View details and edit. - + Ver detalles y editar. @@ -7902,17 +8080,17 @@ Delete area from project. - + Eliminar área de este proyecto Edit shape of the area. - + Editar el contorno del área. TextLabel - + Denominación @@ -7925,18 +8103,18 @@ Save selected area as image. - + Guardar el área seleccionada como imagen ... - ... + ... Print selected area. - + Imprimir área seleccionada @@ -7949,18 +8127,18 @@ Delete all points between the first and last one. - + Borre todos los puntos entre el primero y el último. ... - ... + ... <html><head/><body><p>Calculate a route between the first and last selected point.</p></body></html> - + <html><head/><body><p>Calcular una ruta entre el primero y el último punto seleccionado.</p></body></html> @@ -7991,7 +8169,7 @@ Select an activity for the selected range. - + Seleccionar una actividad para el rango seleccionado @@ -8001,7 +8179,7 @@ TextLabel - + Denominación @@ -8031,37 +8209,37 @@ View details and edit. - + Ver detalles y editar Delete route from project. - + Borrar ruta del proyecto Calculate route. - + Calcular ruta Reset route calculation. - + Reiniciar cálculo de ruta Move route points. - + Mover puntos de ruta Convert route to track - + Convertir ruta en track TextLabel - + Denominación @@ -8074,7 +8252,7 @@ Copy all selected items to a project. - + Copiar todos los elementos seleccionados a un proyecto. @@ -8089,57 +8267,57 @@ ... - ... + ... Create a route from selected waypoints. - + Crear ruta con los waypoints seleccionados Change the icon of all selected waypoints. - + Cambiar el icono a los waypoints seleccionados Combine all selected tracks to a new one. - + Combinar todos los tracks seleccionadas en uno nuevo Delete all selected items. - + Borrar los elementos seleccionados Select all items that intersect the selected area. - + Seleccione los elementos que interseccionan el área seleccionada. - Select all itmes that are completely inside the selected area. - + Select all items that are completely inside the selected area. + Seleccione los elementos que estan dentro del area seleccionada. Add tracks to selection. - + Añadir tracks a la selección Add waypoints to selection. - + Añadir waypoints a la selección. Add routes to selection. - + Añadir rutas a selección. Add areas to selection. - + Añadir áreas a la selección. @@ -8162,7 +8340,7 @@ View details and edit properties of track. - + Ver detalles y editar propiedades del track. @@ -8186,7 +8364,7 @@ Delete track from project. - + Eliminar track del proyecto @@ -8211,17 +8389,22 @@ * use the track parts to plan a new tour * cut a long track into stages - + Divida el track por el punto seleccionado. Puede usar esto para: + +*Eliminar puntos erróneos del principio o del final. +*Utilizar partes del track para planificar otro nuevo. +*Dividir un track muy largo en varias etapas. + Copy track together with all attached waypoints into another project. - + Copiar track junto con todos los waypoints conectados en otro proyecto. TextLabel - + Denominación @@ -8234,7 +8417,7 @@ View details and edit. - + Ver detalles y editar. @@ -8254,27 +8437,27 @@ Delete waypoint from project. - + Eliminar waypoint del proyecto. Show content as static bubble. - + Mostrar contenido en burbuja de texto Move waypoint to a new location. - + Mover el waypoint a una nueva ubicación. Clone waypoint and move clone a given distance and angle. - + Duplicar el waypoint y mover la copia a una distancia y un ángulo dados. TextLabel - + Denominación @@ -8282,28 +8465,29 @@ Search... - + Buscar... Type the word you want to search for and press the search button. If you enter 'word' a search with an exact match is done. If you enter 'word*', 'word' has to be at the beginning of a string. - + Escriba la palabra que desea buscar y pulse botón de busqueda. +Si introduce la 'palabra' entre apóstrofes se busca una coincidencia exacta . Si introduce 'palabra*', la 'palabra' se busca al principio de una cadena. Name - Nombre + Nombre Search - + Buscar Close - Cerrar + Cerrar @@ -8311,7 +8495,7 @@ Select devices... - + Seleccionar dispositivos @@ -8340,12 +8524,12 @@ TextLabel - + Denominación Do not copy item - NO copiar el elemento + No copiar el elemento @@ -8378,12 +8562,58 @@ Select Parent Folder... - + Seleccione la carpeta principal. Name - Nombre + Nombre + + + + ISelectDoubleListWidget + + + Form + + + + + Available + Disponible + + + + Add to selected items + Añadir a los elementos seleccionados + + + + Remove from selected items + Eliminar de los elementos seleccionados + + + + Selected + Seleccionado + + + + Move selected items up + Mover los elementos seleccionados arriba + + + + Move selected items down + Mover los elementos seleccionados abajo + + + + + + + ... + ... @@ -8401,12 +8631,12 @@ New project's name - + Nombre del nuevo proyecto New project is created as: - El nuevo proyecto se creó como: + El nuevo proyecto se creará como: @@ -8421,7 +8651,7 @@ Database - + Base de datos @@ -8429,27 +8659,27 @@ Copy item... - Copiar elemento... + Copiar elemento... Replace existing item - Sustituir el elemento existente + Sustituir el elemento existente Add a clone - + Añadir duplicado The clone's name will be appended with '_Clone' - Se añadirá el sufijo '_Clone' al nombre del duplicado + Se añadirá el sufijo '_Clone' al nombre del duplicado Replace with: - Sustituir por: + Sustituir por: @@ -8457,22 +8687,22 @@ TextLabel - + Denominación Do not replace item - + No sustituir elemento Use item: - + Utilizar elemento: And for all other items, too. - Hacer igual para todos los elementos. + Hacer igual para todos los elementos. @@ -8495,12 +8725,12 @@ <p align="justify"><span style=" font-weight:600;">Caution!</span> It is recommended to leave the password blank, as QMapShack will store it as plain text. If you don't give a password you will be asked for it on each startup.</p> - + <p align="justify"><span style=" font-weight:600;">Precación</span> Se recomienda dejar la contraseña en blanco, ya que QMapShack lo almacenará como texto sin formato. Si no introduce una contraseña, se le pedirá que en cada inicio.</p> Do not use a password. - + No usar contraseña. @@ -8515,12 +8745,12 @@ Server - + Servidor Port - + Puerto @@ -8530,22 +8760,22 @@ User - + Usuario Password - + Contraseña <b>Port:</b> Leave the port field empty to use the default port. - + <b>Puerto:</b> Dejar vacio para usar el puerto predeterminado. File: - + Archivo: @@ -8565,16 +8795,39 @@ + ISetupFilter + + + Form + + + + + Apply filter to + + + + + name only + + + + + complete text + + + + ISetupFolder Database Folder... - + Carpeta de base de datos Folder name - + Nombre de la carpeta @@ -8597,22 +8850,22 @@ New Waypoint... - + Nuevo waypoint. Symbol - + Símbolo. ... - ... + ... Position - Posición + Posición @@ -8625,7 +8878,7 @@ "[N|S] ddd mm.sss [W|E] ddd mm.sss" or "[N|S] ddd.ddd [W|E] ddd.ddd" - Formato de posición incorrecto. Debe ser: + Formato de posición incorrecto. Debe ser: "[N|S] ggg mm.sss [W|E] ggg mm.sss" o "[N|S] ggg.ggg [W|E] ggg.ggg" @@ -8651,7 +8904,7 @@ listen for database changes from other instances of QMapShack. On port - + Escuchar los cambios en la base de datos de otras instancias de QMapShack en puerto @@ -8764,42 +9017,42 @@ Bullet List (Disc) - + Lista de viñetas (Disco) Bullet List (Circle) - + Lista de viñetas (círculos) Bullet List (Square) - + Lista de viñetas(cuadrados) Ordered List (Decimal) - + Lista ordenada(decimal) Ordered List (Alpha lower) - + Lista ordenada (alfabético descendente) Ordered List (Alpha upper) - + Lista ordenada (alfabético ascendente) Ordered List (Roman lower) - + Lista ordenada (números romanos descendente) Ordered List (Roman upper) - + Lista ordenada (números romanos ascendente) @@ -8879,18 +9132,18 @@ Plain - + Plano Reset the text's format before pasting - + Restablecer el formato del texto antes del pegado Select All - + Seleccionar todo @@ -8901,19 +9154,19 @@ Delete - Borrar + Borrar Reset Font - + Restablecer fuente Reset Layout - + Restablecer diseño @@ -8923,7 +9176,7 @@ Paste without resetting the text's format - + Pegar sin restablecer el formato del texto @@ -8946,17 +9199,17 @@ Cut - Cortar + Cortar Copy - Copiar + Copiar Paste - Pegar + Pegar @@ -8964,7 +9217,7 @@ Setup Time Zone ... - Configurar la Zona Horaria... + Configurar la Zona Horaria. @@ -8984,17 +9237,25 @@ Print date/time in - + Imprimir fecha y hora en long format, or - + Formato largo, o short format - + formato corto + + + + IToolBarSetupDialog + + + Setup Toolbar + Configuración de barra de herramientas @@ -9002,37 +9263,39 @@ Execution of external program `%1` failed: - + La ejecución del programa externo %1 falló: Process cannot be started. - + No se puede iniciar el proceso. + Make sure the required packages are installed, `%1` exists and is executable. - + Asegúrese de que los paquetes necesarios estén instalados, `%1` existe y es ejecutable External process crashed. - + El proceso externo falló. + An unknown error occurred. - + A ocurrido un error desconocido !!! failed !!! - !!! fallo !!! + !!!falló!!! @@ -9041,7 +9304,7 @@ Error - Error + Error @@ -9051,7 +9314,7 @@ Position values out of bounds. - Valores de posición fuera del límite. + Valores de posición fuera del límite. @@ -9069,7 +9332,7 @@ <b>Note:</b> For some GUI elements changing the units will not take effect until you restart QMapShack. - + <b>Nota:</b> Para algunos elementos de la interfaz de usuario, cambiar las unidades no tendrá efecto hasta que se reinicie QMapShack. @@ -9087,27 +9350,27 @@ Icons... - Iconos... + Iconos. External Icons: - + Iconos: - - - + - ... - ... + ... All custom icons have to be *.bmp or *.png format. - + Los iconos personalizados deben de ser BMP o PNG diff -Nru qmapshack-1.8.1/src/locale/qmapshack_fr.ts qmapshack-1.9.0/src/locale/qmapshack_fr.ts --- qmapshack-1.8.1/src/locale/qmapshack_fr.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_fr.ts 2017-07-23 13:41:03.000000000 +0000 @@ -122,7 +122,7 @@ Vue %1 - + Setup Map Background Réglage de l'arrière-plan de la carte @@ -559,32 +559,32 @@ CDetailsTrk - + Reduce visible track points Réduire les points visibles de la trace - + Change elevation of track points Modifier l'altitude des points de la trace - + Change timestamp of track points Modifier l'horodatage des points de la trace - + Miscellaneous - + Color Couleur - + Activity Activité @@ -615,7 +615,7 @@ Image%1 - + Unknown Inconnu @@ -728,7 +728,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. erreur de décodage FIT : fin de fichier inatendue %1. @@ -744,12 +744,12 @@ CFitFieldDataState - + Missing field definition for development field. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. @@ -788,7 +788,7 @@ Erreur de décodage FIT : architecture %1 non supportée - + FIT decoding error: invalid offset %1 for state 'record content' Erreur de décodage FIT : décalage invalide %1 pour l'état 'contenu d'enregistrement' @@ -972,7 +972,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. Le fichier FIT %1 ne contient pas de donnée GPS. @@ -1228,37 +1228,37 @@ Afficher les points. - + Changed name Nom modifié - + Changed comment Commentaire modifié - + Changed description Description modifiée - + Changed links Liens modifiés - + Changed elevation of point %1 to %2 %3 Altitudes modifiées du point %1 à %2 %3 - + Changed activity to '%1' for complete track. Acirvité modifiée pour '%1' pour la trace complète. - + Changed activity to '%1' for range(%2..%3). Activité modifiée pur '%1' for la plage (%2..%3). @@ -1289,51 +1289,56 @@ + Added terrain slope from DEM file. + + + + Replaced elevation data with data from DEM files. Les altitudes ont été remplacées par les données des fichiers MNT - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) Les altitudes ont été remplacées par des valeurs interpolées. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. Décaler les altitudes de %1%2. - + Changed start of track to %1. Début de la trace modifié à %1. - + Remove timestamps. Horodatage supprimé. - + Set artificial timestamps with delta of %1 sec. Horodatage artificiel ajouté avec un décalage de %1 sec. - + Changed speed to %1%2. Vitesse modifiée à %1%2. - + %1 (Segment %2) %1 (Segment %2) - + Removed extension %1 from all Track Points Extension %1 supprimée de tous les points - + Converted subpoints from routing to track points @@ -1346,17 +1351,17 @@ CGisItemWpt - + Archived Archivé - + Available Disponible - + Not Available Non disponible @@ -1777,8 +1782,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> <b>Mise à jour des appareils</b><p>Mise à jour de %1<br/>Patientez...</p> @@ -1786,27 +1791,32 @@ CGisWidget - + Load project... Charger le projet... - + The project "%1" is already in the workspace. Le projet "%1" est déjà présent dans l'espace de travail. - + Copy items... Copier les éléments... - + + Change waypoint symbols. + + + + Cut Track... Couper la trace... - + Do you want to delete the original track? Voulez-vous supprimer la trace originale? @@ -1838,27 +1848,27 @@ Ce n'est pas un fichier GPX: %1 - + File exists ... Le fichier existe... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> Le fichier existe et n'a pas été créé par QMapShack. Si vous cliquez sur 'oui' tous les données de ce fichier seront perdues. Même si ce fichier contient des données GPX et sera ouvert par QMapShack certains éléments de ce fichier ne pourront pas être lus ou enregistrés. Ces élements seront perdus. Il est conseillé d'utiliser un autre fichier.<b>Voulez-vous vraiment écraser ce fichier ?</b> - + Failed to create file '%1' Impossible de créer le fichier: '%1' - + Failed to write file '%1' Impossible d'écrire le fichier: '%1' - + Saving GIS data failed... Impossible de sauvegarder les données SIG @@ -1889,27 +1899,27 @@ CHistoryListWidget - + by %1 par %1 - + Cut history before Tronquer l'historique antérieur - + Cut history after Tronquer l'historique postérieur - + History removal Supression de l'historique - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> La suppression est permanente et ne peut être annulée. <b>Voulez-vous vraiment supprimer l'historique antérieur à cette étape ?</b> @@ -1935,66 +1945,94 @@ CKnownExtension - + Air Temperature Température de l'air - + Water Temperature Température de l'eau - + Depth Profondeur - - + + Heart Rate Fréquence cardiaque - - + + + Cadence Cadence - + + Speed Vitesse - + Acceleration Accélération - + Course Cap - + + Temperature + Température + + + + Distance + Distance + + + + Sea Level Pressure + Pression au niveau de la mer + + + + Speed (vertical) + Vitesse (verticale) + + + Slope* Pente* - + Speed* Vitesse* - + + Elevation Altitude - + Progress - Progrès + Progression + + + + Terrain slope + Pente du terrain @@ -2008,48 +2046,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. Utilisez <b>Menu->Vue->Add Map View</b> pour ouvrir une nouvelle vue. Ou <b>Menu->Fichier->Charger une vue cartographique</b> pour charger une vue sauvegardée. Ou cliquez <a href='newview'>ici</a>. - + Ele: %1%2 Altitude: %1%2 - + + Slope: %1%2 + + + + [Grid: %1] [Grille: %1] - + Load GIS Data... Charger des données SIG... - + Select output file Sélectionner le fichier de sortie - - + + QMapShack View (*.view) Vue QMapShack (*.view) - + Select file to load Sélectionner le fichier à charger - + Fatal... Fatal... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. @@ -2072,620 +2115,631 @@ Échec... - + Unspecified Non défini - + French Français - + German Deutsch - + Dutch Néerlandais - + English Anglais - + Italian Italien - + Finnish Finlandais - + Swedish Suédois - + Spanish Espagnol - + Basque - + Catalan Catalan - + Galician Galicien - + Welsh Gallois - + Gaelic Gaëlic - + Danish Danois - + Norwegian Norvégien - + Portuguese Portugais - + Slovak Slovaque - + Czech Tchèque - + Croatian Croate - + Hungarian Hongrois - + Polish Polonais - + Turkish Turque - + Greek Grèc - + Slovenian Slovène - + Russian Russe - + Estonian Estonien - + Latvian Letton - + Romanian Roumain - + Albanian Albanais - + Bosnian Bosnien - + Lithuanian Lituanien - + Serbian Serbe - + Macedonian Macédonien - + Bulgarian Bulgare - + Major highway Route majeure - + Principal highway Route principale - + Other highway Autre route - + Arterial road Artère urbaine - + Collector road Rue principale - + Residential street Rue résidentielle - + Alley/Private road Ruelle/Route privée - + Highway ramp, low speed Bretelle d'accès, basse vitesse - + Highway ramp, high speed Bretelle d'accès, grande vitesse - + Unpaved road Route non bitumé - + Major highway connector Bretelle majeure - + Roundabout Rond-point - + Railroad Voie ferrée - + Shoreline Ligne côtière - + Trail Sentier - + Stream Ruisseau - + Time zone Fuseau horaire - - + + Ferry Bac - + State/province border Frontière de province - + County/parish border Frontière de canton - + International border Frontière internationale - + River Rivière - + Minor land contour Courbe de niveau mineure - + Intermediate land contour Courbe de niveau intermédiaire - + Major land contour Courbe de niveau majeure - + Minor depth contour Courbe isobathe mineure - + Intermediate depth contour Courbe isobathe intermédiaire - + Major depth contour Courbe isobathe majeure - + Intermittent stream Ruisseau intermittent - - + + Airport runway Tarmac - + Pipeline Oléoduc - + Powerline Ligne à haute tension - + Marine boundary Frontière maritime - + Hazard boundary Limite de zone à risque - + Large urban area (&gt;200K) Grande agglomération urbaine (&gt;200K) - + Small urban area (&lt;200K) Petite agglomération urbaine (&lt;200K) - + Rural housing area Zone résidentielle rurale - + Military base Base militaire - + Parking lot Parking - + Parking garage Parking couvert - + Airport Aéroport - + Shopping center Centre commercial - + Marina Marina - + University/College Université - + Hospital Hôpital - + Industrial complex Complexe industriel - + Reservation Reserve naturelle - + Man-made area Zone industrielle - + Sports complex Complexe sportif - + Golf course Golf - + Cemetery Cimetière - - - + + + National park Parc national - + City park Parc urbain - - - + + + State park Parc régional - + Forest Forêt - + Ocean Océan - - - + + + Blue (unknown) - + Sea Mer - - - + + + Large lake Grand lac - - + + Medium lake Lac moyen - - + + Small lake Petit lac - - + + Major lake Lac majeur - + Major River Rivière majeure - + Large River Grande rivière - + Medium River Rivière moyenne - + Small River Petite rivière - + Intermittent water Cours d'eau intermittent - + Wetland/Swamp Marais - + Glacier Glacier - + Orchard/Plantation Verger - + Scrub Broussaille - + Tundra Tundra - + Flat Plaine - + ??? - + + Read external type file... + + + + + Failed to read type file: %1 +Fall back to internal types. + + + + Failed to read: Erreur de lecture : - + Failed to open: Échec d'ouverture : - - + + Bad file format: Format de fichier invalide : - + Failed to read file structure: Erreur de lecture de la structure du fichier : - + Loading %1 Chargement de %1 - + User abort: Interruption par l'utilisateur : - + File is NT format. QMapShack is unable to read map files with NT format: Le fichier est au format NT. QMapShack ne peut pas lire des fichiers au format NT : - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. Le fichier contient des données verrouillées / cryptées. Garmin ne vous autorise pas à utiliser ce fichier avec un logiciel non fourni par Garmin. - - - + + + Point of Interest Point d'intérêt - + Unknown Inconnu - - - + + + Area Surface @@ -2745,6 +2799,14 @@ + CMapPropSetup + + + Select type file... + + + + CMapRMAP @@ -3178,7 +3240,7 @@ Temps écoulé : %1 - + Elapsed time: %1 seconds. Temps écoulé : %1 secondes @@ -3795,27 +3857,27 @@ - + error renaming file %1 to %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) - + being downloaded: %1 of %2 - + no local data, online available: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) @@ -3835,12 +3897,12 @@ - + local data up to date (%1, %2) - + no routing-data available @@ -3848,13 +3910,13 @@ CRouterBRouterToolShell - + !!! done !!! !!! fait !!! - + !!! failed !!! !!! échec !!! @@ -4193,7 +4255,7 @@ - + Calculate route with %1 Calculer l'itinéraire avec %1 @@ -4571,6 +4633,19 @@ + CToolBarSetupDialog + + + Available Actions + + + + + Selected Actions + + + + CTwoNavProject @@ -6161,6 +6236,29 @@ + IFilterTerrainSlope + + + Form + Formulaire + + + + <b>Calculate Terrain Slope</b> + + + + + Calculate slope of the terrain based on loaded DEM files. + + + + + ... + ... + + + IFitDecoderState @@ -6340,31 +6438,46 @@ - + Opacity Opacité - + Change the opacity of all GIS Items on the map. Modifier l'opacité de tous les objets SIG sur la carte - - + + Filter + Filtre + + + + Name Nom - + Age Age - + To add a database do a right click on the database list above. Pour ajouter une base de données cliquez droit sur la liste ci-dessus + + + Clear Filter + + + + + Setup Filter + + IGridSetup @@ -6520,338 +6633,363 @@ Fenêtre - + ? ? - + Project Projet - + Tool Outils - + Maps Cartes - + Dig. Elev. Model (DEM) Modèle numérique de terrain (DEM) - + Data Données - + Route Calcul d'itinéraire - - + + Toolbar + + + + + Add Map View Ajouter une vue cartographique - + Ctrl+T - + Show Scale Afficher l'échelle - + Setup Map Font Configurer la police de la carte - + Show Grid Afficher la grille - + Ctrl+G - + Setup Grid Configurer la grille - + Ctrl+Alt+G - + Flip Mouse Wheel Inverser le sens de la molette de souris - - + + Setup Map Paths Configurer les répertoires des cartes - + POI Text Libellés des points d'interêt - + Night / Day Jour / Nuit - + Map Tool Tip Infobulles sur la carte - + Ctrl+I CTRL + I - + Setup DEM Paths Configurer les répertoires DEM - + About À propos - + Help Aide - + F1 F1 - - + + Setup Map View Configurer la vue cartographique - + Load GIS Data Charger des données SIG... - + Load projects from file Charger un fichier projet - + Ctrl+L - + Save All GIS Data Enregistrer toutes les données SIG - + Save all projects in the workspace Enregistrer tous les projets de l'espace de travail - + Ctrl+S - + Setup Time Zone Configurer le fuseau horaire - + Add empty project Ajouter un projet vide - + Search Google Recherche Google - + Close all projects Fermer tous les projets - + F8 - + Setup Units Configurer les unités - + Setup Workspace Configurer l'espace de travail - + Setup save on exit. Sauvegarde de la configuration en quittant - + Import Database from QLandkarte Importer une base de données QLandkarte - + Import QLandkarte GT database Importer une base de données QLandkarte GT - + VRT Builder Générateur de VRT - + GUI front end to gdalbuildvrt Interface utilisateur pour gdalbuildvrt - + Store Map View Enregistrer une vue cartographique - + Write current active map and DEM list including the properties to a file Sauvegarder les cartes et calques DEM actives et leurs paramètres dans un fichier - + Load Map View Charger une vue cartographique - + Restore view with active map and DEM list including the properties from a file Rétablir une vue avec les cartes et calques DEM et leurs paramètres à partir d'un fichier - + Ext. Profile Profile externe - + Ctrl+E - + Close Fermer - + Ctrl+Q CTRL + Q - + Clone Map View Dupliquer une vue cartographique - + Ctrl+Shift+T - + Create Routino Database Créer une base de données Routino - + Save(Print) Map Screenshot Sauvegarder (Imprimer) une capture d'écran de la carte - + Print a selected area of the map Imprimer une zone sélectionnée de la carte - + Ctrl+P CTRL + P - + Setup Coord. Format Choisir le format de coordonnées - + Change the format coordinates are displayed Modifier le format des coordonnées affichées - + Setup Map Background Modifier l'arrière-plan de la carte - + Setup Waypoint Icons Modifer les icônes des waypoints - + Setup path to custom icons Modifier le chemin des icônes personnalisés - + Close Tab Fermer l'onglet - + Ctrl+W CTRL + W - + Quickstart Help + + + Setup Toolbar + + + + + Toggle Docks + + + + + Toggle visibility of dockable windows + + + + + Ctrl+D + CTRL + D + IMapList @@ -6961,6 +7099,8 @@ + + ... ... @@ -7005,6 +7145,21 @@ Répertoire du cache + + Type File: + + + + + Forget external type file and use internal types. + + + + + Load an external type file. + + + Cache Size (MB) Taille du cache (MO) @@ -8133,8 +8288,8 @@ - Select all itmes that are completely inside the selected area. - Sélectionner tous les objets qui sont totalement inclus dans la zone sélectionnée + Select all items that are completely inside the selected area. + @@ -8409,6 +8564,52 @@ + ISelectDoubleListWidget + + + Form + Formulaire + + + + Available + Disponible + + + + Add to selected items + + + + + Remove from selected items + + + + + Selected + + + + + Move selected items up + + + + + Move selected items down + + + + + + + + ... + ... + + + ISelectProjectDialog @@ -8587,6 +8788,29 @@ + ISetupFilter + + + Form + Formulaire + + + + Apply filter to + + + + + name only + + + + + complete text + + + + ISetupFolder @@ -9017,6 +9241,14 @@ + IToolBarSetupDialog + + + Setup Toolbar + + + + IToolShell diff -Nru qmapshack-1.8.1/src/locale/qmapshack_nl.ts qmapshack-1.9.0/src/locale/qmapshack_nl.ts --- qmapshack-1.8.1/src/locale/qmapshack_nl.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_nl.ts 2017-07-23 13:41:03.000000000 +0000 @@ -122,7 +122,7 @@ Venster %1 - + Setup Map Background @@ -559,32 +559,32 @@ CDetailsTrk - + Reduce visible track points Reduceer zichtbare trackpunten - + Change elevation of track points Verander hoogte van trackpunten - + Change timestamp of track points Verander tijdstempels van trackpunten - + Miscellaneous - + Color Kleur - + Activity Activiteit @@ -615,7 +615,7 @@ Afbeelding%1 - + Unknown Onbekend @@ -728,7 +728,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. @@ -744,12 +744,12 @@ CFitFieldDataState - + Missing field definition for development field. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. @@ -788,7 +788,7 @@ - + FIT decoding error: invalid offset %1 for state 'record content' @@ -972,7 +972,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. @@ -1228,37 +1228,37 @@ Toon punten. - + Changed name Naam aangepast - + Changed comment Notitie aangepast - + Changed description Beschrijving aangepast - + Changed links Link aangepast - + Changed elevation of point %1 to %2 %3 - + Changed activity to '%1' for complete track. Activiteit aangepast naar '%1' voor gehele track. - + Changed activity to '%1' for range(%2..%3). Activiteit aangepast naar '%1' voor bereik(%2..%3). @@ -1289,51 +1289,56 @@ + Added terrain slope from DEM file. + + + + Replaced elevation data with data from DEM files. Vervang hoogte gegevens met gegevens van DEM bestanden. - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. - + Changed start of track to %1. Start van track veranderd naar %1. - + Remove timestamps. Verwijder tijdstempels. - + Set artificial timestamps with delta of %1 sec. - + Changed speed to %1%2. Snelheid veranderd naar %1%2. - + %1 (Segment %2) %1 (Segment %2) - + Removed extension %1 from all Track Points - + Converted subpoints from routing to track points @@ -1346,17 +1351,17 @@ CGisItemWpt - + Archived Gearchiveerd - + Available Beschikbaar - + Not Available Niet beschikbaar @@ -1747,8 +1752,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> <b>Updaten GPS</b><p>Updaten %1<br/>Moment geduld...</p> @@ -1786,27 +1791,32 @@ CGisWidget - + Load project... Project laden... - + The project "%1" is already in the workspace. Het project "%1" is al geopend. - + Copy items... Kopieer elementen... - + + Change waypoint symbols. + + + + Cut Track... Track knippen... - + Do you want to delete the original track? Moet de orginele track verwijderd worden? @@ -1838,27 +1848,27 @@ Geen GPX bestand: %1 - + File exists ... Bestand bestaat al... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> Dit bestand bestaat al en is niet in QMapShack gemaakt. Wanneer op 'Ja' geklikt wordt zullen er gegevens verloren gaan. Alhoewel QMapShack dit GPX bestand kan openen is het mogelijk dat niet alle elementen opgeslagen kunnen worden. Geadviseerd wordt om een ander bestand te kiezen. <b>Moet dit bestand werkelijk overschreven worden?<b/> - + Failed to create file '%1' Maken bestand mislukt '%1' - + Failed to write file '%1' Schrijven bestand mislukt '%1' - + Saving GIS data failed... Opslaan GIS gegevens mislukt... @@ -1889,27 +1899,27 @@ CHistoryListWidget - + by %1 per %1 - + Cut history before - + Cut history after - + History removal - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> @@ -1935,67 +1945,95 @@ CKnownExtension - + Air Temperature Luchttemperatuur - + Water Temperature Watertemperatuur - + Depth Diepte - - + + Heart Rate Hartslag - - + + + Cadence Cadans - + + Speed Snelheid - + Acceleration Versnelling - + Course Richting - + + Temperature + + + + + Distance + + + + + Sea Level Pressure + + + + + Speed (vertical) + + + + Slope* - + Speed* - + + Elevation Hoogte - + Progress Voortgang + + + Terrain slope + + CLostFoundProject @@ -2008,48 +2046,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. - + Ele: %1%2 Hoogte: %1%2 - + + Slope: %1%2 + + + + [Grid: %1] [Raster: %1] - + Load GIS Data... GIS gegevens laden... - + Select output file Selecteer bestand - - + + QMapShack View (*.view) - + Select file to load Selecteer bestand - + Fatal... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. @@ -2072,620 +2115,631 @@ Mislukt... - + Unspecified Ongespecificeerd - + French Frans - + German Duits - + Dutch Nederlands - + English Engels - + Italian Italiaans - + Finnish Fins - + Swedish Zweeds - + Spanish Spaans - + Basque Baskisch - + Catalan Catalaans - + Galician Galicisch - + Welsh Wels - + Gaelic Gaelisch - + Danish Deens - + Norwegian Noors - + Portuguese Portugees - + Slovak Slowaaks - + Czech Tsjechisch - + Croatian Kroatisch - + Hungarian Hongaars - + Polish Pools - + Turkish Turks - + Greek Grieks - + Slovenian Sloveens - + Russian Russisch - + Estonian Ests - + Latvian Lets - + Romanian Roemeens - + Albanian Albanisch - + Bosnian Bosnisch - + Lithuanian Litouws - + Serbian Servisch - + Macedonian Macedonisch - + Bulgarian Bulgaars - + Major highway Belangrijke snelweg - + Principal highway Gewone snelweg - + Other highway Andere snelweg - + Arterial road Uitvalsweg - + Collector road Verzamelweg - + Residential street Woonstraat - + Alley/Private road Laan/privéweg - + Highway ramp, low speed Snelweg oprit, langzame snelheid - + Highway ramp, high speed Snelweg oprit, hoge snelheid - + Unpaved road Onverharde weg - + Major highway connector Belangrijke snelwegknooppunt - + Roundabout Rotonde - + Railroad Spoorlijn - + Shoreline Kustlijn - + Trail Pad - + Stream Stroom - + Time zone Tijdzone - - + + Ferry Veerdienst - + State/province border Staat/provinciegrens - + County/parish border Provincie/gemeentegrens - + International border Internationale grens - + River Rivier - + Minor land contour Klein hoogteverschil - + Intermediate land contour Gemiddeld hoogteverschil - + Major land contour Groot hoogteverschil - + Minor depth contour Klein diepteverschil - + Intermediate depth contour Gemiddeld diepteverschil - + Major depth contour Groot diepteverschil - + Intermittent stream Intermitterende beek - - + + Airport runway Landingsbaan - + Pipeline Pijplijn - + Powerline Hoogspanningsleiding - + Marine boundary Zeegrens - + Hazard boundary Gevaarlijke grens - + Large urban area (&gt;200K) Groot bevolkt gebied (&gt;200K) - + Small urban area (&lt;200K) Klein bevolt gebied (&lt;200K) - + Rural housing area Landelijk woongebied - + Military base Militaire basis - + Parking lot Parkeerterrein - + Parking garage Parkeergarage - + Airport Vliegveld - + Shopping center Winkelcentrum - + Marina Jachthaven - + University/College Universiteit/College - + Hospital Ziekenhuis - + Industrial complex Industrie - + Reservation Reservaat - + Man-made area Gemaakt gebied - + Sports complex Sprtcomplex - + Golf course Golfbaan - + Cemetery Begraafplaats - - - + + + National park Nationaal park - + City park Stadspark - - - + + + State park Staatspark - + Forest Bos - + Ocean Oceaan - - - + + + Blue (unknown) Blauw (onbekend - + Sea Zee - - - + + + Large lake Groot meer - - + + Medium lake Middelmatig meer - - + + Small lake Klein meer - - + + Major lake Belangrijk meer - + Major River Belangrijke rivier - + Large River Groot rivier - + Medium River Middelmatig rivier - + Small River Klein rivier - + Intermittent water Intermitterende water - + Wetland/Swamp Moeras - + Glacier Gletsjer - + Orchard/Plantation Boomgaard/Plantage - + Scrub Struikgewas - + Tundra Toendra - + Flat Vlak - + ??? ??? - + + Read external type file... + + + + + Failed to read type file: %1 +Fall back to internal types. + + + + Failed to read: Lezen mislukt: - + Failed to open: Openen mislukt: - - + + Bad file format: Verkeerd bestandsformaat: - + Failed to read file structure: Lezen bestandsstructuur mislukt: - + Loading %1 Laden %1 - + User abort: Afgebroken door gebruiker: - + File is NT format. QMapShack is unable to read map files with NT format: Bestand is in NT formaat. QMapShack kan geen kaarten lezen met NT formaat: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. - - - + + + Point of Interest Interessant punt - + Unknown Onbekend - - - + + + Area Gebied @@ -2745,6 +2799,14 @@ + CMapPropSetup + + + Select type file... + + + + CMapRMAP @@ -3179,7 +3241,7 @@ Verstreken tijd: %1 - + Elapsed time: %1 seconds. Verstreken tijd: %1 seconden. @@ -3796,27 +3858,27 @@ - + error renaming file %1 to %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) - + being downloaded: %1 of %2 - + no local data, online available: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) @@ -3836,12 +3898,12 @@ - + local data up to date (%1, %2) - + no routing-data available @@ -3849,14 +3911,14 @@ CRouterBRouterToolShell - + !!! done !!! !!! klaar !!! - + !!! failed !!! !!! Mislukt !!! @@ -4196,7 +4258,7 @@ - + Calculate route with %1 Bereken route met %1 @@ -4575,6 +4637,19 @@ + CToolBarSetupDialog + + + Available Actions + + + + + Selected Actions + + + + CTwoNavProject @@ -6164,6 +6239,29 @@ + IFilterTerrainSlope + + + Form + Formulier + + + + <b>Calculate Terrain Slope</b> + + + + + Calculate slope of the terrain based on loaded DEM files. + + + + + ... + ... + + + IFitDecoderState @@ -6343,31 +6441,46 @@ Formulier - + Opacity Transparantie - + Change the opacity of all GIS Items on the map. - - + + Filter + Filter + + + + Name Naam - + Age - + To add a database do a right click on the database list above. Om nieuwe database te maken doe een rechterklik op database erboven. + + + Clear Filter + + + + + Setup Filter + + IGridSetup @@ -6523,338 +6636,363 @@ Venster - + ? ? - + Project Project - + Tool Extra - + Maps Kaarten - + Dig. Elev. Model (DEM) Dig. Elev. Model (DEM) - + Data Gegevens - + Route Route - - + + Toolbar + + + + + Add Map View Nieuw venster - + Ctrl+T Ctrl+T - + Show Scale Toon schaal - + Setup Map Font Lettertype kaart instellen - + Show Grid Toon raster - + Ctrl+G Ctrl+G - + Setup Grid Raster instellen - + Ctrl+Alt+G Ctrl+Alt+G - + Flip Mouse Wheel Draai muiswiel om - - + + Setup Map Paths Map met kaarten instellen - + POI Text POI tekst - + Night / Day Dag/Nacht - + Map Tool Tip Map Tool Tip - + Ctrl+I Ctrl+I - + Setup DEM Paths Map DEM instellen - + About Over - + Help Help - + F1 F1 - - + + Setup Map View Kaartinstellingen - + Load GIS Data GIS gegevens laden - + Load projects from file Project laden uit bestand - + Ctrl+L Ctrl+L - + Save All GIS Data GIS gegevens opslaan - + Save all projects in the workspace Sla alle projecten op in werkruimte - + Ctrl+S Ctrl+S - + Setup Time Zone Tijdzone instellen - + Add empty project Nieuw leeg project - + Search Google Zoeken Google - + Close all projects Sluit alle projecten - + F8 F8 - + Setup Units Eenheden instellen - + Setup Workspace Werkruimte instellen - + Setup save on exit. Oplaan bij afsluiten instellen. - + Import Database from QLandkarte Database van QLandkarte importeren - + Import QLandkarte GT database QLandkarte database importeren - + VRT Builder VRT maken - + GUI front end to gdalbuildvrt GUI front end naar gdalbuildvrt - + Store Map View Kaart opslaan - + Write current active map and DEM list including the properties to a file Schrijf huidige actieve kaart en DEM lijst inclusief de eigenschappen naar een bestand - + Load Map View Kaart laden - + Restore view with active map and DEM list including the properties from a file Herstel huidige actieve kaart en DEM lijst inclusief de eigenschappen naar een bestand - + Ext. Profile Ext. profiel - + Ctrl+E Ctrl+E - + Close Sluiten - + Ctrl+Q Ctrl+Q - + Clone Map View Kloon venster - + Ctrl+Shift+T Ctrl+Shift+T - + Create Routino Database Maak Routino database - + Save(Print) Map Screenshot Kaartdeel opslaan/afdrukken - + Print a selected area of the map Geselecteerde deel van kaart afdrukken - + Ctrl+P Ctrl+P - + Setup Coord. Format Coördinaat formaat instellen - + Change the format coordinates are displayed Getoonde coördinaat formaat aanpassen - + Setup Map Background - + Setup Waypoint Icons - + Setup path to custom icons - + Close Tab - + Ctrl+W - + Quickstart Help + + + Setup Toolbar + + + + + Toggle Docks + + + + + Toggle visibility of dockable windows + + + + + Ctrl+D + Ctrl+D + IMapList @@ -6964,6 +7102,8 @@ + + ... ... @@ -7017,6 +7157,21 @@ Cache Path Cachemap + + + Type File: + + + + + Forget external type file and use internal types. + + + + + Load an external type file. + + IMapVrtBuilder @@ -8137,7 +8292,7 @@ - Select all itmes that are completely inside the selected area. + Select all items that are completely inside the selected area. @@ -8411,6 +8566,52 @@ + ISelectDoubleListWidget + + + Form + Formulier + + + + Available + Beschikbaar + + + + Add to selected items + + + + + Remove from selected items + + + + + Selected + + + + + Move selected items up + + + + + Move selected items down + + + + + + + + ... + ... + + + ISelectProjectDialog @@ -8589,6 +8790,29 @@ + ISetupFilter + + + Form + Formulier + + + + Apply filter to + + + + + name only + + + + + complete text + + + + ISetupFolder @@ -9022,6 +9246,14 @@ + IToolBarSetupDialog + + + Setup Toolbar + + + + IToolShell diff -Nru qmapshack-1.8.1/src/locale/qmapshack_ru.ts qmapshack-1.9.0/src/locale/qmapshack_ru.ts --- qmapshack-1.8.1/src/locale/qmapshack_ru.ts 2017-04-24 17:31:48.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack_ru.ts 2017-07-24 15:41:33.000000000 +0000 @@ -122,7 +122,7 @@ Вид %1 - + Setup Map Background ÐаÑтройка фона карт @@ -559,32 +559,32 @@ CDetailsTrk - + Reduce visible track points Уменьшить чиÑло видимых точек трека - + Change elevation of track points Изменить выÑоту точек трека - + Change timestamp of track points Изменить метки времени точек трека - + Miscellaneous Разное - + Color Цвет - + Activity МероприÑтие @@ -615,7 +615,7 @@ Изображение %1 - + Unknown ÐеизвеÑтно @@ -728,7 +728,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. Ошибка Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ FIT: неожиданный конец файла %1. @@ -744,12 +744,12 @@ CFitFieldDataState - + Missing field definition for development field. ОтÑутÑтвует определение Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. Ошибка Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ FIT: неправильный номер Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ %1 при Ñоздании Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¿Ð¾Ð»Ñ Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ. @@ -788,7 +788,7 @@ Ошибка Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ FIT: архитектура %1 не поддерживаетÑÑ. - + FIT decoding error: invalid offset %1 for state 'record content' Ошибка Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ FIT: неправильное Ñмещение %1 Ð´Ð»Ñ ÑоÑтоÑÐ½Ð¸Ñ 'Ñодержимое запиÑи' @@ -972,7 +972,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. FIT файл %1 не Ñодержит данных GPS. @@ -1100,7 +1100,7 @@ slope: %1%3 (%2%) - наклон: %1%3 (%2%) + Ñклон: %1%3 (%2%) @@ -1228,37 +1228,37 @@ Показать точки. - + Changed name Изменено Ð¸Ð¼Ñ - + Changed comment Изменен комментарий - + Changed description Изменено опиÑание - + Changed links Изменены ÑÑылки - + Changed elevation of point %1 to %2 %3 Изменена выÑота точки %1 на %2 %3 - + Changed activity to '%1' for complete track. Изменено мероприÑтие на '%1' Ð´Ð»Ñ Ð²Ñего трека. - + Changed activity to '%1' for range(%2..%3). Изменено мероприÑтие на '%1' Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð° (%2..%3). @@ -1289,51 +1289,56 @@ + Added terrain slope from DEM file. + Добавлен Ñклон меÑтноÑти Ñ Ñ„Ð°Ð¹Ð»Ð° ЦМР. + + + Replaced elevation data with data from DEM files. Заменены выÑоты данными файлов ЦМР. - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) Заменены выÑоты интерполированными значениÑми. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. Добавить %1 %2 к выÑоте. - + Changed start of track to %1. Изменено начало трека на %1. - + Remove timestamps. Удалить метки времени. - + Set artificial timestamps with delta of %1 sec. УÑтановить иÑкуÑÑтвенные метки времени Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¾Ð¼ в %1 Ñекунд. - + Changed speed to %1%2. Изменена ÑкороÑÑ‚ÑŒ на %1 %2. - + %1 (Segment %2) %1 (Ñегмент %2) - + Removed extension %1 from all Track Points Удалено раÑширение %1 Ñо вÑех точек трека - + Converted subpoints from routing to track points Преобразованы подточки Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð½Ñ‹Ñ… в точки трека @@ -1346,17 +1351,17 @@ CGisItemWpt - + Archived Ðрхивировано - + Available ДоÑтупно - + Not Available Ðе доÑтупно @@ -1747,8 +1752,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> <b>Обновить уÑтройÑтва</b><p>Обновить %1<br/>Подождите...</p> @@ -1786,27 +1791,32 @@ CGisWidget - + Load project... Загрузить проект... - + The project "%1" is already in the workspace. Проект "%1" уже находитÑÑ Ð² рабочей облаÑти. - + Copy items... Копировать Ñлемент ... - + + Change waypoint symbols. + Изменить Ñимволов путевых точек. + + + Cut Track... Вырезать трек... - + Do you want to delete the original track? Желаете удалить изначальный трек? @@ -1838,27 +1848,27 @@ Ðет файла GPX: %1 - + File exists ... Файл ÑущеÑтвует... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> Файл ÑущеÑтвует и не Ñоздан в QMapShack. ЕÑли нажать 'да' вÑе данные в Ñтом файле будут потерÑны. Даже еÑли Ñтот файл Ñодержит данные GPX и был загружен в QMapShack, QMapShack не может загрузить и Ñохранить вÑе Ñлементы Ñтого файла. Такие Ñлементы будут потерÑны. РекомендуетÑÑ Ð¸Ñпользовать другой файл. <b>Ð’Ñ‹ дейÑтвительно хотите перезапиÑать Ñтот файл?</b> - + Failed to create file '%1' Ðе удалоÑÑŒ Ñоздать файл '%1' - + Failed to write file '%1' Ðе удалоÑÑŒ запиÑать файл '%1' - + Saving GIS data failed... Ðе удалоÑÑŒ Ñохранить данные GIS... @@ -1889,27 +1899,27 @@ CHistoryListWidget - + by %1 от %1 - + Cut history before Удалить иÑторию до Ñтого шага - + Cut history after Удалить иÑторию поÑле Ñтого шага - + History removal Удалить иÑторию - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> Удаление ÑвлÑетÑÑ Ð¿Ð¾ÑтоÑнным и не может быть отменено. <b>Ð’Ñ‹ дейÑтвительно хотите удалить иÑторию перед Ñтим шагом?</b> @@ -1935,67 +1945,95 @@ CKnownExtension - + Air Temperature Температура воздуха - + Water Temperature Температура воды - + Depth Глубина - - + + Heart Rate ÐŸÑƒÐ»ÑŒÑ - - + + + Cadence ÐšÐ°Ð´ÐµÐ½Ñ†Ð¸Ñ - + + Speed СкороÑÑ‚ÑŒ - + Acceleration УÑкорение - + Course ÐšÑƒÑ€Ñ - + + Temperature + Температура + + + + Distance + РаÑÑтоÑние + + + + Sea Level Pressure + Давление на уровень Ð¼Ð¾Ñ€Ñ + + + + Speed (vertical) + СкороÑÑ‚ÑŒ (вертикальнаÑ) + + + Slope* Ðаклон* - + Speed* СкороÑÑ‚ÑŒ* - + + Elevation Ð’Ñ‹Ñота - + Progress Выполнение + + + Terrain slope + Склон меÑтноÑти + CLostFoundProject @@ -2008,48 +2046,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. ИÑпользовать <b>Меню->Вид->Добавить окно карты</b> Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вида. Или <b>Меню->Файл->Загрузить вид карты</b> Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñохраненного вида. Или нажмите <a href='newview'>здеÑÑŒ</a>. - + Ele: %1%2 Ð’Ñ‹Ñота: %1%2 - + + Slope: %1%2 + Склон: %1%2 + + + [Grid: %1] [ÐšÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð½Ð°Ñ Ñетка: %1] - + Load GIS Data... Загрузить данные GIS... - + Select output file Выбрать выходной файл - - + + QMapShack View (*.view) QMapShack вид (*.view) - + Select file to load Выбрать файл Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ - + Fatal... ÐеуÑÑ‚Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. QMapShack обнаружил плохо уÑтановленную библиотеку Proj4. Таблицы перевода Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¹ EPSG обычно находÑÑ‚ÑÑ Ð² /usr/share/pro отÑутÑтвуют. ПожалуйÑта, Ñообщите об Ñтом админиÑтратору пакета чтобы поправить Ñто. @@ -2074,620 +2117,632 @@ Ðе удалоÑÑŒ... - + Unspecified Ðе указано - + French ФранцузÑкий - + German Ðемецкий - + Dutch ГолландÑкий - + English ÐнглийÑкий - + Italian ИтальÑнÑкий - + Finnish ФинÑкий - + Swedish ШведÑкий - + Spanish ИÑпанÑкий - + Basque БаÑкÑкий - + Catalan КаталонÑкий - + Galician ГалиÑийÑкий - + Welsh ВаллийÑкий - + Gaelic ГÑльÑкий - + Danish ДатÑкий - + Norwegian ÐорвежÑкий - + Portuguese ПортугальÑкий - + Slovak Словацкий - + Czech ЧешÑкий - + Croatian ХорватÑкий - + Hungarian ВенгерÑкий - + Polish ПольÑкий - + Turkish Турецкий - + Greek ГречеÑкий - + Slovenian СловенÑкий - + Russian РуÑÑкий - + Estonian ЭÑтонÑкий - + Latvian ЛатвийÑкий - + Romanian РумынÑкий - + Albanian ÐлбанÑкий - + Bosnian БоÑнийÑкий - + Lithuanian ЛитовÑкий - + Serbian СербÑкий - + Macedonian МакедонÑкий - + Bulgarian БолгарÑкий - + Major highway ÐвтомагиÑтраль - + Principal highway ШоÑÑе оÑновное - + Other highway Прочие загородные дороги - + Arterial road ГородÑÐºÐ°Ñ Ð¼Ð°Ð³Ð¸Ñтраль - + Collector road Улица ÐºÑ€ÑƒÐ¿Ð½Ð°Ñ - + Residential street Улица Ð¼Ð°Ð»Ð°Ñ - + Alley/Private road Переулок, внутриквартальный проезд - + Highway ramp, low speed Ðаклонный Ñъезд Ñ Ð¿ÑƒÑ‚ÐµÐ¿Ñ€Ð¾Ð²Ð¾Ð´Ð° - + Highway ramp, high speed Ðаклонный Ñъезд Ñ Ð¿ÑƒÑ‚ÐµÐ¿Ñ€Ð¾Ð²Ð¾Ð´Ð° ÑкороÑтной - + Unpaved road Ð“Ñ€ÑƒÐ½Ñ‚Ð¾Ð²Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð³Ð° - + Major highway connector Соединительное шоÑÑе - + Roundabout Круговое движение - + Railroad Ð–ÐµÐ»ÐµÐ·Ð½Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð³Ð° - + Shoreline Ð‘ÐµÑ€ÐµÐ³Ð¾Ð²Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ - + Trail Тропа - + Stream Ручей - + Time zone Граница чаÑового поÑÑа - - + + Ferry Паром - + State/province border Граница облаÑти - + County/parish border Граница района, округа - + International border ÐœÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° - + River Река - + Minor land contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð²Ñ‹Ñоты, вÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ - + Intermediate land contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð²Ñ‹Ñоты, оÑÐ½Ð¾Ð²Ð½Ð°Ñ - + Major land contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð²Ñ‹Ñоты, ÑƒÑ‚Ð¾Ð»Ñ‰Ñ‘Ð½Ð½Ð°Ñ - + Minor depth contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ñ‹, вÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ - + Intermediate depth contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ñ‹, оÑÐ½Ð¾Ð²Ð½Ð°Ñ - + Major depth contour Ð˜Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ñ‹, ÑƒÑ‚Ð¾Ð»Ñ‰Ñ‘Ð½Ð½Ð°Ñ - + Intermittent stream ПереÑÑ‹Ñ…Ð°ÑŽÑ‰Ð°Ñ Ñ€ÐµÐºÐ°, ручей или канава - - + + Airport runway Взлетно-поÑÐ°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¾Ñа - + Pipeline Трубопровод - + Powerline Ð›Ð¸Ð½Ð¸Ñ Ñлектропередачи - + Marine boundary МорÑÐºÐ°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° - + Hazard boundary ОпаÑноÑÑ‚ÑŒ Ð´Ð»Ñ Ð¿Ð»Ð°Ð²Ð°Ð½Ð¸Ñ - + Large urban area (&gt;200K) ГородÑÐºÐ°Ñ Ð·Ð°Ñтройка (&gt;200 Ñ‚Ñ‹Ñ.ж) - + Small urban area (&lt;200K) ГородÑÐºÐ°Ñ Ð·Ð°Ñтройка (&lt;200 Ñ‚Ñ‹Ñ.ж) - + Rural housing area ЗаÑтройка ÑельÑкого типа - + Military base Ð’Ð¾ÐµÐ½Ð½Ð°Ñ Ð±Ð°Ð·Ð° - + Parking lot ÐвтоÑтоÑнка - + Parking garage Гараж - + Airport ÐÑропорт - + Shopping center МеÑто Ð´Ð»Ñ Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ð¸ - + Marina ПриÑтань - + University/College УниверÑитета или колледж - + Hospital Больница - + Industrial complex ÐŸÑ€Ð¾Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð½Ð°Ñ Ð·Ð¾Ð½Ð° - + Reservation РезервациÑ, заповедник - + Man-made area Здание, иÑкуÑÑтвенное Ñооружение - + Sports complex Спортивный ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑ - + Golf course Площадка Ð´Ð»Ñ Ð³Ð¾Ð»ÑŒÑ„Ð° - + Cemetery Кладбище - - - + + + National park Ðациональный парк - + City park ГородÑкой парк - - - + + + State park Парк регионального Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - + Forest Ð›ÐµÑ - + Ocean Море/океан - - - + + + Blue (unknown) Синий (неизвеÑтно) - + Sea Море - - - + + + Large lake Озеро, большое - - + + Medium lake Озеро, Ñреднее - - + + Small lake Озеро, малое - - + + Major lake Озеро, крупное - + Major River Река, ÐºÑ€ÑƒÐ¿Ð½Ð°Ñ - + Large River Река, Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ - + Medium River Река, ÑреднÑÑ - + Small River Река, Ð¼Ð°Ð»Ð°Ñ - + Intermittent water ПереÑÑ‹Ñ…Ð°ÑŽÑ‰Ð°Ñ Ñ€ÐµÐºÐ°, озеро - + Wetland/Swamp Болото - + Glacier Ледник - + Orchard/Plantation Фруктовый Ñад, огород - + Scrub КуÑтарник - + Tundra Тундра - + Flat Равнина - + ??? ??? - + + Read external type file... + Загрузить внешний файл типов... + + + + Failed to read type file: %1 +Fall back to internal types. + Ðе удалоÑÑŒ читать файл типов: %1 +Возврат к внутренним типам. + + + Failed to read: Ðе удалоÑÑŒ читать: - + Failed to open: Ðе удалоÑÑŒ открыть: - - + + Bad file format: Ðеверный формат файла: - + Failed to read file structure: Ðе удалоÑÑŒ читать Ñтруктуру файла: - + Loading %1 Идет загрузка %1 - + User abort: Прекращение пользователем: - + File is NT format. QMapShack is unable to read map files with NT format: Файл имеет формат NT. QMapShack не может Ñчитывать Ñтот формат: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. Файл Ñодержит заблокированные / зашифрованные данные. Garmin позволÑет иÑпользовать Ñтот файл только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Garmin. - - - + + + Point of Interest ДоÑтопримечательноÑÑ‚ÑŒ - + Unknown ÐеизвеÑтно - - - + + + Area ОблаÑÑ‚ÑŒ @@ -2747,6 +2802,14 @@ + CMapPropSetup + + + Select type file... + Выбрать файл типов... + + + CMapRMAP @@ -3180,7 +3243,7 @@ ИÑтёкшее времÑ: %1 - + Elapsed time: %1 seconds. ИÑтёкшее времÑ: %1 Ñек. @@ -3797,27 +3860,27 @@ Ошибка запиÑи в файл %1: %2 - + error renaming file %1 to %2: %3 Ошибка Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° %1 до %2: %3 - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) Верно: %1 (%2), уÑтарело: %3 (%4), загрузить: %5 (%6) - + being downloaded: %1 of %2 Загружено: %1 от %2 - + no local data, online available: %1 (%2) Ðет локальных данных, доÑтупно в Интернете: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) Локальные данные уÑтарелы (%1, %2 - удаленные %3, %4) @@ -3837,12 +3900,12 @@ Ðеверный результат, файлы не найдены - + local data up to date (%1, %2) Локальные данные верны (%1, %2) - + no routing-data available Ðет доÑтупных данных маршрутизации @@ -3850,13 +3913,13 @@ CRouterBRouterToolShell - + !!! done !!! Сделано! - + !!! failed !!! Ðе удалоÑÑŒ! @@ -4195,7 +4258,7 @@ - + Calculate route with %1 ВычиÑлить маршрут Ñ %1 @@ -4573,6 +4636,19 @@ + CToolBarSetupDialog + + + Available Actions + ДоÑтупные дейÑÑ‚Ð²Ð¸Ñ + + + + Selected Actions + Выбранные дейÑÑ‚Ð²Ð¸Ñ + + + CTwoNavProject @@ -6167,6 +6243,30 @@ + IFilterTerrainSlope + + + Form + ВычиÑлить Ñклон меÑтноÑти + Форма + + + + <b>Calculate Terrain Slope</b> + <b>ВычиÑлить Ñклон меÑтноÑти</b> + + + + Calculate slope of the terrain based on loaded DEM files. + ВычиÑлить Ñклон меÑтноÑти Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ данных ЦМР. + + + + ... + ... + + + IFitDecoderState @@ -6347,31 +6447,46 @@ Форма - + Opacity ПрозрачноÑÑ‚ÑŒ - + Change the opacity of all GIS Items on the map. Изменить прозрачноÑÑ‚ÑŒ вÑех Ñлементов ГИС на карте. - - + + Filter + Фильтр + + + + Name Ð˜Ð¼Ñ - + Age Срок - + To add a database do a right click on the database list above. Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных Ñделайте щелчок правой кнопкой мышки на ÑпиÑке баз данных. + + + Clear Filter + ОчиÑтить фильтр + + + + Setup Filter + ÐаÑтройка фильтра + IGridSetup @@ -6527,339 +6642,364 @@ Окно - + ? ? - + Project Проект - + Tool ИнÑтрумент - + Maps Карты - + Dig. Elev. Model (DEM) Ð¦Ð¸Ñ„Ñ€Ð¾Ð²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ рельефа (ЦМР) - + Data Данные - + Route ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ - - + + Toolbar + Панель инÑтрументов + + + + Add Map View Добавить окно карты - + Ctrl+T Ctrl+T - + Show Scale Показать маÑштаб - + Setup Map Font ÐаÑтройка шрифта карты - + Show Grid Показать координатную Ñетку - + Ctrl+G Ctrl+G - + Setup Grid ÐаÑтройка координатной Ñетки - + Ctrl+Alt+G Ctrl+Alt+G - + Flip Mouse Wheel Флип колеÑо мышки - - + + Setup Map Paths ÐаÑтройка пути к картам - + POI Text ТекÑÑ‚ Ð´Ð»Ñ Ñ‚Ð¾Ñ‡ÐµÐº интереÑа - + Night / Day Ðочь/день - + Map Tool Tip ПодÑказка карты - + Ctrl+I Ctrl+I - + Setup DEM Paths ÐаÑтройка пути к ЦМР - + About О программе - + Help Справки - + F1 F1 - - + + Setup Map View ÐаÑтройка вида карт - + Load GIS Data Загрузить данные ГИС - + Load projects from file Загрузить проекты Ñ Ñ„Ð°Ð¹Ð»Ð° - + Ctrl+L Ctrl+L - + Save All GIS Data Сохранить вÑе данные ГИС - + Save all projects in the workspace Сохранить вÑе проекты в рабочей облаÑти - + Ctrl+S Ctrl+S - + Setup Time Zone ÐаÑтройка чаÑового поÑÑа - + Add empty project Добавить пуÑтой проект - + Search Google ПоиÑк в Google - + Close all projects Закрыть вÑе проекты - + F8 F8 - + Setup Units ÐаÑтройка единиц - + Setup Workspace ÐаÑтройка рабочей облаÑти - + Setup save on exit. ÐаÑтройка рабочей облаÑти. - + Import Database from QLandkarte Импортировать базу данных QLandkarte - + Import QLandkarte GT database Импортировать базу данных QLandkarte - + VRT Builder Создать файл VRT - + GUI front end to gdalbuildvrt ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº gdalbuildvrt - + Store Map View Сохранить вид карты - + Write current active map and DEM list including the properties to a file Сохранить вид карты - + Load Map View Загрузить вид карты - + Restore view with active map and DEM list including the properties from a file Tooltip?? Загрузить вид карты - + Ext. Profile РаÑширенный профиль - + Ctrl+E Ctrl+E - + Close Закрыть - + Ctrl+Q Ctrl+Q - + Clone Map View Клонировать вид карты - + Ctrl+Shift+T Ctrl+Shift+T - + Create Routino Database Создать базу данных Routino - + Save(Print) Map Screenshot Сохранить (Печатать) Ñнимок Ñкрана карты - + Print a selected area of the map Печатать выбранную облаÑÑ‚ÑŒ карты - + Ctrl+P Ctrl+P - + Setup Coord. Format ÐаÑтройка формата координат - + Change the format coordinates are displayed Изменить формат Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚ - + Setup Map Background ÐаÑтройка фона карт - + Setup Waypoint Icons ÐаÑтройка пиктограмм Ð´Ð»Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð½Ñ‹Ñ… точек - + Setup path to custom icons ÐаÑтройка пути к пользовательÑким пиктограммам - + Close Tab Закрыть вкладку - + Ctrl+W Ctrl+W - + Quickstart Help Помощь Ð´Ð»Ñ Ð±Ñ‹Ñтрого Ñтарта + + + Setup Toolbar + ÐаÑтройка панели инÑтрументов + + + + Toggle Docks + Переключить закрепленные окна + + + + Toggle visibility of dockable windows + Переключить видимоÑÑ‚ÑŒ закрепленных окон + + + + Ctrl+D + Ctrl+D + IMapList @@ -6969,6 +7109,8 @@ + + ... ... @@ -7022,6 +7164,21 @@ Cache Path Путь к кÑшу + + + Type File: + Файл типов: + + + + Forget external type file and use internal types. + Забыть внешний файл типов и иÑпользовать внутренние типы. + + + + Load an external type file. + Загрузить внешний файл типов. + IMapVrtBuilder @@ -8144,8 +8301,8 @@ - Select all itmes that are completely inside the selected area. - Выбрать вÑе Ñлементы, которые находÑÑ‚ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñтью внутри выбранной облаÑти. + Select all items that are completely inside the selected area. + Выбрать вÑе Ñлементы полноÑтью внутри выбранной облаÑти. @@ -8419,6 +8576,52 @@ + ISelectDoubleListWidget + + + Form + Форма + + + + Available + ДоÑтупно + + + + Add to selected items + Добавить к выбранным Ñлементам + + + + Remove from selected items + Удалить из выбранных Ñлементов + + + + Selected + Выбрано + + + + Move selected items up + ПеремеÑтить выбранные Ñлементы вверх + + + + Move selected items down + ПеремеÑтить выбранные Ñлементы вниз + + + + + + + ... + ... + + + ISelectProjectDialog @@ -8597,6 +8800,29 @@ + ISetupFilter + + + Form + Форма + + + + Apply filter to + Применить фильтр + + + + name only + только к имени + + + + complete text + к полному текÑту + + + ISetupFolder @@ -9031,6 +9257,14 @@ + IToolBarSetupDialog + + + Setup Toolbar + ÐаÑтройка панели инÑтрументов + + + IToolShell diff -Nru qmapshack-1.8.1/src/locale/qmapshack.ts qmapshack-1.9.0/src/locale/qmapshack.ts --- qmapshack-1.8.1/src/locale/qmapshack.ts 2017-04-15 15:35:44.000000000 +0000 +++ qmapshack-1.9.0/src/locale/qmapshack.ts 2017-07-23 13:41:03.000000000 +0000 @@ -1,6 +1,6 @@ - + CAbout @@ -122,7 +122,7 @@ - + Setup Map Background @@ -555,32 +555,32 @@ CDetailsTrk - + Reduce visible track points - + Change elevation of track points - + Change timestamp of track points - + Miscellaneous - + Color - + Activity @@ -611,7 +611,7 @@ - + Unknown @@ -724,7 +724,7 @@ CFitDecoder - + FIT decoding error: unexpected end of file %1. @@ -740,12 +740,12 @@ CFitFieldDataState - + Missing field definition for development field. - + FIT decoding error: invalid field def nr %1 while creating dev field profile. @@ -784,7 +784,7 @@ - + FIT decoding error: invalid offset %1 for state 'record content' @@ -968,7 +968,7 @@ CGisItemTrk - + FIT file %1 contains no GPS data. @@ -1224,37 +1224,37 @@ - + Changed name - + Changed comment - + Changed description - + Changed links - + Changed elevation of point %1 to %2 %3 - + Changed activity to '%1' for complete track. - + Changed activity to '%1' for range(%2..%3). @@ -1285,51 +1285,56 @@ + Added terrain slope from DEM file. + + + + Replaced elevation data with data from DEM files. - + Replaced elevation data with interpolated values. (M=%1, RMSErr=%2) - + Offset elevation data by %1%2. - + Changed start of track to %1. - + Remove timestamps. - + Set artificial timestamps with delta of %1 sec. - + Changed speed to %1%2. - + %1 (Segment %2) - + Removed extension %1 from all Track Points - + Converted subpoints from routing to track points @@ -1342,17 +1347,17 @@ CGisItemWpt - + Archived - + Available - + Not Available @@ -1743,8 +1748,8 @@ - - + + <b>Update devices</b><p>Update %1<br/>Please wait...</p> @@ -1782,27 +1787,32 @@ CGisWidget - + Load project... - + The project "%1" is already in the workspace. - + Copy items... - + + Change waypoint symbols. + + + + Cut Track... - + Do you want to delete the original track? @@ -1832,27 +1842,27 @@ - + File exists ... - + The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file. Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b> - + Failed to create file '%1' - + Failed to write file '%1' - + Saving GIS data failed... @@ -1883,27 +1893,27 @@ CHistoryListWidget - + by %1 - + Cut history before - + Cut history after - + History removal - + The removal is permanent and cannot be undone. <b>Do you really want to delete history before this step?</b> @@ -1929,67 +1939,95 @@ CKnownExtension - + Air Temperature - + Water Temperature - + Depth - - + + Heart Rate - - + + + Cadence - + + Speed - + Acceleration - + Course - + + Temperature + + + + + Distance + + + + + Sea Level Pressure + + + + + Speed (vertical) + + + + Slope* - + Speed* - + + Elevation - + Progress + + + Terrain slope + + CLostFoundProject @@ -2002,48 +2040,53 @@ CMainWindow - + Use <b>Menu->View->Add Map View</b> to open a new view. Or <b>Menu->File->Load Map View</b> to restore a saved one. Or click <a href='newview'>here</a>. - + Ele: %1%2 - + + Slope: %1%2 + + + + [Grid: %1] - + Load GIS Data... - + Select output file - - + + QMapShack View (*.view) - + Select file to load - + Fatal... - + QMapShack detected a badly installed Proj4 library. The translation tables for EPSG projections usually stored in /usr/share/proj are missing. Please contact the package maintainer of your distribution to fix it. @@ -2066,620 +2109,631 @@ - + Unspecified - + French - + German - + Dutch - + English - + Italian - + Finnish - + Swedish - + Spanish - + Basque - + Catalan - + Galician - + Welsh - + Gaelic - + Danish - + Norwegian - + Portuguese - + Slovak - + Czech - + Croatian - + Hungarian - + Polish - + Turkish - + Greek - + Slovenian - + Russian - + Estonian - + Latvian - + Romanian - + Albanian - + Bosnian - + Lithuanian - + Serbian - + Macedonian - + Bulgarian - + Major highway - + Principal highway - + Other highway - + Arterial road - + Collector road - + Residential street - + Alley/Private road - + Highway ramp, low speed - + Highway ramp, high speed - + Unpaved road - + Major highway connector - + Roundabout - + Railroad - + Shoreline - + Trail - + Stream - + Time zone - - + + Ferry - + State/province border - + County/parish border - + International border - + River - + Minor land contour - + Intermediate land contour - + Major land contour - + Minor depth contour - + Intermediate depth contour - + Major depth contour - + Intermittent stream - - + + Airport runway - + Pipeline - + Powerline - + Marine boundary - + Hazard boundary - + Large urban area (&gt;200K) - + Small urban area (&lt;200K) - + Rural housing area - + Military base - + Parking lot - + Parking garage - + Airport - + Shopping center - + Marina - + University/College - + Hospital - + Industrial complex - + Reservation - + Man-made area - + Sports complex - + Golf course - + Cemetery - - - + + + National park - + City park - - - + + + State park - + Forest - + Ocean - - - + + + Blue (unknown) - + Sea - - - + + + Large lake - - + + Medium lake - - + + Small lake - - + + Major lake - + Major River - + Large River - + Medium River - + Small River - + Intermittent water - + Wetland/Swamp - + Glacier - + Orchard/Plantation - + Scrub - + Tundra - + Flat - + ??? - + + Read external type file... + + + + + Failed to read type file: %1 +Fall back to internal types. + + + + Failed to read: - + Failed to open: - - + + Bad file format: - + Failed to read file structure: - + Loading %1 - + User abort: - + File is NT format. QMapShack is unable to read map files with NT format: - + File contains locked / encrypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin. - - - + + + Point of Interest - + Unknown - - - + + + Area @@ -2739,6 +2793,14 @@ + CMapPropSetup + + + Select type file... + + + + CMapRMAP @@ -3163,7 +3225,7 @@ - + Elapsed time: %1 seconds. @@ -3739,22 +3801,22 @@ - + up-to-date: %1 (%2), outdated: %3 (%4), to be downloaded: %5 (%6) - + being downloaded: %1 of %2 - + no local data, online available: %1 (%2) - + local data outdated (%1, %2 - remote %3, %4) @@ -3812,17 +3874,17 @@ - + error renaming file %1 to %2: %3 - + local data up to date (%1, %2) - + no routing-data available @@ -3830,13 +3892,13 @@ CRouterBRouterToolShell - + !!! done !!! - + !!! failed !!! @@ -4175,7 +4237,7 @@ - + Calculate route with %1 @@ -4549,6 +4611,19 @@ + CToolBarSetupDialog + + + Available Actions + + + + + Selected Actions + + + + CTwoNavProject @@ -6133,6 +6208,29 @@ + IFilterTerrainSlope + + + Form + + + + + <b>Calculate Terrain Slope</b> + + + + + Calculate slope of the terrain based on loaded DEM files. + + + + + ... + + + + IFitDecoderState @@ -6311,31 +6409,46 @@ - + Opacity - + Change the opacity of all GIS Items on the map. - - + + Filter + + + + + Name - + Age - + To add a database do a right click on the database list above. + + + Clear Filter + + + + + Setup Filter + + IGridSetup @@ -6491,338 +6604,363 @@ - + ? - + Project - + Tool - + Maps - + Dig. Elev. Model (DEM) - + Data - + Route - - + + Toolbar + + + + + Add Map View - + Ctrl+T - + Show Scale - + Setup Map Font - + Show Grid - + Ctrl+G - + Setup Grid - + Ctrl+Alt+G - + Flip Mouse Wheel - - + + Setup Map Paths - + POI Text - + Night / Day - + Map Tool Tip - + Ctrl+I - + Setup DEM Paths - + About - + Help - + F1 - - + + Setup Map View - + Load GIS Data - + Load projects from file - + Ctrl+L - + Save All GIS Data - + Save all projects in the workspace - + Ctrl+S - + Setup Time Zone - + Add empty project - + Search Google - + Close all projects - + F8 - + Setup Units - + Setup Workspace - + Setup save on exit. - + Import Database from QLandkarte - + Import QLandkarte GT database - + VRT Builder - + GUI front end to gdalbuildvrt - + Store Map View - + Write current active map and DEM list including the properties to a file - + Load Map View - + Restore view with active map and DEM list including the properties from a file - + Ext. Profile - + Ctrl+E - + Close - + Ctrl+Q - + Clone Map View - + Ctrl+Shift+T - + Create Routino Database - + Save(Print) Map Screenshot - + Print a selected area of the map - + Ctrl+P - + Setup Coord. Format - + Change the format coordinates are displayed - + Setup Map Background - + Setup Waypoint Icons - + Setup path to custom icons - + Close Tab - + Ctrl+W - + Quickstart Help + + + Setup Toolbar + + + + + Toggle Docks + + + + + Toggle visibility of dockable windows + + + + + Ctrl+D + + IMapList @@ -6930,6 +7068,8 @@ + + ... @@ -6983,6 +7123,21 @@ Cache Path + + + Type File: + + + + + Forget external type file and use internal types. + + + + + Load an external type file. + + IMapVrtBuilder @@ -8100,7 +8255,7 @@ - Select all itmes that are completely inside the selected area. + Select all items that are completely inside the selected area. @@ -8369,6 +8524,52 @@ + ISelectDoubleListWidget + + + Form + + + + + Available + + + + + Add to selected items + + + + + Remove from selected items + + + + + Selected + + + + + Move selected items up + + + + + Move selected items down + + + + + + + + ... + + + + ISelectProjectDialog @@ -8547,6 +8748,29 @@ + ISetupFilter + + + Form + + + + + Apply filter to + + + + + name only + + + + + complete text + + + + ISetupFolder @@ -8976,6 +9200,14 @@ + + IToolBarSetupDialog + + + Setup Toolbar + + + IToolShell diff -Nru qmapshack-1.8.1/src/map/CMapIMG.cpp qmapshack-1.9.0/src/map/CMapIMG.cpp --- qmapshack-1.8.1/src/map/CMapIMG.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/map/CMapIMG.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -127,7 +127,7 @@ CMapIMG::CMapIMG(const QString &filename, CMapDraw *parent) - : IMap(eFeatVisibility|eFeatVectorItems,parent) + : IMap(eFeatVisibility|eFeatVectorItems|eFeatTypFile,parent) , filename(filename) , fm(CMainWindow::self().getMapFont()) , selectedLanguage(NOIDX) @@ -151,6 +151,24 @@ isActivated = true; } +void CMapIMG::loadConfig(QSettings& cfg) +{ + IMap::loadConfig(cfg); + + if(!typeFile.isEmpty()) + { + setupTyp(); + } +} + +void CMapIMG::slotSetTypeFile(const QString& filename) +{ + IMap::slotSetTypeFile(filename); + setupTyp(); + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawMap); +} + + void CMapIMG::setupTyp() { languages.clear(); @@ -406,26 +424,46 @@ pointProperties.clear(); - QMap::iterator subfile = subfiles.begin(); - while(subfile != subfiles.end()) + if(!typeFile.isEmpty()) { - if(!(*subfile).parts.contains("TYP")) - { - ++subfile; - continue; + QFile file(typeFile); + if(!file.open(QIODevice::ReadOnly)) + { + QMessageBox::warning(CMainWindow::self().getBestWidgetForParent(), tr("Read external type file..."), tr("Failed to read type file: %1\nFall back to internal types.").arg(typeFile), QMessageBox::Ok); + typeFile.clear(); + setupTyp(); + return; } - CFileExt file(filename); - file.open(QIODevice::ReadOnly); - - QByteArray array; - readFile(file, (*subfile).parts["TYP"].offset, (*subfile).parts["TYP"].size, array); - + QByteArray array = file.readAll(); CGarminTyp typ; typ.decode(array, polygonProperties, polylineProperties, polygonDrawOrder, pointProperties); file.close(); - break; + } + else + { + QMap::iterator subfile = subfiles.begin(); + while(subfile != subfiles.end()) + { + if(!(*subfile).parts.contains("TYP")) + { + ++subfile; + continue; + } + + CFileExt file(filename); + file.open(QIODevice::ReadOnly); + + QByteArray array; + readFile(file, (*subfile).parts["TYP"].offset, (*subfile).parts["TYP"].size, array); + + CGarminTyp typ; + typ.decode(array, polygonProperties, polylineProperties, polygonDrawOrder, pointProperties); + + file.close(); + break; + } } } @@ -2324,6 +2362,14 @@ poi.name = QString(" (%1)").arg(point.type, 2, 16, QChar('0')); } } + if(pointProperties.contains(point.type)) + { + poi.symbolSize = pointProperties[point.type].imgDay.size(); + } + else + { + poi.symbolSize = QSize(16,16); + } return; } } diff -Nru qmapshack-1.8.1/src/map/CMapIMG.h qmapshack-1.9.0/src/map/CMapIMG.h --- qmapshack-1.8.1/src/map/CMapIMG.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/map/CMapIMG.h 2017-07-23 13:41:03.000000000 +0000 @@ -121,6 +121,8 @@ CMapIMG(const QString &filename, CMapDraw *parent); virtual ~CMapIMG() = default; + void loadConfig(QSettings& cfg) override; + void draw(IDrawContext::buffer_t& buf) override; void getToolTip(const QPoint& px, QString& infotext) const override; @@ -141,6 +143,8 @@ */ bool findPolylineCloseBy(const QPointF &pt1, const QPointF &pt2, qint32 threshold, QPolygonF& polyline) override; +public slots: + void slotSetTypeFile(const QString& filename) override; private: enum exce_e {eErrOpen, eErrAccess, errFormat, errLock, errAbort}; diff -Nru qmapshack-1.8.1/src/map/CMapPropSetup.cpp qmapshack-1.9.0/src/map/CMapPropSetup.cpp --- qmapshack-1.8.1/src/map/CMapPropSetup.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/map/CMapPropSetup.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -16,6 +16,7 @@ **********************************************************************************************/ +#include "helpers/CSettings.h" #include "helpers/Signals.h" #include "map/CMapDraw.h" #include "map/CMapPropSetup.h" @@ -50,6 +51,9 @@ connect(spinCacheSize, static_cast(&QSpinBox::valueChanged), mapfile, &IMap::slotSetCacheSize); connect(spinCacheExpiration, static_cast(&QSpinBox::valueChanged), mapfile, &IMap::slotSetCacheExpiration); + connect(toolOpenTypFile, &QToolButton::pressed, this, &CMapPropSetup::slotLoadTypeFile); + connect(toolClearTypFile, &QToolButton::pressed, this, &CMapPropSetup::slotClearTypeFile); + frameVectorItems->setVisible( mapfile->hasFeatureVectorItems() ); frameTileCache->setVisible( mapfile->hasFeatureTileCache() ); @@ -62,6 +66,8 @@ { frameLayers->hide(); } + + frameTypFile->setVisible(mapfile->hasFeatureTypFile()); } CMapPropSetup::~CMapPropSetup() @@ -100,6 +106,12 @@ spinCacheSize->setValue(mapfile->getCacheSize()); spinCacheExpiration->setValue(mapfile->getCacheExpiration()); + // type file + QFileInfo fi(mapfile->getTypeFile()); + labelTypeFile->setText(fi.completeBaseName()); + labelTypeFile->setToolTip(fi.absoluteFilePath()); + toolClearTypFile->setEnabled(!labelTypeFile->text().isEmpty()); + // unblock all signals X_____________UnBlockAllSignals_____________X(this); } @@ -175,3 +187,27 @@ labelScale->setPixmap(pix); } + + +void CMapPropSetup::slotLoadTypeFile() +{ + SETTINGS; + QString path = cfg.value("Paths/lastTypePath",QDir::homePath()).toString(); + QString filename = QFileDialog::getOpenFileName(this, tr("Select type file..."), path, "Garmin type file (*.typ)"); + if(filename.isEmpty()) + { + return; + } + + QFileInfo fi(filename); + cfg.setValue("Paths/lastTypePath", fi.absolutePath()); + + mapfile->slotSetTypeFile(filename); + slotPropertiesChanged(); +} + +void CMapPropSetup::slotClearTypeFile() +{ + mapfile->slotSetTypeFile(""); + slotPropertiesChanged(); +} diff -Nru qmapshack-1.8.1/src/map/CMapPropSetup.h qmapshack-1.9.0/src/map/CMapPropSetup.h --- qmapshack-1.8.1/src/map/CMapPropSetup.h 2017-03-26 10:12:51.000000000 +0000 +++ qmapshack-1.9.0/src/map/CMapPropSetup.h 2017-07-23 13:41:03.000000000 +0000 @@ -40,6 +40,8 @@ void slotScaleChanged(const QPointF& s); void slotSetMinScale(bool checked); void slotSetMaxScale(bool checked); + void slotLoadTypeFile(); + void slotClearTypeFile(); private: void updateScaleLabel(); diff -Nru qmapshack-1.8.1/src/map/CMapVRT.cpp qmapshack-1.9.0/src/map/CMapVRT.cpp --- qmapshack-1.8.1/src/map/CMapVRT.cpp 2017-04-17 10:11:47.000000000 +0000 +++ qmapshack-1.9.0/src/map/CMapVRT.cpp 2017-06-05 12:13:33.000000000 +0000 @@ -54,7 +54,7 @@ if(nullptr == pBand) { - delete dataset; + GDALClose(dataset); dataset = nullptr; QMessageBox::warning(CMainWindow::getBestWidgetForParent(), tr("Error..."), tr("Failed to load file: %1").arg(filename)); return; @@ -83,7 +83,7 @@ } else { - delete dataset; + GDALClose(dataset); dataset = nullptr; QMessageBox::warning(CMainWindow::getBestWidgetForParent(), tr("Error..."), tr("File must be 8 bit palette or gray indexed.")); return; @@ -175,7 +175,7 @@ CMapVRT::~CMapVRT() { - delete dataset; + GDALClose(dataset); } void CMapVRT::draw(IDrawContext::buffer_t& buf) /* override */ diff -Nru qmapshack-1.8.1/src/map/IMap.cpp qmapshack-1.9.0/src/map/IMap.cpp --- qmapshack-1.8.1/src/map/IMap.cpp 2017-04-17 10:11:47.000000000 +0000 +++ qmapshack-1.9.0/src/map/IMap.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -55,6 +55,11 @@ cfg.setValue("cacheSizeMB", cacheSizeMB); cfg.setValue("cacheExpiration", cacheExpiration); } + + if(hasFeatureTypFile()) + { + cfg.setValue("typeFile", typeFile); + } } void IMap::loadConfig(QSettings& cfg) /* override */ @@ -67,6 +72,7 @@ slotSetAdjustDetailLevel(cfg.value("adjustDetailLevel", getAdjustDetailLevel()).toInt()); slotSetCacheSize(cfg.value("cacheSizeMB", getCacheSize()).toInt()); slotSetCacheExpiration(cfg.value("cacheExpiration", getCacheExpiration()).toInt()); + slotSetTypeFile(cfg.value("typeFile", getTypeFile()).toString()); } IMapProp *IMap::getSetup() diff -Nru qmapshack-1.8.1/src/map/IMap.h qmapshack-1.9.0/src/map/IMap.h --- qmapshack-1.8.1/src/map/IMap.h 2017-04-17 10:11:47.000000000 +0000 +++ qmapshack-1.9.0/src/map/IMap.h 2017-07-23 13:41:03.000000000 +0000 @@ -46,6 +46,7 @@ ,eFeatVectorItems = 0x00000002 ,eFeatTileCache = 0x00000004 ,eFeatLayers = 0x00000008 + ,eFeatTypFile = 0x00000010 }; virtual void draw(IDrawContext::buffer_t& buf) = 0; @@ -101,6 +102,11 @@ return flagsFeature & eFeatLayers; } + bool hasFeatureTypFile() const + { + return flagsFeature & eFeatTypFile; + } + bool getShowPolygons() const { return showPolygons; @@ -136,6 +142,11 @@ return adjustDetailLevel; } + const QString& getTypeFile() const + { + return typeFile; + } + /** @brief Find a matching street polyline @@ -185,6 +196,11 @@ adjustDetailLevel = level; } + virtual void slotSetTypeFile(const QString& filename) + { + typeFile = filename; + } + protected: void convertRad2M(QPointF &p) const; void convertM2Rad(QPointF &p) const; @@ -244,6 +260,8 @@ qint32 cacheExpiration = 8; //< streaming map only: maximum age of tiles in cache [days] QString copyright; //< a copyright string to be displayed as tool tip + + QString typeFile; }; diff -Nru qmapshack-1.8.1/src/map/IMapPropSetup.ui qmapshack-1.9.0/src/map/IMapPropSetup.ui --- qmapshack-1.8.1/src/map/IMapPropSetup.ui 2017-02-10 17:04:25.000000000 +0000 +++ qmapshack-1.9.0/src/map/IMapPropSetup.ui 2017-07-23 13:41:03.000000000 +0000 @@ -317,6 +317,81 @@ + + + + QFrame::NoFrame + + + QFrame::Plain + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Type File: + + + + + + + + + + + + + + Forget external type file and use internal types. + + + ... + + + + :/icons/32x32/Cancel.png:/icons/32x32/Cancel.png + + + + + + + Load an external type file. + + + ... + + + + :/icons/32x32/PathBlue.png:/icons/32x32/PathBlue.png + + + + + + diff -Nru qmapshack-1.8.1/src/mouse/CMouseMoveWpt.cpp qmapshack-1.9.0/src/mouse/CMouseMoveWpt.cpp --- qmapshack-1.8.1/src/mouse/CMouseMoveWpt.cpp 2017-03-26 10:12:43.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/CMouseMoveWpt.cpp 2017-05-26 16:19:14.000000000 +0000 @@ -52,7 +52,7 @@ qreal d = GPS_Math_Distance(p1.x(), p1.y(), p2.x(), p2.y(), a1, a2); IUnit::self().meter2distance(d, val, unit); - const QString &str = QString("%1 %2, %3").arg(val).arg(unit).arg(a2, 0, 'f', 1); + const QString &str = QString("%1 %2, %3%4").arg(val).arg(unit).arg(a2, 0, 'f', 1).arg(QChar(0260)); gis->convertRad2Px(p1); gis->convertRad2Px(p2); diff -Nru qmapshack-1.8.1/src/mouse/CMouseNormal.cpp qmapshack-1.9.0/src/mouse/CMouseNormal.cpp --- qmapshack-1.8.1/src/mouse/CMouseNormal.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/CMouseNormal.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -290,7 +290,10 @@ { if(curPOI.pos != NOPOINTF) { - p.drawImage(curPOI.pos - QPointF(31,31), QImage("://cursors/wptHighlightBlue.png")); + const QSize s = curPOI.symbolSize; + const qint32 x = (qMax(qMax(s.width(), s.height()), 7)<<1) & 0xFFFFFFFE; + + p.drawImage(curPOI.pos - QPointF(x,x), QImage("://cursors/wptHighlightBlue.png").scaled(x<<1, x<<1, Qt::KeepAspectRatio, Qt::SmoothTransformation)); } /* diff -Nru qmapshack-1.8.1/src/mouse/IScrOptSelect.ui qmapshack-1.9.0/src/mouse/IScrOptSelect.ui --- qmapshack-1.8.1/src/mouse/IScrOptSelect.ui 2017-03-06 18:17:36.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/IScrOptSelect.ui 2017-05-26 16:18:32.000000000 +0000 @@ -219,7 +219,7 @@ - Select all itmes that are completely inside the selected area. + Select all items that are completely inside the selected area. ... diff -Nru qmapshack-1.8.1/src/mouse/line/CLineOpAddPoint.cpp qmapshack-1.9.0/src/mouse/line/CLineOpAddPoint.cpp --- qmapshack-1.8.1/src/mouse/line/CLineOpAddPoint.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/line/CLineOpAddPoint.cpp 2017-05-19 14:53:52.000000000 +0000 @@ -26,7 +26,7 @@ CLineOpAddPoint::CLineOpAddPoint(SGisLine& points, CGisDraw *gis, CCanvas * canvas, IMouseEditLine * parent) : ILineOp(points, gis, canvas, parent) { - cursor = QCursor(QPixmap(":/cursors/cursorAdd.png"), 0, 0); + cursor = QCursor(QPixmap(":/cursors/cursorPointAdd.png"), 0, 0); } CLineOpAddPoint::~CLineOpAddPoint() diff -Nru qmapshack-1.8.1/src/mouse/line/CLineOpDeletePoint.cpp qmapshack-1.9.0/src/mouse/line/CLineOpDeletePoint.cpp --- qmapshack-1.8.1/src/mouse/line/CLineOpDeletePoint.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/line/CLineOpDeletePoint.cpp 2017-05-19 14:53:52.000000000 +0000 @@ -26,7 +26,7 @@ CLineOpDeletePoint::CLineOpDeletePoint(SGisLine& points, CGisDraw *gis, CCanvas * canvas, IMouseEditLine * parent) : ILineOp(points, gis, canvas, parent) { - cursor = QCursor(QPixmap(":/cursors/cursorDelete.png"), 0, 0); + cursor = QCursor(QPixmap(":/cursors/cursorPointDel.png"), 0, 0); } CLineOpDeletePoint::~CLineOpDeletePoint() diff -Nru qmapshack-1.8.1/src/mouse/line/CLineOpMovePoint.cpp qmapshack-1.9.0/src/mouse/line/CLineOpMovePoint.cpp --- qmapshack-1.8.1/src/mouse/line/CLineOpMovePoint.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/line/CLineOpMovePoint.cpp 2017-05-19 14:53:52.000000000 +0000 @@ -27,7 +27,7 @@ CLineOpMovePoint::CLineOpMovePoint(SGisLine &points, CGisDraw *gis, CCanvas * canvas, IMouseEditLine *parent) : ILineOp(points, gis, canvas, parent) { - cursor = QCursor(QPixmap(":/cursors/cursorMovePoint.png"),0,0); + cursor = QCursor(QPixmap(":/cursors/cursorPointMove.png"),0,0); } CLineOpMovePoint::~CLineOpMovePoint() diff -Nru qmapshack-1.8.1/src/mouse/line/ILineOp.cpp qmapshack-1.9.0/src/mouse/line/ILineOp.cpp --- qmapshack-1.8.1/src/mouse/line/ILineOp.cpp 2017-03-26 10:12:44.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/line/ILineOp.cpp 2017-05-20 17:28:23.000000000 +0000 @@ -320,6 +320,7 @@ } else { + line << pt1.pixel; for(const IGisLine::subpt_t& pt : pt1.subpts) { line << pt.pixel; diff -Nru qmapshack-1.8.1/src/mouse/line/IScrOptEditLine.ui qmapshack-1.9.0/src/mouse/line/IScrOptEditLine.ui --- qmapshack-1.8.1/src/mouse/line/IScrOptEditLine.ui 2016-02-07 19:52:57.000000000 +0000 +++ qmapshack-1.9.0/src/mouse/line/IScrOptEditLine.ui 2017-05-19 14:53:52.000000000 +0000 @@ -119,7 +119,7 @@ - :/icons/32x32/Add.png:/icons/32x32/Add.png + :/icons/32x32/PointAdd.png:/icons/32x32/PointAdd.png Ctrl++ @@ -165,7 +165,7 @@ - :/icons/32x32/DeleteOne.png:/icons/32x32/DeleteOne.png + :/icons/32x32/PointDel.png:/icons/32x32/PointDel.png Ctrl+D diff -Nru qmapshack-1.8.1/src/plot/CPlotAxis.cpp qmapshack-1.9.0/src/plot/CPlotAxis.cpp --- qmapshack-1.8.1/src/plot/CPlotAxis.cpp 2017-03-26 10:12:43.000000000 +0000 +++ qmapshack-1.9.0/src/plot/CPlotAxis.cpp 2017-06-14 15:32:16.000000000 +0000 @@ -181,10 +181,10 @@ if ( scaleWidth > 0 ) { - return scaleWidth * m.width( " " ); + return scaleWidth * m.width( "X" ); } - int width = 0; + int width = 6 * m.width( "X" ); QString format_single_prec = ((interval * ticScale) < 1) ? fmtdbl(interval) : fmtsgl(interval); const tic_t * t = ticmark(); diff -Nru qmapshack-1.8.1/src/plot/IPlot.cpp qmapshack-1.9.0/src/plot/IPlot.cpp --- qmapshack-1.8.1/src/plot/IPlot.cpp 2017-03-26 10:12:43.000000000 +0000 +++ qmapshack-1.9.0/src/plot/IPlot.cpp 2017-07-23 13:41:03.000000000 +0000 @@ -552,7 +552,7 @@ scaleWidthX1 = showScale ? data->x().getScaleWidth( fm ) : 0; scaleWidthY1 = showScale ? data->y().getScaleWidth( fm ) : 0; - scaleWidthY1 = scaleWidthX1 > scaleWidthY1 ? scaleWidthX1 : scaleWidthY1; + scaleWidthY1 = (scaleWidthX1/2) > scaleWidthY1 ? scaleWidthX1/2 : scaleWidthY1; fontWidth = fm.maxWidth(); fontHeight = fm.height(); @@ -1388,11 +1388,7 @@ } CGisWidget::self().addWptByPos({trkpt->lon, trkpt->lat}); - CCanvas * canvas = CMainWindow::self().getVisibleCanvas(); - if(canvas != nullptr) - { - canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis); - } + CCanvas::triggerCompleteUpdate(CCanvas::eRedrawGis); } void IPlot::slotCutTrk() diff -Nru qmapshack-1.8.1/src/resources.qrc qmapshack-1.9.0/src/resources.qrc --- qmapshack-1.8.1/src/resources.qrc 2017-04-15 15:35:45.000000000 +0000 +++ qmapshack-1.9.0/src/resources.qrc 2017-07-10 19:52:50.000000000 +0000 @@ -130,6 +130,8 @@ icons/32x32/PointMove.png icons/32x32/PointHide.png icons/32x32/PointShow.png + icons/32x32/PointAdd.png + icons/32x32/PointDel.png icons/32x32/AreaMove.png icons/32x32/SelectRange.png icons/32x32/SelectArea.png @@ -203,6 +205,9 @@ icons/32x32/CSrcUnknown.png icons/32x32/CSrcAccel.png icons/32x32/CSrcCourse.png + icons/32x32/CSrcDistance.png + icons/32x32/CSrcSeaLevelPressure.png + icons/32x32/CSrcVertSpeed.png icons/32x32/Progress.png icons/32x32/FitProject.png icons/32x32/LineWidthUser.png @@ -221,7 +226,6 @@ icons/32x32/SortName.png icons/32x32/SaveGISAsGpx11.png icons/32x32/CopyTrkWithWpt.png - icons/48x48/Add.png icons/48x48/AddMapWorkspace.png icons/48x48/CloneMapWorkspace.png @@ -323,6 +327,8 @@ icons/48x48/PointMove.png icons/48x48/PointHide.png icons/48x48/PointShow.png + icons/48x48/PointAdd.png + icons/48x48/PointDel.png icons/48x48/AreaMove.png icons/48x48/SelectRange.png icons/48x48/SelectArea.png @@ -396,6 +402,9 @@ icons/48x48/CSrcUnknown.png icons/48x48/CSrcAccel.png icons/48x48/CSrcCourse.png + icons/48x48/CSrcDistance.png + icons/48x48/CSrcSeaLevelPressure.png + icons/48x48/CSrcVertSpeed.png icons/48x48/Progress.png icons/48x48/FitProject.png icons/48x48/LineWidthUser.png @@ -414,8 +423,6 @@ icons/48x48/SortName.png icons/48x48/SaveGISAsGpx11.png icons/48x48/CopyTrkWithWpt.png - - icons/cache/32x32/bluepin.png icons/cache/32x32/cito.png icons/cache/32x32/corrected.png @@ -491,7 +498,7 @@ icons/waypoints/32x32/Water.png cursors/cursorArrow.png cursors/cursorMove.png - cursors/cursorMovePoint.png + cursors/cursorPointMove.png cursors/cursorMoveMap.png cursors/cursorMoveWpt.png cursors/cursorMoveLine.png @@ -499,7 +506,8 @@ cursors/cursorDelete.png cursors/cursorSelectRange.png cursors/cursorSelectArea.png - cursors/cursorAdd.png + cursors/cursorPointAdd.png + cursors/cursorPointDel.png cursors/cursorPrint.png cursors/cursorSave.png cursors/wptHighlightRed.png @@ -516,5 +524,19 @@ map/OpenStreetMap.tms map/OSM_Topo.tms map/OpenCycleMap.tms + icons/32x32/ToolBarSetup.png + icons/32x32/ToggleDem.png + icons/32x32/ToggleGis.png + icons/32x32/ToggleMaps.png + icons/32x32/ToggleRouter.png + icons/32x32/ToggleDocks.png + icons/48x48/ToggleDem.png + icons/48x48/ToggleDocks.png + icons/48x48/ToggleGis.png + icons/48x48/ToggleMaps.png + icons/48x48/ToggleRouter.png + icons/48x48/ToolBarSetup.png + icons/32x32/ToolBar.png + icons/48x48/ToolBar.png diff -Nru qmapshack-1.8.1/src/setup/IAppSetup.cpp qmapshack-1.9.0/src/setup/IAppSetup.cpp --- qmapshack-1.8.1/src/setup/IAppSetup.cpp 2017-03-26 10:12:43.000000000 +0000 +++ qmapshack-1.9.0/src/setup/IAppSetup.cpp 2017-05-17 17:42:32.000000000 +0000 @@ -28,7 +28,7 @@ #include -static IAppSetup* instance = nullptr; +IAppSetup* IAppSetup::instance = nullptr; IAppSetup* IAppSetup::getPlatformInstance() { diff -Nru qmapshack-1.8.1/src/setup/IAppSetup.h qmapshack-1.9.0/src/setup/IAppSetup.h --- qmapshack-1.8.1/src/setup/IAppSetup.h 2017-03-26 10:12:50.000000000 +0000 +++ qmapshack-1.9.0/src/setup/IAppSetup.h 2017-05-17 17:42:32.000000000 +0000 @@ -42,6 +42,8 @@ void prepareGdal(QString gdalDir, QString projDir); void prepareTranslator(QString translationPath, QString translationPrefix); + static IAppSetup* instance; + QString path(QString path, QString subdir, bool mkdir, QString debugName); }; diff -Nru qmapshack-1.8.1/src/widgets/CHistoryListWidget.cpp qmapshack-1.9.0/src/widgets/CHistoryListWidget.cpp --- qmapshack-1.8.1/src/widgets/CHistoryListWidget.cpp 2017-04-15 15:35:45.000000000 +0000 +++ qmapshack-1.9.0/src/widgets/CHistoryListWidget.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -36,7 +36,6 @@ actionCutHistoryBefore = menu->addAction(QIcon("://icons/32x32/CutHistoryBefore.png"), tr("Cut history before"), this, SLOT(slotCutHistoryBefore())); actionCutHistoryAfter = menu->addAction(QIcon("://icons/32x32/CutHistoryAfter.png"), tr("Cut history after"), this, SLOT(slotCutHistoryAfter())); - } CHistoryListWidget::~CHistoryListWidget() @@ -107,7 +106,7 @@ actionCutHistoryBefore->setEnabled(currentRow() > 0); actionCutHistoryAfter->setEnabled(currentRow() < count() - 1); - + QPoint p = mapToGlobal(point); menu->exec(p); } @@ -154,9 +153,9 @@ } int res = QMessageBox::warning(CMainWindow::getBestWidgetForParent(), tr("History removal") - , tr("The removal is permanent and cannot be undone. " - "Do you really want to delete history before this step?") - , QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + , tr("The removal is permanent and cannot be undone. " + "Do you really want to delete history before this step?") + , QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (res == QMessageBox::No) { return; diff -Nru qmapshack-1.8.1/src/widgets/CSelectDoubleListWidget.cpp qmapshack-1.9.0/src/widgets/CSelectDoubleListWidget.cpp --- qmapshack-1.8.1/src/widgets/CSelectDoubleListWidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/widgets/CSelectDoubleListWidget.cpp 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,262 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#include "CSelectDoubleListWidget.h" +#include + +CSelectDoubleListWidget::CSelectDoubleListWidget(QWidget * parent, IItemFilter *filter) : QWidget(parent), filter(filter) +{ + setupUi(this); + + connect(listSelected, &QListView::clicked, this, &CSelectDoubleListWidget::slotSelectedClicked); + connect(listAvailable, &QListView::clicked, this, &CSelectDoubleListWidget::slotAvailableClicked); + connect(toolAdd, &QToolButton::clicked, this, &CSelectDoubleListWidget::slotAdd); + connect(toolRemove, &QToolButton::clicked, this, &CSelectDoubleListWidget::slotRemove); + connect(toolUp, &QToolButton::clicked, this, &CSelectDoubleListWidget::slotUp); + connect(toolDown, &QToolButton::clicked, this, &CSelectDoubleListWidget::slotDown); +} + +CSelectDoubleListWidget::~CSelectDoubleListWidget() +{ +} + +void CSelectDoubleListWidget::setAvailable(const QList & available) +{ + this->available.clear(); + this->available << available; + listAvailable->clear(); + for (QListWidgetItem * const & item : available) + { + int index = listSelected->row(item); + if (index < 0) + { + listAvailable->addItem(item); + } + else if(filter != nullptr && !filter->shouldBeMoved(item)) + { + listSelected->takeItem(index); + listSelected->insertItem(index,item->clone()); + listAvailable->addItem(item); + } + } + updateButtons(); +} + +void CSelectDoubleListWidget::setSelected(const QList & selected) const +{ + listSelected->clear(); + for (QListWidgetItem * const & item : selected) + { + int index = listAvailable->row(item); + if (index < 0) + { + listSelected->addItem(item); + } + else + { + if(filter == nullptr || filter->shouldBeMoved(item)) + { + listAvailable->takeItem(index); + listSelected->addItem(item); + } + else + { + listSelected->addItem(item->clone()); + } + } + } + updateButtons(); +} + +void CSelectDoubleListWidget::setFilter(IItemFilter * const & filter) +{ + this->filter = filter; +} + +void CSelectDoubleListWidget::setLabelAvailable(const QString & label) const +{ + labelAvailable->setText(label); +} + +void CSelectDoubleListWidget::setLabelSelected(const QString & label) const +{ + labelSelected->setText(label); +} + +const QList CSelectDoubleListWidget::selected() const +{ + QList selected; + for (int i=0; i < listSelected->count(); i++) + { + selected << listSelected->item(i); + } + return selected; +} + +void CSelectDoubleListWidget::clear() +{ + this->available.clear(); + listAvailable->clear(); + listSelected->clear(); +} + +void CSelectDoubleListWidget::slotSelectedClicked(const QModelIndex & index) const +{ + listAvailable->clearSelection(); + updateButtons(); +} + +void CSelectDoubleListWidget::slotAvailableClicked(const QModelIndex & index) const +{ + listSelected->clearSelection(); + updateButtons(); +} + +void CSelectDoubleListWidget::slotAdd() const +{ + for (QListWidgetItem * const & item : listAvailable->selectedItems()) + { + if (filter == nullptr || filter->shouldBeMoved(item)) + { + listAvailable->takeItem(listAvailable->row(item)); + listSelected->addItem(item); + } + else + { + listSelected->addItem(item->clone()); + } + } + updateButtons(); +} + +void CSelectDoubleListWidget::slotRemove() const +{ + for (QListWidgetItem * const & item : listSelected->selectedItems()) + { + if (filter == nullptr || filter->shouldBeMoved(item)) + { + int index = -1; + for (int i = available.indexOf(item)-1; i>=0; i--) + { + index = listAvailable->row(available.at(i)); + if (index >= 0) + { + break; + } + } + index++; + listSelected->takeItem(listSelected->row(item)); + listAvailable->insertItem(index,item); + } + else + { + delete listSelected->takeItem(listSelected->row(item)); + } + } + updateButtons(); +} + +void CSelectDoubleListWidget::slotUp() const +{ + QList indices; + for (const QModelIndex & modelIndex : listSelected->selectionModel()->selectedIndexes()) + { + indices << modelIndex.row(); + } + std::sort(indices.begin(),indices.end()); + + int i=0; + for (int index : indices) + { + if (index > i) + { + listSelected->insertItem(index-1,listSelected->takeItem(index)); + listSelected->setCurrentRow(index-1,QItemSelectionModel::Select); + } + i++; + } + updateButtons(); +} + +void CSelectDoubleListWidget::slotDown() const +{ + QList indices; + for (const QModelIndex & modelIndex : listSelected->selectionModel()->selectedIndexes()) + { + indices << modelIndex.row(); + } + std::sort(indices.begin(), indices.end(), [] (int a, int b) { return a > b; }); + + int i=listSelected->count()-1; + for (int index : indices) + { + if (index < i) + { + listSelected->insertItem(index+1,listSelected->takeItem(index)); + listSelected->setCurrentRow(index+1,QItemSelectionModel::Select); + } + i--; + } + updateButtons(); +} + +void CSelectDoubleListWidget::updateButtons() const +{ + toolAdd->setEnabled(listAvailable->selectionModel()->hasSelection()); + + const QItemSelectionModel * const & selectedSelectionModel = listSelected->selectionModel(); + if (selectedSelectionModel->hasSelection()) + { + toolRemove->setEnabled(true); + + int minSelected = listSelected->count(); + int maxSelected = -1; + int minUnselected = minSelected; + int maxUnselected = -1; + + for (int i = 0; i < listSelected->count(); i++) + { + if (selectedSelectionModel->isRowSelected(i, QModelIndex())) + { + if (i < minSelected) + { + minSelected = i; + } + maxSelected = i; + } + else + { + if (i < minUnselected) + { + minUnselected = i; + } + maxUnselected = i; + } + } + + toolUp->setEnabled(minUnselected < maxSelected); + toolDown->setEnabled(maxUnselected > minSelected); + } + else + { + toolRemove->setEnabled(false); + toolUp->setEnabled(false); + toolDown->setEnabled(false); + } +} diff -Nru qmapshack-1.8.1/src/widgets/CSelectDoubleListWidget.h qmapshack-1.9.0/src/widgets/CSelectDoubleListWidget.h --- qmapshack-1.8.1/src/widgets/CSelectDoubleListWidget.h 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/widgets/CSelectDoubleListWidget.h 2017-07-04 16:44:15.000000000 +0000 @@ -0,0 +1,60 @@ +/********************************************************************************************** + Copyright (C) 2017 Norbert Truchsess norbert.truchsess@t-online.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 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +**********************************************************************************************/ + +#ifndef CSELECTDOUBLELISTWIDGET_H +#define CSELECTDOUBLELISTWIDGET_H + +#include "ui_ISelectDoubleListWidget.h" + +class CSelectDoubleListWidget : public QWidget, private Ui::ISelectDoubleListWidget +{ + Q_OBJECT +public: + class IItemFilter + { +public: + virtual bool shouldBeMoved(QListWidgetItem * item) = 0; + }; + + CSelectDoubleListWidget(QWidget *parent, IItemFilter *filter = nullptr); + virtual ~CSelectDoubleListWidget(); + + void setAvailable(const QList &available); + void setSelected(const QList &selected) const; + void setLabelAvailable(const QString & label) const; + void setLabelSelected(const QString & label) const; + void setFilter(IItemFilter * const &filter); + const QList selected() const; + void clear(); + +private slots: + void slotSelectedClicked(const QModelIndex & index) const; + void slotAvailableClicked(const QModelIndex & index) const; + void slotAdd() const; + void slotRemove() const; + void slotUp() const; + void slotDown() const; + +private: + void updateButtons() const; + + QList available; + IItemFilter * filter; +}; +#endif //CSELECTDOUBLELISTWIDGET_H diff -Nru qmapshack-1.8.1/src/widgets/ISelectDoubleListWidget.ui qmapshack-1.9.0/src/widgets/ISelectDoubleListWidget.ui --- qmapshack-1.8.1/src/widgets/ISelectDoubleListWidget.ui 1970-01-01 00:00:00.000000000 +0000 +++ qmapshack-1.9.0/src/widgets/ISelectDoubleListWidget.ui 2017-07-01 14:40:11.000000000 +0000 @@ -0,0 +1,135 @@ + + + ISelectDoubleListWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + Available + + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectItems + + + + + + + + + + + Add to selected items + + + ... + + + + :/icons/32x32/Right.png:/icons/32x32/Right.png + + + + + + + Remove from selected items + + + ... + + + + :/icons/32x32/Left.png:/icons/32x32/Left.png + + + + + + + + + + + Selected + + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectItems + + + + + + + + + + + Move selected items up + + + ... + + + + :/icons/32x32/Up.png:/icons/32x32/Up.png + + + + + + + Move selected items down + + + ... + + + + :/icons/32x32/Down.png:/icons/32x32/Down.png + + + + + + + + + + + +