diff --git a/gpxsee.pro b/gpxsee.pro index 2e0a5db3..7f17cfbe 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -44,7 +44,8 @@ HEADERS += src/config.h \ src/exportdialog.h \ src/fileselectwidget.h \ src/margins.h \ - src/temperaturegraph.h + src/temperaturegraph.h \ + src/graphtab.h SOURCES += src/main.cpp \ src/gui.cpp \ src/gpx.cpp \ diff --git a/lang/gpxsee_cs.ts b/lang/gpxsee_cs.ts index d9ee622a..4c2abc39 100644 --- a/lang/gpxsee_cs.ts +++ b/lang/gpxsee_cs.ts @@ -1,6 +1,6 @@ - + ElevationGraph @@ -10,6 +10,7 @@ + Elevation Výška @@ -162,358 +163,338 @@ GUI - + GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at 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 - + Open file Otevřít soubor - + Open POI file Otevřít POI soubor - + Open Otevřít - + Quit Ukončit - - - + + + Keyboard controls Ovládací klávesy - + Close Zavřít - + Reload Znovu načíst - + Show Zobrazit - - + + File Soubor - - - + + + Data sources Zdroje dat - + Load POI file Nahrát POI soubor - + Close POI files Zavřit POI soubory - + Show POIs Zobrazit POI - + Show map Zobrazit mapu - + Clear tile cache Vymazat mezipaměť dlaždic - - - + + + Next map Následující mapa - + Show graphs Zobrazovat grafy - + Show toolbars Zobrazovat nástrojové lišty - + Metric Metrické - + Imperial Imperiální - + Fullscreen mode Celoobrazovkový režim - + Next Následující - + Previous Předchozí - + Last Poslední - + First První - + Map Mapa - + POI POI - + POI files POI soubory - + Settings Nastavení - + Units Jednotky - + Help Nápověda - - Temperature - Teplota - - - + Previous map Předchozí mapa - - + + Date Datum - + No GPX files loaded Nejsou načteny žádné GPX soubory - - Elevation - Výška - - - - Speed - Rychlost - - - - Heart rate - Tep - - - + Next file Následující soubor - + Version Verze - + Print... Tisknout... - + Export to PDF... Exportovat do PDF... - + Previous file Předchozí soubor - + First file První soubor - + Last file Poslední soubor - + Append modifier Modifikátor nahradit/přidat - + Map (tiles) source URLs are read on program startup from the following file: URL mapových zdrojů (dlaždic) jsou načteny při startu programu z následujícího souboru: - + The file format is one map entry per line, consisting of the map name and tiles URL 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: Formát souboru je jeden mapový záznam na řádku, kde mapový záznam sestává ze jména mapy a URL dlaždic navzájem oddělených tabulátorem. Souřadnice dlaždice jsou v URL nahrazeny řetězci $x a $y, úroven přiblížení (zoom) pak řetězcem $z. Příklad: - + To make GPXSee load a POI file automatically on startup, add the file to the following directory: POI soubory, které se mají automaticky nahrát při startu programu jsou načítány z následujícího adresáře: - + GPX files (*.gpx);;All files (*) Soubory GPX (*.gpx);;Všechny soubory (*) - - + + Line: %1 Řádka: %1 - + GPX files (*.gpx);;CSV files (*.csv);;All files (*) Soubory GPX (*.gpx);;Soubory CSV (*.csv);;Všechny soubory (*) - + Tracks Počet tras - - + + mi mi - + ft ft - - + + About GPXSee O aplikaci GPXSee - + Navigation Navigace - + Map sources Mapové zdroje - + POIs POI body - - + + Distance Vzdálenost - + Time Čas - + m m - + %1 tracks Počet tras: %1 - - + + km km - - + + Error Chyba - + Error loading GPX file: %1 Soubor GPX nelze otevřít: %1 - + Error loading POI file: %1 Soubor POI nelze otevřít: @@ -529,6 +510,7 @@ + Heart rate Tep @@ -600,6 +582,7 @@ + Speed Rychlost @@ -653,6 +636,7 @@ + Temperature Teplota @@ -697,7 +681,7 @@ C - + F F diff --git a/src/elevationgraph.cpp b/src/elevationgraph.cpp index 050a4fce..7aa6f4d4 100644 --- a/src/elevationgraph.cpp +++ b/src/elevationgraph.cpp @@ -3,7 +3,7 @@ #include "elevationgraph.h" -ElevationGraph::ElevationGraph(QWidget *parent) : GraphView(parent) +ElevationGraph::ElevationGraph(QWidget *parent) : GraphTab(parent) { _ascent = 0; _descent = 0; diff --git a/src/elevationgraph.h b/src/elevationgraph.h index 543c4c8f..ed59e29d 100644 --- a/src/elevationgraph.h +++ b/src/elevationgraph.h @@ -1,28 +1,28 @@ #ifndef ELEVATIONGRAPH_H #define ELEVATIONGRAPH_H -#include "graphview.h" -#include "units.h" +#include "graphtab.h" class GPX; -class ElevationGraph : public GraphView +class ElevationGraph : public GraphTab { Q_OBJECT public: ElevationGraph(QWidget *parent = 0); + QString label() const {return tr("Elevation");} void loadGPX(const GPX &gpx); void clear(); void setUnits(enum Units units); +private: qreal ascent() const {return _ascent;} qreal descent() const {return _descent;} qreal max() const {return bounds().bottom();} qreal min() const {return bounds().top();} -private: void setXUnits(); void setYUnits(); void addInfo(); diff --git a/src/graphtab.h b/src/graphtab.h new file mode 100644 index 00000000..3a82bad4 --- /dev/null +++ b/src/graphtab.h @@ -0,0 +1,23 @@ +#ifndef GRAPHTAB_H +#define GRAPHTAB_H + +#include "graphview.h" +#include "units.h" + +class GPX; + +class GraphTab : public GraphView +{ + Q_OBJECT + +public: + GraphTab(QWidget *parent = 0) : GraphView(parent) + {setFrameShape(QFrame::NoFrame);} + + virtual QString label() const = 0; + virtual void loadGPX(const GPX &gpx) = 0; + virtual void clear() = 0; + virtual void setUnits(enum Units units) = 0; +}; + +#endif // GRAPHTAB_H diff --git a/src/gui.cpp b/src/gui.cpp index cf606f65..a1fc4489 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -34,6 +34,7 @@ #include "filebrowser.h" #include "cpuarch.h" #include "exportdialog.h" +#include "graphtab.h" #include "gui.h" @@ -101,8 +102,8 @@ GUI::GUI(QWidget *parent) : QMainWindow(parent) GUI::~GUI() { for (int i = 0; i < _tabs.size(); i++) { - if (_trackGraphs->indexOf(_tabs.at(i).first) < 0) - delete _tabs.at(i).first; + if (_trackGraphs->indexOf(_tabs.at(i)) < 0) + delete _tabs.at(i); } } @@ -400,15 +401,6 @@ void GUI::createTrackView() void GUI::createTrackGraphs() { - _elevationGraph = new ElevationGraph; - _elevationGraph->setFrameShape(QFrame::NoFrame); - _speedGraph = new SpeedGraph; - _speedGraph->setFrameShape(QFrame::NoFrame); - _heartRateGraph = new HeartRateGraph; - _heartRateGraph->setFrameShape(QFrame::NoFrame); - _temperatureGraph = new TemperatureGraph; - _temperatureGraph->setFrameShape(QFrame::NoFrame); - _trackGraphs = new QTabWidget; connect(_trackGraphs, SIGNAL(currentChanged(int)), this, SLOT(graphChanged(int))); @@ -420,19 +412,14 @@ void GUI::createTrackGraphs() _trackGraphs->setDocumentMode(true); #endif // Q_OS_WIN32 - _tabs.append(GraphTab(_elevationGraph, tr("Elevation"))); - _tabs.append(GraphTab(_speedGraph, tr("Speed"))); - _tabs.append(GraphTab(_heartRateGraph, tr("Heart rate"))); - _tabs.append(GraphTab(_temperatureGraph, tr("Temperature"))); + _tabs.append(new ElevationGraph); + _tabs.append(new SpeedGraph); + _tabs.append(new HeartRateGraph); + _tabs.append(new TemperatureGraph); - connect(_elevationGraph, SIGNAL(sliderPositionChanged(qreal)), this, - SLOT(sliderPositionChanged(qreal))); - connect(_speedGraph, SIGNAL(sliderPositionChanged(qreal)), this, - SLOT(sliderPositionChanged(qreal))); - connect(_heartRateGraph, SIGNAL(sliderPositionChanged(qreal)), this, - SLOT(sliderPositionChanged(qreal))); - connect(_temperatureGraph, SIGNAL(sliderPositionChanged(qreal)), this, - SLOT(sliderPositionChanged(qreal))); + for (int i = 0; i < _tabs.count(); i++) + connect(_tabs.at(i), SIGNAL(sliderPositionChanged(qreal)), this, + SLOT(sliderPositionChanged(qreal))); } void GUI::createStatusBar() @@ -565,10 +552,8 @@ bool GUI::loadFile(const QString &fileName) GPX gpx; if (gpx.loadFile(fileName)) { - _elevationGraph->loadGPX(gpx); - _speedGraph->loadGPX(gpx); - _heartRateGraph->loadGPX(gpx); - _temperatureGraph->loadGPX(gpx); + for (int i = 0; i < _tabs.count(); i++) + _tabs.at(i)->loadGPX(gpx); updateGraphTabs(); _track->setHidden(false); _track->loadGPX(gpx); @@ -740,10 +725,8 @@ void GUI::reloadFile() _dateRange = DateRange(QDate(), QDate()); _trackCount = 0; - _elevationGraph->clear(); - _speedGraph->clear(); - _heartRateGraph->clear(); - _temperatureGraph->clear(); + for (int i = 0; i < _tabs.count(); i++) + _tabs.at(i)->clear(); _track->clear(); _sliderPos = 0; @@ -774,10 +757,8 @@ void GUI::closeFiles() _sliderPos = 0; - _elevationGraph->clear(); - _speedGraph->clear(); - _heartRateGraph->clear(); - _temperatureGraph->clear(); + for (int i = 0; i < _tabs.count(); i++) + _tabs.at(i)->clear(); _track->clear(); _files.clear(); @@ -977,18 +958,18 @@ void GUI::updateNavigationActions() void GUI::updateGraphTabs() { int index; - GraphView *gv; + GraphTab *tab; for (int i = 0; i < _tabs.size(); i++) { - gv = _tabs.at(i).first; - if (!gv->count() && (index = _trackGraphs->indexOf(gv)) >= 0) + tab = _tabs.at(i); + if (!tab->count() && (index = _trackGraphs->indexOf(tab)) >= 0) _trackGraphs->removeTab(index); } for (int i = 0; i < _tabs.size(); i++) { - gv = _tabs.at(i).first; - if (gv->count() && _trackGraphs->indexOf(gv) < 0) - _trackGraphs->insertTab(i, gv, _tabs.at(i).second); + tab = _tabs.at(i); + if (tab->count() && _trackGraphs->indexOf(tab) < 0) + _trackGraphs->insertTab(i, tab, _tabs.at(i)->label()); } if (_trackGraphs->count()) { @@ -1009,20 +990,16 @@ void GUI::updateTrackView() void GUI::setMetricUnits() { _track->setUnits(Metric); - _elevationGraph->setUnits(Metric); - _speedGraph->setUnits(Metric); - _heartRateGraph->setUnits(Metric); - _temperatureGraph->setUnits(Metric); + for (int i = 0; i <_tabs.count(); i++) + _tabs.at(i)->setUnits(Metric); updateStatusBarInfo(); } void GUI::setImperialUnits() { _track->setUnits(Imperial); - _elevationGraph->setUnits(Imperial); - _speedGraph->setUnits(Imperial); - _heartRateGraph->setUnits(Imperial); - _temperatureGraph->setUnits(Imperial); + for (int i = 0; i <_tabs.count(); i++) + _tabs.at(i)->setUnits(Imperial); updateStatusBarInfo(); } diff --git a/src/gui.h b/src/gui.h index 56c4be03..44324224 100644 --- a/src/gui.h +++ b/src/gui.h @@ -18,11 +18,7 @@ class QLabel; class QSignalMapper; class QPrinter; class FileBrowser; -class GraphView; -class ElevationGraph; -class SpeedGraph; -class HeartRateGraph; -class TemperatureGraph; +class GraphTab; class TrackView; class Map; @@ -71,7 +67,6 @@ private slots: void sliderPositionChanged(qreal pos); private: - typedef QPair GraphTab; typedef QPair DateRange; void loadMaps(); @@ -156,11 +151,7 @@ private: QLabel *_timeLabel; TrackView *_track; - ElevationGraph *_elevationGraph; - SpeedGraph *_speedGraph; - HeartRateGraph *_heartRateGraph; - TemperatureGraph *_temperatureGraph; - QList _tabs; + QList _tabs; POI _poi; QList _maps; diff --git a/src/heartrategraph.cpp b/src/heartrategraph.cpp index 8fe6dff4..6e910917 100644 --- a/src/heartrategraph.cpp +++ b/src/heartrategraph.cpp @@ -2,7 +2,7 @@ #include "heartrategraph.h" -HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphView(parent) +HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphTab(parent) { _units = Metric; diff --git a/src/heartrategraph.h b/src/heartrategraph.h index 713d80f7..c6046396 100644 --- a/src/heartrategraph.h +++ b/src/heartrategraph.h @@ -1,26 +1,25 @@ #ifndef HEARTRATEGRAPH_H #define HEARTRATEGRAPH_H -#include "graphview.h" -#include "units.h" +#include "graphtab.h" class GPX; -class HeartRateGraph : public GraphView +class HeartRateGraph : public GraphTab { Q_OBJECT public: HeartRateGraph(QWidget *parent = 0); + QString label() const {return tr("Heart rate");} void loadGPX(const GPX &gpx); void clear(); void setUnits(enum Units units); +private: qreal avg() const; qreal max() const {return bounds().bottom();} - -private: void setXUnits(); void addInfo(); diff --git a/src/speedgraph.cpp b/src/speedgraph.cpp index 57cbebb9..fcd60ef3 100644 --- a/src/speedgraph.cpp +++ b/src/speedgraph.cpp @@ -3,7 +3,7 @@ #include "speedgraph.h" -SpeedGraph::SpeedGraph(QWidget *parent) : GraphView(parent) +SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent) { _units = Metric; diff --git a/src/speedgraph.h b/src/speedgraph.h index e9118de4..0827fb19 100644 --- a/src/speedgraph.h +++ b/src/speedgraph.h @@ -2,26 +2,25 @@ #define SPEEDGRAPH_H #include -#include "graphview.h" -#include "units.h" +#include "graphtab.h" class GPX; -class SpeedGraph : public GraphView +class SpeedGraph : public GraphTab { Q_OBJECT public: SpeedGraph(QWidget *parent = 0); + QString label() const {return tr("Speed");} void loadGPX(const GPX &gpx); void clear(); void setUnits(enum Units units); +private: qreal avg() const; qreal max() const {return bounds().bottom();} - -private: void setXUnits(); void setYUnits(); void addInfo(); diff --git a/src/temperaturegraph.cpp b/src/temperaturegraph.cpp index cdfd272b..c9e65be8 100644 --- a/src/temperaturegraph.cpp +++ b/src/temperaturegraph.cpp @@ -2,7 +2,7 @@ #include "temperaturegraph.h" -TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphView(parent) +TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphTab(parent) { _units = Metric; diff --git a/src/temperaturegraph.h b/src/temperaturegraph.h index 88fafec8..4838f8e8 100644 --- a/src/temperaturegraph.h +++ b/src/temperaturegraph.h @@ -1,27 +1,26 @@ #ifndef TEMPERATUREGRAPH_H #define TEMPERATUREGRAPH_H -#include "units.h" -#include "graphview.h" +#include "graphtab.h" class GPX; -class TemperatureGraph : public GraphView +class TemperatureGraph : public GraphTab { Q_OBJECT public: TemperatureGraph(QWidget *parent = 0); + QString label() const {return tr("Temperature");} void loadGPX(const GPX &gpx); void clear(); void setUnits(enum Units units); +private: qreal avg() const; qreal min() const {return bounds().top();} qreal max() const {return bounds().bottom();} - -private: void setXUnits(); void setYUnits(); void addInfo();