LTM: Add fill curves option

.. so you can fill below the curve.
.. also added a 'version' field for the file format for metric
   details, so we can add more fields later.
This commit is contained in:
Mark Liversedge
2013-03-16 11:17:09 +00:00
parent 4d5dffbf34
commit 5c3a662b29
5 changed files with 46 additions and 9 deletions

View File

@@ -667,6 +667,13 @@ LTMPlot::setData(LTMSettings *set)
current->setSymbol(new QwtSymbol(sym));
current->setPen(cpen);
// fill below the line
if (metricDetail.fillCurve) {
QColor fillColor = metricDetail.penColor;
fillColor.setAlpha(60);
current->setBrush(fillColor);
}
} else if (metricDetail.curveStyle == QwtPlotCurve::Dots) {
sym.setSize(6);

View File

@@ -344,6 +344,8 @@ QDataStream &operator<<(QDataStream &out, const LTMSettings &settings)
out<<settings.legend;
out<<settings.field1;
out<<settings.field2;
out<<int(-1);
out<<int(1);
out<<settings.metrics.count();
foreach(MetricDetail metric, settings.metrics) {
out<<metric.type;
@@ -369,6 +371,7 @@ QDataStream &operator<<(QDataStream &out, const LTMSettings &settings)
out<<metric.penStyle;
out<<metric.brushColor;
out<<metric.brushAlpha;
out<<metric.fillCurve;
}
return out;
}
@@ -377,6 +380,7 @@ QDataStream &operator>>(QDataStream &in, LTMSettings &settings)
{
RideMetricFactory &factory = RideMetricFactory::instance();
int counter=0;
int version=0;
// all the basic fields first
in>>settings.name;
@@ -389,6 +393,14 @@ QDataStream &operator>>(QDataStream &in, LTMSettings &settings)
in>>settings.field1;
in>>settings.field2;
in>>counter;
// we now add version number before the counter
// if counter is -1 -- to make settings extensible
if (counter == -1) {
in>>version;
in>>counter;
}
while(counter--) {
MetricDetail m;
in>>m.type;
@@ -415,6 +427,13 @@ QDataStream &operator>>(QDataStream &in, LTMSettings &settings)
in>>m.penStyle;
in>>m.brushColor;
in>>m.brushAlpha;
// added curve filling in v1.0
if (version >=1) {
in>>m.fillCurve;
} else {
m.fillCurve = false;
}
// get a metric pointer (if it exists)
m.metric = factory.rideMetric(m.symbol);
settings.metrics.append(m);

View File

@@ -57,7 +57,7 @@ class MetricDetail {
MetricDetail() : type(METRIC_DB), stack(false), name(""), metric(NULL), smooth(false), trend(false), topN(0),
topOut(0), baseline(0.0), curveStyle(QwtPlotCurve::Lines), symbolStyle(QwtSymbol::NoSymbol),
penColor(Qt::black), penAlpha(0), penWidth(1.0), penStyle(0),
brushColor(Qt::black), brushAlpha(0) {}
brushColor(Qt::black), brushAlpha(0), fillCurve(false) {}
bool operator< (MetricDetail right) const { return name < right.name; }
@@ -94,6 +94,9 @@ class MetricDetail {
// brush
QColor brushColor;
int brushAlpha;
// fill curve
bool fillCurve;
};
// so we can marshal and unmarshall LTMSettings when we save

View File

@@ -798,6 +798,10 @@ EditMetricDetailDialog::EditMetricDetailDialog(MainWindow *mainWindow, MetricDet
QLabel *color = new QLabel(tr("Color"));
curveColor = new QPushButton(this);
QLabel *fill = new QLabel(tr("Fill curve"));
fillCurve = new QCheckBox("", this);
fillCurve->setChecked(metricDetail->fillCurve);
// color background...
penColor = metricDetail->penColor;
setButtonIcon(penColor);
@@ -845,14 +849,16 @@ EditMetricDetailDialog::EditMetricDetailDialog(MainWindow *mainWindow, MetricDet
grid->addWidget(stack, 4, 1);
grid->addWidget(color, 5,0);
grid->addWidget(curveColor, 5,1);
grid->addWidget(topN, 6,0);
grid->addWidget(showBest, 6,1);
grid->addWidget(outN, 7,0);
grid->addWidget(showOut, 7,1);
grid->addWidget(baseline, 8, 0);
grid->addWidget(baseLine, 8,1);
grid->addWidget(curveSmooth, 9,1);
grid->addWidget(curveTrend, 10,1);
grid->addWidget(fill, 6,0);
grid->addWidget(fillCurve, 6,1);
grid->addWidget(topN, 7,0);
grid->addWidget(showBest, 7,1);
grid->addWidget(outN, 8,0);
grid->addWidget(showOut, 8,1);
grid->addWidget(baseline, 9, 0);
grid->addWidget(baseLine, 9,1);
grid->addWidget(curveSmooth, 10,1);
grid->addWidget(curveTrend, 11,1);
mainLayout->addLayout(grid);
@@ -892,6 +898,7 @@ EditMetricDetailDialog::applyClicked()
metricDetail->curveStyle = styleMap[curveStyle->currentIndex()];
metricDetail->symbolStyle = symbolMap[curveSymbol->currentIndex()];
metricDetail->penColor = penColor;
metricDetail->fillCurve = fillCurve;
metricDetail->uname = userName->text();
metricDetail->uunits = userUnits->text();
metricDetail->stack = stack->isChecked();

View File

@@ -179,6 +179,7 @@ class EditMetricDetailDialog : public QDialog
*curveSymbol;
QCheckBox *stack;
QPushButton *curveColor;
QCheckBox *fillCurve;
QDoubleSpinBox *showBest,
*showOut,
*baseLine;