#include #include "data/data.h" #include "gearratiographitem.h" #include "gearratiograph.h" GearRatioGraph::GearRatioGraph(QWidget *parent) : GraphTab(parent) { _showTracks = false; GraphView::setYUnits(""); setYLabel(tr("Gear ratio")); setSliderPrecision(2); } GearRatioGraph::~GearRatioGraph() { qDeleteAll(_tracks); } void GearRatioGraph::setInfo() { if (_showTracks) { QLocale l(QLocale::system()); #ifdef Q_OS_ANDROID GraphView::addInfo(tr("Top"), l.toString(top() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); GraphView::addInfo(tr("Min"), l.toString(min() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); GraphView::addInfo(tr("Max"), l.toString(max() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); #else // Q_OS_ANDROID GraphView::addInfo(tr("Most used"), l.toString(top() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); GraphView::addInfo(tr("Minimum"), l.toString(min() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); GraphView::addInfo(tr("Maximum"), l.toString(max() * yScale(), 'f', 2) + UNIT_SPACE + yUnits()); #endif // Q_OS_ANDROID } else clearInfo(); } QList GearRatioGraph::loadData(const Data &data, Map *map) { Q_UNUSED(map); QList graphs; for (int i = 0; i < data.tracks().count(); i++) { const Graph &graph = data.tracks().at(i).ratio(); if (graph.isEmpty()) { _palette.nextColor(); graphs.append(0); } else { GearRatioGraphItem *gi = new GearRatioGraphItem(graph, _graphType, _width, _palette.nextColor()); _tracks.append(gi); if (_showTracks) addGraph(gi); for (QMap::const_iterator it = gi->map().constBegin(); it != gi->map().constEnd(); ++it) _map.insert(it.key(), _map.value(it.key()) + it.value()); graphs.append(gi); } } for (int i = 0; i < data.routes().count(); i++) { _palette.nextColor(); graphs.append(0); } for (int i = 0; i < data.areas().count(); i++) _palette.nextColor(); setInfo(); redraw(); return graphs; } qreal GearRatioGraph::top() const { qreal key = NAN, val = NAN; for (QMap::const_iterator it = _map.constBegin(); it != _map.constEnd(); ++it) { if (std::isnan(val) || it.value() > val) { val = it.value(); key = it.key(); } } return key; } void GearRatioGraph::clear() { qDeleteAll(_tracks); _tracks.clear(); _map.clear(); GraphTab::clear(); } void GearRatioGraph::showTracks(bool show) { _showTracks = show; for (int i = 0; i < _tracks.size(); i++) { if (show) addGraph(_tracks.at(i)); else removeGraph(_tracks.at(i)); } setInfo(); redraw(); }