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.
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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("");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
After Width: | Height: | Size: 3.5 KiB |
BIN
src/images/oxygen/back.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/images/oxygen/equalizer.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/images/oxygen/ffwd.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
src/images/oxygen/fwd.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/images/oxygen/pause.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
src/images/oxygen/play.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
src/images/oxygen/rewind.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
src/images/oxygen/stop.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
@@ -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>
|
||||
|
||||