mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 08:38:45 +00:00
310 lines
8.7 KiB
C++
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);
|
|
}
|