diff --git a/src/Athlete.cpp b/src/Athlete.cpp index 133aeae72..84e8d7628 100644 --- a/src/Athlete.cpp +++ b/src/Athlete.cpp @@ -42,6 +42,7 @@ #endif #include "IntervalItem.h" #include "IntervalTreeView.h" +#include "LTMSettings.h" #include "GcUpgrade.h" // upgrade wizard #include "GcCrashDialog.h" // recovering from a crash? @@ -98,6 +99,11 @@ Athlete::Athlete(Context *context, const QDir &home) QMessageBox::warning(context->mainWindow, tr("Reading HR Zones File"), hrzones_->warningString()); } + // read athlete's charts.xml and translate etc + LTMSettings reader; + reader.readChartXML(context->athlete->home, presets); + translateDefaultCharts(presets); + // Metadata rideMetadata_ = new RideMetadata(context,true); rideMetadata_->hide(); @@ -399,3 +405,44 @@ Athlete::checkCPX(RideItem*ride) } cpxCache = newList; } + +void +Athlete::translateDefaultCharts(QList&charts) +{ + // Map default (english) chart name to external (Localized) name + // New default charts need to be added to this list to be translated + QMap chartNameMap; + chartNameMap.insert("PMC", tr("PMC")); + chartNameMap.insert("Track Weight", tr("Track Weight")); + chartNameMap.insert("Time In Power Zone (Stacked)", tr("Time In Power Zone (Stacked)")); + chartNameMap.insert("Time In Power Zone (Bar)", tr("Time In Power Zone (Bar)")); + chartNameMap.insert("Time In HR Zone", tr("Time In HR Zone")); + chartNameMap.insert("Power Distribution", tr("Power Distribution")); + chartNameMap.insert("KPI Tracker", tr("KPI Tracker")); + chartNameMap.insert("Critical Power Trend", tr("Critical Power Trend")); + chartNameMap.insert("Aerobic Power", tr("Aerobic Power")); + chartNameMap.insert("Aerobic WPK", tr("Aerobic WPK")); + chartNameMap.insert("Power Variance", tr("Power Variance")); + chartNameMap.insert("Power Profile", tr("Power Profile")); + chartNameMap.insert("Anaerobic Power", tr("Anaerobic Power")); + chartNameMap.insert("Anaerobic WPK", tr("Anaerobic WPK")); + chartNameMap.insert("Power & Speed Trend", tr("Power & Speed Trend")); + chartNameMap.insert("Cardiovascular Response", tr("Cardiovascular Response")); + chartNameMap.insert("Tempo & Threshold Time", tr("Tempo & Threshold Time")); + chartNameMap.insert("Training Mix", tr("Training Mix")); + chartNameMap.insert("Time & Distance", tr("Time & Distance")); + chartNameMap.insert("Skiba Power", tr("Skiba Power")); + chartNameMap.insert("Daniels Power", tr("Daniels Power")); + chartNameMap.insert("PM Ramp & Peak", tr("PM Ramp & Peak")); + chartNameMap.insert("Skiba PM", tr("Skiba PM")); + chartNameMap.insert("Daniels PM", tr("Daniels PM")); + chartNameMap.insert("Device Reliability", tr("Device Reliability")); + chartNameMap.insert("Withings Weight", tr("Withings Weight")); + chartNameMap.insert("Stress and Distance", tr("Stress and Distance")); + chartNameMap.insert("Calories vs Duration", tr("Calories vs Duration")); + + for(int i=0; i presets; + void translateDefaultCharts(QList&charts); + // indexes / filters #ifdef GC_HAVE_LUCENE Lucene *lucene; diff --git a/src/Context.h b/src/Context.h index b32a18110..3602eebfa 100644 --- a/src/Context.h +++ b/src/Context.h @@ -85,6 +85,9 @@ class Context : public QObject // when config has changed - and to get a // signal emitted to notify its children + // preset charts + void notifyPresetsChanged() { emit presetsChanged(); } + // filters void setHomeFilter(QStringList&f) { homeFilters=f; ishomefiltered=true; emit homeFilterChanged(); } void clearHomeFilter() { homeFilters.clear(); ishomefiltered=false; emit homeFilterChanged(); } @@ -132,6 +135,7 @@ class Context : public QObject void homeFilterChanged(); void configChanged(); + void presetsChanged(); void rideSelected(RideItem*); void rideAdded(RideItem *); diff --git a/src/LTMSettings.cpp b/src/LTMSettings.cpp index 4ab5ac308..c32a93828 100644 --- a/src/LTMSettings.cpp +++ b/src/LTMSettings.cpp @@ -94,6 +94,7 @@ EditChartDialog::cancelClicked() void LTMSettings::writeChartXML(QDir home, QList charts) { +qDebug()<<"write chart.xml !"; LTMChartParser::serialize(QString(home.path() + "/charts.xml"), charts); } diff --git a/src/LTMTool.cpp b/src/LTMTool.cpp index 6b0301936..b3308a5fb 100644 --- a/src/LTMTool.cpp +++ b/src/LTMTool.cpp @@ -66,11 +66,6 @@ LTMTool::LTMTool(Context *context, LTMSettings *settings) : QWidget(context->mai basicsettingsLayout->addRow(new QLabel(tr(""))); // spacing #endif - // read charts.xml and translate etc - LTMSettings reader; - reader.readChartXML(context->athlete->home, presets); - translateDefaultCharts(presets); - // Basic Controls QWidget *basic = new QWidget(this); basic->setContentsMargins(0,0,0,0); @@ -157,13 +152,6 @@ LTMTool::LTMTool(Context *context, LTMSettings *settings) : QWidget(context->mai charts->setEditTriggers(QAbstractItemView::SelectedClicked); // allow edit charts->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); charts->setIndentation(0); - foreach(LTMSettings chart, presets) { - QTreeWidgetItem *add; - add = new QTreeWidgetItem(charts->invisibleRootItem()); - add->setFlags(add->flags() | Qt::ItemIsEditable); - add->setText(0, chart.name); - } - charts->setCurrentItem(charts->invisibleRootItem()->child(0)); applyButton = new QPushButton(tr("Apply")); // connected in LTMWindow.cpp QHBoxLayout *buttons = new QHBoxLayout; @@ -1085,6 +1073,26 @@ LTMTool::LTMTool(Context *context, LTMSettings *settings) : QWidget(context->mai connect(dateSetting, SIGNAL(useStandardRange()), this, SIGNAL(useStandardRange())); connect(dateSetting, SIGNAL(useCustomRange(DateRange)), this, SIGNAL(useCustomRange(DateRange))); connect(dateSetting, SIGNAL(useThruToday()), this, SIGNAL(useThruToday())); + + // watch for changes to the preset charts + connect(context, SIGNAL(presetsChanged()), this, SLOT(presetsChanged())); + + // but setup for the first time + presetsChanged(); +} + +void +LTMTool::presetsChanged() +{ + // rebuild the preset chart list as the presets have changed + charts->clear(); + foreach(LTMSettings chart, context->athlete->presets) { + QTreeWidgetItem *add; + add = new QTreeWidgetItem(charts->invisibleRootItem()); + add->setFlags(add->flags() | Qt::ItemIsEditable); + add->setText(0, chart.name); + } + charts->setCurrentItem(charts->invisibleRootItem()->child(0)); } void @@ -1221,10 +1229,10 @@ void LTMTool::addCurrent() { // give the chart a name - if (settings->name == "") settings->name = QString("Chart %1").arg(presets.count()+1); + if (settings->name == "") settings->name = QString("Chart %1").arg(context->athlete->presets.count()+1); // add the current chart to the presets with a name using the chart title - presets.append(*settings); + context->athlete->presets.append(*settings); // add to the list QTreeWidgetItem *add; @@ -1232,7 +1240,7 @@ LTMTool::addCurrent() add->setFlags(add->flags() | Qt::ItemIsEditable); add->setText(0, settings->name); - // save charts.xml + context->notifyPresetsChanged(); } // set the estimateSelection based upon what is available @@ -1920,46 +1928,6 @@ LTMTool::setFilter(QStringList files) emit filterChanged(); } -void -LTMTool::translateDefaultCharts(QList&charts) -{ - // Map default (english) chart name to external (Localized) name - // New default charts need to be added to this list to be translated - QMap chartNameMap; - chartNameMap.insert("PMC", tr("PMC")); - chartNameMap.insert("Track Weight", tr("Track Weight")); - chartNameMap.insert("Time In Power Zone (Stacked)", tr("Time In Power Zone (Stacked)")); - chartNameMap.insert("Time In Power Zone (Bar)", tr("Time In Power Zone (Bar)")); - chartNameMap.insert("Time In HR Zone", tr("Time In HR Zone")); - chartNameMap.insert("Power Distribution", tr("Power Distribution")); - chartNameMap.insert("KPI Tracker", tr("KPI Tracker")); - chartNameMap.insert("Critical Power Trend", tr("Critical Power Trend")); - chartNameMap.insert("Aerobic Power", tr("Aerobic Power")); - chartNameMap.insert("Aerobic WPK", tr("Aerobic WPK")); - chartNameMap.insert("Power Variance", tr("Power Variance")); - chartNameMap.insert("Power Profile", tr("Power Profile")); - chartNameMap.insert("Anaerobic Power", tr("Anaerobic Power")); - chartNameMap.insert("Anaerobic WPK", tr("Anaerobic WPK")); - chartNameMap.insert("Power & Speed Trend", tr("Power & Speed Trend")); - chartNameMap.insert("Cardiovascular Response", tr("Cardiovascular Response")); - chartNameMap.insert("Tempo & Threshold Time", tr("Tempo & Threshold Time")); - chartNameMap.insert("Training Mix", tr("Training Mix")); - chartNameMap.insert("Time & Distance", tr("Time & Distance")); - chartNameMap.insert("Skiba Power", tr("Skiba Power")); - chartNameMap.insert("Daniels Power", tr("Daniels Power")); - chartNameMap.insert("PM Ramp & Peak", tr("PM Ramp & Peak")); - chartNameMap.insert("Skiba PM", tr("Skiba PM")); - chartNameMap.insert("Daniels PM", tr("Daniels PM")); - chartNameMap.insert("Device Reliability", tr("Device Reliability")); - chartNameMap.insert("Withings Weight", tr("Withings Weight")); - chartNameMap.insert("Stress and Distance", tr("Stress and Distance")); - chartNameMap.insert("Calories vs Duration", tr("Calories vs Duration")); - - for(int i=0; iinvisibleRootItem()->childCount(); i++) - //(presets)[i].name = charts->invisibleRootItem()->child(i)->text(0); -//} +#if 0 // need a way of knowing controls have closed ... +void +LTMTool::okClicked() +{ + // take the edited versions of the name first + for(int i=0; iinvisibleRootItem()->childCount(); i++) + (context->athlete->presets)[i].name = charts->invisibleRootItem()->child(i)->text(0); + + // let everyone know once we're done + context->notifyPresetsChanged(); +} +#endif void LTMTool::importClicked() @@ -2037,7 +2010,7 @@ LTMTool::importClicked() imported = handler.getSettings(); // now append to the QList and QTreeWidget - presets += imported; + context->athlete->presets += imported; foreach (LTMSettings chart, imported) { QTreeWidgetItem *add; add = new QTreeWidgetItem(charts->invisibleRootItem()); @@ -2073,7 +2046,7 @@ LTMTool::exportClicked() if (msgBox.exec() != QMessageBox::Ok) return; } - LTMChartParser::serialize(filenames[0], presets); + LTMChartParser::serialize(filenames[0], context->athlete->presets); } } @@ -2088,9 +2061,10 @@ LTMTool::upClicked() QTreeWidgetItem *moved; charts->invisibleRootItem()->insertChild(index-1, moved=charts->invisibleRootItem()->takeChild(index)); charts->setCurrentItem(moved); - LTMSettings save = (presets)[index]; - presets.removeAt(index); - presets.insert(index-1, save); + LTMSettings save = (context->athlete->presets)[index]; + context->athlete->presets.removeAt(index); + context->athlete->presets.insert(index-1, save); + } } @@ -2105,9 +2079,9 @@ LTMTool::downClicked() QTreeWidgetItem *moved; charts->invisibleRootItem()->insertChild(index+1, moved=charts->invisibleRootItem()->takeChild(index)); charts->setCurrentItem(moved); - LTMSettings save = (presets)[index]; - presets.removeAt(index); - presets.insert(index+1, save); + LTMSettings save = (context->athlete->presets)[index]; + context->athlete->presets.removeAt(index); + context->athlete->presets.insert(index+1, save); } } @@ -2115,7 +2089,9 @@ void LTMTool::renameClicked() { // which one is selected? - if (charts->currentItem()) charts->editItem(charts->currentItem(), 0); + if (charts->currentItem()) { + charts->editItem(charts->currentItem(), 0); + } } void @@ -2130,7 +2106,7 @@ LTMTool::deleteClicked() int index = charts->invisibleRootItem()->indexOfChild(charts->currentItem()); // zap! - presets.removeAt(index); + context->athlete->presets.removeAt(index); delete charts->invisibleRootItem()->takeChild(index); } } diff --git a/src/LTMTool.h b/src/LTMTool.h index daadef423..c09891b63 100644 --- a/src/LTMTool.h +++ b/src/LTMTool.h @@ -78,9 +78,6 @@ class LTMTool : public QWidget SearchFilterBox *searchBox; #endif - // preset charts - QList presets; - // basic tab: accessed by LTMWindow hence public QComboBox *groupBy; QCheckBox *shadeZones; @@ -112,8 +109,10 @@ class LTMTool : public QWidget void clearFilter(); void setFilter(QStringList); + void presetsChanged(); void exportClicked(); void importClicked(); + //void okClicked(); // !!! need to address this void upClicked(); void downClicked(); void renameClicked(); @@ -123,7 +122,6 @@ class LTMTool : public QWidget private: // Helper function for default charts translation - void translateDefaultCharts(QList&charts); QwtPlotCurve::CurveStyle curveStyle(RideMetric::MetricType); QwtSymbol::Style symbolStyle(RideMetric::MetricType); diff --git a/src/LTMWindow.cpp b/src/LTMWindow.cpp index a4842bce4..b6b41a7b2 100644 --- a/src/LTMWindow.cpp +++ b/src/LTMWindow.cpp @@ -783,7 +783,7 @@ LTMWindow::applyClicked() QDateTime end = settings.end; // apply preset - settings = ltmTool->presets[selected]; + settings = context->athlete->presets[selected]; // now get back the local chart setup settings.ltmTool = ltmTool; @@ -805,10 +805,10 @@ LTMWindow::applyClicked() void LTMWindow::saveClicked() { - EditChartDialog editor(context, &settings, ltmTool->presets); + EditChartDialog editor(context, &settings, context->athlete->presets); if (editor.exec()) { - ltmTool->presets.append(settings); - settings.writeChartXML(context->athlete->home, ltmTool->presets); + context->athlete->presets.append(settings); + settings.writeChartXML(context->athlete->home, context->athlete->presets); //ltmTool->presetPicker->insertItem(ltmTool->presets.count()-1, settings.name, ltmTool->presets.count()-1); //ltmTool->presetPicker->setCurrentIndex(ltmTool->presets.count()-1); }