From c926e82129f62f75619b7c9574b75d948d8570ac Mon Sep 17 00:00:00 2001 From: Tobias WEBER Date: Thu, 2 Jan 2025 16:38:57 +0100 Subject: [PATCH] a) altitude plot; b) cleanups --- CMakeLists.txt | 26 ++-- src/common/version.h | 17 +++ src/gui/{ => dialogs}/about.cpp | 3 +- src/gui/{ => dialogs}/about.h | 2 +- src/gui/{ => dialogs}/conversions.cpp | 2 +- src/gui/{ => dialogs}/conversions.h | 2 +- src/gui/{ => dialogs}/reports.cpp | 4 +- src/gui/{ => dialogs}/reports.h | 2 +- src/gui/{ => dialogs}/settings.cpp | 0 src/gui/{ => dialogs}/settings.h | 0 src/gui/{ => dialogs}/statistics.cpp | 2 +- src/gui/{ => dialogs}/statistics.h | 2 +- src/gui/{ => dialogs}/summary.cpp | 4 +- src/gui/{ => dialogs}/summary.h | 2 +- src/gui/{ => docks}/map.cpp | 0 src/gui/{ => docks}/map.h | 2 +- src/gui/{ => docks}/track_browser.cpp | 2 +- src/gui/{ => docks}/track_browser.h | 2 +- src/gui/{ => docks}/track_infos.cpp | 203 +++++++++++++++++++++++--- src/gui/{ => docks}/track_infos.h | 17 ++- src/gui/gui.cpp | 8 +- src/gui/gui.h | 19 +-- src/gui/main.cpp | 7 +- src/lib/track.h | 4 +- 24 files changed, 270 insertions(+), 62 deletions(-) create mode 100644 src/common/version.h rename src/gui/{ => dialogs}/about.cpp (99%) rename src/gui/{ => dialogs}/about.h (96%) rename src/gui/{ => dialogs}/conversions.cpp (99%) rename src/gui/{ => dialogs}/conversions.h (98%) rename src/gui/{ => dialogs}/reports.cpp (99%) rename src/gui/{ => dialogs}/reports.h (98%) rename src/gui/{ => dialogs}/settings.cpp (100%) rename src/gui/{ => dialogs}/settings.h (100%) rename src/gui/{ => dialogs}/statistics.cpp (99%) rename src/gui/{ => dialogs}/statistics.h (98%) rename src/gui/{ => dialogs}/summary.cpp (99%) rename src/gui/{ => dialogs}/summary.h (97%) rename src/gui/{ => docks}/map.cpp (100%) rename src/gui/{ => docks}/map.h (98%) rename src/gui/{ => docks}/track_browser.cpp (99%) rename src/gui/{ => docks}/track_browser.h (97%) rename src/gui/{ => docks}/track_infos.cpp (82%) rename src/gui/{ => docks}/track_infos.h (88%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 427ee28..d53adc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,27 +89,33 @@ set_source_files_properties( add_executable(tracks + # main gui src/gui/main.cpp src/gui/gui.cpp src/gui/gui.h - src/gui/settings.cpp src/gui/settings.h src/gui/globals.cpp src/gui/globals.h - src/gui/about.cpp src/gui/about.h src/gui/resources.cpp src/gui/resources.h src/gui/recent.h src/gui/helpers.h - src/gui/track_browser.cpp src/gui/track_browser.h - src/gui/track_infos.cpp src/gui/track_infos.h - src/gui/conversions.cpp src/gui/conversions.h - src/gui/statistics.cpp src/gui/statistics.h - src/gui/reports.cpp src/gui/reports.h - src/gui/summary.cpp src/gui/summary.h - src/gui/map.cpp src/gui/map.h - src/common/types.h + # dock widgets + src/gui/docks/track_browser.cpp src/gui/docks/track_browser.h + src/gui/docks/track_infos.cpp src/gui/docks/track_infos.h + src/gui/docks/map.cpp src/gui/docks/map.h + + # dialogs + src/gui/dialogs/conversions.cpp src/gui/dialogs/conversions.h + src/gui/dialogs/statistics.cpp src/gui/dialogs/statistics.h + src/gui/dialogs/reports.cpp src/gui/dialogs/reports.h + src/gui/dialogs/summary.cpp src/gui/dialogs/summary.h + src/gui/dialogs/about.cpp src/gui/dialogs/about.h + src/gui/dialogs/settings.cpp src/gui/dialogs/settings.h + # libs src/lib/calc.h src/lib/timepoint.h src/lib/track.h src/lib/trackdb.h src/lib/map.h + src/common/types.h + # external libs ext/qcustomplot.cpp ext/qcustomplot.h ) diff --git a/src/common/version.h b/src/common/version.h new file mode 100644 index 0000000..66d6fc2 --- /dev/null +++ b/src/common/version.h @@ -0,0 +1,17 @@ +/** + * version infos + * @author Tobias Weber (orcid: 0000-0002-7230-1932) + * @date Nov-2024 + * @license see 'LICENSE' file + */ + +#ifndef __TRACKS_VER_H__ +#define __TRACKS_VER_H__ + + +#define TRACKS_IDENT "tracks" +#define TRACKS_TITLE "Tracks" +#define TRACKS_VERSION "0.2" + + +#endif diff --git a/src/gui/about.cpp b/src/gui/dialogs/about.cpp similarity index 99% rename from src/gui/about.cpp rename to src/gui/dialogs/about.cpp index 4c83db5..6b85513 100644 --- a/src/gui/about.cpp +++ b/src/gui/dialogs/about.cpp @@ -6,6 +6,7 @@ */ #include "about.h" +#include "common/version.h" #include #include @@ -76,7 +77,7 @@ About::About(QWidget *parent, const QIcon *progIcon) // add description items //AddTitle(QApplication::applicationDisplayName().toStdString().c_str()); - AddTitle("Tracks", progIcon); + AddTitle(TRACKS_TITLE, progIcon); AddSpacer(15); diff --git a/src/gui/about.h b/src/gui/dialogs/about.h similarity index 96% rename from src/gui/about.h rename to src/gui/dialogs/about.h index 6011133..5ea600b 100644 --- a/src/gui/about.h +++ b/src/gui/dialogs/about.h @@ -13,7 +13,7 @@ #include -#include "resources.h" +#include "../resources.h" class About : public QDialog diff --git a/src/gui/conversions.cpp b/src/gui/dialogs/conversions.cpp similarity index 99% rename from src/gui/conversions.cpp rename to src/gui/dialogs/conversions.cpp index a309910..b411308 100644 --- a/src/gui/conversions.cpp +++ b/src/gui/dialogs/conversions.cpp @@ -6,8 +6,8 @@ */ #include "conversions.h" -#include "helpers.h" #include "lib/calc.h" +#include "../helpers.h" #include #include diff --git a/src/gui/conversions.h b/src/gui/dialogs/conversions.h similarity index 98% rename from src/gui/conversions.h rename to src/gui/dialogs/conversions.h index 8246ded..5fdcf34 100644 --- a/src/gui/conversions.h +++ b/src/gui/dialogs/conversions.h @@ -23,7 +23,7 @@ #include -#include "globals.h" +#include "../globals.h" /** diff --git a/src/gui/reports.cpp b/src/gui/dialogs/reports.cpp similarity index 99% rename from src/gui/reports.cpp rename to src/gui/dialogs/reports.cpp index 04b8a6c..8189162 100644 --- a/src/gui/reports.cpp +++ b/src/gui/dialogs/reports.cpp @@ -6,9 +6,9 @@ */ #include "reports.h" -#include "helpers.h" -#include "tableitems.h" #include "lib/calc.h" +#include "../helpers.h" +#include "../tableitems.h" #include #include diff --git a/src/gui/reports.h b/src/gui/dialogs/reports.h similarity index 98% rename from src/gui/reports.h rename to src/gui/dialogs/reports.h index 03366bb..d0b356e 100644 --- a/src/gui/reports.h +++ b/src/gui/dialogs/reports.h @@ -26,8 +26,8 @@ #include #include -#include "globals.h" #include "lib/trackdb.h" +#include "../globals.h" /** diff --git a/src/gui/settings.cpp b/src/gui/dialogs/settings.cpp similarity index 100% rename from src/gui/settings.cpp rename to src/gui/dialogs/settings.cpp diff --git a/src/gui/settings.h b/src/gui/dialogs/settings.h similarity index 100% rename from src/gui/settings.h rename to src/gui/dialogs/settings.h diff --git a/src/gui/statistics.cpp b/src/gui/dialogs/statistics.cpp similarity index 99% rename from src/gui/statistics.cpp rename to src/gui/dialogs/statistics.cpp index 07bd859..324edfc 100644 --- a/src/gui/statistics.cpp +++ b/src/gui/dialogs/statistics.cpp @@ -6,8 +6,8 @@ */ #include "statistics.h" -#include "helpers.h" #include "lib/calc.h" +#include "../helpers.h" #include #include diff --git a/src/gui/statistics.h b/src/gui/dialogs/statistics.h similarity index 98% rename from src/gui/statistics.h rename to src/gui/dialogs/statistics.h index b7fab81..f7ea21b 100644 --- a/src/gui/statistics.h +++ b/src/gui/dialogs/statistics.h @@ -23,8 +23,8 @@ #include -#include "globals.h" #include "lib/trackdb.h" +#include "../globals.h" /** diff --git a/src/gui/summary.cpp b/src/gui/dialogs/summary.cpp similarity index 99% rename from src/gui/summary.cpp rename to src/gui/dialogs/summary.cpp index b182e78..58462b9 100644 --- a/src/gui/summary.cpp +++ b/src/gui/dialogs/summary.cpp @@ -6,9 +6,9 @@ */ #include "summary.h" -#include "helpers.h" -#include "tableitems.h" #include "lib/calc.h" +#include "../helpers.h" +#include "../tableitems.h" #include #include diff --git a/src/gui/summary.h b/src/gui/dialogs/summary.h similarity index 97% rename from src/gui/summary.h rename to src/gui/dialogs/summary.h index 8551482..4e45de4 100644 --- a/src/gui/summary.h +++ b/src/gui/dialogs/summary.h @@ -16,8 +16,8 @@ #include #include -#include "globals.h" #include "lib/trackdb.h" +#include "../globals.h" /** diff --git a/src/gui/map.cpp b/src/gui/docks/map.cpp similarity index 100% rename from src/gui/map.cpp rename to src/gui/docks/map.cpp diff --git a/src/gui/map.h b/src/gui/docks/map.h similarity index 98% rename from src/gui/map.h rename to src/gui/docks/map.h index 0fba9cf..3bf425b 100644 --- a/src/gui/map.h +++ b/src/gui/docks/map.h @@ -18,8 +18,8 @@ #include -#include "globals.h" #include "lib/map.h" +#include "../globals.h" // -------------------------------------------------------------------------------- diff --git a/src/gui/track_browser.cpp b/src/gui/docks/track_browser.cpp similarity index 99% rename from src/gui/track_browser.cpp rename to src/gui/docks/track_browser.cpp index 07b74f5..58959a5 100644 --- a/src/gui/track_browser.cpp +++ b/src/gui/docks/track_browser.cpp @@ -6,7 +6,7 @@ */ #include "track_browser.h" -#include "helpers.h" +#include "../helpers.h" #include #include diff --git a/src/gui/track_browser.h b/src/gui/docks/track_browser.h similarity index 97% rename from src/gui/track_browser.h rename to src/gui/docks/track_browser.h index e966b2a..5e424e2 100644 --- a/src/gui/track_browser.h +++ b/src/gui/docks/track_browser.h @@ -14,7 +14,7 @@ #include #include -#include "globals.h" +#include "../globals.h" /** diff --git a/src/gui/track_infos.cpp b/src/gui/docks/track_infos.cpp similarity index 82% rename from src/gui/track_infos.cpp rename to src/gui/docks/track_infos.cpp index 6db23d2..0b6f53f 100644 --- a/src/gui/track_infos.cpp +++ b/src/gui/docks/track_infos.cpp @@ -6,8 +6,9 @@ */ #include "track_infos.h" -#include "helpers.h" #include "lib/calc.h" +#include "common/version.h" +#include "../helpers.h" namespace fs = __map_fs; #include @@ -23,18 +24,30 @@ namespace fs = __map_fs; #include #include #include +#include #include #include namespace num = std::numbers; +#define TAB_TRACK 0 +#define TAB_ALT 1 +#define TAB_PACE 2 +#define TAB_MAP 3 + + +/** + * setup tabs + */ TrackInfos::TrackInfos(QWidget* parent) : QWidget{parent} { m_tab = std::make_shared(this); QWidget *plot_panel = new QWidget(m_tab.get()); + QWidget *alt_panel = new QWidget(m_tab.get()); QWidget *pace_panel = new QWidget(m_tab.get()); QWidget *map_panel = new QWidget(m_tab.get()); m_tab->addTab(plot_panel, "Track"); + m_tab->addTab(alt_panel, "Altitude"); m_tab->addTab(pace_panel, "Pace"); m_tab->addTab(map_panel, "Map"); #ifndef _TRACKS_USE_OSMIUM_ @@ -70,6 +83,33 @@ TrackInfos::TrackInfos(QWidget* parent) : QWidget{parent} plot_panel_layout->addWidget(m_same_range.get(), 1, 0, 1, 1); plot_panel_layout->addWidget(btn_replot, 1, 3, 1, 1); + // altitude plot panel + m_alt_plot = std::make_shared(alt_panel); + m_alt_plot->setSelectionRectMode(QCP::srmZoom); + m_alt_plot->setInteraction(QCP::Interaction(int(QCP::iRangeZoom) | int(QCP::iRangeDrag))); + m_alt_plot->yAxis->setLabel("Altitude (m)"); + m_alt_plot->legend->setVisible(false); + connect(m_alt_plot.get(), &QCustomPlot::mouseMove, this, &TrackInfos::AltPlotMouseMove); + + m_time_check = std::make_shared(alt_panel); + m_time_check->setText("Plot Times"); + m_time_check->setToolTip("Show elapsed time instead of distance."); + m_time_check->setChecked(false); + connect(m_time_check.get(), &QCheckBox::toggled, this, &TrackInfos::PlotAlt); + + QPushButton *btn_replot_alt = new QPushButton(alt_panel); + btn_replot_alt->setText("Reset Plot"); + btn_replot_alt->setToolTip("Reset the plotting range."); + connect(btn_replot_alt, &QAbstractButton::clicked, this, &TrackInfos::ResetAltPlotRange); + + QGridLayout *alt_panel_layout = new QGridLayout(alt_panel); + alt_panel_layout->setContentsMargins(4, 4, 4, 4); + alt_panel_layout->setVerticalSpacing(4); + alt_panel_layout->setHorizontalSpacing(4); + alt_panel_layout->addWidget(m_alt_plot.get(), 0, 0, 1, 4); + alt_panel_layout->addWidget(m_time_check.get(), 1, 0, 1, 1); + alt_panel_layout->addWidget(btn_replot_alt, 1, 3, 1, 1); + // pace plot panel m_pace_plot = std::make_shared(pace_panel); m_pace_plot->setSelectionRectMode(QCP::srmZoom); @@ -78,6 +118,12 @@ TrackInfos::TrackInfos(QWidget* parent) : QWidget{parent} m_pace_plot->legend->setVisible(true); connect(m_pace_plot.get(), &QCustomPlot::mouseMove, this, &TrackInfos::PacePlotMouseMove); + m_speed_check = std::make_shared(pace_panel); + m_speed_check->setText("Plot Speeds"); + m_speed_check->setToolTip("Show speeds instead of paces."); + m_speed_check->setChecked(false); + connect(m_speed_check.get(), &QCheckBox::toggled, this, &TrackInfos::PlotPace); + m_dist_binlen = std::make_shared(pace_panel); m_dist_binlen->setDecimals(2); m_dist_binlen->setValue(0.25); @@ -89,12 +135,6 @@ TrackInfos::TrackInfos(QWidget* parent) : QWidget{parent} static_cast(&QDoubleSpinBox::valueChanged), this, &TrackInfos::PlotPace); - m_speed_check = std::make_shared(this); - m_speed_check->setText("Plot Speeds"); - m_speed_check->setToolTip("Show speeds instead of paces."); - m_speed_check->setChecked(false); - connect(m_speed_check.get(), &QCheckBox::toggled, this, &TrackInfos::PlotPace); - QPushButton *btn_replot_pace = new QPushButton(pace_panel); btn_replot_pace->setText("Reset Plot"); btn_replot_pace->setToolTip("Reset the plotting range."); @@ -105,9 +145,9 @@ TrackInfos::TrackInfos(QWidget* parent) : QWidget{parent} pace_panel_layout->setVerticalSpacing(4); pace_panel_layout->setHorizontalSpacing(4); pace_panel_layout->addWidget(m_pace_plot.get(), 0, 0, 1, 4); - pace_panel_layout->addWidget(new QLabel("Distance Binning:", pace_panel), 1, 0, 1, 1); - pace_panel_layout->addWidget(m_dist_binlen.get(), 1, 1, 1, 1); - pace_panel_layout->addWidget(m_speed_check.get(), 1, 2, 1, 1); + pace_panel_layout->addWidget(m_speed_check.get(), 1, 0, 1, 1); + pace_panel_layout->addWidget(new QLabel("Distance Binning:", pace_panel), 1, 1, 1, 1); + pace_panel_layout->addWidget(m_dist_binlen.get(), 1, 2, 1, 1); pace_panel_layout->addWidget(btn_replot_pace, 1, 3, 1, 1); // map plot panel @@ -187,6 +227,7 @@ void TrackInfos::ShowTrack(const t_track& track) PlotTrack(); PlotPace(); + PlotAlt(); PlotMap(true); } @@ -205,12 +246,14 @@ void TrackInfos::CalcTrackPlotRange() { int h = 0, w = 0; - if(m_tab->currentIndex() == 0 && m_track_plot->isVisible()) // track + if(m_tab->currentIndex() == TAB_TRACK + && m_track_plot->isVisible()) // track { h = m_track_plot->viewport().height(); w = m_track_plot->viewport().width(); } - else if(m_tab->currentIndex() == 2 && m_map->isVisible()) // map + else if(m_tab->currentIndex() == TAB_MAP + && m_map->isVisible()) // map { h = m_map->height(); w = m_map->width(); @@ -297,6 +340,7 @@ void TrackInfos::PlotTrack() QCPCurve *curve = new QCPCurve(m_track_plot->xAxis, m_track_plot->yAxis); curve->setData(longitudes, latitudes); //curve->setLineStyle(QCPCurve::lsLine); + QPen pen = curve->pen(); pen.setWidthF(2.); pen.setColor(QColor{0x00, 0x00, 0xff, 0xff}); @@ -306,6 +350,83 @@ void TrackInfos::PlotTrack() } +void TrackInfos::ResetAltPlotRange() +{ + if(!m_alt_plot) + return; + + t_real alt_range = m_max_alt - m_min_alt; + + m_alt_plot->xAxis->setRange(m_min_dist_alt, m_max_dist_alt); + m_alt_plot->yAxis->setRange( + m_min_alt - alt_range / 20., + m_max_alt + alt_range / 20.); + + m_alt_plot->replot(); +} + + +void TrackInfos::PlotAlt() +{ + if(!m_track || !m_alt_plot) + return; + + m_alt_plot->clearPlottables(); + + const bool plot_time = m_time_check->isChecked(); + if(plot_time) + m_alt_plot->xAxis->setLabel("Time (min)"); + else + m_alt_plot->xAxis->setLabel("Distance (km)"); + + QVector dist, alt; + + dist.reserve(m_track->GetPoints().size()); + alt.reserve(m_track->GetPoints().size()); + + m_min_alt = std::numeric_limits::max(); + m_max_alt = -m_min_alt; + + for(const t_track_pt& pt : m_track->GetPoints()) + { + if(plot_time) + dist.push_back(pt.elapsed_total / 60.); + else + dist.push_back(pt.distance_total / 1000.); + alt.push_back(pt.elevation); + + m_min_alt = std::min(m_min_alt, pt.elevation); + m_max_alt = std::max(m_max_alt, pt.elevation); + } + + if(!alt.size()) + return; + + if(plot_time) + { + m_min_dist_alt = *dist.begin(); + m_max_dist_alt = *dist.rbegin(); + } + else + { + // use same distance range as in pace plot + m_min_dist_alt = m_min_dist; + m_max_dist_alt = m_max_dist; + } + + QCPGraph *curve = new QCPGraph(m_alt_plot->xAxis, m_alt_plot->yAxis); + curve->setData(dist, alt); + //curve->setLineStyle(QCPCurve::lsLine); + + QPen pen = curve->pen(); + pen.setWidthF(2.); + pen.setColor(QColor{0x00, 0x00, 0xff, 0xff}); + curve->setPen(pen); + + ResetAltPlotRange(); +} + + void TrackInfos::ResetPacePlotRange() { if(!m_pace_plot) @@ -313,7 +434,7 @@ void TrackInfos::ResetPacePlotRange() t_real pace_range = m_max_pace - m_min_pace; - m_pace_plot->xAxis->setRange(0., m_max_dist); + m_pace_plot->xAxis->setRange(m_min_dist, m_max_dist); m_pace_plot->yAxis->setRange( m_min_pace - pace_range / 20., m_max_pace + pace_range / 20.); @@ -327,10 +448,10 @@ void TrackInfos::PlotPace() if(!m_track || !m_pace_plot) return; + m_pace_plot->clearPlottables(); + const t_real dist_bin = m_dist_binlen->value() * 1000.; const bool plot_speed = m_speed_check->isChecked(); - - m_pace_plot->clearPlottables(); if(plot_speed) m_pace_plot->yAxis->setLabel("Speed (km/h)"); else @@ -367,7 +488,7 @@ void TrackInfos::PlotPace() auto [min_dist_pl_iter, max_dist_pl_iter] = std::minmax_element(dists_planar.begin(), dists_planar.end()); auto [min_time_pl_iter, max_time_pl_iter] = std::minmax_element(times_planar.begin(), times_planar.end()); - m_min_dist = std::min(*min_dist_iter, *min_dist_pl_iter); + m_min_dist = 0.; //std::min(*min_dist_iter, *min_dist_pl_iter); m_max_dist = std::max(*max_dist_iter, *max_dist_pl_iter) + dist_bin / 2000.; m_min_pace = std::min(*min_time_iter, *min_time_pl_iter); m_max_pace = std::max(*max_time_iter, *max_time_pl_iter); @@ -488,7 +609,7 @@ void TrackInfos::PlotMap(bool load_cached) progress_dlg.setMinimumDuration(500); progress_dlg.setAutoClose(true); progress_dlg.setWindowModality(Qt::WindowModal); - progress_dlg.setWindowTitle("Tracks"); + progress_dlg.setWindowTitle(TRACKS_TITLE); progress_dlg.setLabelText("Calculating map..."); // map loading progress callback @@ -612,6 +733,18 @@ void TrackInfos::Clear() m_track_plot->replot(); } + if(m_alt_plot) + { + m_alt_plot->clearPlottables(); + m_alt_plot->replot(); + } + + if(m_pace_plot) + { + m_pace_plot->clearPlottables(); + m_pace_plot->replot(); + } + if(m_map) { m_map_image.clear(); @@ -674,6 +807,38 @@ void TrackInfos::PacePlotMouseMove(QMouseEvent *evt) } +/** + * the mouse has moved in the altitude plot widget + */ +void TrackInfos::AltPlotMouseMove(QMouseEvent *evt) +{ + if(!m_alt_plot) + return; + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qreal x = evt->position().x(); + qreal y = evt->position().y(); +#else + qreal x = evt->x(); + qreal y = evt->y(); +#endif + + t_real dist = m_pace_plot->xAxis->pixelToCoord(x); + t_real alt = m_pace_plot->yAxis->pixelToCoord(y); + + std::ostringstream ostr; + ostr.precision(g_prec_gui); + + if(m_time_check->isChecked()) + ostr << "Time: " << dist << " min"; + else + ostr << "Distance: " << dist << " km"; + ostr << ", Altitude: " << alt << " m."; + + emit StatusMessageChanged(ostr.str().c_str()); +} + + /** * the mouse has moved in the map widget */ @@ -752,6 +917,7 @@ void TrackInfos::SaveSettings(QSettings& settings) settings.setValue("track_info/recent_tab", m_tab->currentIndex()); settings.setValue("track_info/distance_bin", m_dist_binlen->value()); settings.setValue("track_info/speed_check", m_speed_check->isChecked()); + settings.setValue("track_info/time_check", m_time_check->isChecked()); } @@ -781,4 +947,7 @@ void TrackInfos::RestoreSettings(QSettings& settings) if(settings.contains("track_info/speed_check")) m_speed_check->setChecked(settings.value("track_info/speed_check").toBool()); + + if(settings.contains("track_info/time_check")) + m_time_check->setChecked(settings.value("track_info/time_check").toBool()); } diff --git a/src/gui/track_infos.h b/src/gui/docks/track_infos.h similarity index 88% rename from src/gui/track_infos.h rename to src/gui/docks/track_infos.h index 030fb95..61dc242 100644 --- a/src/gui/track_infos.h +++ b/src/gui/docks/track_infos.h @@ -29,8 +29,8 @@ #include -#include "globals.h" #include "map.h" +#include "../globals.h" /** @@ -70,19 +70,30 @@ class TrackInfos : public QWidget void ResetPacePlotRange(); void PlotPace(); + void AltPlotMouseMove(QMouseEvent *evt); + void ResetAltPlotRange(); + void PlotAlt(); + private: std::shared_ptr m_split{}; std::shared_ptr m_tab{}; std::shared_ptr m_infos{}; + // track tab std::shared_ptr m_track_plot{}; std::shared_ptr m_same_range{}; + // map tab std::shared_ptr m_map{}; std::shared_ptr m_mapfile{}; std::shared_ptr m_map_context{}; + // altitude tab + std::shared_ptr m_alt_plot{}; + std::shared_ptr m_time_check{}; + + // pace tab std::shared_ptr m_pace_plot{}; std::shared_ptr m_dist_binlen{}; std::shared_ptr m_speed_check{}; @@ -94,6 +105,10 @@ class TrackInfos : public QWidget t_real m_min_long{}, m_max_long{}; t_real m_min_lat{}, m_max_lat{}; + // altitutde range + t_real m_min_dist_alt{}, m_max_dist_alt{}; + t_real m_min_alt{}, m_max_alt{}; + // plotted coordinate ranges t_real m_min_long_plot{}, m_max_long_plot{}; t_real m_min_lat_plot{}, m_max_lat_plot{}; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 5ae9b32..70c95ef 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -28,9 +28,9 @@ #endif #include "helpers.h" +#include "common/version.h" -#define TRACKS_WND_TITLE "Tracks" #define GUI_THEME_UNSET "Unset" @@ -90,8 +90,6 @@ void TracksWnd::SetupGUI() this, &TracksWnd::TrackDeleted); connect(m_track->GetWidget(), &TrackInfos::PlotCoordsChanged, this, &TracksWnd::PlotCoordsChanged); - //connect(m_track->GetWidget(), &TrackInfos::StatusMessageChanged, - // this, &TracksWnd::SetStatusMessage); connect(m_track->GetWidget(), &TrackInfos::StatusMessageChanged, [this](const QString& msg) { @@ -1008,11 +1006,11 @@ void TracksWnd::SetActiveFile() QString mod{IsWindowModified() ? " *" : ""}; if(filename == "") { - setWindowTitle(QString(TRACKS_WND_TITLE "%1").arg(mod)); + setWindowTitle(QString(TRACKS_TITLE "%1").arg(mod)); } else { - setWindowTitle(QString(TRACKS_WND_TITLE " \u2014 %1%2") + setWindowTitle(QString(TRACKS_TITLE " \u2014 %1%2") .arg(QFileInfo{filename}.fileName()) .arg(mod)); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 0232cce..9540be4 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -20,19 +20,20 @@ #include "recent.h" #include "resources.h" #include "globals.h" -#include "settings.h" -#include "about.h" // docks -#include "track_browser.h" -#include "track_infos.h" +#include "docks/track_browser.h" +#include "docks/track_infos.h" // dialogs -#include "conversions.h" -#include "statistics.h" -#include "reports.h" -#include "summary.h" - +#include "dialogs/conversions.h" +#include "dialogs/statistics.h" +#include "dialogs/reports.h" +#include "dialogs/summary.h" +#include "dialogs/settings.h" +#include "dialogs/about.h" + +// lib #include "common/types.h" #include "lib/trackdb.h" diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 97acf2a..23852f7 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -7,6 +7,7 @@ #include "gui.h" #include "helpers.h" +#include "common/version.h" #include @@ -21,9 +22,9 @@ int main(int argc, char** argv) // application auto app = std::make_unique(argc, argv); app->setOrganizationName("tw"); - app->setApplicationName("tracks"); - //app->setApplicationDisplayName("Tracks"); - app->setApplicationVersion("0.1"); + app->setApplicationName(TRACKS_IDENT); + //app->setApplicationDisplayName(TRACKS_TITLE); + app->setApplicationVersion(TRACKS_VERSION); set_c_locale(); // main window diff --git a/src/lib/track.h b/src/lib/track.h index aee77d7..e2b8152 100644 --- a/src/lib/track.h +++ b/src/lib/track.h @@ -530,7 +530,7 @@ class SingleTrack << from_timepoint(*end_time, false) << " (" << get_time_str(t) << ")."; } - ostr << "
  • Elevation range: [ " << min_elev << ", " << max_elev << " ] m" + ostr << "
  • Altitude range: [ " << min_elev << ", " << max_elev << " ] m" << " (height difference: " << max_elev - min_elev << " m).
  • "; ostr << "
  • Distance: " << s / 1000. << " km" << " (planar: " << s_planar / 1000. << " km).
  • "; @@ -592,7 +592,7 @@ class SingleTrack ostr << "\n"; ostr << "Number of track points: " << track.GetPoints().size() << "\n"; - ostr << "Elevation range: [ " << min_elev << ", " << max_elev << " ] m\n"; + ostr << "Altitude range: [ " << min_elev << ", " << max_elev << " ] m\n"; ostr << "Height difference: " << max_elev - min_elev << " m\n"; ostr << "Total distance: " << s << " m = " << s / 1000. << " km\n"; ostr << "Total planar distance: " << s_planar / 1000. << " km\n";