mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 16:39:57 +00:00
add realtime mode
Joint work between Mark L, Justin, and Steve Gribble.
This commit is contained in:
committed by
Sean Rhea
parent
fba3dba384
commit
78e0d004b8
121
src/ErgFilePlot.cpp
Normal file
121
src/ErgFilePlot.cpp
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Mark Liversedge (liversedge@gmail.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
||||
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
#include "ErgFilePlot.h"
|
||||
|
||||
// static locals for now
|
||||
static ErgFile *ergFile;
|
||||
static QList<ErgFilePoint> *courseData;
|
||||
static long Now;
|
||||
static int MaxWatts;
|
||||
|
||||
// Load history
|
||||
double ErgFileData::x(size_t i) const { return courseData ? courseData->at(i).x : 0; }
|
||||
double ErgFileData::y(size_t i) const { return courseData ? courseData->at(i).y : 0; }
|
||||
size_t ErgFileData::size() const { return courseData ? courseData->count() : 0; }
|
||||
QwtData *ErgFileData::copy() const { return new ErgFileData(); }
|
||||
//void ErgFileData::init() { }
|
||||
|
||||
// Now bar
|
||||
double NowData::x(size_t) const { return Now; }
|
||||
double NowData::y(size_t i) const { return (i ? MaxWatts : 0); }
|
||||
size_t NowData::size() const { return 2; }
|
||||
QwtData *NowData::copy() const { return new NowData(); }
|
||||
|
||||
ErgFilePlot::ErgFilePlot(QList<ErgFilePoint> *data)
|
||||
{
|
||||
//insertLegend(new QwtLegend(), QwtPlot::BottomLegend);
|
||||
setCanvasBackground(Qt::white);
|
||||
courseData = data; // what we plot
|
||||
Now = 0; // where we are
|
||||
|
||||
// Setup the axis (of evil :-)
|
||||
setAxisTitle(yLeft, "Watts");
|
||||
//setAxisScale(yLeft, 0, 500); // watts -- Autoscale please!
|
||||
enableAxis(yLeft, false);
|
||||
enableAxis(xBottom, false); // very little value and some cpu overhead
|
||||
enableAxis(yRight, false);
|
||||
|
||||
// Load Curve
|
||||
LodCurve = new QwtPlotCurve("Course Load");
|
||||
QPen Lodpen = QPen(Qt::blue, 1.0);
|
||||
LodCurve->setPen(Lodpen);
|
||||
LodCurve->setData(lodData);
|
||||
LodCurve->attach(this);
|
||||
LodCurve->setYAxis(QwtPlot::yLeft);
|
||||
QColor brush_color = QColor(124, 91, 31);
|
||||
brush_color.setAlpha(64);
|
||||
LodCurve->setBrush(brush_color); // fill below the line
|
||||
|
||||
// Now pointer
|
||||
NowCurve = new QwtPlotCurve("Now");
|
||||
QPen Nowpen = QPen(Qt::red, 2.0);
|
||||
NowCurve->setPen(Nowpen);
|
||||
NowCurve->setData(nowData);
|
||||
NowCurve->attach(this);
|
||||
NowCurve->setYAxis(QwtPlot::yLeft);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ErgFilePlot::setData(ErgFile *ergfile)
|
||||
{
|
||||
if (ergfile) {
|
||||
|
||||
// set up again
|
||||
ergFile = ergfile;
|
||||
setTitle(ergFile->Name);
|
||||
courseData = &ergfile->Points;
|
||||
MaxWatts = ergfile->MaxWatts;
|
||||
|
||||
// clear the previous marks (if any)
|
||||
for(int i=0; i<Marks.count(); i++) {
|
||||
Marks.at(i)->detach();
|
||||
delete Marks.at(i);
|
||||
}
|
||||
Marks.clear();
|
||||
|
||||
for(int i=0; i < ergFile->Laps.count(); i++) {
|
||||
|
||||
// Show Lap Number
|
||||
QwtText text(QString::number(ergFile->Laps.at(i).LapNum));
|
||||
text.setFont(QFont("Helvetica", 10, QFont::Bold));
|
||||
text.setColor(Qt::black);
|
||||
|
||||
// vertical line
|
||||
QwtPlotMarker *add = new QwtPlotMarker();
|
||||
add->setLineStyle(QwtPlotMarker::VLine);
|
||||
add->setLabelAlignment(Qt::AlignRight | Qt::AlignTop);
|
||||
add->setLinePen(QPen(Qt::black, 0, Qt::DashDotLine));
|
||||
add->setValue(ergFile->Laps.at(i).x, 0.0);
|
||||
add->setLabel(text);
|
||||
add->attach(this);
|
||||
|
||||
Marks.append(add);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ErgFilePlot::setNow(long msecs)
|
||||
{
|
||||
Now = msecs;
|
||||
replot(); // and update
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user