1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-18 04:44:23 +02:00

Compare commits

..

13 Commits
4.14 ... 4.15

54 changed files with 1534 additions and 576 deletions

View File

@ -1,4 +1,4 @@
version: 4.14.{build} version: 4.15.{build}
configuration: Release configuration: Release
platform: Any CPU platform: Any CPU
environment: environment:

View File

@ -1,5 +1,5 @@
TARGET = GPXSee TARGET = GPXSee
VERSION = 4.14 VERSION = 4.15
QT += core \ QT += core \
gui \ gui \
network network
@ -97,7 +97,13 @@ HEADERS += src/config.h \
src/oddspinbox.h \ src/oddspinbox.h \
src/rectc.h \ src/rectc.h \
src/searchpointer.h \ src/searchpointer.h \
src/percentslider.h src/percentslider.h \
src/elevationgraphitem.h \
src/speedgraphitem.h \
src/heartrategraphitem.h \
src/temperaturegraphitem.h \
src/cadencegraphitem.h \
src/powergraphitem.h
SOURCES += src/main.cpp \ SOURCES += src/main.cpp \
src/gui.cpp \ src/gui.cpp \
src/poi.cpp \ src/poi.cpp \
@ -167,7 +173,13 @@ SOURCES += src/main.cpp \
src/albersequal.cpp \ src/albersequal.cpp \
src/oddspinbox.cpp \ src/oddspinbox.cpp \
src/rectc.cpp \ src/rectc.cpp \
src/percentslider.cpp src/percentslider.cpp \
src/elevationgraphitem.cpp \
src/speedgraphitem.cpp \
src/heartrategraphitem.cpp \
src/temperaturegraphitem.cpp \
src/cadencegraphitem.cpp \
src/powergraphitem.cpp
RESOURCES += gpxsee.qrc RESOURCES += gpxsee.qrc
TRANSLATIONS = lang/gpxsee_cs.ts \ TRANSLATIONS = lang/gpxsee_cs.ts \
lang/gpxsee_sv.ts \ lang/gpxsee_sv.ts \

View File

@ -25,6 +25,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>CadenceGraphItem</name>
<message>
<location filename="../src/cadencegraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="21"/>
<location filename="../src/cadencegraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Průměr</translation>
</message>
</context>
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
@ -82,36 +101,69 @@
<translation>Výška</translation> <translation>Výška</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="141"/> <location filename="../src/elevationgraph.cpp" line="122"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="58"/> <location filename="../src/elevationgraph.cpp" line="57"/>
<source>Ascent</source> <source>Ascent</source>
<translation>Stoupání</translation> <translation>Stoupání</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="60"/> <location filename="../src/elevationgraph.cpp" line="59"/>
<source>Descent</source> <source>Descent</source>
<translation>Klesání</translation> <translation>Klesání</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="64"/> <location filename="../src/elevationgraph.cpp" line="63"/>
<source>Minimum</source> <source>Minimum</source>
<translation>Minimum</translation> <translation>Minimum</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="144"/> <location filename="../src/elevationgraph.cpp" line="125"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="62"/> <location filename="../src/elevationgraph.cpp" line="61"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>ElevationGraphItem</name>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>m</source>
<translation>m</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="28"/>
<source>Ascent</source>
<translation>Stoupání</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="30"/>
<source>Descent</source>
<translation>Klesání</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="32"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="34"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>ExportDialog</name> <name>ExportDialog</name>
<message> <message>
@ -218,24 +270,24 @@
<context> <context>
<name>Format</name> <name>Format</name>
<message> <message>
<location filename="../src/format.cpp" line="22"/> <location filename="../src/format.cpp" line="26"/>
<location filename="../src/format.cpp" line="43"/> <location filename="../src/format.cpp" line="47"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="25"/> <location filename="../src/format.cpp" line="29"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="29"/> <location filename="../src/format.cpp" line="33"/>
<location filename="../src/format.cpp" line="40"/> <location filename="../src/format.cpp" line="44"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="32"/> <location filename="../src/format.cpp" line="36"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
@ -243,17 +295,17 @@
<context> <context>
<name>GUI</name> <name>GUI</name>
<message> <message>
<location filename="../src/gui.cpp" line="645"/> <location filename="../src/gui.cpp" line="648"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source> <source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>Program GPXSee je distribuován pod podmínkami licence GNU General Public License verze 3. Pro více informací navštivte stránky programu na adrese </translation> <translation>Program GPXSee je distribuován pod podmínkami licence GNU General Public License verze 3. Pro více informací navštivte stránky programu na adrese </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="725"/> <location filename="../src/gui.cpp" line="733"/>
<source>Open file</source> <source>Open file</source>
<translation>Otevřít soubor</translation> <translation>Otevřít soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="815"/> <location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source> <source>Open POI file</source>
<translation>Otevřít POI soubor</translation> <translation>Otevřít POI soubor</translation>
</message> </message>
@ -264,8 +316,8 @@
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="291"/> <location filename="../src/gui.cpp" line="291"/>
<location filename="../src/gui.cpp" line="662"/> <location filename="../src/gui.cpp" line="665"/>
<location filename="../src/gui.cpp" line="663"/> <location filename="../src/gui.cpp" line="666"/>
<source>Keyboard controls</source> <source>Keyboard controls</source>
<translation>Ovládací klávesy</translation> <translation>Ovládací klávesy</translation>
</message> </message>
@ -280,20 +332,20 @@
<translation>Znovu načíst</translation> <translation>Znovu načíst</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="574"/> <location filename="../src/gui.cpp" line="577"/>
<source>Show</source> <source>Show</source>
<translation>Zobrazit</translation> <translation>Zobrazit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="491"/> <location filename="../src/gui.cpp" line="493"/>
<location filename="../src/gui.cpp" line="568"/> <location filename="../src/gui.cpp" line="571"/>
<source>File</source> <source>File</source>
<translation>Soubor</translation> <translation>Soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="289"/> <location filename="../src/gui.cpp" line="289"/>
<location filename="../src/gui.cpp" line="691"/> <location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="692"/> <location filename="../src/gui.cpp" line="700"/>
<source>Data sources</source> <source>Data sources</source>
<translation>Zdroje dat</translation> <translation>Zdroje dat</translation>
</message> </message>
@ -345,7 +397,7 @@
<message> <message>
<location filename="../src/gui.cpp" line="367"/> <location filename="../src/gui.cpp" line="367"/>
<location filename="../src/gui.cpp" line="371"/> <location filename="../src/gui.cpp" line="371"/>
<location filename="../src/gui.cpp" line="674"/> <location filename="../src/gui.cpp" line="682"/>
<source>Next map</source> <source>Next map</source>
<translation>Následující mapa</translation> <translation>Následující mapa</translation>
</message> </message>
@ -375,194 +427,209 @@
<translation>Zobrazit grafy</translation> <translation>Zobrazit grafy</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="426"/> <location filename="../src/gui.cpp" line="424"/>
<source>Show grid</source> <source>Show grid</source>
<translation>Zobrazit mřížku</translation> <translation>Zobrazit mřížku</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="432"/> <location filename="../src/gui.cpp" line="428"/>
<source>Show slider info</source>
<translation>Zobrazit informace o posuvníku</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="434"/>
<source>Show toolbars</source> <source>Show toolbars</source>
<translation>Zobrazovat nástrojové lišty</translation> <translation>Zobrazovat nástrojové lišty</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="438"/> <location filename="../src/gui.cpp" line="440"/>
<source>Total time</source> <source>Total time</source>
<translation>Celkový čas</translation> <translation>Celkový čas</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="443"/> <location filename="../src/gui.cpp" line="445"/>
<location filename="../src/gui.cpp" line="986"/> <location filename="../src/gui.cpp" line="994"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Čistý čas</translation> <translation>Čistý čas</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="450"/> <location filename="../src/gui.cpp" line="452"/>
<source>Metric</source> <source>Metric</source>
<translation>Metrické</translation> <translation>Metrické</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="455"/> <location filename="../src/gui.cpp" line="457"/>
<source>Imperial</source> <source>Imperial</source>
<translation>Imperiální</translation> <translation>Imperiální</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="461"/> <location filename="../src/gui.cpp" line="463"/>
<source>Fullscreen mode</source> <source>Fullscreen mode</source>
<translation>Celoobrazovkový režim</translation> <translation>Celoobrazovkový režim</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="467"/> <location filename="../src/gui.cpp" line="469"/>
<source>Options...</source> <source>Options...</source>
<translation>Nastavení...</translation> <translation>Nastavení...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="473"/> <location filename="../src/gui.cpp" line="475"/>
<source>Next</source> <source>Next</source>
<translation>Následující</translation> <translation>Následující</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="476"/> <location filename="../src/gui.cpp" line="478"/>
<source>Previous</source> <source>Previous</source>
<translation>Předchozí</translation> <translation>Předchozí</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="480"/> <location filename="../src/gui.cpp" line="482"/>
<source>Last</source> <source>Last</source>
<translation>Poslední</translation> <translation>Poslední</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="483"/> <location filename="../src/gui.cpp" line="485"/>
<source>First</source> <source>First</source>
<translation>První</translation> <translation>První</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="505"/> <location filename="../src/gui.cpp" line="507"/>
<source>Map</source> <source>Map</source>
<translation>Mapa</translation> <translation>Mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="513"/> <location filename="../src/gui.cpp" line="515"/>
<source>Graph</source> <source>Graph</source>
<translation>Graf</translation> <translation>Graf</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="521"/> <location filename="../src/gui.cpp" line="524"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="522"/> <location filename="../src/gui.cpp" line="525"/>
<source>POI files</source> <source>POI files</source>
<translation>POI soubory</translation> <translation>POI soubory</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="533"/> <location filename="../src/gui.cpp" line="536"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="534"/> <location filename="../src/gui.cpp" line="537"/>
<source>Display</source> <source>Display</source>
<translation>Zobrazit</translation> <translation>Zobrazit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="542"/> <location filename="../src/gui.cpp" line="545"/>
<source>Settings</source> <source>Settings</source>
<translation>Nastavení</translation> <translation>Nastavení</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="546"/> <location filename="../src/gui.cpp" line="549"/>
<source>Units</source> <source>Units</source>
<translation>Jednotky</translation> <translation>Jednotky</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="555"/> <location filename="../src/gui.cpp" line="558"/>
<source>Help</source> <source>Help</source>
<translation>Nápověda</translation> <translation>Nápověda</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="672"/> <location filename="../src/gui.cpp" line="675"/>
<source>Append file</source> <source>Append file</source>
<translation>Přidat soubor</translation> <translation>Přidat soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="673"/> <location filename="../src/gui.cpp" line="676"/>
<source>Next/Previous</source> <source>Next/Previous</source>
<translation>Následující/Předchozí</translation> <translation>Následující/Předchozí</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="676"/> <location filename="../src/gui.cpp" line="678"/>
<source>Toggle graph type</source>
<translation>Přepnout typ grafu</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<source>Toggle time type</source>
<translation>Přepnout typ času</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<source>Previous map</source> <source>Previous map</source>
<translation>Předchozí mapa</translation> <translation>Předchozí mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="677"/> <location filename="../src/gui.cpp" line="685"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Přiblížit</translation> <translation>Přiblížit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="679"/> <location filename="../src/gui.cpp" line="687"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Oddálit</translation> <translation>Oddálit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="681"/> <location filename="../src/gui.cpp" line="689"/>
<source>Digital zoom</source> <source>Digital zoom</source>
<translation>Digitální zoom</translation> <translation>Digitální zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="682"/> <location filename="../src/gui.cpp" line="690"/>
<source>Zoom</source> <source>Zoom</source>
<translation>Zoom</translation> <translation>Zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="694"/> <location filename="../src/gui.cpp" line="702"/>
<source>Online maps</source> <source>Online maps</source>
<translation>Online mapy</translation> <translation>Online mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="695"/> <location filename="../src/gui.cpp" line="703"/>
<source>Online map URLs are read on program startup from the following file:</source> <source>Online map URLs are read on program startup from the following file:</source>
<translation>URL online map jsou načteny při startu programu z následujícího souboru:</translation> <translation>URL online map jsou načteny při startu programu z následujícího souboru:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="698"/> <location filename="../src/gui.cpp" line="706"/>
<source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source> <source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Formát souboru je jeden mapový záznam na řádku, kde mapový záznam sestává ze jména mapy, URL dlaždic a volitelně maximálního zoomu navzájem oddělených tabulátorem. Souřadnice dlaždice jsou v URL nahrazeny řetězci $x a $y, zoom pak řetězcem $z. Příklad:</translation> <translation>Formát souboru je jeden mapový záznam na řádku, kde mapový záznam sestává ze jména mapy, URL dlaždic a volitelně maximálního zoomu navzájem oddělených tabulátorem. Souřadnice dlaždice jsou v URL nahrazeny řetězci $x a $y, zoom pak řetězcem $z. Příklad:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="707"/> <location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source> <source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offline mapy jsou načítány při startu aplikace z následujícího adresáře:</translation> <translation>Offline mapy jsou načítány při startu aplikace z následujícího adresáře:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1179"/> <location filename="../src/gui.cpp" line="1193"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Otevřít mapový soubor</translation> <translation>Otevřít mapový soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1215"/> <location filename="../src/gui.cpp" line="1229"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Nejsou načteny žádné soubory</translation> <translation>Nejsou načteny žádné soubory</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="972"/> <location filename="../src/gui.cpp" line="980"/>
<location filename="../src/gui.cpp" line="975"/> <location filename="../src/gui.cpp" line="983"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="964"/> <location filename="../src/gui.cpp" line="972"/>
<source>Routes</source> <source>Routes</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1200"/> <location filename="../src/gui.cpp" line="1214"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Mapu nelze načíst:</translation> <translation>Mapu nelze načíst:</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/gui.cpp" line="1219"/> <location filename="../src/gui.cpp" line="1233"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n soubor</numerusform> <numerusform>%n soubor</numerusform>
@ -571,12 +638,12 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="666"/> <location filename="../src/gui.cpp" line="669"/>
<source>Next file</source> <source>Next file</source>
<translation>Následující soubor</translation> <translation>Následující soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="642"/> <location filename="../src/gui.cpp" line="645"/>
<source>Version </source> <source>Version </source>
<translation>Verze </translation> <translation>Verze </translation>
</message> </message>
@ -591,12 +658,12 @@
<translation>Exportovat do PDF...</translation> <translation>Exportovat do PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="966"/> <location filename="../src/gui.cpp" line="974"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Navigační body</translation> <translation>Navigační body</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="667"/> <location filename="../src/gui.cpp" line="670"/>
<source>Previous file</source> <source>Previous file</source>
<translation>Předchozí soubor</translation> <translation>Předchozí soubor</translation>
</message> </message>
@ -606,82 +673,82 @@
<translation>Body tras</translation> <translation>Body tras</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="669"/> <location filename="../src/gui.cpp" line="672"/>
<source>First file</source> <source>First file</source>
<translation>První soubor</translation> <translation>První soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="671"/> <location filename="../src/gui.cpp" line="674"/>
<source>Last file</source> <source>Last file</source>
<translation>Poslední soubor</translation> <translation>Poslední soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="706"/> <location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source> <source>Offline maps</source>
<translation>Offline mapy</translation> <translation>Offline mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="710"/> <location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source> <source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Očekávaná struktura je jedna mapa/atlas v samostatném podadresáři. Podporované mapové formáty jsou OziExplorer mapy a TrekBuddy mapy/atlasy (včetně tar varianty).</translation> <translation>Očekávaná struktura je jedna mapa/atlas v samostatném podadresáři. Podporované mapové formáty jsou OziExplorer mapy a TrekBuddy mapy/atlasy (včetně tar varianty).</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="715"/> <location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source> <source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>POI soubory, které se mají automaticky nahrát při startu programu jsou načítány z následujícího adresáře:</translation> <translation>POI soubory, které se mají automaticky nahrát při startu programu jsou načítány z následujícího adresáře:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="804"/> <location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source> <source>Error loading data file:</source>
<translation>Datový soubor nelze načíst:</translation> <translation>Datový soubor nelze načíst:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="807"/> <location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="832"/> <location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source> <source>Line: %1</source>
<translation>Řádka: %1</translation> <translation>Řádka: %1</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="829"/> <location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source> <source>Error loading POI file:</source>
<translation>Soubor POI nelze načíst:</translation> <translation>Soubor POI nelze načíst:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="958"/> <location filename="../src/gui.cpp" line="966"/>
<source>Name</source> <source>Name</source>
<translation>Název</translation> <translation>Název</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="962"/> <location filename="../src/gui.cpp" line="970"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Cesty</translation> <translation>Cesty</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="294"/> <location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="641"/> <location filename="../src/gui.cpp" line="644"/>
<source>About GPXSee</source> <source>About GPXSee</source>
<translation>O aplikaci GPXSee</translation> <translation>O aplikaci GPXSee</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="579"/> <location filename="../src/gui.cpp" line="582"/>
<source>Navigation</source> <source>Navigation</source>
<translation>Navigace</translation> <translation>Navigace</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="714"/> <location filename="../src/gui.cpp" line="722"/>
<source>POIs</source> <source>POIs</source>
<translation>POI body</translation> <translation>POI body</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="412"/> <location filename="../src/gui.cpp" line="412"/>
<location filename="../src/gui.cpp" line="982"/> <location filename="../src/gui.cpp" line="990"/>
<source>Distance</source> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="419"/> <location filename="../src/gui.cpp" line="418"/>
<location filename="../src/gui.cpp" line="543"/> <location filename="../src/gui.cpp" line="546"/>
<location filename="../src/gui.cpp" line="984"/> <location filename="../src/gui.cpp" line="992"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
@ -689,48 +756,48 @@
<context> <context>
<name>GraphView</name> <name>GraphView</name>
<message> <message>
<location filename="../src/graphview.cpp" line="108"/> <location filename="../src/graphview.cpp" line="109"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="111"/> <location filename="../src/graphview.cpp" line="112"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="116"/> <location filename="../src/graphview.cpp" line="117"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="119"/> <location filename="../src/graphview.cpp" line="120"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="125"/> <location filename="../src/graphview.cpp" line="126"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="128"/> <location filename="../src/graphview.cpp" line="129"/>
<source>min</source> <source>min</source>
<translation>min</translation> <translation>min</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="131"/> <location filename="../src/graphview.cpp" line="132"/>
<source>h</source> <source>h</source>
<translation>h</translation> <translation>h</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="60"/> <location filename="../src/graphview.cpp" line="61"/>
<location filename="../src/graphview.cpp" line="157"/> <location filename="../src/graphview.cpp" line="162"/>
<source>Distance</source> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="159"/> <location filename="../src/graphview.cpp" line="164"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
@ -759,6 +826,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>HeartRateGraphItem</name>
<message>
<location filename="../src/heartrategraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="21"/>
<location filename="../src/heartrategraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Průměr</translation>
</message>
</context>
<context> <context>
<name>MapList</name> <name>MapList</name>
<message> <message>
@ -1152,6 +1238,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>PowerGraphItem</name>
<message>
<location filename="../src/powergraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="21"/>
<location filename="../src/powergraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Průměr</translation>
</message>
</context>
<context> <context>
<name>RouteItem</name> <name>RouteItem</name>
<message> <message>
@ -1196,32 +1301,55 @@
<context> <context>
<name>SpeedGraph</name> <name>SpeedGraph</name>
<message> <message>
<location filename="../src/speedgraph.cpp" line="13"/> <location filename="../src/speedgraph.cpp" line="14"/>
<location filename="../src/speedgraph.h" line="14"/> <location filename="../src/speedgraph.h" line="14"/>
<source>Speed</source> <source>Speed</source>
<translation>Rychlost</translation> <translation>Rychlost</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="79"/> <location filename="../src/speedgraph.cpp" line="82"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="21"/> <location filename="../src/speedgraph.cpp" line="22"/>
<source>Average</source> <source>Average</source>
<translation>Průměr</translation> <translation>Průměr</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="23"/> <location filename="../src/speedgraph.cpp" line="24"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="82"/> <location filename="../src/speedgraph.cpp" line="85"/>
<source>mi/h</source> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
</context> </context>
<context>
<name>SpeedGraphItem</name>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="22"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Průměr</translation>
</message>
</context>
<context> <context>
<name>TemperatureGraph</name> <name>TemperatureGraph</name>
<message> <message>
@ -1246,16 +1374,44 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="81"/> <location filename="../src/temperaturegraph.cpp" line="76"/>
<source>C</source> <source>C</source>
<translation>C</translation> <translation>C</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="85"/> <location filename="../src/temperaturegraph.cpp" line="80"/>
<source>F</source> <source>F</source>
<translation>F</translation> <translation>F</translation>
</message> </message>
</context> </context>
<context>
<name>TemperatureGraphItem</name>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>C</source>
<translation>C</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>F</source>
<translation>F</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Průměr</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="26"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="28"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>TrackItem</name> <name>TrackItem</name>
<message> <message>

View File

@ -25,6 +25,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>CadenceGraphItem</name>
<message>
<location filename="../src/cadencegraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="21"/>
<location filename="../src/cadencegraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
</context>
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
@ -82,36 +101,69 @@
<translation>Höhe</translation> <translation>Höhe</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="141"/> <location filename="../src/elevationgraph.cpp" line="122"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="58"/> <location filename="../src/elevationgraph.cpp" line="57"/>
<source>Ascent</source> <source>Ascent</source>
<translation>Steigung</translation> <translation>Steigung</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="60"/> <location filename="../src/elevationgraph.cpp" line="59"/>
<source>Descent</source> <source>Descent</source>
<translation>Gefälle</translation> <translation>Gefälle</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="64"/> <location filename="../src/elevationgraph.cpp" line="63"/>
<source>Minimum</source> <source>Minimum</source>
<translation>Minimum</translation> <translation>Minimum</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="144"/> <location filename="../src/elevationgraph.cpp" line="125"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="62"/> <location filename="../src/elevationgraph.cpp" line="61"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>ElevationGraphItem</name>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>m</source>
<translation>m</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="28"/>
<source>Ascent</source>
<translation>Steigung</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="30"/>
<source>Descent</source>
<translation>Gefälle</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="32"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="34"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>ExportDialog</name> <name>ExportDialog</name>
<message> <message>
@ -218,24 +270,24 @@
<context> <context>
<name>Format</name> <name>Format</name>
<message> <message>
<location filename="../src/format.cpp" line="22"/> <location filename="../src/format.cpp" line="26"/>
<location filename="../src/format.cpp" line="43"/> <location filename="../src/format.cpp" line="47"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="25"/> <location filename="../src/format.cpp" line="29"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="29"/> <location filename="../src/format.cpp" line="33"/>
<location filename="../src/format.cpp" line="40"/> <location filename="../src/format.cpp" line="44"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="32"/> <location filename="../src/format.cpp" line="36"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
@ -243,17 +295,17 @@
<context> <context>
<name>GUI</name> <name>GUI</name>
<message> <message>
<location filename="../src/gui.cpp" line="645"/> <location filename="../src/gui.cpp" line="648"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source> <source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>GPXSee wird unter der GNU General Public License version 3 vertrieben. Mehr Informationen zu GPXSee auf der Homepage </translation> <translation>GPXSee wird unter der GNU General Public License version 3 vertrieben. Mehr Informationen zu GPXSee auf der Homepage </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="725"/> <location filename="../src/gui.cpp" line="733"/>
<source>Open file</source> <source>Open file</source>
<translation>Datei öffnen</translation> <translation>Datei öffnen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="815"/> <location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source> <source>Open POI file</source>
<translation>POI Datei öffnen</translation> <translation>POI Datei öffnen</translation>
</message> </message>
@ -264,8 +316,8 @@
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="291"/> <location filename="../src/gui.cpp" line="291"/>
<location filename="../src/gui.cpp" line="662"/> <location filename="../src/gui.cpp" line="665"/>
<location filename="../src/gui.cpp" line="663"/> <location filename="../src/gui.cpp" line="666"/>
<source>Keyboard controls</source> <source>Keyboard controls</source>
<translation>Tastaturkürzel</translation> <translation>Tastaturkürzel</translation>
</message> </message>
@ -280,20 +332,20 @@
<translation>Neu Laden</translation> <translation>Neu Laden</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="574"/> <location filename="../src/gui.cpp" line="577"/>
<source>Show</source> <source>Show</source>
<translation>Ansicht</translation> <translation>Ansicht</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="491"/> <location filename="../src/gui.cpp" line="493"/>
<location filename="../src/gui.cpp" line="568"/> <location filename="../src/gui.cpp" line="571"/>
<source>File</source> <source>File</source>
<translation>Datei</translation> <translation>Datei</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="289"/> <location filename="../src/gui.cpp" line="289"/>
<location filename="../src/gui.cpp" line="691"/> <location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="692"/> <location filename="../src/gui.cpp" line="700"/>
<source>Data sources</source> <source>Data sources</source>
<translation>Datenquellen</translation> <translation>Datenquellen</translation>
</message> </message>
@ -345,7 +397,7 @@
<message> <message>
<location filename="../src/gui.cpp" line="367"/> <location filename="../src/gui.cpp" line="367"/>
<location filename="../src/gui.cpp" line="371"/> <location filename="../src/gui.cpp" line="371"/>
<location filename="../src/gui.cpp" line="674"/> <location filename="../src/gui.cpp" line="682"/>
<source>Next map</source> <source>Next map</source>
<translation>Nächste Karte</translation> <translation>Nächste Karte</translation>
</message> </message>
@ -375,188 +427,203 @@
<translation>Graphen anzeigen</translation> <translation>Graphen anzeigen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="426"/> <location filename="../src/gui.cpp" line="424"/>
<source>Show grid</source> <source>Show grid</source>
<translation>Gitter anzeigen</translation> <translation>Gitter anzeigen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="432"/> <location filename="../src/gui.cpp" line="428"/>
<source>Show slider info</source>
<translation>Schieberinfo anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="434"/>
<source>Show toolbars</source> <source>Show toolbars</source>
<translation>Toolbars anzeigen</translation> <translation>Toolbars anzeigen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="438"/> <location filename="../src/gui.cpp" line="440"/>
<source>Total time</source> <source>Total time</source>
<translation>Gesamtzeit</translation> <translation>Gesamtzeit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="443"/> <location filename="../src/gui.cpp" line="445"/>
<location filename="../src/gui.cpp" line="986"/> <location filename="../src/gui.cpp" line="994"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Bewegungszeit</translation> <translation>Bewegungszeit</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="450"/> <location filename="../src/gui.cpp" line="452"/>
<source>Metric</source> <source>Metric</source>
<translation>Metrisch</translation> <translation>Metrisch</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="455"/> <location filename="../src/gui.cpp" line="457"/>
<source>Imperial</source> <source>Imperial</source>
<translation>Imperial</translation> <translation>Imperial</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="461"/> <location filename="../src/gui.cpp" line="463"/>
<source>Fullscreen mode</source> <source>Fullscreen mode</source>
<translation>Vollbildmodus</translation> <translation>Vollbildmodus</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="467"/> <location filename="../src/gui.cpp" line="469"/>
<source>Options...</source> <source>Options...</source>
<translation>Einstellungen...</translation> <translation>Einstellungen...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="473"/> <location filename="../src/gui.cpp" line="475"/>
<source>Next</source> <source>Next</source>
<translation>Nächste</translation> <translation>Nächste</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="476"/> <location filename="../src/gui.cpp" line="478"/>
<source>Previous</source> <source>Previous</source>
<translation>Vorherige</translation> <translation>Vorherige</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="480"/> <location filename="../src/gui.cpp" line="482"/>
<source>Last</source> <source>Last</source>
<translation>Letzte</translation> <translation>Letzte</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="483"/> <location filename="../src/gui.cpp" line="485"/>
<source>First</source> <source>First</source>
<translation>Erste</translation> <translation>Erste</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="505"/> <location filename="../src/gui.cpp" line="507"/>
<source>Map</source> <source>Map</source>
<translation>Karte</translation> <translation>Karte</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="513"/> <location filename="../src/gui.cpp" line="515"/>
<source>Graph</source> <source>Graph</source>
<translation>Graph</translation> <translation>Graph</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="521"/> <location filename="../src/gui.cpp" line="524"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="522"/> <location filename="../src/gui.cpp" line="525"/>
<source>POI files</source> <source>POI files</source>
<translation>POI-Dateien</translation> <translation>POI-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="533"/> <location filename="../src/gui.cpp" line="536"/>
<source>Data</source> <source>Data</source>
<translation>Daten</translation> <translation>Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="534"/> <location filename="../src/gui.cpp" line="537"/>
<source>Display</source> <source>Display</source>
<translation>Anzeige</translation> <translation>Anzeige</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="542"/> <location filename="../src/gui.cpp" line="545"/>
<source>Settings</source> <source>Settings</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="546"/> <location filename="../src/gui.cpp" line="549"/>
<source>Units</source> <source>Units</source>
<translation>Einheiten</translation> <translation>Einheiten</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="555"/> <location filename="../src/gui.cpp" line="558"/>
<source>Help</source> <source>Help</source>
<translation>Hilfe</translation> <translation>Hilfe</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="672"/> <location filename="../src/gui.cpp" line="675"/>
<source>Append file</source> <source>Append file</source>
<translation>An Datei anhängen</translation> <translation>An Datei anhängen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="673"/> <location filename="../src/gui.cpp" line="676"/>
<source>Next/Previous</source> <source>Next/Previous</source>
<translation>Nächste/Vorherige</translation> <translation>Nächste/Vorherige</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="676"/> <location filename="../src/gui.cpp" line="678"/>
<source>Toggle graph type</source>
<translation>Graphtyp umschalten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<source>Toggle time type</source>
<translation>Zeittyp umschalten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<source>Previous map</source> <source>Previous map</source>
<translation>Vorherige Karte</translation> <translation>Vorherige Karte</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="677"/> <location filename="../src/gui.cpp" line="685"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Hineinzoomen</translation> <translation>Hineinzoomen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="679"/> <location filename="../src/gui.cpp" line="687"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Herauszoomen</translation> <translation>Herauszoomen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="681"/> <location filename="../src/gui.cpp" line="689"/>
<source>Digital zoom</source> <source>Digital zoom</source>
<translation>Digitaler Zoom</translation> <translation>Digitaler Zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="682"/> <location filename="../src/gui.cpp" line="690"/>
<source>Zoom</source> <source>Zoom</source>
<translation>Zoom</translation> <translation>Zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="694"/> <location filename="../src/gui.cpp" line="702"/>
<source>Online maps</source> <source>Online maps</source>
<translation>Onlinekarten</translation> <translation>Onlinekarten</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="695"/> <location filename="../src/gui.cpp" line="703"/>
<source>Online map URLs are read on program startup from the following file:</source> <source>Online map URLs are read on program startup from the following file:</source>
<translation>Onlinekarten URLs werden zu Programmstart aus der folgenden Datei gelesen:</translation> <translation>Onlinekarten URLs werden zu Programmstart aus der folgenden Datei gelesen:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="698"/> <location filename="../src/gui.cpp" line="706"/>
<source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source> <source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Das Dateiformat ist eine Karte pro Linie. Jede Linie besteht aus dem Kartenname, der Tiles URL und wahlweise dem maximalen Zoomlevel getrennt durch ein TAB Zeichen. X und Y Koordinate einer Tile werden in der URL durch $x und $y ersetzt und das Zoomlevel durch $z. Ein Beispiel einer Kartendatei könnte so aussehen:</translation> <translation>Das Dateiformat ist eine Karte pro Linie. Jede Linie besteht aus dem Kartenname, der Tiles URL und wahlweise dem maximalen Zoomlevel getrennt durch ein TAB Zeichen. X und Y Koordinate einer Tile werden in der URL durch $x und $y ersetzt und das Zoomlevel durch $z. Ein Beispiel einer Kartendatei könnte so aussehen:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="706"/> <location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source> <source>Offline maps</source>
<translation>Offlinekarten</translation> <translation>Offlinekarten</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="707"/> <location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source> <source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offlinekarten werden zu Programmstart aus dem folgenden Verzeichnis geladen:</translation> <translation>Offlinekarten werden zu Programmstart aus dem folgenden Verzeichnis geladen:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1179"/> <location filename="../src/gui.cpp" line="1193"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Karte Datei öffnen</translation> <translation>Karte Datei öffnen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1200"/> <location filename="../src/gui.cpp" line="1214"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Fehler beim Laden der Karte-Datei:</translation> <translation>Fehler beim Laden der Karte-Datei:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1215"/> <location filename="../src/gui.cpp" line="1229"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Keine Dateien geladen</translation> <translation>Keine Dateien geladen</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/gui.cpp" line="1219"/> <location filename="../src/gui.cpp" line="1233"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n Datei</numerusform> <numerusform>%n Datei</numerusform>
@ -564,23 +631,23 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="972"/> <location filename="../src/gui.cpp" line="980"/>
<location filename="../src/gui.cpp" line="975"/> <location filename="../src/gui.cpp" line="983"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="964"/> <location filename="../src/gui.cpp" line="972"/>
<source>Routes</source> <source>Routes</source>
<translation>Routen</translation> <translation>Routen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="666"/> <location filename="../src/gui.cpp" line="669"/>
<source>Next file</source> <source>Next file</source>
<translation>Nächste Datei</translation> <translation>Nächste Datei</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="642"/> <location filename="../src/gui.cpp" line="645"/>
<source>Version </source> <source>Version </source>
<translation>Version </translation> <translation>Version </translation>
</message> </message>
@ -595,12 +662,12 @@
<translation>Als PDF exportieren...</translation> <translation>Als PDF exportieren...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="966"/> <location filename="../src/gui.cpp" line="974"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Wegpunkte</translation> <translation>Wegpunkte</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="667"/> <location filename="../src/gui.cpp" line="670"/>
<source>Previous file</source> <source>Previous file</source>
<translation>Vorherige Datei</translation> <translation>Vorherige Datei</translation>
</message> </message>
@ -610,77 +677,77 @@
<translation>Routen Wegpunkte</translation> <translation>Routen Wegpunkte</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="669"/> <location filename="../src/gui.cpp" line="672"/>
<source>First file</source> <source>First file</source>
<translation>Erste Datei</translation> <translation>Erste Datei</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="671"/> <location filename="../src/gui.cpp" line="674"/>
<source>Last file</source> <source>Last file</source>
<translation>Letzte Datei</translation> <translation>Letzte Datei</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="710"/> <location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source> <source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Die erwartete Struktur ist eine Karte/ein Atlas pro Unterverzeichnis. Unterstützte Kartenformate sind OziExplorer Karten und TrekBuddy Karten/Atlanten (mit oder ohne tar Kompression).</translation> <translation>Die erwartete Struktur ist eine Karte/ein Atlas pro Unterverzeichnis. Unterstützte Kartenformate sind OziExplorer Karten und TrekBuddy Karten/Atlanten (mit oder ohne tar Kompression).</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="715"/> <location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source> <source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>Damit GPXSee zu Programmstart automatisch eine POI-Datei lädt, fügen Sie diese zu folgendem Verzeichnis hinzu:</translation> <translation>Damit GPXSee zu Programmstart automatisch eine POI-Datei lädt, fügen Sie diese zu folgendem Verzeichnis hinzu:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="804"/> <location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source> <source>Error loading data file:</source>
<translation>Fehler beim Laden der Datei:</translation> <translation>Fehler beim Laden der Datei:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="807"/> <location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="832"/> <location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source> <source>Line: %1</source>
<translation>Linie: %1</translation> <translation>Linie: %1</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="829"/> <location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source> <source>Error loading POI file:</source>
<translation>Fehler beim Laden der POI-Datei:</translation> <translation>Fehler beim Laden der POI-Datei:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="958"/> <location filename="../src/gui.cpp" line="966"/>
<source>Name</source> <source>Name</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="962"/> <location filename="../src/gui.cpp" line="970"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Strecken</translation> <translation>Strecken</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="294"/> <location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="641"/> <location filename="../src/gui.cpp" line="644"/>
<source>About GPXSee</source> <source>About GPXSee</source>
<translation>Über GPXSee</translation> <translation>Über GPXSee</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="579"/> <location filename="../src/gui.cpp" line="582"/>
<source>Navigation</source> <source>Navigation</source>
<translation>Navigation</translation> <translation>Navigation</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="714"/> <location filename="../src/gui.cpp" line="722"/>
<source>POIs</source> <source>POIs</source>
<translation>POIs</translation> <translation>POIs</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="412"/> <location filename="../src/gui.cpp" line="412"/>
<location filename="../src/gui.cpp" line="982"/> <location filename="../src/gui.cpp" line="990"/>
<source>Distance</source> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="419"/> <location filename="../src/gui.cpp" line="418"/>
<location filename="../src/gui.cpp" line="543"/> <location filename="../src/gui.cpp" line="546"/>
<location filename="../src/gui.cpp" line="984"/> <location filename="../src/gui.cpp" line="992"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
@ -688,48 +755,48 @@
<context> <context>
<name>GraphView</name> <name>GraphView</name>
<message> <message>
<location filename="../src/graphview.cpp" line="108"/> <location filename="../src/graphview.cpp" line="109"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="111"/> <location filename="../src/graphview.cpp" line="112"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="116"/> <location filename="../src/graphview.cpp" line="117"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="119"/> <location filename="../src/graphview.cpp" line="120"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="125"/> <location filename="../src/graphview.cpp" line="126"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="128"/> <location filename="../src/graphview.cpp" line="129"/>
<source>min</source> <source>min</source>
<translation>min</translation> <translation>min</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="131"/> <location filename="../src/graphview.cpp" line="132"/>
<source>h</source> <source>h</source>
<translation>tim</translation> <translation>tim</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="60"/> <location filename="../src/graphview.cpp" line="61"/>
<location filename="../src/graphview.cpp" line="157"/> <location filename="../src/graphview.cpp" line="162"/>
<source>Distance</source> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="159"/> <location filename="../src/graphview.cpp" line="164"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
@ -758,6 +825,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>HeartRateGraphItem</name>
<message>
<location filename="../src/heartrategraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="21"/>
<location filename="../src/heartrategraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
</context>
<context> <context>
<name>MapList</name> <name>MapList</name>
<message> <message>
@ -1151,6 +1237,25 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>PowerGraphItem</name>
<message>
<location filename="../src/powergraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="21"/>
<location filename="../src/powergraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
</context>
<context> <context>
<name>RouteItem</name> <name>RouteItem</name>
<message> <message>
@ -1195,32 +1300,55 @@
<context> <context>
<name>SpeedGraph</name> <name>SpeedGraph</name>
<message> <message>
<location filename="../src/speedgraph.cpp" line="13"/> <location filename="../src/speedgraph.cpp" line="14"/>
<location filename="../src/speedgraph.h" line="14"/> <location filename="../src/speedgraph.h" line="14"/>
<source>Speed</source> <source>Speed</source>
<translation>Geschwindigkeit</translation> <translation>Geschwindigkeit</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="79"/> <location filename="../src/speedgraph.cpp" line="82"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="21"/> <location filename="../src/speedgraph.cpp" line="22"/>
<source>Average</source> <source>Average</source>
<translation>Durchschnitt</translation> <translation>Durchschnitt</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="23"/> <location filename="../src/speedgraph.cpp" line="24"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="82"/> <location filename="../src/speedgraph.cpp" line="85"/>
<source>mi/h</source> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
</context> </context>
<context>
<name>SpeedGraphItem</name>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="22"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
</context>
<context> <context>
<name>TemperatureGraph</name> <name>TemperatureGraph</name>
<message> <message>
@ -1245,16 +1373,44 @@
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="81"/> <location filename="../src/temperaturegraph.cpp" line="76"/>
<source>C</source> <source>C</source>
<translation>C</translation> <translation>C</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="85"/> <location filename="../src/temperaturegraph.cpp" line="80"/>
<source>F</source> <source>F</source>
<translation>F</translation> <translation>F</translation>
</message> </message>
</context> </context>
<context>
<name>TemperatureGraphItem</name>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>C</source>
<translation>C</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>F</source>
<translation>F</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="26"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="28"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>TrackItem</name> <name>TrackItem</name>
<message> <message>

View File

@ -22,7 +22,26 @@
<message> <message>
<location filename="../src/cadencegraph.cpp" line="21"/> <location filename="../src/cadencegraph.cpp" line="21"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximal</translation> <translation>Maximum</translation>
</message>
</context>
<context>
<name>CadenceGraphItem</name>
<message>
<location filename="../src/cadencegraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="21"/>
<location filename="../src/cadencegraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/cadencegraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Medel</translation>
</message> </message>
</context> </context>
<context> <context>
@ -82,36 +101,69 @@
<translation>Höjd</translation> <translation>Höjd</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="141"/> <location filename="../src/elevationgraph.cpp" line="122"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="58"/> <location filename="../src/elevationgraph.cpp" line="57"/>
<source>Ascent</source> <source>Ascent</source>
<translation>Stigning</translation> <translation>Stigning</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="60"/> <location filename="../src/elevationgraph.cpp" line="59"/>
<source>Descent</source> <source>Descent</source>
<translation>Nedstigning</translation> <translation>Nedstigning</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="64"/> <location filename="../src/elevationgraph.cpp" line="63"/>
<source>Minimum</source> <source>Minimum</source>
<translation>Minimum</translation> <translation>Minimum</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="144"/> <location filename="../src/elevationgraph.cpp" line="125"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/elevationgraph.cpp" line="62"/> <location filename="../src/elevationgraph.cpp" line="61"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maximum</translation> <translation>Maximum</translation>
</message> </message>
</context> </context>
<context>
<name>ElevationGraphItem</name>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>m</source>
<translation>m</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="26"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="28"/>
<source>Ascent</source>
<translation>Stigning</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="30"/>
<source>Descent</source>
<translation>Nedstigning</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="32"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/elevationgraphitem.cpp" line="34"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>ExportDialog</name> <name>ExportDialog</name>
<message> <message>
@ -218,24 +270,24 @@
<context> <context>
<name>Format</name> <name>Format</name>
<message> <message>
<location filename="../src/format.cpp" line="22"/> <location filename="../src/format.cpp" line="26"/>
<location filename="../src/format.cpp" line="43"/> <location filename="../src/format.cpp" line="47"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="25"/> <location filename="../src/format.cpp" line="29"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="29"/> <location filename="../src/format.cpp" line="33"/>
<location filename="../src/format.cpp" line="40"/> <location filename="../src/format.cpp" line="44"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/format.cpp" line="32"/> <location filename="../src/format.cpp" line="36"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
@ -243,17 +295,17 @@
<context> <context>
<name>GUI</name> <name>GUI</name>
<message> <message>
<location filename="../src/gui.cpp" line="645"/> <location filename="../src/gui.cpp" line="648"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source> <source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>GPXSee distribueras under vilkoren för GNU General Public License version 3. För mer info om GPXSee, besök hemsidan </translation> <translation>GPXSee distribueras under vilkoren för GNU General Public License version 3. För mer info om GPXSee, besök hemsidan </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="725"/> <location filename="../src/gui.cpp" line="733"/>
<source>Open file</source> <source>Open file</source>
<translation>Öppna fil</translation> <translation>Öppna fil</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="815"/> <location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source> <source>Open POI file</source>
<translation>Öppna POI-fil</translation> <translation>Öppna POI-fil</translation>
</message> </message>
@ -264,8 +316,8 @@
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="291"/> <location filename="../src/gui.cpp" line="291"/>
<location filename="../src/gui.cpp" line="662"/> <location filename="../src/gui.cpp" line="665"/>
<location filename="../src/gui.cpp" line="663"/> <location filename="../src/gui.cpp" line="666"/>
<source>Keyboard controls</source> <source>Keyboard controls</source>
<translation>Snabbtangenter</translation> <translation>Snabbtangenter</translation>
</message> </message>
@ -280,20 +332,20 @@
<translation>Uppdatera</translation> <translation>Uppdatera</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="574"/> <location filename="../src/gui.cpp" line="577"/>
<source>Show</source> <source>Show</source>
<translation>Visa</translation> <translation>Visa</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="491"/> <location filename="../src/gui.cpp" line="493"/>
<location filename="../src/gui.cpp" line="568"/> <location filename="../src/gui.cpp" line="571"/>
<source>File</source> <source>File</source>
<translation>Arkiv</translation> <translation>Arkiv</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="289"/> <location filename="../src/gui.cpp" line="289"/>
<location filename="../src/gui.cpp" line="691"/> <location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="692"/> <location filename="../src/gui.cpp" line="700"/>
<source>Data sources</source> <source>Data sources</source>
<translation>Datakällor</translation> <translation>Datakällor</translation>
</message> </message>
@ -345,7 +397,7 @@
<message> <message>
<location filename="../src/gui.cpp" line="367"/> <location filename="../src/gui.cpp" line="367"/>
<location filename="../src/gui.cpp" line="371"/> <location filename="../src/gui.cpp" line="371"/>
<location filename="../src/gui.cpp" line="674"/> <location filename="../src/gui.cpp" line="682"/>
<source>Next map</source> <source>Next map</source>
<translation>Nästa karta</translation> <translation>Nästa karta</translation>
</message> </message>
@ -375,188 +427,203 @@
<translation>Visa diagram</translation> <translation>Visa diagram</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="426"/> <location filename="../src/gui.cpp" line="424"/>
<source>Show grid</source> <source>Show grid</source>
<translation>Visa stödlinjer</translation> <translation>Visa stödlinjer</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="432"/> <location filename="../src/gui.cpp" line="428"/>
<source>Show slider info</source>
<translation>Visa reglageinfo</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="434"/>
<source>Show toolbars</source> <source>Show toolbars</source>
<translation>Visa verktygsfält</translation> <translation>Visa verktygsfält</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="438"/> <location filename="../src/gui.cpp" line="440"/>
<source>Total time</source> <source>Total time</source>
<translation>Total tid</translation> <translation>Total tid</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="443"/> <location filename="../src/gui.cpp" line="445"/>
<location filename="../src/gui.cpp" line="986"/> <location filename="../src/gui.cpp" line="994"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Förflyttningstid</translation> <translation>Förflyttningstid</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="450"/> <location filename="../src/gui.cpp" line="452"/>
<source>Metric</source> <source>Metric</source>
<translation>Meter</translation> <translation>Meter</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="455"/> <location filename="../src/gui.cpp" line="457"/>
<source>Imperial</source> <source>Imperial</source>
<translation>Imperial</translation> <translation>Imperial</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="461"/> <location filename="../src/gui.cpp" line="463"/>
<source>Fullscreen mode</source> <source>Fullscreen mode</source>
<translation>Helskärmsläge</translation> <translation>Helskärmsläge</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="467"/> <location filename="../src/gui.cpp" line="469"/>
<source>Options...</source> <source>Options...</source>
<translation>Alternativ...</translation> <translation>Alternativ...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="473"/> <location filename="../src/gui.cpp" line="475"/>
<source>Next</source> <source>Next</source>
<translation>Nästa</translation> <translation>Nästa</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="476"/> <location filename="../src/gui.cpp" line="478"/>
<source>Previous</source> <source>Previous</source>
<translation>Föregående</translation> <translation>Föregående</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="480"/> <location filename="../src/gui.cpp" line="482"/>
<source>Last</source> <source>Last</source>
<translation>Sista</translation> <translation>Sista</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="483"/> <location filename="../src/gui.cpp" line="485"/>
<source>First</source> <source>First</source>
<translation>Första</translation> <translation>Första</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="505"/> <location filename="../src/gui.cpp" line="507"/>
<source>Map</source> <source>Map</source>
<translation>Karta</translation> <translation>Karta</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="513"/> <location filename="../src/gui.cpp" line="515"/>
<source>Graph</source> <source>Graph</source>
<translation>Diagram</translation> <translation>Diagram</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="521"/> <location filename="../src/gui.cpp" line="524"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="522"/> <location filename="../src/gui.cpp" line="525"/>
<source>POI files</source> <source>POI files</source>
<translation>POI-filer</translation> <translation>POI-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="533"/> <location filename="../src/gui.cpp" line="536"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="534"/> <location filename="../src/gui.cpp" line="537"/>
<source>Display</source> <source>Display</source>
<translation>Visa</translation> <translation>Visa</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="542"/> <location filename="../src/gui.cpp" line="545"/>
<source>Settings</source> <source>Settings</source>
<translation>Inställningar</translation> <translation>Inställningar</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="546"/> <location filename="../src/gui.cpp" line="549"/>
<source>Units</source> <source>Units</source>
<translation>Enhet</translation> <translation>Enhet</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="555"/> <location filename="../src/gui.cpp" line="558"/>
<source>Help</source> <source>Help</source>
<translation>Hjälp</translation> <translation>Hjälp</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="672"/> <location filename="../src/gui.cpp" line="675"/>
<source>Append file</source> <source>Append file</source>
<translation>Lägg till fil</translation> <translation>Lägg till fil</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="673"/> <location filename="../src/gui.cpp" line="676"/>
<source>Next/Previous</source> <source>Next/Previous</source>
<translation>Nästa/Föregående</translation> <translation>Nästa/Föregående</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="676"/> <location filename="../src/gui.cpp" line="678"/>
<source>Toggle graph type</source>
<translation>Växla diagramtyp</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<source>Toggle time type</source>
<translation>Växla tidstyp</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<source>Previous map</source> <source>Previous map</source>
<translation>Föregående karta</translation> <translation>Föregående karta</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="677"/> <location filename="../src/gui.cpp" line="685"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Zooma in</translation> <translation>Zooma in</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="679"/> <location filename="../src/gui.cpp" line="687"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Zooma ut</translation> <translation>Zooma ut</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="681"/> <location filename="../src/gui.cpp" line="689"/>
<source>Digital zoom</source> <source>Digital zoom</source>
<translation>Digital zoom</translation> <translation>Digital zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="682"/> <location filename="../src/gui.cpp" line="690"/>
<source>Zoom</source> <source>Zoom</source>
<translation>Zoom</translation> <translation>Zoom</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="694"/> <location filename="../src/gui.cpp" line="702"/>
<source>Online maps</source> <source>Online maps</source>
<translation>Online-kartor</translation> <translation>Online-kartor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="695"/> <location filename="../src/gui.cpp" line="703"/>
<source>Online map URLs are read on program startup from the following file:</source> <source>Online map URLs are read on program startup from the following file:</source>
<translation>Online-kartors URL:er, läses från följande fil vid programstart:</translation> <translation>Online-kartors URL:er, läses från följande fil vid programstart:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="698"/> <location filename="../src/gui.cpp" line="706"/>
<source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source> <source>The file format is one map entry per line, consisting of the map name, tiles URL and an optional maximal zoom level delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Filformatet är en kartpost per rad, bestående av kartans namn, webbadress och maximal zoomnivå om tillämpligt, Kartrutans X- och Y-koordinater ersätts med $x och $y, i webbadressen och zoomnivån ersätts med $z. Ett exempel en kartfil kan se ut här:</translation> <translation>Filformatet är en kartpost per rad, bestående av kartans namn, webbadress och maximal zoomnivå om tillämpligt, Kartrutans X- och Y-koordinater ersätts med $x och $y, i webbadressen och zoomnivån ersätts med $z. Ett exempel en kartfil kan se ut här:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="706"/> <location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source> <source>Offline maps</source>
<translation>Offline-kartor</translation> <translation>Offline-kartor</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="707"/> <location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source> <source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offline-kartor läses in från följande mapp vid programstart:</translation> <translation>Offline-kartor läses in från följande mapp vid programstart:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1179"/> <location filename="../src/gui.cpp" line="1193"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Öppna kartfil</translation> <translation>Öppna kartfil</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1200"/> <location filename="../src/gui.cpp" line="1214"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Fel vid inläsning av karta:</translation> <translation>Fel vid inläsning av karta:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="1215"/> <location filename="../src/gui.cpp" line="1229"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Inga filer inlästa</translation> <translation>Inga filer inlästa</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/gui.cpp" line="1219"/> <location filename="../src/gui.cpp" line="1233"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n filer</numerusform> <numerusform>%n filer</numerusform>
@ -564,23 +631,23 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="972"/> <location filename="../src/gui.cpp" line="980"/>
<location filename="../src/gui.cpp" line="975"/> <location filename="../src/gui.cpp" line="983"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="964"/> <location filename="../src/gui.cpp" line="972"/>
<source>Routes</source> <source>Routes</source>
<translation>Rutter</translation> <translation>Rutter</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="666"/> <location filename="../src/gui.cpp" line="669"/>
<source>Next file</source> <source>Next file</source>
<translation>Nästa fil</translation> <translation>Nästa fil</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="642"/> <location filename="../src/gui.cpp" line="645"/>
<source>Version </source> <source>Version </source>
<translation>Version </translation> <translation>Version </translation>
</message> </message>
@ -595,12 +662,12 @@
<translation>Exportera till PDF...</translation> <translation>Exportera till PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="966"/> <location filename="../src/gui.cpp" line="974"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Vägpunkter</translation> <translation>Vägpunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="667"/> <location filename="../src/gui.cpp" line="670"/>
<source>Previous file</source> <source>Previous file</source>
<translation>Föregående fil</translation> <translation>Föregående fil</translation>
</message> </message>
@ -610,77 +677,77 @@
<translation>Ruttvägpunkter</translation> <translation>Ruttvägpunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="669"/> <location filename="../src/gui.cpp" line="672"/>
<source>First file</source> <source>First file</source>
<translation>Första filen</translation> <translation>Första filen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="671"/> <location filename="../src/gui.cpp" line="674"/>
<source>Last file</source> <source>Last file</source>
<translation>Sista filen</translation> <translation>Sista filen</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="710"/> <location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source> <source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Den förväntade strukturen är en karta/atlas i en separat undermapp. Kartformat som stöds är OziExplorer kartor och TrekBuddy-kartor/-kartsamlingar (tarerade och icke tarerade).</translation> <translation>Den förväntade strukturen är en karta/atlas i en separat undermapp. Kartformat som stöds är OziExplorer kartor och TrekBuddy-kartor/-kartsamlingar (tarerade och icke tarerade).</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="715"/> <location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source> <source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>För att GPXSee skall läsa in en POI-fil automatiskt vid programstart, läggs filen i följande mapp:</translation> <translation>För att GPXSee skall läsa in en POI-fil automatiskt vid programstart, läggs filen i följande mapp:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="804"/> <location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source> <source>Error loading data file:</source>
<translation>Fel vid inläsning av datafil:</translation> <translation>Fel vid inläsning av datafil:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="807"/> <location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="832"/> <location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source> <source>Line: %1</source>
<translation>Rad: %1</translation> <translation>Rad: %1</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="829"/> <location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source> <source>Error loading POI file:</source>
<translation>Fel vid inläsning av POI-fil:</translation> <translation>Fel vid inläsning av POI-fil:</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="958"/> <location filename="../src/gui.cpp" line="966"/>
<source>Name</source> <source>Name</source>
<translation>Namn</translation> <translation>Namn</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="962"/> <location filename="../src/gui.cpp" line="970"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Spår</translation> <translation>Spår</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="294"/> <location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="641"/> <location filename="../src/gui.cpp" line="644"/>
<source>About GPXSee</source> <source>About GPXSee</source>
<translation>Om GPXSee</translation> <translation>Om GPXSee</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="579"/> <location filename="../src/gui.cpp" line="582"/>
<source>Navigation</source> <source>Navigation</source>
<translation>Navigation</translation> <translation>Navigation</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="714"/> <location filename="../src/gui.cpp" line="722"/>
<source>POIs</source> <source>POIs</source>
<translation>POI:er</translation> <translation>POI:er</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="412"/> <location filename="../src/gui.cpp" line="412"/>
<location filename="../src/gui.cpp" line="982"/> <location filename="../src/gui.cpp" line="990"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/gui.cpp" line="419"/> <location filename="../src/gui.cpp" line="418"/>
<location filename="../src/gui.cpp" line="543"/> <location filename="../src/gui.cpp" line="546"/>
<location filename="../src/gui.cpp" line="984"/> <location filename="../src/gui.cpp" line="992"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -688,48 +755,48 @@
<context> <context>
<name>GraphView</name> <name>GraphView</name>
<message> <message>
<location filename="../src/graphview.cpp" line="108"/> <location filename="../src/graphview.cpp" line="109"/>
<source>m</source> <source>m</source>
<translation>m</translation> <translation>m</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="111"/> <location filename="../src/graphview.cpp" line="112"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="116"/> <location filename="../src/graphview.cpp" line="117"/>
<source>ft</source> <source>ft</source>
<translation>ft</translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="119"/> <location filename="../src/graphview.cpp" line="120"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="125"/> <location filename="../src/graphview.cpp" line="126"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="128"/> <location filename="../src/graphview.cpp" line="129"/>
<source>min</source> <source>min</source>
<translation>min</translation> <translation>min</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="131"/> <location filename="../src/graphview.cpp" line="132"/>
<source>h</source> <source>h</source>
<translation>tim</translation> <translation>tim</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="60"/> <location filename="../src/graphview.cpp" line="61"/>
<location filename="../src/graphview.cpp" line="157"/> <location filename="../src/graphview.cpp" line="162"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/graphview.cpp" line="159"/> <location filename="../src/graphview.cpp" line="164"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -758,6 +825,25 @@
<translation>Max</translation> <translation>Max</translation>
</message> </message>
</context> </context>
<context>
<name>HeartRateGraphItem</name>
<message>
<location filename="../src/heartrategraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="21"/>
<location filename="../src/heartrategraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/heartrategraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Medel</translation>
</message>
</context>
<context> <context>
<name>MapList</name> <name>MapList</name>
<message> <message>
@ -1151,6 +1237,25 @@
<translation>Max</translation> <translation>Max</translation>
</message> </message>
</context> </context>
<context>
<name>PowerGraphItem</name>
<message>
<location filename="../src/powergraphitem.cpp" line="20"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="21"/>
<location filename="../src/powergraphitem.cpp" line="23"/>
<source>1/min</source>
<translation>1/min</translation>
</message>
<message>
<location filename="../src/powergraphitem.cpp" line="22"/>
<source>Average</source>
<translation>Medel</translation>
</message>
</context>
<context> <context>
<name>RouteItem</name> <name>RouteItem</name>
<message> <message>
@ -1195,32 +1300,55 @@
<context> <context>
<name>SpeedGraph</name> <name>SpeedGraph</name>
<message> <message>
<location filename="../src/speedgraph.cpp" line="13"/> <location filename="../src/speedgraph.cpp" line="14"/>
<location filename="../src/speedgraph.h" line="14"/> <location filename="../src/speedgraph.h" line="14"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighet</translation> <translation>Hastighet</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="79"/> <location filename="../src/speedgraph.cpp" line="82"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="21"/> <location filename="../src/speedgraph.cpp" line="22"/>
<source>Average</source> <source>Average</source>
<translation>Medel</translation> <translation>Medel</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="23"/> <location filename="../src/speedgraph.cpp" line="24"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Max</translation> <translation>Max</translation>
</message> </message>
<message> <message>
<location filename="../src/speedgraph.cpp" line="82"/> <location filename="../src/speedgraph.cpp" line="85"/>
<source>mi/h</source> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
</context> </context>
<context>
<name>SpeedGraphItem</name>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="20"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="22"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/speedgraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Medel</translation>
</message>
</context>
<context> <context>
<name>TemperatureGraph</name> <name>TemperatureGraph</name>
<message> <message>
@ -1245,16 +1373,44 @@
<translation>Max</translation> <translation>Max</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="81"/> <location filename="../src/temperaturegraph.cpp" line="76"/>
<source>C</source> <source>C</source>
<translation>C</translation> <translation>C</translation>
</message> </message>
<message> <message>
<location filename="../src/temperaturegraph.cpp" line="85"/> <location filename="../src/temperaturegraph.cpp" line="80"/>
<source>F</source> <source>F</source>
<translation>F</translation> <translation>F</translation>
</message> </message>
</context> </context>
<context>
<name>TemperatureGraphItem</name>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>C</source>
<translation>C</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="22"/>
<source>F</source>
<translation>F</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="24"/>
<source>Average</source>
<translation>Medel</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="26"/>
<source>Maximum</source>
<translation>Maximum</translation>
</message>
<message>
<location filename="../src/temperaturegraphitem.cpp" line="28"/>
<source>Minimum</source>
<translation>Minimum</translation>
</message>
</context>
<context> <context>
<name>TrackItem</name> <name>TrackItem</name>
<message> <message>

View File

@ -5,7 +5,7 @@
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "4.14" !define VERSION "4.15"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}.exe" OutFile "GPXSee-${VERSION}.exe"

View File

@ -5,7 +5,7 @@
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "4.14" !define VERSION "4.15"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}_x64.exe" OutFile "GPXSee-${VERSION}_x64.exe"

View File

@ -1,10 +1,10 @@
#include "data.h" #include "data.h"
#include "cadencegraphitem.h"
#include "cadencegraph.h" #include "cadencegraph.h"
CadenceGraph::CadenceGraph(QWidget *parent) : GraphTab(parent) CadenceGraph::CadenceGraph(QWidget *parent) : GraphTab(parent)
{ {
_units = Metric;
_showTracks = true; _showTracks = true;
GraphView::setYUnits(tr("1/min")); GraphView::setYUnits(tr("1/min"));
@ -28,21 +28,16 @@ void CadenceGraph::loadData(const Data &data, const QList<PathItem *> &paths)
{ {
for (int i = 0; i < data.tracks().count(); i++) { for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->cadence(); const Graph &graph = data.tracks().at(i)->cadence();
qreal sum = 0, w = 0;
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
continue; continue;
} }
for (int j = 1; j < graph.size(); j++) { CadenceGraphItem *gi = new CadenceGraphItem(graph, _graphType);
qreal ds = graph.at(j).s() - graph.at(j-1).s(); GraphView::addGraph(gi, paths.at(i));
sum += graph.at(j).y() * ds;
w += ds;
}
_avg.append(QPointF(data.tracks().at(i)->distance(), sum/w));
GraphView::loadGraph(graph, paths.at(i)); _avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
} }
for (int i = 0; i < data.routes().count(); i++) for (int i = 0; i < data.routes().count(); i++)

View File

@ -23,7 +23,6 @@ private:
QList<QPointF> _avg; QList<QPointF> _avg;
enum Units _units;
bool _showTracks; bool _showTracks;
}; };

26
src/cadencegraphitem.cpp Normal file
View File

@ -0,0 +1,26 @@
#include "tooltip.h"
#include "cadencegraphitem.h"
CadenceGraphItem::CadenceGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
qreal sum = 0;
for (int j = 1; j < graph.size(); j++)
sum += graph.at(j).y() * (graph.at(j).s() - graph.at(j-1).s());
_avg = sum/graph.last().s();
setToolTip(toolTip());
}
QString CadenceGraphItem::toolTip() const
{
ToolTip tt;
tt.insert(tr("Maximum"), QString::number(max(), 'f', 1)
+ UNIT_SPACE + tr("1/min"));
tt.insert(tr("Average"), QString::number(avg(), 'f', 1)
+ UNIT_SPACE + tr("1/min"));
return tt.toString();
}

23
src/cadencegraphitem.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef CADENCEGRAPHITEM_H
#define CADENCEGRAPHITEM_H
#include "graphitem.h"
class CadenceGraphItem : public GraphItem
{
Q_OBJECT
public:
CadenceGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent = 0);
qreal max() const {return -bounds().top();}
qreal avg() const {return _avg;}
private:
QString toolTip() const;
qreal _avg;
};
#endif // CADENCEGRAPHITEM_H

View File

@ -1,6 +1,8 @@
#include <cmath> #include <cmath>
#include "config.h" #include "config.h"
#include "data.h" #include "data.h"
#include "tooltip.h"
#include "elevationgraphitem.h"
#include "elevationgraph.h" #include "elevationgraph.h"
@ -42,11 +44,8 @@ ElevationGraph::ElevationGraph(QWidget *parent) : GraphTab(parent)
_showRoutes = true; _showRoutes = true;
_showTracks = true; _showTracks = true;
_units = Metric; setYUnits(Metric);
setYUnits();
setYLabel(tr("Elevation")); setYLabel(tr("Elevation"));
setMinYRange(50.0); setMinYRange(50.0);
} }
@ -68,43 +67,25 @@ void ElevationGraph::setInfo()
void ElevationGraph::loadGraph(const Graph &graph, Type type, PathItem *path) void ElevationGraph::loadGraph(const Graph &graph, Type type, PathItem *path)
{ {
qreal ascent = 0, descent = 0;
qreal min, max;
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
return; return;
} }
max = min = graph.at(0).y(); ElevationGraphItem *gi = new ElevationGraphItem(graph, _graphType);
for (int j = 1; j < graph.size(); j++) { GraphView::addGraph(gi, path, type);
qreal cur = graph.at(j).y();
qreal prev = graph.at(j-1).y();
if (cur > prev)
ascent += cur - prev;
if (cur < prev)
descent += prev - cur;
if (cur < min)
min = cur;
if (cur > max)
max = cur;
}
if (type == Track) { if (type == Track) {
_trackAscent += ascent; _trackAscent += gi->ascent();
_trackDescent += descent; _trackDescent += gi->descent();
_trackMax = nMax(_trackMax, max); _trackMax = nMax(_trackMax, gi->max());
_trackMin = nMin(_trackMin, min); _trackMin = nMin(_trackMin, gi->min());
} else { } else {
_routeAscent += ascent; _routeAscent += gi->ascent();
_routeDescent += descent; _routeDescent += gi->descent();
_routeMax = nMax(_routeMax, max); _routeMax = nMax(_routeMax, gi->max());
_routeMin = nMin(_routeMin, min); _routeMin = nMin(_routeMin, gi->min());
} }
GraphView::loadGraph(graph, path, type);
} }
void ElevationGraph::loadData(const Data &data, const QList<PathItem *> &paths) void ElevationGraph::loadData(const Data &data, const QList<PathItem *> &paths)
@ -135,9 +116,9 @@ void ElevationGraph::clear()
GraphView::clear(); GraphView::clear();
} }
void ElevationGraph::setYUnits() void ElevationGraph::setYUnits(Units units)
{ {
if (_units == Metric) { if (units == Metric) {
GraphView::setYUnits(tr("m")); GraphView::setYUnits(tr("m"));
setYScale(1); setYScale(1);
} else { } else {
@ -146,15 +127,12 @@ void ElevationGraph::setYUnits()
} }
} }
void ElevationGraph::setUnits(enum Units units) void ElevationGraph::setUnits(Units units)
{ {
_units = units; setYUnits(units);
setYUnits();
setInfo(); setInfo();
GraphView::setUnits(units);
redraw(); GraphView::setUnits(units);
} }
void ElevationGraph::showTracks(bool show) void ElevationGraph::showTracks(bool show)

View File

@ -25,7 +25,7 @@ private:
qreal ascent() const; qreal ascent() const;
qreal descent() const; qreal descent() const;
void setYUnits(); void setYUnits(Units units);
void setInfo(); void setInfo();
void loadGraph(const Graph &graph, Type type, PathItem *path); void loadGraph(const Graph &graph, Type type, PathItem *path);
@ -35,7 +35,6 @@ private:
qreal _trackMax, _routeMax; qreal _trackMax, _routeMax;
qreal _trackMin, _routeMin; qreal _trackMin, _routeMin;
enum Units _units;
bool _showTracks, _showRoutes; bool _showTracks, _showRoutes;
}; };

View File

@ -0,0 +1,43 @@
#include "tooltip.h"
#include "elevationgraphitem.h"
ElevationGraphItem::ElevationGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
_ascent = _descent = 0;
for (int j = 1; j < graph.size(); j++) {
qreal cur = graph.at(j).y();
qreal prev = graph.at(j-1).y();
if (cur > prev)
_ascent += cur - prev;
if (cur < prev)
_descent += prev - cur;
}
setToolTip(toolTip(Metric));
}
QString ElevationGraphItem::toolTip(Units units) const
{
ToolTip tt;
qreal scale = (units == Metric) ? 1.0 : M2FT;
QString su = (units == Metric) ? tr("m") : tr("ft");
tt.insert(tr("Ascent"), QString::number(ascent() * scale, 'f', 0)
+ UNIT_SPACE + su);
tt.insert(tr("Descent"), QString::number(descent() * scale, 'f', 0)
+ UNIT_SPACE + su);
tt.insert(tr("Maximum"), QString::number(max() * scale, 'f', 0)
+ UNIT_SPACE + su);
tt.insert(tr("Minimum"), QString::number(min() * scale, 'f', 0)
+ UNIT_SPACE + su);
return tt.toString();
}
void ElevationGraphItem::setUnits(Units units)
{
setToolTip(toolTip(units));
}

27
src/elevationgraphitem.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef ELEVATIONGRAPHITEM_H
#define ELEVATIONGRAPHITEM_H
#include "graphitem.h"
class ElevationGraphItem : public GraphItem
{
Q_OBJECT
public:
ElevationGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent = 0);
qreal ascent() const {return _ascent;}
qreal descent() const {return _descent;}
qreal min() const {return -bounds().bottom();}
qreal max() const {return -bounds().top();}
void setUnits(Units units);
private:
QString toolTip(Units units) const;
qreal _ascent, _descent;
};
#endif // ELEVATIONGRAPHITEM_H

View File

@ -2,7 +2,7 @@
#include "coordinates.h" #include "coordinates.h"
#include "format.h" #include "format.h"
QString Format::timeSpan(qreal time) QString Format::timeSpan(qreal time, bool full)
{ {
unsigned h, m, s; unsigned h, m, s;
@ -10,8 +10,12 @@ QString Format::timeSpan(qreal time)
m = (time - (h * 3600)) / 60; m = (time - (h * 3600)) / 60;
s = time - (h * 3600) - (m * 60); s = time - (h * 3600) - (m * 60);
return QString("%1:%2:%3").arg(h).arg(m, 2, 10, QChar('0')) if (full || h)
.arg(s, 2, 10, QChar('0')); return QString("%1:%2:%3").arg(h, 2, 10, QChar('0'))
.arg(m, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0'));
else
return QString("%1:%2").arg(m, 2, 10, QChar('0'))
.arg(s, 2, 10, QChar('0'));
} }
QString Format::distance(qreal value, Units units) QString Format::distance(qreal value, Units units)

View File

@ -8,7 +8,7 @@ class Coordinates;
namespace Format namespace Format
{ {
QString timeSpan(qreal time); QString timeSpan(qreal time, bool full = true);
QString distance(qreal value, Units units); QString distance(qreal value, Units units);
QString elevation(qreal value, Units units); QString elevation(qreal value, Units units);
QString coordinates(const Coordinates &value); QString coordinates(const Coordinates &value);

View File

@ -2,7 +2,7 @@
#include "graphitem.h" #include "graphitem.h"
GraphItem::GraphItem(const Graph &graph, QGraphicsItem *parent) GraphItem::GraphItem(const Graph &graph, GraphType type, QGraphicsItem *parent)
: QGraphicsObject(parent) : QGraphicsObject(parent)
{ {
_id = 0; _id = 0;
@ -10,7 +10,7 @@ GraphItem::GraphItem(const Graph &graph, QGraphicsItem *parent)
_pen = QPen(Qt::black, _width); _pen = QPen(Qt::black, _width);
_type = Distance; _type = type;
_graph = graph; _graph = graph;
_sx = 1.0; _sy = 1.0; _sx = 1.0; _sy = 1.0;
@ -25,7 +25,17 @@ GraphItem::GraphItem(const Graph &graph, QGraphicsItem *parent)
setZValue(1.0); setZValue(1.0);
updatePath(); updatePath();
updateShape();
updateBounds(); updateBounds();
setAcceptHoverEvents(true);
}
void GraphItem::updateShape()
{
QPainterPathStroker s;
s.setWidth(_width + 1);
_shape = s.createStroke(_path);
} }
void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
@ -46,25 +56,37 @@ void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
void GraphItem::setGraphType(GraphType type) void GraphItem::setGraphType(GraphType type)
{ {
if (type == _type)
return;
prepareGeometryChange(); prepareGeometryChange();
_type = type; _type = type;
updatePath(); updatePath();
updateShape();
updateBounds(); updateBounds();
} }
void GraphItem::setColor(const QColor &color) void GraphItem::setColor(const QColor &color)
{ {
if (_pen.color() == color)
return;
_pen.setColor(color); _pen.setColor(color);
update(); update();
} }
void GraphItem::setWidth(int width) void GraphItem::setWidth(int width)
{ {
if (width == _width)
return;
prepareGeometryChange(); prepareGeometryChange();
_width = width; _width = width;
_pen.setWidth(width); _pen.setWidth(width);
updateShape();
} }
qreal GraphItem::yAtX(qreal x) qreal GraphItem::yAtX(qreal x)
@ -143,9 +165,9 @@ void GraphItem::emitSliderPositionChanged(qreal pos)
emit sliderPositionChanged(pos); emit sliderPositionChanged(pos);
} }
void GraphItem::selected(bool selected) void GraphItem::hover(bool hover)
{ {
if (selected) { if (hover) {
_pen.setWidth(_width + 1); _pen.setWidth(_width + 1);
setZValue(zValue() + 1.0); setZValue(zValue() + 1.0);
} else { } else {
@ -165,6 +187,7 @@ void GraphItem::setScale(qreal sx, qreal sy)
_sx = sx; _sy = sy; _sx = sx; _sy = sy;
updatePath(); updatePath();
updateShape();
} }
void GraphItem::updatePath() void GraphItem::updatePath()
@ -199,3 +222,25 @@ void GraphItem::updateBounds()
_bounds = QRectF(QPointF(left, top), QPointF(right, bottom)); _bounds = QRectF(QPointF(left, top), QPointF(right, bottom));
} }
void GraphItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
_pen.setWidthF(_width + 1);
setZValue(zValue() + 1.0);
update();
emit selected(true);
}
void GraphItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
_pen.setWidthF(_width);
setZValue(zValue() - 1.0);
update();
emit selected(false);
}

View File

@ -3,6 +3,7 @@
#include <QGraphicsObject> #include <QGraphicsObject>
#include <QPen> #include <QPen>
#include "units.h"
#include "graph.h" #include "graph.h"
class GraphItem : public QGraphicsObject class GraphItem : public QGraphicsObject
@ -10,34 +11,42 @@ class GraphItem : public QGraphicsObject
Q_OBJECT Q_OBJECT
public: public:
GraphItem(const Graph &graph, QGraphicsItem *parent = 0); GraphItem(const Graph &graph, GraphType type, QGraphicsItem *parent = 0);
QRectF boundingRect() const QPainterPath shape() const {return _shape;}
{return _path.boundingRect();} QRectF boundingRect() const {return _shape.boundingRect();}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget); QWidget *widget);
const QRectF &bounds() const {return _bounds;} const QRectF &bounds() const {return _bounds;}
void setScale(qreal sx, qreal sy);
void setScale(qreal sx, qreal sy);
void setGraphType(GraphType type); void setGraphType(GraphType type);
int id() const {return _id;} int id() const {return _id;}
void setId(int id) {_id = id;} void setId(int id) {_id = id;}
void setColor(const QColor &color); void setColor(const QColor &color);
void setWidth(int width); void setWidth(int width);
virtual void setUnits(Units units) {Q_UNUSED(units);}
qreal yAtX(qreal x); qreal yAtX(qreal x);
qreal distanceAtTime(qreal time); qreal distanceAtTime(qreal time);
void redraw();
signals: signals:
void sliderPositionChanged(qreal); void sliderPositionChanged(qreal);
void selected(bool);
public slots: public slots:
void emitSliderPositionChanged(qreal); void emitSliderPositionChanged(qreal);
void selected(bool selected); void hover(bool hover);
private: private:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
void updatePath(); void updatePath();
void updateShape();
void updateBounds(); void updateBounds();
int _id; int _id;
@ -48,6 +57,7 @@ private:
GraphType _type; GraphType _type;
QPainterPath _path; QPainterPath _path;
QPainterPath _shape;
QRectF _bounds; QRectF _bounds;
qreal _sx, _sy; qreal _sx, _sy;

View File

@ -19,8 +19,9 @@ public:
virtual QString label() const = 0; virtual QString label() const = 0;
virtual void loadData(const Data &data, const QList<PathItem *> &paths) = 0; virtual void loadData(const Data &data, const QList<PathItem *> &paths) = 0;
virtual void clear() {} virtual void clear() {GraphView::clear();}
virtual void setUnits(enum Units units) {GraphView::setUnits(units);} virtual void setUnits(enum Units units) {GraphView::setUnits(units);}
virtual void setGraphType(GraphType type) {GraphView::setGraphType(type);}
virtual void setTimeType(enum TimeType type) {Q_UNUSED(type)} virtual void setTimeType(enum TimeType type) {Q_UNUSED(type)}
virtual void showTracks(bool show) {Q_UNUSED(show)} virtual void showTracks(bool show) {Q_UNUSED(show)}
virtual void showRoutes(bool show) {Q_UNUSED(show)} virtual void showRoutes(bool show) {Q_UNUSED(show)}

View File

@ -13,6 +13,7 @@
#include "graph.h" #include "graph.h"
#include "graphitem.h" #include "graphitem.h"
#include "pathitem.h" #include "pathitem.h"
#include "format.h"
#include "graphview.h" #include "graphview.h"
@ -139,7 +140,13 @@ void GraphView::setXUnits()
void GraphView::setUnits(Units units) void GraphView::setUnits(Units units)
{ {
_units = units; _units = units;
for (int i = 0; i < _graphs.count(); i++)
_graphs.at(i)->setUnits(units);
setXUnits(); setXUnits();
redraw();
} }
void GraphView::setGraphType(GraphType type) void GraphView::setGraphType(GraphType type)
@ -167,29 +174,31 @@ void GraphView::showGrid(bool show)
_grid->setVisible(show); _grid->setVisible(show);
} }
void GraphView::loadGraph(const Graph &graph, PathItem *path, int id) void GraphView::showSliderInfo(bool show)
{ {
if (graph.size() < 2) _sliderInfo->setVisible(show);
return; }
GraphItem *gi = new GraphItem(graph); void GraphView::addGraph(GraphItem *graph, PathItem *path, int id)
gi->setGraphType(_graphType); {
gi->setId(id); graph->setUnits(_units);
gi->setColor(_palette.nextColor()); graph->setId(id);
gi->setWidth(_width); graph->setColor(_palette.nextColor());
graph->setWidth(_width);
connect(this, SIGNAL(sliderPositionChanged(qreal)), gi, connect(this, SIGNAL(sliderPositionChanged(qreal)), graph,
SLOT(emitSliderPositionChanged(qreal))); SLOT(emitSliderPositionChanged(qreal)));
connect(gi, SIGNAL(sliderPositionChanged(qreal)), path, connect(graph, SIGNAL(sliderPositionChanged(qreal)), path,
SLOT(moveMarker(qreal))); SLOT(moveMarker(qreal)));
connect(path, SIGNAL(selected(bool)), gi, SLOT(selected(bool))); connect(path, SIGNAL(selected(bool)), graph, SLOT(hover(bool)));
connect(graph, SIGNAL(selected(bool)), path, SLOT(hover(bool)));
_graphs.append(gi); _graphs.append(graph);
if (!_hide.contains(id)) { if (!_hide.contains(id)) {
_visible.append(gi); _visible.append(graph);
_scene->addItem(gi); _scene->addItem(graph);
_bounds |= gi->bounds(); _bounds |= graph->bounds();
setXUnits(); setXUnits();
} }
} }
@ -227,11 +236,6 @@ void GraphView::showGraph(bool show, int id)
} }
} }
void GraphView::redraw()
{
redraw(viewport()->size() - QSizeF(MARGIN, MARGIN));
}
QRectF GraphView::bounds() const QRectF GraphView::bounds() const
{ {
QRectF br(_bounds); QRectF br(_bounds);
@ -239,6 +243,11 @@ QRectF GraphView::bounds() const
return br; return br;
} }
void GraphView::redraw()
{
redraw(viewport()->size() - QSizeF(MARGIN, MARGIN));
}
void GraphView::redraw(const QSizeF &size) void GraphView::redraw(const QSizeF &size)
{ {
QRectF r; QRectF r;
@ -372,22 +381,26 @@ void GraphView::updateSliderPosition()
_slider->setVisible(false); _slider->setVisible(false);
} }
updateSliderInfo(); if (_slider->isVisible())
updateSliderInfo();
} }
void GraphView::updateSliderInfo() void GraphView::updateSliderInfo()
{ {
_sliderInfo->setVisible(_visible.count() == 1); qreal r, y;
if (!_sliderInfo->isVisible())
return;
QRectF br(_visible.first()->bounds()); if (_visible.count() > 1) {
if (br.height() < _minYRange) r = 0;
br.adjust(0, -(_minYRange/2 - br.height()/2), 0, y = 0;
_minYRange/2 - br.height()/2); } else {
QRectF br(_visible.first()->bounds());
if (br.height() < _minYRange)
br.adjust(0, -(_minYRange/2 - br.height()/2), 0,
_minYRange/2 - br.height()/2);
qreal y = _visible.first()->yAtX(_sliderPos); y = _visible.first()->yAtX(_sliderPos);
qreal r = (y - br.bottom()) / br.height(); r = (y - br.bottom()) / br.height();
}
qreal pos = (_sliderPos / bounds().width()) * _slider->area().width(); qreal pos = (_sliderPos / bounds().width()) * _slider->area().width();
SliderInfoItem::Side s = (pos + _sliderInfo->boundingRect().width() SliderInfoItem::Side s = (pos + _sliderInfo->boundingRect().width()
@ -395,8 +408,11 @@ void GraphView::updateSliderInfo()
_sliderInfo->setSide(s); _sliderInfo->setSide(s);
_sliderInfo->setPos(QPointF(0, _slider->boundingRect().height() * r)); _sliderInfo->setPos(QPointF(0, _slider->boundingRect().height() * r));
_sliderInfo->setText(QString::number(-y * _yScale + _yOffset, 'f', _sliderInfo->setText(_graphType == Time ? Format::timeSpan(_sliderPos,
_precision)); bounds().width() > 3600) : QString::number(_sliderPos * _xScale, 'f', 1)
+ UNIT_SPACE + _xUnits, (_visible.count() > 1) ? QString()
: QString::number(-y * _yScale + _yOffset, 'f', _precision) + UNIT_SPACE
+ _yUnits);
} }
void GraphView::emitSliderPositionChanged(const QPointF &pos) void GraphView::emitSliderPositionChanged(const QPointF &pos)
@ -452,6 +468,8 @@ void GraphView::setGraphWidth(int width)
for (int i = 0; i < _graphs.count(); i++) for (int i = 0; i < _graphs.count(); i++)
_graphs.at(i)->setWidth(width); _graphs.at(i)->setWidth(width);
redraw();
} }
void GraphView::useOpenGL(bool use) void GraphView::useOpenGL(bool use)

View File

@ -4,9 +4,9 @@
#include <QGraphicsView> #include <QGraphicsView>
#include <QList> #include <QList>
#include <QSet> #include <QSet>
#include "graph.h"
#include "palette.h" #include "palette.h"
#include "units.h" #include "units.h"
#include "graph.h"
class AxisItem; class AxisItem;
@ -25,18 +25,29 @@ public:
GraphView(QWidget *parent = 0); GraphView(QWidget *parent = 0);
~GraphView(); ~GraphView();
void loadGraph(const Graph &graph, PathItem *path, int id = 0); bool isEmpty() const {return _graphs.isEmpty();}
int count() const {return _graphs.count();}
void redraw();
void clear(); void clear();
void plot(QPainter *painter, const QRectF &target, qreal scale);
void setPalette(const Palette &palette);
void setGraphWidth(int width);
void showGrid(bool show);
void showSliderInfo(bool show);
void useOpenGL(bool use);
void useAntiAliasing(bool use);
void setSliderPosition(qreal pos);
signals:
void sliderPositionChanged(qreal);
protected:
void addGraph(GraphItem *graph, PathItem *path, int id = 0);
void showGraph(bool show, int id = 0); void showGraph(bool show, int id = 0);
void setGraphType(GraphType type); void setGraphType(GraphType type);
void setUnits(Units units); void setUnits(Units units);
void showGrid(bool show);
void setPalette(const Palette &palette);
void setGraphWidth(int width);
const QString &yLabel() const {return _yLabel;} const QString &yLabel() const {return _yLabel;}
const QString &yUnits() const {return _yUnits;} const QString &yUnits() const {return _yUnits;}
@ -50,24 +61,16 @@ public:
void setSliderPrecision(int precision) {_precision = precision;} void setSliderPrecision(int precision) {_precision = precision;}
void setMinYRange(qreal range) {_minYRange = range;} void setMinYRange(qreal range) {_minYRange = range;}
qreal sliderPosition() const {return _sliderPos;}
void setSliderPosition(qreal pos);
void plot(QPainter *painter, const QRectF &target, qreal scale);
void useOpenGL(bool use);
void useAntiAliasing(bool use);
signals:
void sliderPositionChanged(qreal);
protected:
QRectF bounds() const; QRectF bounds() const;
void redraw();
void redraw(const QSizeF &size); void redraw(const QSizeF &size);
void addInfo(const QString &key, const QString &value); void addInfo(const QString &key, const QString &value);
void clearInfo(); void clearInfo();
void skipColor() {_palette.nextColor();} void skipColor() {_palette.nextColor();}
QList<GraphItem*> _graphs;
GraphType _graphType;
private slots: private slots:
void emitSliderPositionChanged(const QPointF &pos); void emitSliderPositionChanged(const QPointF &pos);
void newSliderPosition(const QPointF &pos); void newSliderPosition(const QPointF &pos);
@ -84,6 +87,7 @@ private:
void resizeEvent(QResizeEvent *); void resizeEvent(QResizeEvent *);
void mousePressEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *);
Units _units;
qreal _xScale, _yScale; qreal _xScale, _yScale;
qreal _yOffset; qreal _yOffset;
QString _xUnits, _yUnits; QString _xUnits, _yUnits;
@ -100,15 +104,11 @@ private:
InfoItem *_info; InfoItem *_info;
GridItem *_grid; GridItem *_grid;
QList<GraphItem*> _graphs;
QList<GraphItem*> _visible; QList<GraphItem*> _visible;
QSet<int> _hide; QSet<int> _hide;
QRectF _bounds; QRectF _bounds;
Palette _palette; Palette _palette;
int _width; int _width;
Units _units;
GraphType _graphType;
}; };
#endif // GRAPHVIEW_H #endif // GRAPHVIEW_H

View File

@ -361,7 +361,7 @@ void GUI::createActions()
tr("Load map..."), this); tr("Load map..."), this);
connect(_loadMapAction, SIGNAL(triggered()), this, SLOT(loadMap())); connect(_loadMapAction, SIGNAL(triggered()), this, SLOT(loadMap()));
_clearMapCacheAction = new QAction(tr("Clear tile cache"), this); _clearMapCacheAction = new QAction(tr("Clear tile cache"), this);
connect(_clearMapCacheAction, SIGNAL(triggered()), this, connect(_clearMapCacheAction, SIGNAL(triggered()), _pathView,
SLOT(clearMapCache())); SLOT(clearMapCache()));
createMapActions(); createMapActions();
_nextMapAction = new QAction(tr("Next map"), this); _nextMapAction = new QAction(tr("Next map"), this);
@ -412,14 +412,12 @@ void GUI::createActions()
_distanceGraphAction = new QAction(tr("Distance"), this); _distanceGraphAction = new QAction(tr("Distance"), this);
_distanceGraphAction->setCheckable(true); _distanceGraphAction->setCheckable(true);
_distanceGraphAction->setActionGroup(ag); _distanceGraphAction->setActionGroup(ag);
_distanceGraphAction->setShortcut(DISTANCE_GRAPH_SHORTCUT);
connect(_distanceGraphAction, SIGNAL(triggered()), this, connect(_distanceGraphAction, SIGNAL(triggered()), this,
SLOT(setDistanceGraph())); SLOT(setDistanceGraph()));
addAction(_distanceGraphAction); addAction(_distanceGraphAction);
_timeGraphAction = new QAction(tr("Time"), this); _timeGraphAction = new QAction(tr("Time"), this);
_timeGraphAction->setCheckable(true); _timeGraphAction->setCheckable(true);
_timeGraphAction->setActionGroup(ag); _timeGraphAction->setActionGroup(ag);
_timeGraphAction->setShortcut(TIME_GRAPH_SHORTCUT);
connect(_timeGraphAction, SIGNAL(triggered()), this, connect(_timeGraphAction, SIGNAL(triggered()), this,
SLOT(setTimeGraph())); SLOT(setTimeGraph()));
addAction(_timeGraphAction); addAction(_timeGraphAction);
@ -427,6 +425,10 @@ void GUI::createActions()
_showGraphGridAction->setCheckable(true); _showGraphGridAction->setCheckable(true);
connect(_showGraphGridAction, SIGNAL(triggered(bool)), this, connect(_showGraphGridAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphGrids(bool))); SLOT(showGraphGrids(bool)));
_showGraphSliderInfoAction = new QAction(tr("Show slider info"), this);
_showGraphSliderInfoAction->setCheckable(true);
connect(_showGraphSliderInfoAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphSliderInfo(bool)));
// Settings actions // Settings actions
_showToolbarsAction = new QAction(tr("Show toolbars"), this); _showToolbarsAction = new QAction(tr("Show toolbars"), this);
@ -515,6 +517,7 @@ void GUI::createMenus()
graphMenu->addAction(_timeGraphAction); graphMenu->addAction(_timeGraphAction);
graphMenu->addSeparator(); graphMenu->addSeparator();
graphMenu->addAction(_showGraphGridAction); graphMenu->addAction(_showGraphGridAction);
graphMenu->addAction(_showGraphSliderInfoAction);
graphMenu->addSeparator(); graphMenu->addSeparator();
graphMenu->addAction(_showGraphsAction); graphMenu->addAction(_showGraphsAction);
@ -671,7 +674,12 @@ void GUI::keys()
+ tr("Last file") + "</td><td><i>" + QKeySequence(LAST_KEY).toString() + tr("Last file") + "</td><td><i>" + QKeySequence(LAST_KEY).toString()
+ "</i></td></tr><tr><td>" + tr("Append file") + "</i></td></tr><tr><td>" + tr("Append file")
+ "</td><td><i>" + QKeySequence(MODIFIER).toString() + tr("Next/Previous") + "</td><td><i>" + QKeySequence(MODIFIER).toString() + tr("Next/Previous")
+ "</i></td></tr><tr><td></td><td></td></tr><tr><td>" + tr("Next map") + "</i></td></tr><tr><td></td><td></td></tr><tr><td>"
+ tr("Toggle graph type") + "</td><td><i>"
+ QKeySequence(TOGGLE_GRAPH_TYPE_KEY).toString() + "</i></td></tr><tr><td>"
+ tr("Toggle time type") + "</td><td><i>"
+ QKeySequence(TOGGLE_TIME_TYPE_KEY).toString()
+ "<tr><td></td><td></td></tr><tr><td>" + tr("Next map")
+ "</td><td><i>" + NEXT_MAP_SHORTCUT.toString() + "</i></td></tr><tr><td>" + "</td><td><i>" + NEXT_MAP_SHORTCUT.toString() + "</i></td></tr><tr><td>"
+ tr("Previous map") + "</td><td><i>" + PREV_MAP_SHORTCUT.toString() + tr("Previous map") + "</td><td><i>" + PREV_MAP_SHORTCUT.toString()
+ "</i></td></tr><tr><td></td><td></td></tr><tr><td>" + tr("Zoom in") + "</i></td></tr><tr><td></td><td></td></tr><tr><td>" + tr("Zoom in")
@ -1014,7 +1022,7 @@ void GUI::plot(QPrinter *printer)
int cnt = 0; int cnt = 0;
for (int i = 0; i < _tabs.size(); i++) for (int i = 0; i < _tabs.size(); i++)
if (_tabs.at(i)->count()) if (!_tabs.at(i)->isEmpty())
cnt++; cnt++;
qreal sp = ratio * 20; qreal sp = ratio * 20;
@ -1023,7 +1031,7 @@ void GUI::plot(QPrinter *printer)
qreal y = 0; qreal y = 0;
for (int i = 0; i < _tabs.size(); i++) { for (int i = 0; i < _tabs.size(); i++) {
if (_tabs.at(i)->count()) { if (!_tabs.at(i)->isEmpty()) {
_tabs.at(i)->plot(&p, QRectF(0, y, printer->width(), gh), _tabs.at(i)->plot(&p, QRectF(0, y, printer->width(), gh),
ratio); ratio);
y += gh + sp; y += gh + sp;
@ -1174,6 +1182,12 @@ void GUI::showGraphGrids(bool show)
_tabs.at(i)->showGrid(show); _tabs.at(i)->showGrid(show);
} }
void GUI::showGraphSliderInfo(bool show)
{
for (int i = 0; i < _tabs.size(); i++)
_tabs.at(i)->showSliderInfo(show);
}
void GUI::loadMap() void GUI::loadMap()
{ {
QString fileName = QFileDialog::getOpenFileName(this, tr("Open map file"), QString fileName = QFileDialog::getOpenFileName(this, tr("Open map file"),
@ -1203,12 +1217,6 @@ void GUI::loadMap()
} }
} }
void GUI::clearMapCache()
{
_map->clearCache();
_pathView->redraw();
}
void GUI::updateStatusBarInfo() void GUI::updateStatusBarInfo()
{ {
if (_files.count() == 0) if (_files.count() == 0)
@ -1320,13 +1328,13 @@ void GUI::updateGraphTabs()
for (int i = 0; i < _tabs.size(); i++) { for (int i = 0; i < _tabs.size(); i++) {
tab = _tabs.at(i); tab = _tabs.at(i);
if (!tab->count() && (index = _graphTabWidget->indexOf(tab)) >= 0) if (tab->isEmpty() && (index = _graphTabWidget->indexOf(tab)) >= 0)
_graphTabWidget->removeTab(index); _graphTabWidget->removeTab(index);
} }
for (int i = 0; i < _tabs.size(); i++) { for (int i = 0; i < _tabs.size(); i++) {
tab = _tabs.at(i); tab = _tabs.at(i);
if (tab->count() && _graphTabWidget->indexOf(tab) < 0) if (!tab->isEmpty() && _graphTabWidget->indexOf(tab) < 0)
_graphTabWidget->insertTab(i, tab, _tabs.at(i)->label()); _graphTabWidget->insertTab(i, tab, _tabs.at(i)->label());
} }
@ -1433,6 +1441,19 @@ void GUI::keyPressEvent(QKeyEvent *event)
file = _browser->last(); file = _browser->last();
break; break;
case TOGGLE_GRAPH_TYPE_KEY:
if (_timeGraphAction->isChecked())
_distanceGraphAction->activate(QAction::Trigger);
else
_timeGraphAction->activate(QAction::Trigger);
break;
case TOGGLE_TIME_TYPE_KEY:
if (_movingTimeAction->isChecked())
_totalTimeAction->activate(QAction::Trigger);
else
_movingTimeAction->activate(QAction::Trigger);
break;
case Qt::Key_Escape: case Qt::Key_Escape:
if (_fullscreenAction->isChecked()) { if (_fullscreenAction->isChecked()) {
_fullscreenAction->setChecked(false); _fullscreenAction->setChecked(false);
@ -1521,6 +1542,10 @@ void GUI::writeSettings()
if (_showGraphGridAction->isChecked() != SHOW_GRAPH_GRIDS_DEFAULT) if (_showGraphGridAction->isChecked() != SHOW_GRAPH_GRIDS_DEFAULT)
settings.setValue(SHOW_GRAPH_GRIDS_SETTING, settings.setValue(SHOW_GRAPH_GRIDS_SETTING,
_showGraphGridAction->isChecked()); _showGraphGridAction->isChecked());
if (_showGraphSliderInfoAction->isChecked()
!= SHOW_GRAPH_SLIDER_INFO_DEFAULT)
settings.setValue(SHOW_GRAPH_SLIDER_INFO_SETTING,
_showGraphSliderInfoAction->isChecked());
settings.endGroup(); settings.endGroup();
settings.beginGroup(POI_SETTINGS_GROUP); settings.beginGroup(POI_SETTINGS_GROUP);
@ -1708,6 +1733,11 @@ void GUI::readSettings()
showGraphGrids(false); showGraphGrids(false);
else else
_showGraphGridAction->setChecked(true); _showGraphGridAction->setChecked(true);
if (!settings.value(SHOW_GRAPH_SLIDER_INFO_SETTING,
SHOW_GRAPH_SLIDER_INFO_DEFAULT).toBool())
showGraphSliderInfo(false);
else
_showGraphSliderInfoAction->setChecked(true);
settings.endGroup(); settings.endGroup();
settings.beginGroup(POI_SETTINGS_GROUP); settings.beginGroup(POI_SETTINGS_GROUP);

View File

@ -51,12 +51,12 @@ private slots:
void closePOIFiles(); void closePOIFiles();
void showGraphs(bool show); void showGraphs(bool show);
void showGraphGrids(bool show); void showGraphGrids(bool show);
void showGraphSliderInfo(bool show);
void showToolbars(bool show); void showToolbars(bool show);
void showFullscreen(bool show); void showFullscreen(bool show);
void showTracks(bool show); void showTracks(bool show);
void showRoutes(bool show); void showRoutes(bool show);
void loadMap(); void loadMap();
void clearMapCache();
void nextMap(); void nextMap();
void prevMap(); void prevMap();
void openOptions(); void openOptions();
@ -156,6 +156,7 @@ private:
QAction *_clearMapCacheAction; QAction *_clearMapCacheAction;
QAction *_showGraphsAction; QAction *_showGraphsAction;
QAction *_showGraphGridAction; QAction *_showGraphGridAction;
QAction *_showGraphSliderInfoAction;
QAction *_distanceGraphAction; QAction *_distanceGraphAction;
QAction *_timeGraphAction; QAction *_timeGraphAction;
QAction *_showToolbarsAction; QAction *_showToolbarsAction;

View File

@ -1,10 +1,10 @@
#include "data.h" #include "data.h"
#include "heartrategraphitem.h"
#include "heartrategraph.h" #include "heartrategraph.h"
HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphTab(parent) HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphTab(parent)
{ {
_units = Metric;
_showTracks = true; _showTracks = true;
GraphView::setYUnits(tr("1/min")); GraphView::setYUnits(tr("1/min"));
@ -28,21 +28,16 @@ void HeartRateGraph::loadData(const Data &data, const QList<PathItem *> &paths)
{ {
for (int i = 0; i < data.tracks().count(); i++) { for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->heartRate(); const Graph &graph = data.tracks().at(i)->heartRate();
qreal sum = 0, w = 0;
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
continue; continue;
} }
for (int j = 1; j < graph.size(); j++) { HeartRateGraphItem *gi = new HeartRateGraphItem(graph, _graphType);
qreal ds = graph.at(j).s() - graph.at(j-1).s(); GraphView::addGraph(gi, paths.at(i));
sum += graph.at(j).y() * ds;
w += ds;
}
_avg.append(QPointF(data.tracks().at(i)->distance(), sum/w));
GraphView::loadGraph(graph, paths.at(i)); _avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
} }
for (int i = 0; i < data.routes().count(); i++) for (int i = 0; i < data.routes().count(); i++)

View File

@ -22,7 +22,6 @@ private:
QList<QPointF> _avg; QList<QPointF> _avg;
enum Units _units;
bool _showTracks; bool _showTracks;
}; };

View File

@ -0,0 +1,26 @@
#include "tooltip.h"
#include "heartrategraphitem.h"
HeartRateGraphItem::HeartRateGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
qreal sum = 0;
for (int j = 1; j < graph.size(); j++)
sum += graph.at(j).y() * (graph.at(j).s() - graph.at(j-1).s());
_avg = sum/graph.last().s();
setToolTip(toolTip());
}
QString HeartRateGraphItem::toolTip() const
{
ToolTip tt;
tt.insert(tr("Maximum"), QString::number(max(), 'f', 0)
+ UNIT_SPACE + tr("1/min"));
tt.insert(tr("Average"), QString::number(avg(), 'f', 0)
+ UNIT_SPACE + tr("1/min"));
return tt.toString();
}

23
src/heartrategraphitem.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef HEARTRATEGRAPHITEM_H
#define HEARTRATEGRAPHITEM_H
#include "graphitem.h"
class HeartRateGraphItem : public GraphItem
{
Q_OBJECT
public:
HeartRateGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent = 0);
qreal max() const {return -bounds().top();}
qreal avg() const {return _avg;}
private:
QString toolTip() const;
qreal _avg;
};
#endif // HEARTRATEGRAPHITEM_H

View File

@ -13,6 +13,9 @@
#define ZOOM_IN QKeySequence::ZoomIn #define ZOOM_IN QKeySequence::ZoomIn
#define ZOOM_OUT QKeySequence::ZoomOut #define ZOOM_OUT QKeySequence::ZoomOut
#define TOGGLE_GRAPH_TYPE_KEY Qt::Key_X
#define TOGGLE_TIME_TYPE_KEY Qt::Key_T
#define QUIT_SHORTCUT QKeySequence(QKeySequence::Quit) #define QUIT_SHORTCUT QKeySequence(QKeySequence::Quit)
#define OPEN_SHORTCUT QKeySequence(QKeySequence::Open) #define OPEN_SHORTCUT QKeySequence(QKeySequence::Open)
#define CLOSE_SHORTCUT QKeySequence(QKeySequence::Close) #define CLOSE_SHORTCUT QKeySequence(QKeySequence::Close)
@ -23,8 +26,6 @@
#define NEXT_MAP_SHORTCUT QKeySequence(QKeySequence::Forward) #define NEXT_MAP_SHORTCUT QKeySequence(QKeySequence::Forward)
#define PREV_MAP_SHORTCUT QKeySequence(QKeySequence::Back) #define PREV_MAP_SHORTCUT QKeySequence(QKeySequence::Back)
#define SHOW_GRAPHS_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_G) #define SHOW_GRAPHS_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_G)
#define DISTANCE_GRAPH_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_D)
#define TIME_GRAPH_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_T)
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
#define FULLSCREEN_SHORTCUT QKeySequence(Qt::META + Qt::CTRL + Qt::Key_F) #define FULLSCREEN_SHORTCUT QKeySequence(Qt::META + Qt::CTRL + Qt::Key_F)

View File

@ -56,13 +56,21 @@ OnlineMap::OnlineMap(const QString &name, const QString &url,
_zooms = zooms; _zooms = zooms;
_zoom = zooms.max(); _zoom = zooms.max();
connect(downloader, SIGNAL(finished()), this, SLOT(emitLoaded()));
QString path = TILES_DIR + QString("/") + name; QString path = TILES_DIR + QString("/") + name;
if (!QDir().mkpath(path)) if (!QDir().mkpath(path))
qWarning("Error creating tiles dir: %s\n", qPrintable(path)); qWarning("Error creating tiles dir: %s\n", qPrintable(path));
} }
void OnlineMap::load()
{
connect(downloader, SIGNAL(finished()), this, SLOT(emitLoaded()));
}
void OnlineMap::unload()
{
disconnect(downloader, SIGNAL(finished()), this, SLOT(emitLoaded()));
}
void OnlineMap::fillTile(Tile &tile) void OnlineMap::fillTile(Tile &tile)
{ {
tile.pixmap() = QPixmap(TILE_SIZE, TILE_SIZE); tile.pixmap() = QPixmap(TILE_SIZE, TILE_SIZE);

View File

@ -37,6 +37,9 @@ public:
static void setDownloader(Downloader *downloader) static void setDownloader(Downloader *downloader)
{OnlineMap::downloader = downloader;} {OnlineMap::downloader = downloader;}
void load();
void unload();
private slots: private slots:
void emitLoaded(); void emitLoaded();

View File

@ -66,9 +66,10 @@ void PathItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
void PathItem::setMap(Map *map) void PathItem::setMap(Map *map)
{ {
_map = map;
prepareGeometryChange(); prepareGeometryChange();
_map = map;
updatePainterPath(map); updatePainterPath(map);
updateShape(); updateShape();
@ -77,12 +78,18 @@ void PathItem::setMap(Map *map)
void PathItem::setColor(const QColor &color) void PathItem::setColor(const QColor &color)
{ {
if (_pen.color() == color)
return;
_pen.setColor(color); _pen.setColor(color);
update(); update();
} }
void PathItem::setWidth(qreal width) void PathItem::setWidth(qreal width)
{ {
if (_width == width)
return;
prepareGeometryChange(); prepareGeometryChange();
_width = width; _width = width;
@ -93,12 +100,18 @@ void PathItem::setWidth(qreal width)
void PathItem::setStyle(Qt::PenStyle style) void PathItem::setStyle(Qt::PenStyle style)
{ {
if (_pen.style() == style)
return;
_pen.setStyle(style); _pen.setStyle(style);
update(); update();
} }
void PathItem::setDigitalZoom(int zoom) void PathItem::setDigitalZoom(int zoom)
{ {
if (_digitalZoom == zoom)
return;
prepareGeometryChange(); prepareGeometryChange();
_digitalZoom = zoom; _digitalZoom = zoom;
@ -154,6 +167,19 @@ void PathItem::moveMarker(qreal distance)
_marker->setVisible(false); _marker->setVisible(false);
} }
void PathItem::hover(bool hover)
{
if (hover) {
_pen.setWidth(_width + 1);
setZValue(zValue() + 1.0);
} else {
_pen.setWidth(_width);
setZValue(zValue() - 1.0);
}
update();
}
void PathItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) void PathItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);

View File

@ -32,6 +32,7 @@ public:
public slots: public slots:
void moveMarker(qreal distance); void moveMarker(qreal distance);
void hover(bool hover);
signals: signals:
void selected(bool); void selected(bool);

View File

@ -3,6 +3,7 @@
#include <QWheelEvent> #include <QWheelEvent>
#include <QApplication> #include <QApplication>
#include <QPixmapCache> #include <QPixmapCache>
#include <QScrollBar>
#include "opengl.h" #include "opengl.h"
#include "misc.h" #include "misc.h"
#include "poi.h" #include "poi.h"
@ -39,10 +40,11 @@ PathView::PathView(Map *map, POI *poi, QWidget *parent)
_mapScale = new ScaleItem(); _mapScale = new ScaleItem();
_mapScale->setZValue(2.0); _mapScale->setZValue(2.0);
_scene->addItem(_mapScale);
_map = map; _map = map;
_poi = poi; _poi = poi;
connect(_map, SIGNAL(loaded()), this, SLOT(redraw())); connect(_map, SIGNAL(loaded()), this, SLOT(reloadMap()));
connect(_poi, SIGNAL(pointsChanged()), this, SLOT(updatePOI())); connect(_poi, SIGNAL(pointsChanged()), this, SLOT(updatePOI()));
_units = Metric; _units = Metric;
@ -72,13 +74,26 @@ PathView::PathView(Map *map, POI *poi, QWidget *parent)
_map->setBackgroundColor(_backgroundColor); _map->setBackgroundColor(_backgroundColor);
_scene->setSceneRect(_map->bounds()); _scene->setSceneRect(_map->bounds());
_res = _map->resolution(_scene->sceneRect().center());
centerOn(_scene->sceneRect().center());
} }
PathView::~PathView() void PathView::centerOn(const QPointF &pos)
{ {
if (_mapScale->scene() != _scene) QGraphicsView::centerOn(pos);
delete _mapScale;
/* Fix the offset caused by QGraphicsView::centerOn() approximation */
QPointF center = mapToScene(viewport()->rect().center());
QPoint offset((int)(pos.x() - center.x()), (int)(pos.y() - center.y()));
if (qAbs(offset.x()) == 1)
horizontalScrollBar()->setValue(horizontalScrollBar()->value()
+ offset.x());
if (qAbs(offset.y()) == 1)
verticalScrollBar()->setValue(verticalScrollBar()->value()
+ offset.y());
_res = _map->resolution(pos);
_mapScale->setResolution(_res);
} }
PathItem *PathView::addTrack(const Track &track) PathItem *PathView::addTrack(const Track &track)
@ -169,13 +184,7 @@ QList<PathItem *> PathView::loadData(const Data &data)
else else
updatePOIVisibility(); updatePOIVisibility();
QPointF center = contentCenter(); centerOn(contentCenter());
centerOn(center);
_res = _map->resolution(center);
_mapScale->setResolution(_res);
if (_mapScale->scene() != _scene)
_scene->addItem(_mapScale);
return paths; return paths;
} }
@ -260,11 +269,11 @@ void PathView::setMap(Map *map)
qreal resolution = _map->resolution(pos); qreal resolution = _map->resolution(pos);
_map->unload(); _map->unload();
disconnect(_map, SIGNAL(loaded()), this, SLOT(redraw())); disconnect(_map, SIGNAL(loaded()), this, SLOT(reloadMap()));
_map = map; _map = map;
_map->load(); _map->load();
connect(_map, SIGNAL(loaded()), this, SLOT(redraw())); connect(_map, SIGNAL(loaded()), this, SLOT(reloadMap()));
resetDigitalZoom(); resetDigitalZoom();
@ -283,11 +292,7 @@ void PathView::setMap(Map *map)
it.value()->setMap(_map); it.value()->setMap(_map);
updatePOIVisibility(); updatePOIVisibility();
pos = _map->ll2xy(center); centerOn(_map->ll2xy(center));
centerOn(pos);
_res = _map->resolution(pos);
_mapScale->setResolution(_res);
resetCachedContent(); resetCachedContent();
QPixmapCache::clear(); QPixmapCache::clear();
@ -361,8 +366,9 @@ void PathView::setUnits(enum Units units)
it.value()->setUnits(units); it.value()->setUnits(units);
} }
void PathView::redraw() void PathView::clearMapCache()
{ {
_map->clearCache();
resetCachedContent(); resetCachedContent();
} }
@ -421,15 +427,8 @@ void PathView::zoom(int zoom, const QPoint &pos, const Coordinates &c)
ns = (zoom > 0) ? _map->zoomIn() : _map->zoomOut(); ns = (zoom > 0) ? _map->zoomIn() : _map->zoomOut();
if (ns != os) { if (ns != os) {
QPoint offset = pos - viewport()->rect().center();
rescale(); rescale();
centerOn(_map->ll2xy(c) - (pos - viewport()->rect().center()));
QPointF center = _map->ll2xy(c) - offset;
centerOn(center);
_res = _map->resolution(center);
_mapScale->setResolution(_res);
} else { } else {
if (shift) if (shift)
digitalZoom(zoom); digitalZoom(zoom);
@ -523,11 +522,11 @@ void PathView::plot(QPainter *painter, const QRectF &target, qreal scale,
adj = QRect(0, 0, adj.width() * s.x(), adj.height() * s.y()); adj = QRect(0, 0, adj.width() * s.x(), adj.height() * s.y());
_map->zoomFit(adj.size(), _tr | _rr | _wr); _map->zoomFit(adj.size(), _tr | _rr | _wr);
rescale(); rescale();
QPointF center = contentCenter(); QPointF center = contentCenter();
centerOn(center); centerOn(center);
adj.moveCenter(mapFromScene(center)); adj.moveCenter(mapFromScene(center));
_mapScale->setResolution(_map->resolution(_map->ll2xy(origLL)));
_mapScale->setDigitalZoom(-log2(s.x() / q)); _mapScale->setDigitalZoom(-log2(s.x() / q));
_mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint( _mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint(
-(SCALE_OFFSET + _mapScale->boundingRect().width()) * (s.x() / q), -(SCALE_OFFSET + _mapScale->boundingRect().width()) * (s.x() / q),
@ -547,7 +546,6 @@ void PathView::plot(QPainter *painter, const QRectF &target, qreal scale,
_map->zoomFit(origRes, origLL); _map->zoomFit(origRes, origLL);
rescale(); rescale();
centerOn(origScene); centerOn(origScene);
_mapScale->setResolution(origRes);
} }
_mapScale->setDigitalZoom(0); _mapScale->setDigitalZoom(0);
_mapScale->setPos(origPos); _mapScale->setPos(origPos);
@ -560,14 +558,15 @@ void PathView::plot(QPainter *painter, const QRectF &target, qreal scale,
void PathView::clear() void PathView::clear()
{ {
if (_mapScale->scene() == _scene)
_scene->removeItem(_mapScale);
_pois.clear(); _pois.clear();
_tracks.clear(); _tracks.clear();
_routes.clear(); _routes.clear();
_waypoints.clear(); _waypoints.clear();
_scene->removeItem(_mapScale);
_scene->clear(); _scene->clear();
_scene->addItem(_mapScale);
_palette.reset(); _palette.reset();
_tr = RectC(); _tr = RectC();
@ -756,11 +755,7 @@ void PathView::resizeEvent(QResizeEvent *event)
if (mapZoom() != zoom) if (mapZoom() != zoom)
rescale(); rescale();
QPointF center = contentCenter(); centerOn(contentCenter());
centerOn(center);
_res = _map->resolution(center);
_mapScale->setResolution(_res);
QGraphicsView::resizeEvent(event); QGraphicsView::resizeEvent(event);
} }
@ -801,3 +796,8 @@ void PathView::useAntiAliasing(bool use)
{ {
setRenderHint(QPainter::Antialiasing, use); setRenderHint(QPainter::Antialiasing, use);
} }
void PathView::reloadMap()
{
resetCachedContent();
}

View File

@ -28,7 +28,6 @@ class PathView : public QGraphicsView
public: public:
PathView(Map *map, POI *poi, QWidget *parent = 0); PathView(Map *map, POI *poi, QWidget *parent = 0);
~PathView();
QList<PathItem*> loadData(const Data &data); QList<PathItem*> loadData(const Data &data);
@ -59,8 +58,6 @@ public:
void useAntiAliasing(bool use); void useAntiAliasing(bool use);
public slots: public slots:
void redraw();
void showMap(bool show); void showMap(bool show);
void showPOI(bool show); void showPOI(bool show);
void setPOIOverlap(bool overlap); void setPOIOverlap(bool overlap);
@ -70,9 +67,11 @@ public slots:
void showRoutes(bool show); void showRoutes(bool show);
void showWaypoints(bool show); void showWaypoints(bool show);
void showRouteWaypoints(bool show); void showRouteWaypoints(bool show);
void clearMapCache();
private slots: private slots:
void updatePOI(); void updatePOI();
void reloadMap();
private: private:
PathItem *addTrack(const Track &track); PathItem *addTrack(const Track &track);
@ -85,6 +84,7 @@ private:
qreal mapZoom() const; qreal mapZoom() const;
QPointF contentCenter() const; QPointF contentCenter() const;
void rescale(); void rescale();
void centerOn(const QPointF &pos);
void zoom(int zoom, const QPoint &pos, const Coordinates &c); void zoom(int zoom, const QPoint &pos, const Coordinates &c);
void digitalZoom(int zoom); void digitalZoom(int zoom);
void resetDigitalZoom(); void resetDigitalZoom();

View File

@ -1,10 +1,10 @@
#include "data.h" #include "data.h"
#include "powergraphitem.h"
#include "powergraph.h" #include "powergraph.h"
PowerGraph::PowerGraph(QWidget *parent) : GraphTab(parent) PowerGraph::PowerGraph(QWidget *parent) : GraphTab(parent)
{ {
_units = Metric;
_showTracks = true; _showTracks = true;
GraphView::setYUnits(tr("W")); GraphView::setYUnits(tr("W"));
@ -28,21 +28,16 @@ void PowerGraph::loadData(const Data &data, const QList<PathItem *> &paths)
{ {
for (int i = 0; i < data.tracks().count(); i++) { for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->power(); const Graph &graph = data.tracks().at(i)->power();
qreal sum = 0, w = 0;
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
continue; continue;
} }
for (int j = 1; j < graph.size(); j++) { PowerGraphItem *gi = new PowerGraphItem(graph, _graphType);
qreal ds = graph.at(j).s() - graph.at(j-1).s(); GraphView::addGraph(gi, paths.at(i));
sum += graph.at(j).y() * ds;
w += ds;
}
_avg.append(QPointF(data.tracks().at(i)->distance(), sum/w));
GraphView::loadGraph(graph, paths.at(i)); _avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
} }
for (int i = 0; i < data.routes().count(); i++) for (int i = 0; i < data.routes().count(); i++)

View File

@ -22,7 +22,6 @@ private:
QList<QPointF> _avg; QList<QPointF> _avg;
enum Units _units;
bool _showTracks; bool _showTracks;
}; };

26
src/powergraphitem.cpp Normal file
View File

@ -0,0 +1,26 @@
#include "tooltip.h"
#include "powergraphitem.h"
PowerGraphItem::PowerGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
qreal sum = 0;
for (int j = 1; j < graph.size(); j++)
sum += graph.at(j).y() * (graph.at(j).s() - graph.at(j-1).s());
_avg = sum/graph.last().s();
setToolTip(toolTip());
}
QString PowerGraphItem::toolTip() const
{
ToolTip tt;
tt.insert(tr("Maximum"), QString::number(max(), 'f', 1)
+ UNIT_SPACE + tr("1/min"));
tt.insert(tr("Average"), QString::number(avg(), 'f', 1)
+ UNIT_SPACE + tr("1/min"));
return tt.toString();
}

23
src/powergraphitem.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef POWERGRAPHITEM_H
#define POWERGRAPHITEM_H
#include "graphitem.h"
class PowerGraphItem : public GraphItem
{
Q_OBJECT
public:
PowerGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent = 0);
qreal max() const {return -bounds().top();}
qreal avg() const {return _avg;}
private:
QString toolTip() const;
qreal _avg;
};
#endif // POWERGRAPHITEM_H

View File

@ -7,7 +7,7 @@
#include "routeitem.h" #include "routeitem.h"
QString RouteItem::toolTip(Units units) QString RouteItem::toolTip(Units units) const
{ {
ToolTip tt; ToolTip tt;

View File

@ -14,7 +14,6 @@ class RouteItem : public PathItem
public: public:
RouteItem(const Route &route, Map *map, QGraphicsItem *parent = 0); RouteItem(const Route &route, Map *map, QGraphicsItem *parent = 0);
//void setScale(qreal scale);
void setMap(Map *map); void setMap(Map *map);
void setUnits(Units units); void setUnits(Units units);
@ -22,7 +21,7 @@ public:
void showWaypointLabels(bool show); void showWaypointLabels(bool show);
private: private:
QString toolTip(Units units); QString toolTip(Units units) const;
QString _name; QString _name;
QString _desc; QString _desc;

View File

@ -25,6 +25,8 @@
#define GRAPH_TYPE_DEFAULT Distance #define GRAPH_TYPE_DEFAULT Distance
#define SHOW_GRAPH_GRIDS_SETTING "grid" #define SHOW_GRAPH_GRIDS_SETTING "grid"
#define SHOW_GRAPH_GRIDS_DEFAULT true #define SHOW_GRAPH_GRIDS_DEFAULT true
#define SHOW_GRAPH_SLIDER_INFO_SETTING "sliderInfo"
#define SHOW_GRAPH_SLIDER_INFO_DEFAULT true
#define MAP_SETTINGS_GROUP "Map" #define MAP_SETTINGS_GROUP "Map"
#define CURRENT_MAP_SETTING "map" #define CURRENT_MAP_SETTING "map"

View File

@ -17,10 +17,12 @@ void SliderInfoItem::updateBoundingRect()
font.setFamily(FONT_FAMILY); font.setFamily(FONT_FAMILY);
QFontMetrics fm(font); QFontMetrics fm(font);
qreal width = qMax(fm.width(_x), fm.width(_y));
qreal height = 2 * fm.height() - 2*fm.descent();
_boundingRect = (_side == Right) _boundingRect = (_side == Right)
? QRectF(-SIZE/2, 0, fm.width(_text) + SIZE, fm.height()) ? QRectF(-SIZE/2, -height/2, width + 1.5*SIZE, height)
: QRectF(-(fm.width(_text) + SIZE/2), 0, fm.width(_text) + SIZE, : QRectF(-(width + SIZE), -height/2, width + 1.5*SIZE, height);
fm.height());
} }
void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
@ -32,25 +34,48 @@ void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
font.setPixelSize(FONT_SIZE); font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY); font.setFamily(FONT_FAMILY);
QFontMetrics fm(font); QFontMetrics fm(font);
QRectF rx, ry;
qreal width = qMax(fm.width(_x), fm.width(_y));
if (_side == Right) {
ry = QRectF(SIZE, -fm.height() + fm.descent(), fm.width(_y),
fm.height() - fm.descent());
rx = QRectF(SIZE, 0, fm.width(_x), fm.height()
- fm.descent());
} else {
ry = QRectF(-(width + SIZE), -fm.height() + fm.descent(), fm.width(_y),
fm.height() - fm.descent());
rx = QRectF(-(width + SIZE), 0, fm.width(_x), fm.height()
- fm.descent());
}
painter->setPen(Qt::NoPen);
painter->setBrush(QBrush(QColor(255, 255, 255, 196)));
painter->drawRect(ry);
painter->drawRect(rx);
painter->setBrush(Qt::NoBrush);
painter->setFont(font); painter->setFont(font);
painter->setRenderHint(QPainter::Antialiasing, false); painter->setRenderHint(QPainter::Antialiasing, false);
painter->setPen(Qt::red); painter->setPen(Qt::red);
if (_side == Right) if (_side == Right) {
painter->drawText(SIZE, fm.height() - fm.descent(), _text); painter->drawText(SIZE, -fm.descent()/2, _y);
else painter->drawText(SIZE, fm.height() - fm.descent()*1.5, _x);
painter->drawText(-(fm.width(_text) + SIZE/2), } else {
fm.height() - fm.descent(), _text); painter->drawText(-(width + SIZE), -fm.descent()/2, _y);
painter->drawText(-(width + SIZE), fm.height() - fm.descent()*1.5, _x);
}
painter->drawLine(QPointF(-SIZE/2, 0), QPointF(SIZE/2, 0)); painter->drawLine(QPointF(-SIZE/2, 0), QPointF(SIZE/2, 0));
//painter->drawRect(boundingRect()); //painter->drawRect(boundingRect());
} }
void SliderInfoItem::setText(const QString &text) void SliderInfoItem::setText(const QString &x, const QString &y)
{ {
prepareGeometryChange(); prepareGeometryChange();
_text = text; _x = x; _y = y;
updateBoundingRect(); updateBoundingRect();
} }

View File

@ -14,14 +14,14 @@ public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget); QWidget *widget);
void setText(const QString &text); void setText(const QString &x, const QString &y);
void setSide(Side side); void setSide(Side side);
private: private:
void updateBoundingRect(); void updateBoundingRect();
Side _side; Side _side;
QString _text; QString _x, _y;
QRectF _boundingRect; QRectF _boundingRect;
}; };

View File

@ -1,15 +1,16 @@
#include "config.h" #include "config.h"
#include "data.h" #include "data.h"
#include "tooltip.h"
#include "speedgraphitem.h"
#include "speedgraph.h" #include "speedgraph.h"
SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent) SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent)
{ {
_units = Metric;
_timeType = Total; _timeType = Total;
_showTracks = true; _showTracks = true;
setYUnits(); setYUnits(Metric);
setYLabel(tr("Speed")); setYLabel(tr("Speed"));
setSliderPrecision(1); setSliderPrecision(1);
@ -29,18 +30,21 @@ void SpeedGraph::setInfo()
void SpeedGraph::loadData(const Data &data, const QList<PathItem *> &paths) void SpeedGraph::loadData(const Data &data, const QList<PathItem *> &paths)
{ {
for (int i = 0; i < data.tracks().count(); i++) { for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->speed(); const Track *track = data.tracks().at(i);
const Graph &graph = track->speed();
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
continue; continue;
} }
_avg.append(QPointF(data.tracks().at(i)->distance(), SpeedGraphItem *gi = new SpeedGraphItem(graph, _graphType,
data.tracks().at(i)->distance() / data.tracks().at(i)->time())); track->movingTime());
_avgM.append(QPointF(data.tracks().at(i)->distance(), gi->setTimeType(_timeType);
data.tracks().at(i)->distance() / data.tracks().at(i)->movingTime())); GraphView::addGraph(gi, paths.at(i));
GraphView::loadGraph(graph, paths.at(i)); _avg.append(QPointF(track->distance(), gi->avg()));
_mavg.append(QPointF(track->distance(), gi->mavg()));
} }
for (int i = 0; i < data.routes().count(); i++) for (int i = 0; i < data.routes().count(); i++)
@ -55,7 +59,7 @@ qreal SpeedGraph::avg() const
{ {
qreal sum = 0, w = 0; qreal sum = 0, w = 0;
QList<QPointF>::const_iterator it; QList<QPointF>::const_iterator it;
const QList<QPointF> &list = (_timeType == Moving) ? _avgM : _avg; const QList<QPointF> &list = (_timeType == Moving) ? _mavg : _avg;
for (it = list.begin(); it != list.end(); it++) { for (it = list.begin(); it != list.end(); it++) {
sum += it->y() * it->x(); sum += it->y() * it->x();
@ -68,14 +72,14 @@ qreal SpeedGraph::avg() const
void SpeedGraph::clear() void SpeedGraph::clear()
{ {
_avg.clear(); _avg.clear();
_avgM.clear(); _mavg.clear();
GraphView::clear(); GraphView::clear();
} }
void SpeedGraph::setYUnits() void SpeedGraph::setYUnits(Units units)
{ {
if (_units == Metric) { if (units == Metric) {
GraphView::setYUnits(tr("km/h")); GraphView::setYUnits(tr("km/h"));
setYScale(MS2KMH); setYScale(MS2KMH);
} else { } else {
@ -84,21 +88,21 @@ void SpeedGraph::setYUnits()
} }
} }
void SpeedGraph::setUnits(enum Units units) void SpeedGraph::setUnits(Units units)
{ {
_units = units; setYUnits(units);
setYUnits();
setInfo(); setInfo();
GraphView::setUnits(units);
redraw(); GraphView::setUnits(units);
} }
void SpeedGraph::setTimeType(enum TimeType type) void SpeedGraph::setTimeType(enum TimeType type)
{ {
_timeType = type; _timeType = type;
for (int i = 0; i < _graphs.size(); i++)
static_cast<SpeedGraphItem*>(_graphs.at(i))->setTimeType(type);
setInfo(); setInfo();
redraw(); redraw();
} }

View File

@ -14,20 +14,19 @@ public:
QString label() const {return tr("Speed");} QString label() const {return tr("Speed");}
void loadData(const Data &data, const QList<PathItem *> &paths); void loadData(const Data &data, const QList<PathItem *> &paths);
void clear(); void clear();
void setUnits(enum Units units); void setUnits(Units units);
void setTimeType(enum TimeType type); void setTimeType(TimeType type);
void showTracks(bool show); void showTracks(bool show);
private: private:
qreal avg() const; qreal avg() const;
qreal max() const {return bounds().bottom();} qreal max() const {return bounds().bottom();}
void setYUnits(); void setYUnits(Units units);
void setInfo(); void setInfo();
QList<QPointF> _avg; QList<QPointF> _avg;
QList<QPointF> _avgM; QList<QPointF> _mavg;
enum Units _units;
enum TimeType _timeType; enum TimeType _timeType;
bool _showTracks; bool _showTracks;
}; };

40
src/speedgraphitem.cpp Normal file
View File

@ -0,0 +1,40 @@
#include "tooltip.h"
#include "speedgraphitem.h"
SpeedGraphItem::SpeedGraphItem(const Graph &graph, GraphType type,
qreal movingTime, QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
_units = Metric;
_timeType = Total;
_avg = graph.last().s() / graph.last().t();
_mavg = graph.last().s() / movingTime;
setToolTip(toolTip());
}
QString SpeedGraphItem::toolTip() const
{
ToolTip tt;
qreal scale = (_units == Metric) ? MS2KMH : MS2MIH;
QString su = (_units == Metric) ? tr("km/h") : tr("mi/h");
tt.insert(tr("Maximum"), QString::number(max() * scale, 'f', 1)
+ UNIT_SPACE + su);
tt.insert(tr("Average"), QString::number((_timeType == Total)
? avg() * scale : mavg() * scale, 'f', 1) + UNIT_SPACE + su);
return tt.toString();
}
void SpeedGraphItem::setUnits(Units units)
{
_units = units;
setToolTip(toolTip());
}
void SpeedGraphItem::setTimeType(TimeType type)
{
_timeType = type;
setToolTip(toolTip());
}

31
src/speedgraphitem.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef SPEEDGRAPHITEM_H
#define SPEEDGRAPHITEM_H
#include "timetype.h"
#include "graphitem.h"
class SpeedGraphItem : public GraphItem
{
Q_OBJECT
public:
SpeedGraphItem(const Graph &graph, GraphType type, qreal movingTime,
QGraphicsItem *parent = 0);
qreal max() const {return -bounds().top();}
qreal avg() const {return _avg;}
qreal mavg() const {return _mavg;}
void setUnits(Units units);
void setTimeType(TimeType type);
private:
QString toolTip() const;
qreal _avg, _mavg;
Units _units;
TimeType _timeType;
};
#endif // SPEEDGRAPHITEM_H

View File

@ -1,13 +1,13 @@
#include "data.h" #include "data.h"
#include "temperaturegraphitem.h"
#include "temperaturegraph.h" #include "temperaturegraph.h"
TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphTab(parent) TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphTab(parent)
{ {
_units = Metric;
_showTracks = true; _showTracks = true;
setYUnits(); setYUnits(Metric);
setYLabel(tr("Temperature")); setYLabel(tr("Temperature"));
setSliderPrecision(1); setSliderPrecision(1);
@ -30,21 +30,16 @@ void TemperatureGraph::loadData(const Data &data, const QList<PathItem *> &paths
{ {
for (int i = 0; i < data.tracks().count(); i++) { for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->temperature(); const Graph &graph = data.tracks().at(i)->temperature();
qreal sum = 0, w = 0;
if (graph.size() < 2) { if (graph.size() < 2) {
skipColor(); skipColor();
continue; continue;
} }
for (int j = 1; j < graph.size(); j++) { TemperatureGraphItem *gi = new TemperatureGraphItem(graph, _graphType);
qreal ds = graph.at(j).s() - graph.at(j-1).s(); GraphView::addGraph(gi, paths.at(i));
sum += graph.at(j).y() * ds;
w += ds;
}
_avg.append(QPointF(data.tracks().at(i)->distance(), sum/w));
GraphView::loadGraph(graph, paths.at(i)); _avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
} }
for (int i = 0; i < data.routes().count(); i++) for (int i = 0; i < data.routes().count(); i++)
@ -75,9 +70,9 @@ void TemperatureGraph::clear()
GraphView::clear(); GraphView::clear();
} }
void TemperatureGraph::setYUnits() void TemperatureGraph::setYUnits(Units units)
{ {
if (_units == Metric) { if (units == Metric) {
GraphView::setYUnits(QChar(0x00B0) + tr("C")); GraphView::setYUnits(QChar(0x00B0) + tr("C"));
setYScale(1); setYScale(1);
setYOffset(0); setYOffset(0);
@ -88,15 +83,12 @@ void TemperatureGraph::setYUnits()
} }
} }
void TemperatureGraph::setUnits(enum Units units) void TemperatureGraph::setUnits(Units units)
{ {
_units = units; setYUnits(units);
setYUnits();
setInfo(); setInfo();
GraphView::setUnits(units);
redraw(); GraphView::setUnits(units);
} }
void TemperatureGraph::showTracks(bool show) void TemperatureGraph::showTracks(bool show)

View File

@ -20,12 +20,11 @@ private:
qreal avg() const; qreal avg() const;
qreal min() const {return bounds().top();} qreal min() const {return bounds().top();}
qreal max() const {return bounds().bottom();} qreal max() const {return bounds().bottom();}
void setYUnits(); void setYUnits(Units units);
void setInfo(); void setInfo();
QList<QPointF> _avg; QList<QPointF> _avg;
enum Units _units;
bool _showTracks; bool _showTracks;
}; };

View File

@ -0,0 +1,37 @@
#include "tooltip.h"
#include "temperaturegraphitem.h"
TemperatureGraphItem::TemperatureGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent) : GraphItem(graph, type, parent)
{
qreal sum = 0;
for (int j = 1; j < graph.size(); j++)
sum += graph.at(j).y() * (graph.at(j).s() - graph.at(j-1).s());
_avg = sum/graph.last().s();
setToolTip(toolTip(Metric));
}
QString TemperatureGraphItem::toolTip(Units units) const
{
ToolTip tt;
qreal scale = (units == Metric) ? 1.0 : C2FS;
qreal offset = (units == Metric) ? 0 : C2FO;
QString su = (units == Metric) ?
QChar(0x00B0) + tr("C") : QChar(0x00B0) + tr("F");
tt.insert(tr("Average"), QString::number(avg() * scale + offset, 'f', 1)
+ UNIT_SPACE + su);
tt.insert(tr("Maximum"), QString::number(max() * scale + offset, 'f', 1)
+ UNIT_SPACE + su);
tt.insert(tr("Minimum"), QString::number(min() * scale + offset, 'f', 1)
+ UNIT_SPACE + su);
return tt.toString();
}
void TemperatureGraphItem::setUnits(Units units)
{
setToolTip(toolTip(units));
}

View File

@ -0,0 +1,26 @@
#ifndef TEMPERATUREGRAPHITEM_H
#define TEMPERATUREGRAPHITEM_H
#include "graphitem.h"
class TemperatureGraphItem : public GraphItem
{
Q_OBJECT
public:
TemperatureGraphItem(const Graph &graph, GraphType type,
QGraphicsItem *parent = 0);
qreal max() const {return -bounds().top();}
qreal min() const {return -bounds().bottom();}
qreal avg() const {return _avg;}
void setUnits(Units units);
private:
QString toolTip(Units units) const;
qreal _avg;
};
#endif // TEMPERATUREGRAPHITEM_H

View File

@ -5,7 +5,7 @@
#include "trackitem.h" #include "trackitem.h"
QString TrackItem::toolTip(Units units) QString TrackItem::toolTip(Units units) const
{ {
ToolTip tt; ToolTip tt;

View File

@ -19,7 +19,7 @@ public:
void setUnits(Units units); void setUnits(Units units);
private: private:
QString toolTip(Units units); QString toolTip(Units units) const;
QString _name; QString _name;
QString _desc; QString _desc;