Train View controls in Toolbar

Updated the realtime view (Train) to put the
realtime controls in the toolbar and removed
the old realtime controls chart.  They only
appear in Train view.

Additionally, the workout list and media list
are now in the sidebar under 'Workout Library'.

Finally, the first device configured is always
selected at startup, but this is a temporary
change until the realtime device wizard is coded
to set a default device.
This commit is contained in:
Mark Liversedge
2011-11-06 19:34:46 +00:00
parent 57c1102b50
commit 053bd6ca69
18 changed files with 186 additions and 158 deletions

View File

@@ -132,17 +132,17 @@ GcToolBar::eventFilter(QObject *, QEvent *e)
GcToolButton::GcToolButton(QWidget *parent, QAction *action) : QWidget(parent), action(action)
{
setContentsMargins(0, 0, 0, 0);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->setSpacing(5);
layout->setContentsMargins(10,0,10,0); // spacing either side
setLayout(layout);
QHBoxLayout *mlayout = new QHBoxLayout(this);
mlayout->setSpacing(5);
mlayout->setContentsMargins(10,0,10,0); // spacing either side
setLayout(mlayout);
QLabel *iconlabel = new QLabel(action->iconText(), this);
iconlabel->setPixmap(action->icon().pixmap(18,18)); // titchy
layout->addWidget(iconlabel);
mlayout->addWidget(iconlabel);
label = new QLabel(action->iconText(), this);
layout->addWidget(label);
mlayout->addWidget(label);
//XXX quick hack
if (action->iconText() == "Analysis") selected = true;

View File

@@ -77,7 +77,6 @@ GcWindowRegistry GcWindows[] = {
{ "Performance Manager",GcWindowTypes::PerformanceManager },
{ "Collection TreeMap",GcWindowTypes::TreeMap },
{ "Aerolab Chung Analysis",GcWindowTypes::Aerolab },
{ "Realtime Controls", GcWindowTypes::RealtimeControls },
{ "Realtime Dial",GcWindowTypes::DialWindow },
{ "Realtime Plot",GcWindowTypes::RealtimePlot },
{ "Workout Plot",GcWindowTypes::WorkoutPlot },
@@ -125,7 +124,7 @@ GcWindowRegistry::newGcWindow(GcWinID id, MainWindow *main) //XXX mainWindow wil
#endif
case GcWindowTypes::DialWindow: returning = new DialWindow(main); break;
case GcWindowTypes::MetadataWindow: returning = new MetadataWindow(main); break;
case GcWindowTypes::RealtimeControls: returning = new TrainTool(main, main->home); break;
case GcWindowTypes::RealtimeControls: returning = new GcWindow(); break;
case GcWindowTypes::RealtimePlot: returning = new RealtimePlotWindow(main); break;
case GcWindowTypes::WorkoutPlot: returning = new WorkoutPlotWindow(main); break;
case GcWindowTypes::BingMap: returning = new BingMap(main); break;

View File

@@ -198,6 +198,11 @@ MainWindow::MainWindow(const QDir &home) :
toolbar = new GcToolBar(this);
toolbar->addStretch();
trainTool = new TrainTool(this, home);
trainTool->hide();
toolbar->addWidget(trainTool->getToolbarButtons());
toolbar->addStretch();
// home
QIcon homeIcon(":images/toolbar/main/home.png");
homeAct = new QAction(homeIcon, tr("Home"), this);
@@ -242,6 +247,9 @@ MainWindow::MainWindow(const QDir &home) :
toolbar->addStretch();
toolbar->addStretch();
/*----------------------------------------------------------------------
* Sidebar
*--------------------------------------------------------------------*/
@@ -386,6 +394,7 @@ MainWindow::MainWindow(const QDir &home) :
toolBox->addItem(listView, QIcon(":images/activity.png"), "Activity History");
toolBox->addItem(_rideMetadata, QIcon(":images/metadata.png"), "Activity Details");
toolBox->addItem(intervalSplitter, QIcon(":images/stopwatch.png"), "Activity Intervals");
toolBox->addItem(trainTool->controls(), QIcon(":images/library.png"), "Workout Library");
toolBox->addItem(masterControls, QIcon(":images/settings.png"), "Chart Settings");
#if 0 // XXX NOT YET IMPLEMENTED
toolBox->addItem(new AthleteTool(QFileInfo(home.path()).path(), this), QIcon(":images/toolbar/main/athlete.png"), "Athletes");
@@ -924,6 +933,7 @@ MainWindow::selectAnalysis()
views->setCurrentIndex(0);
analWindow->selected(); // tell it!
currentWindow = analWindow;
trainTool->getToolbarButtons()->hide();
}
void
@@ -933,6 +943,7 @@ MainWindow::selectTrain()
views->setCurrentIndex(1);
trainWindow->selected(); // tell it!
currentWindow = trainWindow;
trainTool->getToolbarButtons()->show();
}
void
@@ -942,6 +953,7 @@ MainWindow::selectDiary()
views->setCurrentIndex(2);
diaryWindow->selected(); // tell it!
currentWindow = diaryWindow;
trainTool->getToolbarButtons()->hide();
}
void
@@ -951,6 +963,7 @@ MainWindow::selectHome()
views->setCurrentIndex(3);
homeWindow->selected(); // tell it!
currentWindow = homeWindow;
trainTool->getToolbarButtons()->hide();
}
void
MainWindow::selectAthlete()

View File

@@ -58,6 +58,7 @@ class GcToolBar;
class GcBubble;
class LionFullScreen;
class QTFullScreen;
class TrainTool;
extern QList<MainWindow *> mainwindows; // keep track of all the MainWindows we have open
@@ -300,6 +301,7 @@ class MainWindow : public QMainWindow
GcToolBar *toolbar;
QDockWidget *dock;
QAction *homeAct, *diaryAct, *analysisAct, *measuresAct, *trainAct, *athleteAct, *helpAct, *configAct;
TrainTool *trainTool;
QStackedWidget *views;
QAction *sideView;

View File

@@ -190,9 +190,11 @@ void MetricAggregator::refreshMetrics()
// add a ride (after import / download)
void MetricAggregator::addRide(RideItem*ride)
{
importRide(main->home, ride->ride(), ride->fileName, main->zones()->getFingerprint(), true);
RideFileCache updater(main, home.absolutePath() + "/" + ride->fileName, ride->ride(), true); // update cpx etc
dataChanged(); // notify models/views
if (ride && ride->ride()) {
importRide(main->home, ride->ride(), ride->fileName, main->zones()->getFingerprint(), true);
RideFileCache updater(main, home.absolutePath() + "/" + ride->fileName, ride->ride(), true); // update cpx etc
dataChanged(); // notify models/views
}
}
bool MetricAggregator::importRide(QDir path, RideFile *ride, QString fileName, unsigned long fingerprint, bool modify)

View File

@@ -54,19 +54,9 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h
QVBoxLayout *cl = new QVBoxLayout(c);
setControls(c);
QHBoxLayout *mainLayout = new QHBoxLayout(this);
setLayout(mainLayout);
cl->setSpacing(0);
cl->setContentsMargins(0,0,0,0);
//setLineWidth(1);
//setMidLineWidth(0);
//setFrameStyle(QFrame::Plain | QFrame::Sunken);
mainLayout->setSpacing(0);
mainLayout->setContentsMargins(3,3,3,3);
setContentsMargins(0,0,0,0);
#if 0 // not in this release .. or for a while TBH
serverTree = new QTreeWidget;
serverTree->setFrameStyle(QFrame::NoFrame);
@@ -116,80 +106,98 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h
allWorkouts->setText(0, tr("Workout Library"));
workoutTree->expandItem(allWorkouts);
QVBoxLayout *panel = new QVBoxLayout;
panel->setSpacing(0);
panel->setContentsMargins(0,0,0,0);
// TOOLBAR BUTTONS ETC
QHBoxLayout *toolbuttons=new QHBoxLayout;
toolbuttons->setSpacing(0);
toolbuttons->setContentsMargins(0,0,0,0);
QHBoxLayout *labels = new QHBoxLayout;
labels->setSpacing(0);
labels->setContentsMargins(0,0,0,0);
stress = new QLabel(this);
intensity = new QLabel(this);
labels->addWidget(stress, Qt::AlignVCenter|Qt::AlignCenter);
labels->addWidget(intensity, Qt::AlignVCenter|Qt::AlignCenter);
panel->addLayout(labels);
QIcon rewIcon(":images/oxygen/rewind.png");
QPushButton *rewind = new QPushButton(rewIcon, "", this);
rewind->setFocusPolicy(Qt::NoFocus);
rewind->setIconSize(QSize(24,24));
rewind->setAutoFillBackground(false);
rewind->setAutoDefault(false);
rewind->setFlat(true);
rewind->setStyleSheet("background-color: rgba( 255, 255, 255, 0% ); border: 0px;");
toolbuttons->addWidget(rewind);
// Make this labels easier to read
QColor background = GColor(CRIDEPLOTBACKGROUND);
QColor foreground = GColor(CPLOTMARKER);
QString sh = QString("QLabel { background: %1; color: %2; font-weight: bold; text-align: center; }")
.arg(background.name())
.arg(foreground.name());
stress->setStyleSheet(sh);
intensity->setStyleSheet(sh);
QIcon stopIcon(":images/oxygen/stop.png");
QPushButton *stop = new QPushButton(stopIcon, "", this);
stop->setFocusPolicy(Qt::NoFocus);
stop->setIconSize(QSize(24,24));
stop->setAutoFillBackground(false);
stop->setAutoDefault(false);
stop->setFlat(true);
stop->setStyleSheet("background-color: rgba( 255, 255, 255, 0% ); border: 0px;");
toolbuttons->addWidget(stop);
QHBoxLayout *buttons = new QHBoxLayout;
buttons->setSpacing(0);
buttons->setContentsMargins(0,0,0,0);
QIcon playIcon(":images/oxygen/play.png");
play = new QPushButton(playIcon, "", this);
play->setFocusPolicy(Qt::NoFocus);
play->setIconSize(QSize(24,24));
play->setAutoFillBackground(false);
play->setAutoDefault(false);
play->setFlat(true);
play->setStyleSheet("background-color: rgba( 255, 255, 255, 0% ); border: 0px;");
toolbuttons->addWidget(play);
startButton = new QPushButton(tr("Start"), this);
startButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pauseButton = new QPushButton(tr("Pause"), this);
pauseButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
stopButton = new QPushButton(tr("Stop"), this);
stopButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
plusButton = new QPushButton(tr(">"), this);
plusButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
plusButton->setFixedWidth(20);
minusButton = new QPushButton(tr("<"), this);
minusButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
minusButton->setFixedWidth(20);
QVBoxLayout *updownLayout = new QVBoxLayout;
updownLayout->setSpacing(0);
updownLayout->setContentsMargins(0,0,0,0);
updownLayout->addWidget(plusButton);
updownLayout->addWidget(minusButton);
intensitySlider = new QSlider(Qt::Vertical, this);
QIcon fwdIcon(":images/oxygen/ffwd.png");
QPushButton *forward = new QPushButton(fwdIcon, "", this);
forward->setFocusPolicy(Qt::NoFocus);
forward->setIconSize(QSize(24,24));
forward->setAutoFillBackground(false);
forward->setAutoDefault(false);
forward->setFlat(true);
forward->setStyleSheet("background-color: rgba( 255, 255, 255, 0% ); border: 0px;");
toolbuttons->addWidget(forward);
intensitySlider = new QSlider(Qt::Horizontal, this);
intensitySlider->setAutoFillBackground(false);
intensitySlider->setFocusPolicy(Qt::NoFocus);
intensitySlider->setMinimum(50);
intensitySlider->setMaximum(150);
intensitySlider->setValue(100);
toolbuttons->addWidget(intensitySlider);
#ifdef Q_OS_MAC
// the mac styling of buttons is freaking annoying
// It overrides any attempt to compact, which is
// exactly what we need to do, so instead we use
// the plastique style on them to get around it
QCleanlooksStyle *style = new QCleanlooksStyle();
startButton->setStyle(style);
pauseButton->setStyle(style);
stopButton->setStyle(style);
plusButton->setStyle(style);
minusButton->setStyle(style);
#endif
QPalette pal;
stress = new QLabel(this);
stress->setAutoFillBackground(false);
stress->setFixedWidth(100);
stress->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
pal.setColor(stress->foregroundRole(), Qt::white);
stress->setPalette(pal);
intensity = new QLabel(this);
intensity->setAutoFillBackground(false);
intensity->setFixedWidth(100);
intensity->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
pal.setColor(intensity->foregroundRole(), Qt::white);
intensity->setPalette(pal);
toolbuttons->addWidget(stress, Qt::AlignVCenter|Qt::AlignCenter);
toolbuttons->addWidget(intensity, Qt::AlignVCenter|Qt::AlignCenter);
toolbarButtons = new QWidget(this);
toolbarButtons->setContentsMargins(0,0,0,0);
toolbarButtons->setFocusPolicy(Qt::NoFocus);
toolbarButtons->setAutoFillBackground(false);
toolbarButtons->setStyleSheet("background-color: rgba( 255, 255, 255, 0% ); border: 0px;");
toolbarButtons->setLayout(toolbuttons);
toolbarButtons->hide();
connect(play, SIGNAL(clicked()), this, SLOT(Start()));
connect(stop, SIGNAL(clicked()), this, SLOT(Stop()));
connect(forward, SIGNAL(clicked()), this, SLOT(FFwd()));
connect(rewind, SIGNAL(clicked()), this, SLOT(Rewind()));
connect(intensitySlider, SIGNAL(valueChanged(int)), this, SLOT(adjustIntensity()));
// not used but kept in case re-instated in the future
recordSelector = new QCheckBox(this);
recordSelector->setText(tr("Save workout data"));
recordSelector->setChecked(Qt::Checked);
recordSelector->hide(); // we don't let users change this for now
buttons->addWidget(startButton);
buttons->addWidget(pauseButton);
buttons->addWidget(stopButton);
panel->addLayout(buttons);
mainLayout->addLayout(panel);
mainLayout->addLayout(updownLayout);
mainLayout->addWidget(intensitySlider);
trainSplitter = new QSplitter;
trainSplitter->setHandleWidth(1);
trainSplitter->setFrameStyle(QFrame::NoFrame);
@@ -215,14 +223,6 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h
#endif
connect(main, SIGNAL(configChanged()), this, SLOT(configChanged()));
// connect train tool buttons!
connect(startButton, SIGNAL(clicked()), this, SLOT(Start()));
connect(pauseButton, SIGNAL(clicked()), this, SLOT(Pause()));
connect(stopButton, SIGNAL(clicked()), this, SLOT(Stop()));
connect(plusButton, SIGNAL(clicked()), this, SLOT(FFwd()));
connect(minusButton, SIGNAL(clicked()), this, SLOT(Rewind()));
connect(intensitySlider, SIGNAL(valueChanged(int)), this, SLOT(adjustIntensity()));
// add a watch on all directories
QVariant workoutDir = appsettings->value(NULL, GC_WORKOUTDIR);
watcher = boost::shared_ptr<QFileSystemWatcher>(new QFileSystemWatcher());
@@ -299,6 +299,10 @@ TrainTool::configChanged()
device->setText(0, Devices.at(i).name);
}
}
// select the first device
if (Devices.count()) {
deviceTree->setCurrentItem(allDevices->child(0));
}
// WORKOUTS
// zap whats there
@@ -344,21 +348,6 @@ TrainTool::configChanged()
useMetricUnits = (unit.toString() == "Metric");
}
/*----------------------------------------------------------------------
* Buttons!
*----------------------------------------------------------------------*/
void
TrainTool::setStartText(QString string)
{
startButton->setText(string);
}
void
TrainTool::setPauseText(QString string)
{
pauseButton->setText(string);
}
/*----------------------------------------------------------------------
* Race Server Selected
*----------------------------------------------------------------------*/
@@ -427,8 +416,7 @@ TrainTool::workoutTreeWidgetSelectionChanged()
// which one is selected?
if (currentWorkout() == NULL || currentWorkout()->type() != WORKOUT_TYPE) {
main->notifyErgFileSelected(NULL);
stress->setText("TSS:");
intensity->setText("IF:");
setLabels();
return;
}
@@ -453,9 +441,6 @@ TrainTool::workoutTreeWidgetSelectionChanged()
QVariant workoutDir = appsettings->value(this, GC_WORKOUTDIR);
QString fileName = workoutDir.toString() + "/" + currentWorkout()->text(0); // filename
// Get users CP for relative watts calculations
QDate today = QDate::currentDate();
ergFile = new ErgFile(fileName, mode, FTP, main);
if (ergFile->isValid()) {
@@ -591,14 +576,50 @@ void TrainTool::setStreamController()
void TrainTool::Start() // when start button is pressed
{
if (status&RT_RUNNING) {
newLap();
static QIcon playIcon(":images/oxygen/play.png");
static QIcon pauseIcon(":images/oxygen/pause.png");
if (status&RT_PAUSED && deviceController != NULL) {
// UN PAUSE!
play->setIcon(playIcon);
session_time.start();
lap_time.start();
status &=~RT_PAUSED;
deviceController->restart();
gui_timer->start(REFRESHRATE);
if (status & RT_STREAMING) stream_timer->start(STREAMRATE);
if (status & RT_RECORDING) disk_timer->start(SAMPLERATE);
load_period.restart();
if (status & RT_WORKOUT) load_timer->start(LOADRATE);
// tell the world
main->notifyNewLap();
main->notifyUnPause();
} else if (status&RT_RUNNING && deviceController != NULL) {
// Pause!
play->setIcon(playIcon);
session_elapsed_msec += session_time.elapsed();
lap_elapsed_msec += lap_time.elapsed();
deviceController->pause();
status |=RT_PAUSED;
gui_timer->stop();
if (status & RT_STREAMING) stream_timer->stop();
if (status & RT_RECORDING) disk_timer->stop();
if (status & RT_WORKOUT) load_timer->stop();
load_msecs += load_period.restart();
// tell the world
main->notifyPause();
} else {
// START!
play->setIcon(pauseIcon);
// open the controller if it is selected
setDeviceController();
if (deviceController == NULL) return;
@@ -614,8 +635,6 @@ void TrainTool::Start() // when start button is pressed
//setStreamController();
if (streamController != NULL) status |= RT_STREAMING;
setStartText(tr("Lap"));
load_period.restart();
session_time.start();
session_elapsed_msec = 0;
@@ -651,7 +670,6 @@ void TrainTool::Start() // when start button is pressed
}
}
// stream
if (status & RT_STREAMING) {
stream_timer->start(STREAMRATE);
@@ -675,7 +693,6 @@ void TrainTool::Pause() // pause capture to recalibrate
lap_time.start();
status &=~RT_PAUSED;
deviceController->restart();
setPauseText(tr("Pause"));
gui_timer->start(REFRESHRATE);
if (status & RT_STREAMING) stream_timer->start(STREAMRATE);
if (status & RT_RECORDING) disk_timer->start(SAMPLERATE);
@@ -690,7 +707,6 @@ void TrainTool::Pause() // pause capture to recalibrate
session_elapsed_msec += session_time.elapsed();
lap_elapsed_msec += lap_time.elapsed();
deviceController->pause();
setPauseText(tr("Un-Pause"));
status |=RT_PAUSED;
gui_timer->stop();
if (status & RT_STREAMING) stream_timer->stop();
@@ -710,7 +726,6 @@ void TrainTool::Stop(int deviceStatus) // when stop button is pressed
if ((status&RT_RUNNING) == 0) return;
status &= ~RT_RUNNING;
setStartText(tr("Start"));
// wipe connection
deviceController->stop();
@@ -862,6 +877,7 @@ void TrainTool::newLap()
lap_time.restart();
lap_elapsed_msec = 0;
main->notifyNewLap();
}
// can be called from the controller
@@ -947,7 +963,6 @@ void TrainTool::diskUpdate()
<< "," << (displayLap + displayWorkoutLap)
<< "," << Altitude
<< "," << "\n";
}
//----------------------------------------------------------------------
@@ -1081,21 +1096,24 @@ void TrainTool::setLabels()
{
if (main->currentErgFile()) {
intensitySlider->show();
if (main->currentErgFile()->format == CRS) {
stress->setText(QString("Ele: %1").arg(main->currentErgFile()->ELE, 0, 'f', 0));
intensity->setText(QString("Grade: %1 %").arg(main->currentErgFile()->GRADE, 0, 'f', 1));
stress->setText(QString("Elevation %1").arg(main->currentErgFile()->ELE, 0, 'f', 0));
intensity->setText(QString("Grade %1 %").arg(main->currentErgFile()->GRADE, 0, 'f', 1));
} else {
stress->setText(QString("TSS: %1").arg(main->currentErgFile()->TSS, 0, 'f', 0));
intensity->setText(QString("IF: %1").arg(main->currentErgFile()->IF, 0, 'f', 3));
stress->setText(QString("TSS %1").arg(main->currentErgFile()->TSS, 0, 'f', 0));
intensity->setText(QString("IF %1").arg(main->currentErgFile()->IF, 0, 'f', 3));
}
} else {
stress->setText("TSS:");
intensity->setText("IF:");
intensitySlider->hide();
stress->setText("");
intensity->setText("");
}
}

View File

@@ -88,10 +88,6 @@ class TrainTool : public GcWindow
int selectedDeviceNumber();
int selectedServerNumber();
// button meanings are changed by the windows
void setStartText(QString);
void setPauseText(QString);
// set labels when ergfile selected etc
void setLabels();
@@ -109,6 +105,9 @@ class TrainTool : public GcWindow
// this
QTabWidget *trainTabs;
// get the panel
QWidget *getToolbarButtons() { return toolbarButtons; }
signals:
void deviceSelected();
@@ -155,6 +154,8 @@ class TrainTool : public GcWindow
MainWindow *main;
QSplitter *trainSplitter;
QWidget *toolbarButtons;
QTreeWidget *workoutTree;
QTreeWidget *deviceTree;
QTreeWidget *serverTree;
@@ -168,13 +169,8 @@ class TrainTool : public GcWindow
QTreeWidgetItem *workout;
QTreeWidgetItem *media;
// those buttons
QPushButton *startButton,
*pauseButton,
*stopButton,
*plusButton,
*minusButton;
// Panel buttons
QPushButton *play;
QLabel *stress, *intensity;
QSlider *intensitySlider;
int lastAppliedIntensity;// remember how we scaled last time

View File

@@ -48,6 +48,7 @@
<file>images/stopwatch.png</file>
<file>images/settings.png</file>
<file>images/addchart.png</file>
<file>images/library.png</file>
<file>translations/gc_fr.qm</file>
<file>translations/gc_ja.qm</file>
<file>translations/gc_it.qm</file>
@@ -62,6 +63,11 @@
<file>xml/diary-layout.xml</file>
<file>xml/analysis-layout.xml</file>
<file>html/ltm-summary.html</file>
<file>images/oxygen/play.png</file>
<file>images/oxygen/pause.png</file>
<file>images/oxygen/stop.png</file>
<file>images/oxygen/ffwd.png</file>
<file>images/oxygen/rewind.png</file>
<file>images/toolbar/close-icon.png</file>
<file>images/toolbar/save.png</file>
<file>images/toolbar/search.png</file>

BIN
src/images/library.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
src/images/oxygen/back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/images/oxygen/ffwd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
src/images/oxygen/fwd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/images/oxygen/pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
src/images/oxygen/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
src/images/oxygen/stop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@@ -62,7 +62,7 @@
<chart id="25" name="RT Plot" title="Performance" >
<property name="instanceName" type="QString" value="RT Plot" />
<property name="title" type="QString" value="Performance" />
<property name="subtitle" type="QString" value=" 130 Minute Road Ride. Hilly start and end, Middle TT section." />
<property name="subtitle" type="QString" value="130 Minute Road Ride. Hilly start and end, Middle TT section." />
<property name="widthFactor" type="double" value="1.78571" />
<property name="heightFactor" type="double" value="1.35135" />
<property name="resizable" type="bool" value="1" />
@@ -79,7 +79,7 @@
<property name="instanceName" type="QString" value="Dial" />
<property name="title" type="QString" value="Elapsed Time" />
<property name="subtitle" type="QString" value="" />
<property name="widthFactor" type="double" value="3.125" />
<property name="widthFactor" type="double" value="2.38095" />
<property name="heightFactor" type="double" value="7.14286" />
<property name="resizable" type="bool" value="1" />
<property name="showInstant" type="bool" value="0" />
@@ -87,26 +87,6 @@
<property name="dataSeries" type="int" value="1" />
<property name="style" type="int" value="74687587" />
</chart>
<chart id="29" name="Train Controls" title="Controls" >
<property name="instanceName" type="QString" value="Train Controls" />
<property name="title" type="QString" value="Controls" />
<property name="subtitle" type="QString" value="" />
<property name="widthFactor" type="double" value="5" />
<property name="heightFactor" type="double" value="7.14286" />
<property name="resizable" type="bool" value="1" />
</chart>
<chart id="22" name="Dial" title="Distance" >
<property name="instanceName" type="QString" value="Dial" />
<property name="title" type="QString" value="Distance" />
<property name="subtitle" type="QString" value="" />
<property name="widthFactor" type="double" value="3.84615" />
<property name="heightFactor" type="double" value="7.14286" />
<property name="resizable" type="bool" value="1" />
<property name="showInstant" type="bool" value="0" />
<property name="avgType" type="int" value="1083336304" />
<property name="dataSeries" type="int" value="4" />
<property name="style" type="int" value="129" />
</chart>
<chart id="22" name="Dial" title="Lap" >
<property name="instanceName" type="QString" value="Dial" />
<property name="title" type="QString" value="Lap" />
@@ -119,4 +99,16 @@
<property name="dataSeries" type="int" value="2" />
<property name="style" type="int" value="86056163" />
</chart>
<chart id="22" name="Dial" title="Distance" >
<property name="instanceName" type="QString" value="Dial" />
<property name="title" type="QString" value="Distance" />
<property name="subtitle" type="QString" value="" />
<property name="widthFactor" type="double" value="2.77778" />
<property name="heightFactor" type="double" value="7.14286" />
<property name="resizable" type="bool" value="1" />
<property name="showInstant" type="bool" value="0" />
<property name="avgType" type="int" value="1083336304" />
<property name="dataSeries" type="int" value="4" />
<property name="style" type="int" value="129" />
</chart>
</layout>