diff --git a/src/Charts/LTMTool.cpp b/src/Charts/LTMTool.cpp index 7be81ed2a..0b99c8b61 100644 --- a/src/Charts/LTMTool.cpp +++ b/src/Charts/LTMTool.cpp @@ -212,8 +212,9 @@ LTMTool::LTMTool(Context *context, LTMSettings *settings) : QWidget(context->mai metrics.append(m); } + SpecialFields& sp = SpecialFields::getInstance(); + // metadata metrics - SpecialFields sp; foreach (FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { if (!sp.isMetric(field.name) && (field.type == 3 || field.type == 4)) { MetricDetail metametric; @@ -1866,7 +1867,6 @@ EditMetricDetailDialog::EditMetricDetailDialog(Context *context, LTMTool *ltmToo // get suitably formated list QList list; QString last; - SpecialFields sp; // get sorted list QStringList names = context->rideNavigator->logicalHeadings; @@ -1920,6 +1920,8 @@ EditMetricDetailDialog::EditMetricDetailDialog(Context *context, LTMTool *ltmToo std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups diff --git a/src/Charts/OverviewItems.cpp b/src/Charts/OverviewItems.cpp index f8a72242d..6d703c7a4 100644 --- a/src/Charts/OverviewItems.cpp +++ b/src/Charts/OverviewItems.cpp @@ -29,6 +29,7 @@ #include "PMCData.h" #include "RideMetadata.h" +#include "SpecialFields.h" #include "DataFilter.h" #include "Utils.h" @@ -952,7 +953,7 @@ MetaOverviewItem::MetaOverviewItem(ChartSpace *parent, QString name, QString sym void MetaOverviewItem::configChanged(qint32) { - SpecialFields specialFields; + SpecialFields& sp = SpecialFields::getInstance(); // Get the field type fieldtype = -1; @@ -963,7 +964,7 @@ MetaOverviewItem::configChanged(qint32) // display the edit icon for relevant metadata fields setShowEdit((p.name != "Interval Goal") && // cannot specify which interval (p.name != "Interval Notes") && // cannot specify which interval - specialFields.isUser(p.name)); // user mutable metadata fields + sp.isUser(p.name)); // user mutable metadata fields break; } } @@ -3915,7 +3916,6 @@ OverviewItemConfig::OverviewItemConfig(ChartSpaceItem *item) : QWidget(NULL), it // QList list; QString last; - SpecialFields sp; // get sorted list QStringList names = item->parent->context->rideNavigator->logicalHeadings; @@ -3969,6 +3969,8 @@ OverviewItemConfig::OverviewItemConfig(ChartSpaceItem *item) : QWidget(NULL), it std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups diff --git a/src/Charts/TreeMapWindow.cpp b/src/Charts/TreeMapWindow.cpp index 6c5bb6733..ff0352e6d 100644 --- a/src/Charts/TreeMapWindow.cpp +++ b/src/Charts/TreeMapWindow.cpp @@ -29,6 +29,7 @@ #include "HelpWhatsThis.h" #include "GoldenCheetah.h" #include "Perspective.h" +#include "SpecialFields.h" #include #include @@ -255,7 +256,7 @@ TreeMapWindow::refresh() settings.specification.setDateRange(dr); // and the fields to use - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance();; settings.field1 = sp.internalName(field1->currentText()); settings.field2 = sp.internalName(field2->currentText()); @@ -327,7 +328,7 @@ void TreeMapWindow::addTextFields(QComboBox *combo) { combo->addItem(tr("None")); // if "None" is changed to not being first any more, adjust public methods f1,f2,setf1,setf2 - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance();; foreach (FieldDefinition x, fieldDefinitions) { if (x.type < 4) combo->addItem(sp.displayName(x.name)); } diff --git a/src/Charts/TreeMapWindow.h b/src/Charts/TreeMapWindow.h index 28c66341c..1bf52cd0d 100644 --- a/src/Charts/TreeMapWindow.h +++ b/src/Charts/TreeMapWindow.h @@ -74,8 +74,7 @@ class TreeMapWindow : public GcChartWindow if (field1->currentIndex() == 0) { return "None"; // dont' translate } else { - SpecialFields sp; - return ( sp.internalName(field1->currentText())); + return (SpecialFields::getInstance().internalName(field1->currentText())); } } @@ -84,23 +83,20 @@ class TreeMapWindow : public GcChartWindow if (field2->currentIndex() == 0) { return "None"; // dont' translate } else { - SpecialFields sp; - return ( sp.internalName(field2->currentText())); + return (SpecialFields::getInstance().internalName(field2->currentText())); } } void setf1(QString x) { // consider translation on Screen, but Store only in EN - SpecialFields sp; if (x == "None") field1->setCurrentIndex(0); // "None" is the first item in Combo Box - else field1->setCurrentIndex(field1->findText(sp.displayName(x))); + else field1->setCurrentIndex(field1->findText(SpecialFields::getInstance().displayName(x))); } void setf2(QString x) { // consider translation on Screen, but Store only in EN - SpecialFields sp; if (x == "None") field2->setCurrentIndex(0); // // "None" is the first item in Combo Box - else field2->setCurrentIndex(field2->findText(sp.displayName(x))); + else field2->setCurrentIndex(field2->findText(SpecialFields::getInstance().displayName(x))); } int useSelected() { return dateSetting->mode(); } diff --git a/src/Charts/UserChart.cpp b/src/Charts/UserChart.cpp index 1ac2688a4..a6f29d80e 100644 --- a/src/Charts/UserChart.cpp +++ b/src/Charts/UserChart.cpp @@ -34,6 +34,7 @@ #include "TimeUtils.h" #include "HelpWhatsThis.h" #include "RideItem.h" +#include "SpecialFields.h" #include #include @@ -1389,7 +1390,6 @@ EditUserSeriesDialog::EditUserSeriesDialog(Context *context, bool rangemode, Gen QList list; QString last; - SpecialFields sp; // get sorted list QStringList names = context->rideNavigator->logicalHeadings; @@ -1443,6 +1443,8 @@ EditUserSeriesDialog::EditUserSeriesDialog(Context *context, bool rangemode, Gen std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups diff --git a/src/Core/Context.cpp b/src/Core/Context.cpp index 3174e778e..207c731bb 100644 --- a/src/Core/Context.cpp +++ b/src/Core/Context.cpp @@ -25,6 +25,7 @@ #include "NavigationModel.h" #include "UserMetricSettings.h" #include "UserMetricParser.h" +#include "SpecialFields.h" #include "DataFilter.h" #include @@ -82,7 +83,7 @@ GlobalContext::readConfig(qint32 state) // redo rideMetadata = new RideMetadata(NULL); colorEngine = new ColorEngine(this); - specialFields = SpecialFields(); + SpecialFields::getInstance().reloadFields(); if (state & CONFIG_USERMETRICS) userMetricsConfigChanged(); @@ -126,7 +127,7 @@ GlobalContext::userMetricsConfigChanged() } // refresh SpecialFields to include updated user metrics - specialFields = SpecialFields(); + SpecialFields::getInstance().reloadFields(); } GlobalContext *GlobalContext::context() diff --git a/src/Core/Context.h b/src/Core/Context.h index eb6bb71c8..406a5653d 100644 --- a/src/Core/Context.h +++ b/src/Core/Context.h @@ -21,7 +21,6 @@ #include "TimeUtils.h" // for class DateRange #include "RealtimeData.h" // for class RealtimeData -#include "SpecialFields.h" // for class RealtimeData #include "CompareInterval.h" // what intervals are being compared? #include "CompareDateRange.h" // what intervals are being compared? #include "RideFile.h" @@ -88,7 +87,6 @@ class GlobalContext : public QObject // metadata etc RideMetadata *rideMetadata; - SpecialFields specialFields; ColorEngine *colorEngine; // metric units diff --git a/src/Core/DataFilter.cpp b/src/Core/DataFilter.cpp index 21c39febe..a1e66b258 100644 --- a/src/Core/DataFilter.cpp +++ b/src/Core/DataFilter.cpp @@ -40,6 +40,7 @@ #include "WPrime.h" // for LR when copying CP chart filtering mechanism #include "FastKmeans.h" // for kmeans(...) #include "Season.h" // for events(...) +#include "SpecialFields.h" #ifdef GC_HAVE_SAMPLERATE // we have libsamplerate @@ -3394,14 +3395,16 @@ void DataFilter::configChanged(qint32) rt.lookupType.insert(name.replace(" ","_"), true); } + SpecialFields& sp = SpecialFields::getInstance(); + // now add the ride metadata fields -- should be the same generally foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { QString underscored = field.name; - if (!GlobalContext::context()->specialFields.isMetric(underscored)) { + if (!sp.isMetric(underscored)) { // translate to internal name if name has non Latin1 characters - underscored = GlobalContext::context()->specialFields.internalName(underscored); - field.name = GlobalContext::context()->specialFields.internalName((field.name)); + underscored = sp.internalName(underscored); + field.name = sp.internalName((field.name)); rt.lookupMap.insert(underscored.replace(" ","_"), field.name); rt.lookupType.insert(underscored.replace(" ","_"), (field.type > 2)); // true if is number diff --git a/src/Core/RideCache.cpp b/src/Core/RideCache.cpp index 1eb2d2954..ea1370a30 100644 --- a/src/Core/RideCache.cpp +++ b/src/Core/RideCache.cpp @@ -41,6 +41,7 @@ #include "RideMetric.h" #include "UserMetricSettings.h" #include "UserMetricParser.h" +#include "SpecialFields.h" #include #include @@ -99,7 +100,7 @@ RideCache::RideCache(Context *context) : context(context) } // reset special fields to take into account user metrics - GlobalContext::context()->specialFields = SpecialFields(); + SpecialFields::getInstance().reloadFields(); } // set the list diff --git a/src/Core/RideCacheModel.cpp b/src/Core/RideCacheModel.cpp index 40ea58d0c..b47b4664a 100644 --- a/src/Core/RideCacheModel.cpp +++ b/src/Core/RideCacheModel.cpp @@ -22,6 +22,7 @@ #include "RideCache.h" #include "AthleteTab.h" #include "AbstractView.h" +#include "SpecialFields.h" #include "RideCacheModel.h" @@ -224,7 +225,7 @@ RideCacheModel::configChanged(qint32) // is a metadata int i= section -5 - factory->metricCount(); - headings_<< QString("%1").arg(GlobalContext::context()->specialFields.makeTechName(metadata[i].name)); + headings_<< QString("%1").arg(SpecialFields::getInstance().makeTechName(metadata[i].name)); } } break; diff --git a/src/Core/RideDB.y b/src/Core/RideDB.y index b297dc863..940f64a9c 100644 --- a/src/Core/RideDB.y +++ b/src/Core/RideDB.y @@ -19,6 +19,7 @@ #include "RideDB.h" #include "RideFileCache.h" +#include "SpecialFields.h" #include "Settings.h" #ifdef GC_WANT_HTTP #include "APIWebService.h" @@ -921,7 +922,7 @@ APIWebService::listRides(QString athlete, HttpRequest &request, HttpResponse &re RideMetadata::readXML(metaConfig, keywordDefinitions, settings.metafields, colorfield, defaultDefinitions); - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); // what is being asked for ? if (metadata.toUpper() == "ALL") { diff --git a/src/Core/UserData.cpp b/src/Core/UserData.cpp index 96c7e116a..a47e791e8 100644 --- a/src/Core/UserData.cpp +++ b/src/Core/UserData.cpp @@ -21,6 +21,7 @@ #include "RideNavigator.h" #include "AthleteTab.h" #include "HelpWhatsThis.h" +#include "SpecialFields.h" #include "Utils.h" #include // for parsing trademark symbols (!) @@ -109,7 +110,6 @@ EditUserDataDialog::EditUserDataDialog(Context *context, UserData *here) : // should be done in formula completer ! QList list; QString last; - SpecialFields sp; // get sorted list QStringList names = context->rideNavigator->logicalHeadings; @@ -165,6 +165,8 @@ EditUserDataDialog::EditUserDataDialog(Context *context, UserData *here) : std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups diff --git a/src/Gui/BatchProcessingDialog.cpp b/src/Gui/BatchProcessingDialog.cpp index 73d53e3f1..9df1335dc 100644 --- a/src/Gui/BatchProcessingDialog.cpp +++ b/src/Gui/BatchProcessingDialog.cpp @@ -28,6 +28,7 @@ #include "CsvRideFile.h" #include "DataProcessor.h" #include "RideMetadata.h" +#include "SpecialFields.h" #ifdef GC_WANT_PYTHON #include "FixPyScriptsDialog.h" @@ -206,14 +207,15 @@ processed(0), fails(0), numFilesToProcess(0), metadataCompleter(nullptr) { metadataEditField = new QLineEdit(this); // Now add the ride metadata fields to the comboBox + SpecialFields &sp = SpecialFields::getInstance(); foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { // display the edit icon for relevant metadata fields if ((field.name != "Interval Goal") && // cannot specify which interval (field.name != "Interval Notes") && // cannot specify which interval - specialFields.isUser(field.name)) { // user mutable metadata fields + sp.isUser(field.name)) { // user mutable metadata fields - metadataFieldToSet->addItem(specialFields.displayName(field.name)); + metadataFieldToSet->addItem(sp.displayName(field.name)); } } @@ -771,7 +773,7 @@ BatchProcessingDialog::bpFailureType BatchProcessingDialog::setMetadataForActivities() { // Convert from metdata diosplay name to internal name - QString metadataFieldName(specialFields.internalName(metadataFieldToSet->currentText())); + QString metadataFieldName(SpecialFields::getInstance().internalName(metadataFieldToSet->currentText())); QString metadataValue(metadataEditField->text()); diff --git a/src/Gui/BatchProcessingDialog.h b/src/Gui/BatchProcessingDialog.h index 5f9ba6b44..c1c1af06c 100644 --- a/src/Gui/BatchProcessingDialog.h +++ b/src/Gui/BatchProcessingDialog.h @@ -81,8 +81,6 @@ private: Context *context; bool aborted; - SpecialFields specialFields; - int processed, fails, numFilesToProcess; batchRadioBType outputMode; diff --git a/src/Gui/EditUserMetricDialog.cpp b/src/Gui/EditUserMetricDialog.cpp index a3f69dd6e..c35ed88c7 100644 --- a/src/Gui/EditUserMetricDialog.cpp +++ b/src/Gui/EditUserMetricDialog.cpp @@ -28,6 +28,7 @@ #include "Zones.h" #include "HrZones.h" #include "RideMetric.h" +#include "SpecialFields.h" #include "HelpWhatsThis.h" #include @@ -112,7 +113,6 @@ EditUserMetricDialog::EditUserMetricDialog(QWidget *parent, Context *context, Us // get suitably formated list XXX XXX ffs, refactor this into FormulEdit !!! XXX XXX QList list; QString last; - SpecialFields sp; // get sorted list QStringList names = context->rideNavigator->logicalHeadings; @@ -166,6 +166,8 @@ EditUserMetricDialog::EditUserMetricDialog(QWidget *parent, Context *context, Us std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups diff --git a/src/Gui/LTMSidebar.cpp b/src/Gui/LTMSidebar.cpp index 2b5bd37d1..0fcff2134 100644 --- a/src/Gui/LTMSidebar.cpp +++ b/src/Gui/LTMSidebar.cpp @@ -742,7 +742,7 @@ LTMSidebar::setAutoFilterMenu() autoFilterState.clear(); // Convert field names for Internal to Display (to work with the translated values) - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { if (field.tab != "" && (field.type == 0 || field.type == 2)) { // we only do text or shorttext fields @@ -813,7 +813,7 @@ LTMSidebar::autoFilterChanged() tree->setWhatsThis(helpFilterTree->getWhatsThisText(HelpWhatsThis::SideBarTrendsView_Filter)); // Convert field names for Internal to Display (to work with the translated values) - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); // update the values available in the tree foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { if (sp.displayName(field.name) == action->text()) { @@ -976,7 +976,7 @@ LTMSidebar::autoFilterRefresh() qDeleteAll(tree->invisibleRootItem()->takeChildren()); // translate fields back from Display Name to internal Name ! - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); // what is the field? QString fieldname = sp.internalName(item->splitterHandle->title()); @@ -1007,7 +1007,7 @@ LTMSidebar::autoFilterSelectionChanged() isautofilter = false; // Convert field names from Display to Internal (to work with translations) - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); // are any auto filters applied? for (int i=1; icount(); i++) { diff --git a/src/Gui/MetricOverrideDialog.cpp b/src/Gui/MetricOverrideDialog.cpp index 2d9bc69ce..8995f68fc 100644 --- a/src/Gui/MetricOverrideDialog.cpp +++ b/src/Gui/MetricOverrideDialog.cpp @@ -21,6 +21,7 @@ #include "Context.h" #include "RideCache.h" #include "RideMetric.h" +#include "SpecialFields.h" #include #include @@ -30,7 +31,7 @@ MetricOverrideDialog::MetricOverrideDialog(Context* context, const QString& fiel { setAttribute(Qt::WA_DeleteOnClose); - const RideMetric* metric = GlobalContext::context()->specialFields.rideMetric(fieldName_); + const RideMetric* metric = SpecialFields::getInstance().rideMetric(fieldName_); // Metric Override Dialog should only be created for metrics that exist, if not exit. if (metric == nullptr) { done(QDialog::Rejected); return; } @@ -56,7 +57,7 @@ MetricOverrideDialog::MetricOverrideDialog(Context* context, const QString& fiel // we need to show what units we use for weight... if (fieldName_ == "Weight") { units = useMetricUnits ? tr(" (kg)") : tr(" (lbs)"); } - metricLabel_ = new QLabel(QString("%1%2").arg(GlobalContext::context()->specialFields.displayName(fieldName_)).arg(units)); + metricLabel_ = new QLabel(QString("%1%2").arg(SpecialFields::getInstance().displayName(fieldName_)).arg(units)); switch (dlgMetricType_) { case DialogMetricType::DATE: { @@ -164,8 +165,8 @@ MetricOverrideDialog::setClicked() // convert from imperial to metric if needed if (!GlobalContext::context()->useMetricUnits) { - double value = text.toDouble() * (1 / GlobalContext::context()->specialFields.rideMetric(fieldName_)->conversion()); - value -= GlobalContext::context()->specialFields.rideMetric(fieldName_)->conversionSum(); + double value = text.toDouble() * (1 / SpecialFields::getInstance().rideMetric(fieldName_)->conversion()); + value -= SpecialFields::getInstance().rideMetric(fieldName_)->conversionSum(); text = QString("%1").arg(value); } } break; @@ -179,7 +180,7 @@ MetricOverrideDialog::setClicked() override.insert("value", text); // check for compatability metrics - QString symbol = GlobalContext::context()->specialFields.metricSymbol(fieldName_); + QString symbol = SpecialFields::getInstance().metricSymbol(fieldName_); if (fieldName_ == "TSS") symbol = "coggan_tss"; if (fieldName_ == "NP") symbol = "coggan_np"; if (fieldName_ == "IF") symbol = "coggan_if"; @@ -202,7 +203,7 @@ MetricOverrideDialog::setClicked() void MetricOverrideDialog::clearClicked() { - QString symbol = GlobalContext::context()->specialFields.metricSymbol(fieldName_); + QString symbol = SpecialFields::getInstance().metricSymbol(fieldName_); if (fieldName_ == "TSS") symbol = "coggan_tss"; if (fieldName_ == "NP") symbol = "coggan_np"; if (fieldName_ == "IF") symbol = "coggan_if"; diff --git a/src/Gui/MetricSelect.cpp b/src/Gui/MetricSelect.cpp index 5cdfdbcb6..eebd57594 100644 --- a/src/Gui/MetricSelect.cpp +++ b/src/Gui/MetricSelect.cpp @@ -18,6 +18,7 @@ #include "MetricSelect.h" #include "RideFileCache.h" +#include "SpecialFields.h" MetricSelect::MetricSelect(QWidget *parent, Context *context, int scope) : QLineEdit(parent), context(context), scope(scope), _metric(NULL) @@ -39,13 +40,15 @@ MetricSelect::MetricSelect(QWidget *parent, Context *context, int scope) // add meta if we're selecting this if (scope & Meta) { + SpecialFields& sp = SpecialFields::getInstance(); + // now add the ride metadata fields -- should be the same generally foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { QString text = field.name; - if (!GlobalContext::context()->specialFields.isMetric(text)) { + if (!sp.isMetric(text)) { // translate to internal name if name has non Latin1 characters - text = GlobalContext::context()->specialFields.internalName(text); + text = sp.internalName(text); text = text.replace(" ","_"); metaMap.insert(text, field.name); } diff --git a/src/Gui/Pages.cpp b/src/Gui/Pages.cpp index 1cbee8e63..3b3672d0c 100644 --- a/src/Gui/Pages.cpp +++ b/src/Gui/Pages.cpp @@ -2278,7 +2278,7 @@ KeywordsPage::KeywordsPage(MetadataPage *parent, QListkeyword void KeywordsPage::pageSelected() { - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); QString prev = ""; // remember what was selected, if anything? @@ -2301,9 +2301,8 @@ KeywordsPage::pageSelected() void KeywordsPage::colorfieldChanged() { - SpecialFields sp; int index = fieldChooser->currentIndex(); - if (index >=0) parent->colorfield = sp.internalName(fieldChooser->itemText(fieldChooser->currentIndex())); + if (index >=0) parent->colorfield = SpecialFields::getInstance().internalName(fieldChooser->itemText(fieldChooser->currentIndex())); } @@ -2445,8 +2444,8 @@ FieldsPage::FieldsPage(QWidget *parent, QListfieldDefinitions) actionButtons->defaultConnect(ActionButtonBox::UpDownGroup, fields); actionButtons->defaultConnect(ActionButtonBox::AddDeleteGroup, fields); - SpecialFields specials; - SpecialTabs specialTabs; + SpecialFields& specials = SpecialFields::getInstance(); + SpecialTabs& specialTabs = SpecialTabs::getInstance(); foreach(FieldDefinition field, fieldDefinitions) { QCheckBox *checkBox = new QCheckBox("", this); checkBox->setChecked(field.diary); @@ -2569,8 +2568,8 @@ FieldsPage::deleteClicked() void FieldsPage::getDefinitions(QList &fieldList) { - SpecialFields sp; - SpecialTabs st; + SpecialFields& sp = SpecialFields::getInstance(); + SpecialTabs& st = SpecialTabs::getInstance(); QStringList checkdups; // clear current just in case @@ -3044,7 +3043,7 @@ DefaultsPage::DefaultsPage actionButtons->defaultConnect(ActionButtonBox::UpDownGroup, defaults); actionButtons->defaultConnect(ActionButtonBox::AddDeleteGroup, defaults); - SpecialFields specials; + SpecialFields& specials = SpecialFields::getInstance(); foreach(DefaultDefinition adefault, defaultDefinitions) { QTreeWidgetItem *add; @@ -3133,7 +3132,7 @@ DefaultsPage::deleteClicked() void DefaultsPage::getDefinitions(QList &defaultList) { - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); // clear current just in case defaultList.clear(); @@ -3158,7 +3157,7 @@ DefaultsPage::eventFilter (QObject *obj, QEvent *event) { if (event->type() == QEvent::Show && ! event->spontaneous()) { - SpecialFields sp; + SpecialFields& sp = SpecialFields::getInstance(); QList fromFieldsPage; parent->fieldsPage->getDefinitions(fromFieldsPage); QStringList fieldNames; diff --git a/src/Gui/RideNavigator.cpp b/src/Gui/RideNavigator.cpp index f574544ee..3ea3e827b 100644 --- a/src/Gui/RideNavigator.cpp +++ b/src/Gui/RideNavigator.cpp @@ -26,6 +26,7 @@ #include "RideNavigatorProxy.h" #include "SearchFilterBox.h" #include "AbstractView.h" +#include "SpecialFields.h" #include "HelpWhatsThis.h" #include @@ -281,7 +282,7 @@ RideNavigator::resetView() } // add metadata fields... - SpecialFields sp; // all the special fields are in here... + SpecialFields& sp = SpecialFields::getInstance(); // all the special fields are in here... foreach(FieldDefinition field, GlobalContext::context()->rideMetadata->getFields()) { if (!sp.isMetric(field.name) && (field.type < 5 || field.type == 7)) { nameMap.insert(QString("%1").arg(sp.makeTechName(field.name)), sp.displayName(field.name)); diff --git a/src/Gui/RideNavigator.h b/src/Gui/RideNavigator.h index aace76874..4c4de72f3 100644 --- a/src/Gui/RideNavigator.h +++ b/src/Gui/RideNavigator.h @@ -51,6 +51,7 @@ class EditUserDataDialog; class EditUserMetricDialog; class EditUserSeriesDialog; class OverviewItemConfig; +class RideMetric; // // The RideNavigator diff --git a/src/Gui/SearchBox.cpp b/src/Gui/SearchBox.cpp index 38559724a..3223324a0 100644 --- a/src/Gui/SearchBox.cpp +++ b/src/Gui/SearchBox.cpp @@ -25,6 +25,7 @@ #include "GcSideBarItem.h" #include "AnalysisSidebar.h" #include "DataFilter.h" +#include "SpecialFields.h" #include #include @@ -128,7 +129,6 @@ SearchBox::configChanged(qint32) // get suitably formated list QList list; QString last; - SpecialFields sp; // start with just a list of functions list = DataFilter::builtins(context); @@ -181,6 +181,8 @@ SearchBox::configChanged(qint32) QStringList names = context->rideNavigator->logicalHeadings; std::sort(names.begin(), names.end(), insensitiveLessThan); + SpecialFields& sp = SpecialFields::getInstance(); + foreach(QString name, names) { // handle dups @@ -417,8 +419,7 @@ SearchBox::dropEvent(QDropEvent *event) if (name.startsWith("BikeScore")) name = QString("BikeScore"); // Always use the "internalNames" in Filter expressions - SpecialFields sp; - name = sp.internalName(name); + name = SpecialFields::getInstance().internalName(name); // we do very little to the name, just space to _ and lower case it for now... name.replace(' ', '_'); diff --git a/src/Metrics/RideMetadata.cpp b/src/Metrics/RideMetadata.cpp index 942e95fe7..c8ef3b1d4 100644 --- a/src/Metrics/RideMetadata.cpp +++ b/src/Metrics/RideMetadata.cpp @@ -455,6 +455,8 @@ RideMetadata::configChanged(qint32) // remove editor if it exists if (tabs->count() > 0) tabs->removeTab(tabs->count()-1); + SpecialTabs& specialTabs = SpecialTabs::getInstance(); + // create forms and populate with fields for(int i=0; ispecialFields.isMetric(fieldName)) { - value = rideItem->getStringForSymbol(GlobalContext::context()->specialFields.rideMetric(fieldName)->symbol(), GlobalContext::context()->useMetricUnits); + if (SpecialFields::getInstance().isMetric(fieldName)) { + value = rideItem->getStringForSymbol(SpecialFields::getInstance().rideMetric(fieldName)->symbol(), GlobalContext::context()->useMetricUnits); } else { value = rideItem->getText(fieldName, ""); } @@ -772,7 +774,7 @@ Form::arrange() here->addWidget(fields[i]->label, y, 0, labelalignment); - if (GlobalContext::context()->specialFields.isMetric(fields[i]->definition.name)) { + if (SpecialFields::getInstance().isMetric(fields[i]->definition.name)) { QHBoxLayout *override = new QHBoxLayout; overrides.append(override); @@ -900,9 +902,9 @@ FormField::FormField(Form *form, FieldDefinition field, RideMetadata *meta) : fo isTime = false; warn = false; - if (GlobalContext::context()->specialFields.isMetric(field.name)) { + if (SpecialFields::getInstance().isMetric(field.name)) { field.type = FIELD_DOUBLE; // whatever they say, we want a double! - units = GlobalContext::context()->specialFields.rideMetric(field.name)->units(GlobalContext::context()->useMetricUnits); + units = SpecialFields::getInstance().rideMetric(field.name)->units(GlobalContext::context()->useMetricUnits); // remove "seconds", since the field will be a QTimeEdit field if (units == "seconds" || units == tr("seconds")) units = ""; // layout units name for screen @@ -914,7 +916,7 @@ FormField::FormField(Form *form, FieldDefinition field, RideMetadata *meta) : fo units = GlobalContext::context()->useMetricUnits ? tr(" (kg)") : tr (" (lbs)"); } - label = new QLabel(QString("%1%2").arg(GlobalContext::context()->specialFields.displayName(field.name)).arg(units), this); + label = new QLabel(QString("%1%2").arg(SpecialFields::getInstance().displayName(field.name)).arg(units), this); label->setPalette(meta->palette); //label->setFont(font); //label->setFixedHeight(18); @@ -967,11 +969,11 @@ FormField::FormField(Form *form, FieldDefinition field, RideMetadata *meta) : fo ((QDoubleSpinBox*)widget)->setButtonSymbols(QAbstractSpinBox::NoButtons); ((QDoubleSpinBox*)widget)->setMinimum(-9999999.99); ((QDoubleSpinBox*)widget)->setMaximum(9999999.99); - if (GlobalContext::context()->specialFields.isMetric(field.name)) { + if (SpecialFields::getInstance().isMetric(field.name)) { enabled = new QCheckBox(this); connect(enabled, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int))); - units = GlobalContext::context()->specialFields.rideMetric(field.name)->units(GlobalContext::context()->useMetricUnits); + units = SpecialFields::getInstance().rideMetric(field.name)->units(GlobalContext::context()->useMetricUnits); if (units == "seconds" || units == tr("seconds")) { // we need to use a TimeEdit instead @@ -1123,12 +1125,12 @@ FormField::metadataFlush() ourRideItem->setStartTime(update); } else if (definition.name != "Summary") { - if (GlobalContext::context()->specialFields.isMetric(definition.name) && enabled->isChecked()) { + if (SpecialFields::getInstance().isMetric(definition.name) && enabled->isChecked()) { // convert from imperial to metric if needed if (!GlobalContext::context()->useMetricUnits) { - double value = text.toDouble() * (1/ GlobalContext::context()->specialFields.rideMetric(definition.name)->conversion()); - value -= GlobalContext::context()->specialFields.rideMetric(definition.name)->conversionSum(); + double value = text.toDouble() * (1/ SpecialFields::getInstance().rideMetric(definition.name)->conversion()); + value -= SpecialFields::getInstance().rideMetric(definition.name)->conversionSum(); text = QString("%1").arg(value); } @@ -1137,7 +1139,7 @@ FormField::metadataFlush() override.insert("value", text); // check for compatability metrics - QString symbol = GlobalContext::context()->specialFields.metricSymbol(definition.name); + QString symbol = SpecialFields::getInstance().metricSymbol(definition.name); if (definition.name == "TSS") symbol = "coggan_tss"; if (definition.name == "NP") symbol = "coggan_np"; if (definition.name == "IF") symbol = "coggan_if"; @@ -1291,17 +1293,17 @@ FormField::editFinished() } } else if (definition.name != "Summary") { - if (GlobalContext::context()->specialFields.isMetric(definition.name) && enabled->isChecked()) { + if (SpecialFields::getInstance().isMetric(definition.name) && enabled->isChecked()) { // convert from imperial to metric if needed if (!GlobalContext::context()->useMetricUnits) { - double value = text.toDouble() * (1/ GlobalContext::context()->specialFields.rideMetric(definition.name)->conversion()); - value -= GlobalContext::context()->specialFields.rideMetric(definition.name)->conversionSum(); + double value = text.toDouble() * (1/ SpecialFields::getInstance().rideMetric(definition.name)->conversion()); + value -= SpecialFields::getInstance().rideMetric(definition.name)->conversionSum(); text = QString("%1").arg(value); } QMap empty; - QMap current = ourRideItem->ride()->metricOverrides.value(GlobalContext::context()->specialFields.metricSymbol(definition.name), empty); + QMap current = ourRideItem->ride()->metricOverrides.value(SpecialFields::getInstance().metricSymbol(definition.name), empty); QString currentvalue = current.value("value", ""); if (currentvalue != text) { @@ -1309,7 +1311,7 @@ FormField::editFinished() changed = true; QMap override; override.insert("value", text); - ourRideItem->ride()->metricOverrides.insert(GlobalContext::context()->specialFields.metricSymbol(definition.name), override); + ourRideItem->ride()->metricOverrides.insert(SpecialFields::getInstance().metricSymbol(definition.name), override); } } else { @@ -1415,7 +1417,7 @@ FormField::stateChanged(int state) // remove from overrides if neccessary if (ourRideItem && ourRideItem->ride()) { - QString symbol = GlobalContext::context()->specialFields.metricSymbol(definition.name); + QString symbol = SpecialFields::getInstance().metricSymbol(definition.name); if (definition.name == "TSS") symbol = "coggan_tss"; if (definition.name == "NP") symbol = "coggan_np"; if (definition.name == "IF") symbol = "coggan_if"; @@ -1466,9 +1468,9 @@ FormField::metadataChanged() else if (definition.name == "Start Time") value = ourRideItem->ride()->startTime().time().toString("hh:mm:ss.zzz"); else if (definition.name == "Identifier") value = ourRideItem->ride()->id(); else { - if (GlobalContext::context()->specialFields.isMetric(definition.name)) { + if (SpecialFields::getInstance().isMetric(definition.name)) { - QString symbol = GlobalContext::context()->specialFields.metricSymbol(definition.name); + QString symbol = SpecialFields::getInstance().metricSymbol(definition.name); if (definition.name == "TSS") symbol = "coggan_tss"; if (definition.name == "NP") symbol = "coggan_np"; if (definition.name == "IF") symbol = "coggan_if"; @@ -1483,11 +1485,11 @@ FormField::metadataChanged() value = override.value("value"); // does it need conversion from metric? - if (GlobalContext::context()->specialFields.rideMetric(definition.name)->conversion() != 1.0) { + if (SpecialFields::getInstance().rideMetric(definition.name)->conversion() != 1.0) { // do we want imperial? if (!GlobalContext::context()->useMetricUnits) { - double newvalue = value.toDouble() * GlobalContext::context()->specialFields.rideMetric(definition.name)->conversion(); - newvalue -= GlobalContext::context()->specialFields.rideMetric(definition.name)->conversionSum(); + double newvalue = value.toDouble() * SpecialFields::getInstance().rideMetric(definition.name)->conversion(); + newvalue -= SpecialFields::getInstance().rideMetric(definition.name)->conversionSum(); value = QString("%1").arg(newvalue); } } diff --git a/src/Metrics/RideMetadata.h b/src/Metrics/RideMetadata.h index a3225fcb9..dd19a1ee4 100644 --- a/src/Metrics/RideMetadata.h +++ b/src/Metrics/RideMetadata.h @@ -21,7 +21,6 @@ #include "GoldenCheetah.h" #include "Context.h" -#include "SpecialFields.h" #include #include @@ -201,7 +200,6 @@ class RideMetadata : public QWidget bool singlecolumn; Context *context; - SpecialTabs specialTabs; QPalette palette; // to be applied to all widgets diff --git a/src/Metrics/SpecialFields.cpp b/src/Metrics/SpecialFields.cpp index 8a8025b6a..a6457ba45 100644 --- a/src/Metrics/SpecialFields.cpp +++ b/src/Metrics/SpecialFields.cpp @@ -24,6 +24,17 @@ SpecialFields::SpecialFields() { + reloadFields(); +} + +void +SpecialFields::reloadFields() { + + // Clear datasets for refresh case + namesmap.clear(); + specialset.clear(); + metricmap.clear(); + namesmap.insert("Start Date", tr("Start Date")); // linked to RideFile::starttime specialset.insert("Start Date"); namesmap.insert("Start Time", tr("Start Time")); // linked to RideFile::starttime @@ -95,32 +106,28 @@ SpecialFields::SpecialFields() namesmap.insert(internal, name); metricmap.insert(internal, add); } - - model_ = new QStringListModel; - model_->setStringList(namesmap.keys()); } bool -SpecialFields::isSpecial(QString &name) const +SpecialFields::isSpecial(const QString &name) const { return specialset.contains(name); } bool -SpecialFields::isUser(QString &name) const +SpecialFields::isUser(const QString &name) const { return !isSpecial(name) && !isMetric(name); } bool -SpecialFields::isMetric(QString &name) const +SpecialFields::isMetric(const QString &name) const { - if (metricSymbol(name) != "") return true; - else return false; + return (metricSymbol(name) != ""); } QString -SpecialFields::makeTechName(QString name) const +SpecialFields::makeTechName(const QString &name) const { // strip spaces and only keep alpha values - everything else // becomes an underscore @@ -129,7 +136,7 @@ SpecialFields::makeTechName(QString name) const } QString -SpecialFields::metricSymbol(QString name) const +SpecialFields::metricSymbol(const QString &name) const { // return technical name for metric long name const RideMetric *metric = metricmap.value(name, NULL); @@ -144,7 +151,7 @@ SpecialFields::rideMetric(const QString &name) const } QString -SpecialFields::displayName(QString &name) const +SpecialFields::displayName(const QString &name) const { // return localized name for display if (namesmap.contains(name)) return namesmap.value(name); @@ -152,7 +159,7 @@ SpecialFields::displayName(QString &name) const } QString -SpecialFields::internalName(QString displayName) const +SpecialFields::internalName(const QString &displayName) const { // return internal name for storage QMapIterator i(namesmap); @@ -176,7 +183,7 @@ SpecialTabs::SpecialTabs() } QString -SpecialTabs::displayName(QString &internalName) const +SpecialTabs::displayName(const QString &internalName) const { // return localized name for display if (namesmap.contains(internalName)) return namesmap.value(internalName); @@ -184,7 +191,7 @@ SpecialTabs::displayName(QString &internalName) const } QString -SpecialTabs::internalName(QString displayName) const +SpecialTabs::internalName(const QString &displayName) const { // return internal name for storage QMapIterator i(namesmap); diff --git a/src/Metrics/SpecialFields.h b/src/Metrics/SpecialFields.h index b7d11fa99..91c0e6ce8 100644 --- a/src/Metrics/SpecialFields.h +++ b/src/Metrics/SpecialFields.h @@ -28,28 +28,33 @@ class SpecialFields Q_DECLARE_TR_FUNCTIONS(SpecialFields) public: - SpecialFields(); - enum FieldType { User, Special, Metric }; - FieldType fieldType(QString &) const; // what type is it? - bool isUser(QString&) const; // is this a real user defined field? - bool isSpecial(QString&) const; // is this a special field name? - bool isMetric(QString&) const; // is this a metric override? + // Singleton pattern + static SpecialFields& getInstance() { + static SpecialFields instance; + return instance; + } + SpecialFields(SpecialFields const&) = delete; + void operator=(SpecialFields const&) = delete; - QString makeTechName(QString) const; // return a SQL friendly name - QString metricSymbol(QString) const; // return symbol for user friendly name + void reloadFields(); + + bool isUser(const QString&) const; // is this a real user defined field? + bool isSpecial(const QString&) const; // is this a special field name? + bool isMetric(const QString&) const; // is this a metric override? + + QString makeTechName(const QString&) const; // return a SQL friendly name + QString metricSymbol(const QString&) const; // return symbol for user friendly name const RideMetric *rideMetric(const QString&) const; // return metric ptr for user friendly name - QString displayName(QString &) const; // return display (localized) name for name - QString internalName(QString) const; // return internal (english) Name for display - - // the config pane uses the model - QStringListModel *model() { return model_; } + QString displayName(const QString&) const; // return display (localized) name for name + QString internalName(const QString&) const; // return internal (english) Name for display private: + SpecialFields(); + QMap namesmap; // Map Internal (english) name to external (Localized) name QSet specialset; // Internal names of special fields QMap metricmap; - QStringListModel *model_; }; class SpecialTabs @@ -57,11 +62,20 @@ class SpecialTabs Q_DECLARE_TR_FUNCTIONS(SpecialTabs) public: - SpecialTabs(); - QString displayName(QString &) const; // return display (localized) - QString internalName(QString) const; // return internal (english) + // Singleton pattern + static SpecialTabs& getInstance() { + static SpecialTabs instance; + return instance; + } + SpecialTabs(SpecialTabs const&) = delete; + void operator=(SpecialTabs const&) = delete; + + QString displayName(const QString&) const; // return display (localized) + QString internalName(const QString&) const; // return internal (english) private: + SpecialTabs(); + QMap namesmap; // Map Internal (english) name to external (Localized) name }; diff --git a/src/Python/SIP/Bindings.cpp b/src/Python/SIP/Bindings.cpp index dc733252e..63c7f7d17 100644 --- a/src/Python/SIP/Bindings.cpp +++ b/src/Python/SIP/Bindings.cpp @@ -17,6 +17,7 @@ #include "PaceZones.h" #include "DataProcessor.h" #include "Perspective.h" +#include "SpecialFields.h" #include "Bindings.h" @@ -982,7 +983,7 @@ Bindings::activityMetrics(RideItem* item) const QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1006,7 +1007,7 @@ Bindings::activityMetrics(RideItem* item) const // don't add incomplete meta definitions or metric override fields if (field.name == "" || field.tab == "" || - GlobalContext::context()->specialFields.isMetric(field.name)) continue; + SpecialFields::getInstance().isMetric(field.name)) continue; // add to the dict PyDict_SetItemString_Steal(dict, field.name.replace(" ","_").toUtf8().constData(), PyUnicode_FromString(item->getText(field.name, "").toUtf8().constData())); @@ -1186,7 +1187,7 @@ Bindings::seasonMetrics(bool all, DateRange range, QString filter) const QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1212,7 +1213,7 @@ Bindings::seasonMetrics(bool all, DateRange range, QString filter) const // don't add incomplete meta definitions or metric override fields if (field.name == "" || field.tab == "" || - GlobalContext::context()->specialFields.isMetric(field.name)) continue; + SpecialFields::getInstance().isMetric(field.name)) continue; // Create a string list PyObject* metalist = PyList_New(rides); @@ -1392,7 +1393,7 @@ Bindings::seasonIntervals(DateRange range, QString type) const QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1510,7 +1511,7 @@ Bindings::activityIntervals(QString type, PyObject* activity) const QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1698,9 +1699,9 @@ Bindings::setTag(QString name, QString value, PyObject *activity) const if (f == nullptr) return false; name = name.replace("_"," "); - if (GlobalContext::context()->specialFields.isMetric(name)) { + if (SpecialFields::getInstance().isMetric(name)) { - QString symbol = GlobalContext::context()->specialFields.metricSymbol(name); + QString symbol = SpecialFields::getInstance().metricSymbol(name); // lets set the override QMap override; override = f->metricOverrides.value(symbol); @@ -1747,9 +1748,9 @@ Bindings::delTag(QString name, PyObject *activity) const if (m == nullptr) m = context->rideItem(); name = name.replace("_"," "); - if (GlobalContext::context()->specialFields.isMetric(name)) { + if (SpecialFields::getInstance().isMetric(name)) { - if (f->metricOverrides.remove(GlobalContext::context()->specialFields.metricSymbol(name))) { + if (f->metricOverrides.remove(SpecialFields::getInstance().metricSymbol(name))) { // Notify changes if activity is already in rideCache if (m && m->dateTime == f->startTime()) { @@ -1789,8 +1790,8 @@ Bindings::hasTag(QString name, PyObject *activity) const if (f == nullptr) return false; name = name.replace("_"," "); - if (GlobalContext::context()->specialFields.isMetric(name)) { - return f->metricOverrides.contains(GlobalContext::context()->specialFields.metricSymbol(name)); + if (SpecialFields::getInstance().isMetric(name)) { + return f->metricOverrides.contains(SpecialFields::getInstance().metricSymbol(name)); } else { return f->tags().contains(name); } @@ -1806,8 +1807,8 @@ Bindings::getTag(QString name, PyObject *activity) const if (f == nullptr) return QString(); name = name.replace("_"," "); - if (GlobalContext::context()->specialFields.isMetric(name)) { - return f->metricOverrides[GlobalContext::context()->specialFields.metricSymbol(name)]["value"]; + if (SpecialFields::getInstance().isMetric(name)) { + return f->metricOverrides[SpecialFields::getInstance().metricSymbol(name)]["value"]; } else { return f->getTag(name, ""); } @@ -1854,7 +1855,7 @@ Bindings::metrics(QString metric, bool all, QString filter) const QString symbol = factory.metricName(i); const RideMetric *m = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -2107,7 +2108,7 @@ Bindings::seasonPmc(bool all, QString metric) const const RideMetricFactory &factory = RideMetricFactory::instance(); for (int i=0; ispecialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name.replace(" ","_"); if (name == metric) { diff --git a/src/R/RTool.cpp b/src/R/RTool.cpp index 0dec81952..f36c9d491 100644 --- a/src/R/RTool.cpp +++ b/src/R/RTool.cpp @@ -39,6 +39,7 @@ #include "PaceZones.h" #include "GenericChart.h" #include "Perspective.h" +#include "SpecialFields.h" #ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wcast-function-type" // shut gcc up @@ -968,7 +969,7 @@ RTool::dfForRideItem(const RideItem *ri) // count active fields foreach(FieldDefinition def, GlobalContext::context()->rideMetadata->getFields()) { if (def.name != "" && def.tab != "" && - !GlobalContext::context()->specialFields.isMetric(def.name)) + !SpecialFields::getInstance().isMetric(def.name)) meta++; } } @@ -1043,7 +1044,7 @@ RTool::dfForRideItem(const RideItem *ri) QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1069,7 +1070,7 @@ RTool::dfForRideItem(const RideItem *ri) // don't add incomplete meta definitions or metric override fields if (field.name == "" || field.tab == "" || - GlobalContext::context()->specialFields.isMetric(field.name)) continue; + SpecialFields::getInstance().isMetric(field.name)) continue; // Create a string vector SEXP m; @@ -1138,7 +1139,7 @@ RTool::dfForDateRange(bool all, DateRange range, SEXP filter) // count active fields foreach(FieldDefinition def, GlobalContext::context()->rideMetadata->getFields()) { if (def.name != "" && def.tab != "" && - !GlobalContext::context()->specialFields.isMetric(def.name)) + !SpecialFields::getInstance().isMetric(def.name)) meta++; } } @@ -1258,7 +1259,7 @@ RTool::dfForDateRange(bool all, DateRange range, SEXP filter) QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1292,7 +1293,7 @@ RTool::dfForDateRange(bool all, DateRange range, SEXP filter) // don't add incomplete meta definitions or metric override fields if (field.name == "" || field.tab == "" || - GlobalContext::context()->specialFields.isMetric(field.name)) continue; + SpecialFields::getInstance().isMetric(field.name)) continue; // Create a string vector SEXP m; @@ -1514,7 +1515,7 @@ RTool::dfForDateRangeIntervals(DateRange range, QStringList types) QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -1952,7 +1953,7 @@ RTool::activityIntervals(SEXP pTypes, SEXP datetime) QString symbol = factory.metricName(i); const RideMetric *metric = factory.rideMetric(symbol); - QString name = GlobalContext::context()->specialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name = name.replace(" ","_"); name = name.replace("'","_"); @@ -3352,7 +3353,7 @@ RTool::pmc(SEXP pAll, SEXP pMetric) const RideMetricFactory &factory = RideMetricFactory::instance(); for (int i=0; ispecialFields.internalName(factory.rideMetric(symbol)->name()); + QString name = SpecialFields::getInstance().internalName(factory.rideMetric(symbol)->name()); name.replace(" ","_"); if (name == metric) {