diff --git a/src/HomeWindow.cpp b/src/HomeWindow.cpp
index c8d0ebacc..f2d97069f 100644
--- a/src/HomeWindow.cpp
+++ b/src/HomeWindow.cpp
@@ -1392,6 +1392,7 @@ HomeWindow::saveState()
if (QString(p.typeName()) == "int") out<
setProperty(name.toLatin1(), QVariant(QString(value)));
+ if (type == "QDate") chart->setProperty(name.toLatin1(), QVariant(QDate::fromString(value)));
if (type == "bool") chart->setProperty(name.toLatin1(), QVariant(value.toInt() ? true : false));
if (type == "LTMSettings") {
QByteArray base64(value.toLatin1());
diff --git a/src/LTMTool.cpp b/src/LTMTool.cpp
index 04e0457c3..6bc1b7934 100644
--- a/src/LTMTool.cpp
+++ b/src/LTMTool.cpp
@@ -72,9 +72,29 @@ LTMTool::LTMTool(MainWindow *parent, const QDir &home, bool multi) : QWidget(par
QHBoxLayout *presetrow = new QHBoxLayout;
presetrow->addWidget(presetLabel);
presetrow->addWidget(presetPicker);
+ presetrow->addStretch();
basicLayout->addLayout(presetrow);
basicLayout->addStretch();
+ radioSelected = new QRadioButton(tr("Current Selection"), this);
+ radioSelected->setChecked(true);
+ QHBoxLayout *selected = new QHBoxLayout; // use same layout mechanism as custom so they align
+ selected->addWidget(radioSelected);
+ selected->addStretch();
+ basicsettingsLayout->addRow(new QLabel("Date Range"), selected);
+
+ radioCustom = new QRadioButton(tr("From"), this);
+ radioCustom->setChecked(false);
+ fromDateEdit = new QDateEdit(this);
+ toDateEdit = new QDateEdit(this);
+ QHBoxLayout *custom = new QHBoxLayout;
+ custom->addWidget(radioCustom);
+ custom->addWidget(fromDateEdit);
+ custom->addWidget(new QLabel(tr("to")));
+ custom->addWidget(toDateEdit);
+ custom->addStretch();
+ basicsettingsLayout->addRow(new QLabel(""), custom);
+
groupBy = new QComboBox;
groupBy->addItem("Days", LTM_DAY);
groupBy->addItem("Weeks", LTM_WEEK);
@@ -85,10 +105,10 @@ LTMTool::LTMTool(MainWindow *parent, const QDir &home, bool multi) : QWidget(par
basicsettingsLayout->addRow(new QLabel("Group by"), groupBy);
shadeZones = new QCheckBox("Shade Zones");
- basicsettingsLayout->addRow(shadeZones);
+ basicsettingsLayout->addRow(new QLabel(""), shadeZones);
showLegend = new QCheckBox("Show Legend");
- basicsettingsLayout->addRow(showLegend);
+ basicsettingsLayout->addRow(new QLabel(""), showLegend);
// controls
saveButton = new QPushButton(tr("Add"));
@@ -550,6 +570,12 @@ LTMTool::LTMTool(MainWindow *parent, const QDir &home, bool multi) : QWidget(par
this, SLOT(configChanged()));
connect(metricTree,SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(metricTreePopup(const QPoint &)));
+
+ // switched between one or other
+ connect(radioSelected, SIGNAL(toggled(bool)), this, SLOT(setDateSettings()));
+ connect(fromDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(setDateSettings()));
+ connect(toDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(setDateSettings()));
+
}
QwtPlotCurve::CurveStyle
@@ -929,6 +955,27 @@ LTMTool::setFilter(QStringList files)
emit filterChanged();
}
+void
+LTMTool::setDateSettings()
+{
+ // the date selection types have changed
+ if (radioCustom->isChecked()) {
+ fromDateEdit->setEnabled(true);
+ toDateEdit->setEnabled(true);
+
+ // set date range using custom values
+ emit useCustomRange(DateRange(fromDateEdit->date(), toDateEdit->date()));
+
+ } else {
+
+ fromDateEdit->setEnabled(false);
+ toDateEdit->setEnabled(false);
+
+ emit useStandardRange();
+ }
+
+}
+
void
LTMTool::translateDefaultCharts(QList&charts)
{
diff --git a/src/LTMTool.h b/src/LTMTool.h
index 7312f61ed..e35276e0e 100644
--- a/src/LTMTool.h
+++ b/src/LTMTool.h
@@ -90,12 +90,16 @@ class LTMTool : public QWidget
QCheckBox *showLegend;
QPushButton *saveButton;
QPushButton *manageButton;
+ QRadioButton *radioSelected, *radioCustom;
+ QDateEdit *fromDateEdit, *toDateEdit;
signals:
//void dateRangeSelected(const Season *);
void filterChanged();
void metricSelected();
+ void useCustomRange(DateRange); // use the range passed...
+ void useStandardRange(); // fall back to standard date range...
private slots:
//void dateRangeTreeWidgetSelectionChanged();
@@ -113,6 +117,7 @@ class LTMTool : public QWidget
void clearFilter();
void setFilter(QStringList);
+ void setDateSettings(); // when settings are updated wrt date selections
private:
diff --git a/src/LTMWindow.cpp b/src/LTMWindow.cpp
index 8b33f15ff..ad260c428 100644
--- a/src/LTMWindow.cpp
+++ b/src/LTMWindow.cpp
@@ -40,6 +40,7 @@ LTMWindow::LTMWindow(MainWindow *parent, bool useMetricUnits, const QDir &home)
{
main = parent;
setInstanceName("Metric Window");
+ useCustom = false;
plotted = DateRange(QDate(01,01,01), QDate(01,01,01));
// the plot
@@ -110,6 +111,8 @@ LTMWindow::LTMWindow(MainWindow *parent, bool useMetricUnits, const QDir &home)
connect(ltmTool->presetPicker, SIGNAL(currentIndexChanged(int)), this, SLOT(chartSelected(int)));
connect(ltmTool->shadeZones, SIGNAL(stateChanged(int)), this, SLOT(shadeZonesClicked(int)));
connect(ltmTool->showLegend, SIGNAL(stateChanged(int)), this, SLOT(showLegendClicked(int)));
+ connect(ltmTool, SIGNAL(useCustomRange(DateRange)), this, SLOT(useCustomRange(DateRange)));
+ connect(ltmTool, SIGNAL(useStandardRange()), this, SLOT(useStandardRange()));
// connect pickers to ltmPlot
connect(_canvasPicker, SIGNAL(pointHover(QwtPlotCurve*, int)), ltmPlot, SLOT(pointHover(QwtPlotCurve*, int)));
@@ -158,12 +161,28 @@ void
LTMWindow::refreshPlot()
{
if (amVisible() == true) {
- plotted = myDateRange;
+ plotted = DateRange(settings.start.date(), settings.end.date());
ltmPlot->setData(&settings);
dirty = false;
}
}
+void
+LTMWindow::useCustomRange(DateRange range)
+{
+ // plot using the supplied range
+ useCustom = true;
+ custom = range;
+ dateRangeChanged(custom);
+}
+
+void
+LTMWindow::useStandardRange()
+{
+ useCustom = false;
+ dateRangeChanged(myDateRange);
+}
+
// total redraw, reread data etc
void
LTMWindow::refresh()
@@ -222,8 +241,13 @@ LTMWindow::dateRangeChanged(DateRange range)
void
LTMWindow::filterChanged()
{
- settings.start = QDateTime(myDateRange.from, QTime(0,0));
- settings.end = QDateTime(myDateRange.to, QTime(24,0,0));
+ if (useCustom) {
+ settings.start = QDateTime(custom.from, QTime(0,0));
+ settings.end = QDateTime(custom.to, QTime(24,0,0));
+ } else {
+ settings.start = QDateTime(myDateRange.from, QTime(0,0));
+ settings.end = QDateTime(myDateRange.to, QTime(24,0,0));
+ }
settings.title = myDateRange.name;
settings.data = &results;
settings.measures = &measures;
diff --git a/src/LTMWindow.h b/src/LTMWindow.h
index fe1f64d2d..71ed5a66c 100644
--- a/src/LTMWindow.h
+++ b/src/LTMWindow.h
@@ -96,6 +96,9 @@ class LTMWindow : public LTMPlotContainer
#ifdef GC_HAVE_LUCENE
Q_PROPERTY(QString filter READ filter WRITE setFilter USER true)
#endif
+ Q_PROPERTY(bool useSelected READ useSelected WRITE setUseSelected USER true)
+ Q_PROPERTY(QDate fromDate READ fromDate WRITE setFromDate USER true)
+ Q_PROPERTY(QDate toDate READ toDate WRITE setToDate USER true)
Q_PROPERTY(LTMSettings settings READ getSettings WRITE applySettings USER true)
public:
@@ -114,6 +117,15 @@ class LTMWindow : public LTMPlotContainer
bool legend() const { return ltmTool->showLegend->isChecked(); }
void setLegend(bool x) { ltmTool->showLegend->setChecked(x); }
+ bool useSelected() { return ltmTool->radioSelected->isChecked(); }
+ void setUseSelected(bool x) { ltmTool->radioSelected->setChecked(x);
+ ltmTool->radioCustom->setChecked(!x);
+ }
+ QDate fromDate() { return ltmTool->fromDateEdit->date(); }
+ void setFromDate(QDate date) { return ltmTool->fromDateEdit->setDate(date); }
+ QDate toDate() { return ltmTool->toDateEdit->date(); }
+ void setToDate(QDate date) { return ltmTool->toDateEdit->setDate(date); }
+
#ifdef GC_HAVE_LUCENE
QString filter() const { return ltmTool->searchBox->filter(); }
void setFilter(QString x) { ltmTool->searchBox->setFilter(x); }
@@ -138,6 +150,8 @@ class LTMWindow : public LTMPlotContainer
void pointClicked(QwtPlotCurve*, int);
int groupForDate(QDate, int);
+ void useCustomRange(DateRange);
+ void useStandardRange();
private:
// passed from MainWindow
@@ -145,6 +159,9 @@ class LTMWindow : public LTMPlotContainer
bool useMetricUnits;
DateRange plotted;
+ bool useCustom;
+ DateRange custom; // custom date range supplied
+
// qwt picker
LTMToolTip *picker;
LTMCanvasPicker *_canvasPicker; // allow point selection/hover