Files
GoldenCheetah/src/Pages.cpp
Justin F. Knotzke 6caf431d05 Dan Connelly's MEGA patch.
It includes both powerzones and weekly summary plots.

  Thanks Dan.
2009-06-22 02:24:16 +00:00

310 lines
8.7 KiB
C++

#include <QtGui>
#include <QIntValidator>
#include <assert.h>
#include "Pages.h"
#include "Settings.h"
ConfigurationPage::~ConfigurationPage()
{
delete configGroup;
delete unitLabel;
delete unitCombo;
delete allRidesAscending;
delete warningLabel;
delete unitLayout;
delete warningLayout;
delete configLayout;
delete mainLayout;
}
ConfigurationPage::ConfigurationPage()
{
configGroup = new QGroupBox(tr("Golden Cheetah Configuration"));
unitLabel = new QLabel(tr("Unit of Measurement:"));
unitCombo = new QComboBox();
unitCombo->addItem(tr("Metric"));
unitCombo->addItem(tr("English"));
QSettings settings(GC_SETTINGS_CO, GC_SETTINGS_APP);
QVariant unit = settings.value(GC_UNIT);
if(unit.toString() == "Metric")
unitCombo->setCurrentIndex(0);
else
unitCombo->setCurrentIndex(1);
QLabel *crankLengthLabel = new QLabel(tr("Crank Length:"));
QVariant crankLength = settings.value(GC_CRANKLENGTH);
crankLengthCombo = new QComboBox();
crankLengthCombo->addItem("160");
crankLengthCombo->addItem("162.5");
crankLengthCombo->addItem("165");
crankLengthCombo->addItem("167.5");
crankLengthCombo->addItem("170");
crankLengthCombo->addItem("172.5");
crankLengthCombo->addItem("175");
crankLengthCombo->addItem("177.5");
crankLengthCombo->addItem("180");
crankLengthCombo->addItem("182.5");
crankLengthCombo->addItem("185");
if(crankLength.toString() == "160")
crankLengthCombo->setCurrentIndex(0);
if(crankLength.toString() == "162.5")
crankLengthCombo->setCurrentIndex(1);
if(crankLength.toString() == "165")
crankLengthCombo->setCurrentIndex(2);
if(crankLength.toString() == "167.5")
crankLengthCombo->setCurrentIndex(3);
if(crankLength.toString() == "170")
crankLengthCombo->setCurrentIndex(4);
if(crankLength.toString() == "172.5")
crankLengthCombo->setCurrentIndex(5);
if(crankLength.toString() == "175")
crankLengthCombo->setCurrentIndex(6);
if(crankLength.toString() == "177.5")
crankLengthCombo->setCurrentIndex(7);
if(crankLength.toString() == "180")
crankLengthCombo->setCurrentIndex(8);
if(crankLength.toString() == "182.5")
crankLengthCombo->setCurrentIndex(9);
if(crankLength.toString() == "185")
crankLengthCombo->setCurrentIndex(10);
allRidesAscending = new QCheckBox("Sort ride list ascending.", this);
QVariant isAscending = settings.value(GC_ALLRIDES_ASCENDING,Qt::Checked); // default is ascending sort
if(isAscending.toInt() > 0 ){
allRidesAscending->setCheckState(Qt::Checked);
} else {
allRidesAscending->setCheckState(Qt::Unchecked);
}
warningLabel = new QLabel(tr("Requires Restart To Take Effect"));
unitLayout = new QHBoxLayout;
unitLayout->addWidget(unitLabel);
unitLayout->addWidget(unitCombo);
warningLayout = new QHBoxLayout;
warningLayout->addWidget(warningLabel);
QHBoxLayout *crankLengthLayout = new QHBoxLayout;
crankLengthLayout->addWidget(crankLengthLabel);
crankLengthLayout->addWidget(crankLengthCombo);
configLayout = new QVBoxLayout;
configLayout->addLayout(unitLayout);
configLayout->addWidget(allRidesAscending);
configLayout->addLayout(crankLengthLayout);
configLayout->addLayout(warningLayout);
configGroup->setLayout(configLayout);
mainLayout = new QVBoxLayout;
mainLayout->addWidget(configGroup);
mainLayout->addStretch(1);
setLayout(mainLayout);
}
CyclistPage::~CyclistPage()
{
delete cyclistGroup;
delete lblThreshold;
delete txtThreshold;
delete txtThresholdValidator;
delete btnBack;
delete btnForward;
delete btnDelete;
delete checkboxNew;
delete txtStartDate;
delete txtEndDate;
delete lblStartDate;
delete lblEndDate;
delete calendar;
delete lblCurRange;
delete powerLayout;
delete rangeLayout;
delete dateRangeLayout;
delete zoneLayout;
delete calendarLayout;
delete cyclistLayout;
delete mainLayout;
}
CyclistPage::CyclistPage(Zones **_zones):
zones(_zones)
{
cyclistGroup = new QGroupBox(tr("Cyclist Options"));
lblThreshold = new QLabel(tr("Critical Power:"));
txtThreshold = new QLineEdit();
// the validator will prevent numbers above the upper limit
// from being entered, but will not prevent non-negative numbers
// below the lower limit (since it is still plausible a valid
// entry will result)
txtThresholdValidator = new QIntValidator(20,999,this);
txtThreshold->setValidator(txtThresholdValidator);
btnBack = new QPushButton(this);
btnBack->setText(tr("Back"));
btnForward = new QPushButton(this);
btnForward->setText(tr("Forward"));
btnDelete = new QPushButton(this);
btnDelete->setText(tr("Delete Range"));
checkboxNew = new QCheckBox(this);
checkboxNew->setText(tr("New Range from Date"));
btnForward->setEnabled(false);
txtStartDate = new QLabel("BEGIN");
txtEndDate = new QLabel("END");
lblStartDate = new QLabel("Start: ");
lblStartDate->setAlignment(Qt::AlignRight);
lblEndDate = new QLabel("End: ");
lblEndDate->setAlignment(Qt::AlignRight);
calendar = new QCalendarWidget(this);
lblCurRange = new QLabel(this);
lblCurRange->setFrameStyle(QFrame::Panel | QFrame::Sunken);
lblCurRange->setText(QString("Current Zone Range: %1").arg(currentRange + 1));
QDate today = QDate::currentDate();
calendar->setSelectedDate(today);
if ((! *zones) || ((*zones)->getRangeSize() == 0))
setCurrentRange();
else
{
setCurrentRange((*zones)->whichRange(today));
btnDelete->setEnabled(true);
checkboxNew->setCheckState(Qt::Unchecked);
}
int cp = (*zones ? (*zones)->getCP(currentRange) : 0);
if (cp > 0)
setCP(cp);
//Layout
powerLayout = new QHBoxLayout();
powerLayout->addWidget(lblThreshold);
powerLayout->addWidget(txtThreshold);
rangeLayout = new QHBoxLayout();
rangeLayout->addWidget(lblCurRange);
dateRangeLayout = new QHBoxLayout();
dateRangeLayout->addWidget(lblStartDate);
dateRangeLayout->addWidget(txtStartDate);
dateRangeLayout->addWidget(lblEndDate);
dateRangeLayout->addWidget(txtEndDate);
zoneLayout = new QHBoxLayout();
zoneLayout->addWidget(btnBack);
zoneLayout->addWidget(btnForward);
zoneLayout->addWidget(btnDelete);
zoneLayout->addWidget(checkboxNew);
calendarLayout = new QHBoxLayout();
calendarLayout->addWidget(calendar);
cyclistLayout = new QVBoxLayout;
cyclistLayout->addLayout(powerLayout);
cyclistLayout->addLayout(rangeLayout);
cyclistLayout->addLayout(zoneLayout);
cyclistLayout->addLayout(dateRangeLayout);
cyclistLayout->addLayout(calendarLayout);
cyclistGroup->setLayout(cyclistLayout);
mainLayout = new QVBoxLayout;
mainLayout->addWidget(cyclistGroup);
mainLayout->addStretch(1);
setLayout(mainLayout);
}
QString CyclistPage::getText()
{
return txtThreshold->text();
}
int CyclistPage::getCP()
{
int cp = txtThreshold->text().toInt();
return (
(
(cp >= txtThresholdValidator->bottom()) &&
(cp <= txtThresholdValidator->top())
) ?
cp :
0
);
}
void CyclistPage::setCP(int cp)
{
txtThreshold->setText(QString("%1").arg(cp));
}
void CyclistPage::setSelectedDate(QDate date)
{
calendar->setSelectedDate(date);
}
void CyclistPage::setCurrentRange(int range)
{
int num_ranges =
*zones ?
(*zones)->getRangeSize() :
0;
if ((num_ranges == 0) || (range < 0)) {
btnBack->setEnabled(false);
btnDelete->setEnabled(false);
btnForward->setEnabled(false);
calendar->setEnabled(false);
checkboxNew->setCheckState(Qt::Checked);
checkboxNew->setEnabled(false);
currentRange = -1;
lblCurRange->setText("no Current Zone Range");
txtEndDate->setText("undefined");
txtStartDate->setText("undefined");
return;
}
assert ((range >= 0) && (range < num_ranges));
currentRange = range;
// update the labels
lblCurRange->setText(QString("Current Zone Range: %1").arg(currentRange + 1));
// update the visibility of the range select buttons
btnForward->setEnabled(currentRange < num_ranges - 1);
btnBack->setEnabled(currentRange > 0);
// if we have ranges to set to, then the calendar must be on
calendar->setEnabled(true);
// update the CP display
setCP((*zones)->getCP(currentRange));
// update date limits
txtStartDate->setText((*zones)->getStartDateString(currentRange));
txtEndDate->setText((*zones)->getEndDateString(currentRange));
}
int CyclistPage::getCurrentRange()
{
return currentRange;
}
bool CyclistPage::isNewMode()
{
return (checkboxNew->checkState() == Qt::Checked);
}