From 8b2a04b52bebc3bd7ae9042ce7eb1506a66aaefa Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sat, 5 Jan 2013 10:49:00 +0000 Subject: [PATCH] Chart Dates: Part 3c of 3 Added chart date selection to the Summary chart. Still need to add this to; - Histogram --- src/RideSummaryWindow.cpp | 60 +++++++++++++++++++++++++++++++++++++-- src/RideSummaryWindow.h | 32 +++++++++++++++++++++ 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/src/RideSummaryWindow.cpp b/src/RideSummaryWindow.cpp index 148094959..d463167d4 100644 --- a/src/RideSummaryWindow.cpp +++ b/src/RideSummaryWindow.cpp @@ -33,12 +33,30 @@ #include RideSummaryWindow::RideSummaryWindow(MainWindow *mainWindow, bool ridesummary) : - GcWindow(mainWindow), mainWindow(mainWindow), ridesummary(ridesummary) + GcWindow(mainWindow), mainWindow(mainWindow), ridesummary(ridesummary), useCustom(false) { setInstanceName("Ride Summary Window"); - setControls(NULL); setRideItem(NULL); + // allow user to select date range if in summary mode + dateSetting = new DateSettingsEdit(this); + if (ridesummary) { + + setControls(NULL); + dateSetting->hide(); // not needed, but holds property values + + } else { + + QWidget *c = new QWidget; + c->setContentsMargins(0,0,0,0); + QFormLayout *cl = new QFormLayout(c); + cl->setContentsMargins(0,0,0,0); + cl->setSpacing(0); + setControls(c); + + cl->addRow(new QLabel(tr("Date range")), dateSetting); + } + QVBoxLayout *vlayout = new QVBoxLayout; vlayout->setSpacing(0); vlayout->setContentsMargins(10,10,10,10); @@ -55,13 +73,22 @@ RideSummaryWindow::RideSummaryWindow(MainWindow *mainWindow, bool ridesummary) : vlayout->addWidget(rideSummary); if (ridesummary) { + connect(this, SIGNAL(rideItemChanged(RideItem*)), this, SLOT(rideItemChanged())); connect(mainWindow, SIGNAL(zonesChanged()), this, SLOT(refresh())); connect(mainWindow, SIGNAL(intervalsChanged()), this, SLOT(refresh())); + } else { + connect(this, SIGNAL(dateRangeChanged(DateRange)), this, SLOT(dateRangeChanged(DateRange))); connect(mainWindow, SIGNAL(rideAdded(RideItem*)), this, SLOT(refresh())); connect(mainWindow, SIGNAL(rideDeleted(RideItem*)), this, SLOT(refresh())); + + // date settings + connect(dateSetting, SIGNAL(useCustomRange(DateRange)), this, SLOT(useCustomRange(DateRange))); + connect(dateSetting, SIGNAL(useThruToday()), this, SLOT(useThruToday())); + connect(dateSetting, SIGNAL(useStandardRange()), this, SLOT(useStandardRange())); + } setLayout(vlayout); } @@ -434,6 +461,31 @@ RideSummaryWindow::htmlSummary() const return summary; } +void +RideSummaryWindow::useCustomRange(DateRange range) +{ + // plot using the supplied range + useCustom = true; + custom = range; + dateRangeChanged(custom); +} + +void +RideSummaryWindow::useStandardRange() +{ + useCustom = false; + dateRangeChanged(myDateRange); +} + +void +RideSummaryWindow::useThruToday() +{ + // plot using the supplied range + useCustom = true; + custom = myDateRange; + if (custom.to > QDate::currentDate()) custom.to = QDate::currentDate(); + dateRangeChanged(custom); +} void RideSummaryWindow::dateRangeChanged(DateRange dr) { if (!amVisible()) return; @@ -442,6 +494,8 @@ void RideSummaryWindow::dateRangeChanged(DateRange dr) if (dr.from == current.from && dr.to == current.to) return; else current = dr; - data = mainWindow->metricDB->getAllMetricsFor(myDateRange); + if (useCustom) data = mainWindow->metricDB->getAllMetricsFor(custom); + else data = mainWindow->metricDB->getAllMetricsFor(myDateRange); + refresh(); } diff --git a/src/RideSummaryWindow.h b/src/RideSummaryWindow.h index 1c34e9e8d..f207a28b4 100644 --- a/src/RideSummaryWindow.h +++ b/src/RideSummaryWindow.h @@ -33,12 +33,35 @@ class RideSummaryWindow : public GcWindow Q_OBJECT G_OBJECT + Q_PROPERTY(QDate fromDate READ fromDate WRITE setFromDate USER true) + Q_PROPERTY(QDate toDate READ toDate WRITE setToDate USER true) + Q_PROPERTY(QDate startDate READ startDate WRITE setStartDate USER true) + Q_PROPERTY(int lastN READ lastN WRITE setLastN USER true) + Q_PROPERTY(int lastNX READ lastNX WRITE setLastNX USER true) + Q_PROPERTY(int prevN READ prevN WRITE setPrevN USER true) + Q_PROPERTY(int useSelected READ useSelected WRITE setUseSelected USER true) // !! must be last property !! public: // two modes - summarise ride or summarise date range RideSummaryWindow(MainWindow *parent, bool ridesummary = true); + // properties + int useSelected() { return dateSetting->mode(); } + void setUseSelected(int x) { dateSetting->setMode(x); } + QDate fromDate() { return dateSetting->fromDate(); } + void setFromDate(QDate date) { return dateSetting->setFromDate(date); } + QDate toDate() { return dateSetting->toDate(); } + void setToDate(QDate date) { return dateSetting->setToDate(date); } + QDate startDate() { return dateSetting->startDate(); } + void setStartDate(QDate date) { return dateSetting->setStartDate(date); } + int lastN() { return dateSetting->lastN(); } + void setLastN(int x) { dateSetting->setLastN(x); } + int lastNX() { return dateSetting->lastNX(); } + void setLastNX(int x) { dateSetting->setLastNX(x); } + int prevN() { return dateSetting->prevN(); } + void setPrevN(int x) { dateSetting->setPrevN(x); } + protected slots: void refresh(); @@ -47,6 +70,11 @@ class RideSummaryWindow : public GcWindow void rideItemChanged(); void metadataChanged(); + // date settings + void useCustomRange(DateRange); + void useStandardRange(); + void useThruToday(); + protected: QString htmlSummary() const; @@ -59,6 +87,10 @@ class RideSummaryWindow : public GcWindow QList data; // when in date range mode DateRange current; + + DateSettingsEdit *dateSetting; + bool useCustom; + DateRange custom; }; #endif // _GC_RideSummaryWindow_h