#include "ChartPlot.h" #include "QGCApplication.h" #include "SettingsManager.h" const QColor ChartPlot::baseColors[numColors] = { QColor(242, 255, 128), QColor(70, 80, 242), QColor(232, 33, 47), QColor(116, 251, 110), QColor(81, 183, 244), QColor(234, 38, 107), QColor(92, 247, 217), QColor(151, 59, 239), QColor(231, 72, 28), QColor(236, 48, 221), QColor(75, 133, 243), QColor(203, 254, 121), QColor(104, 64, 240), QColor(200, 54, 238), QColor(104, 250, 138), QColor(235, 43, 165), QColor(98, 248, 176), QColor(161, 252, 116), QColor(87, 231, 246), QColor(230, 126, 23) }; ChartPlot::ChartPlot(QWidget* parent): QwtPlot(parent), _nextColorIndex(0), _symbolWidth(2.0f), _curveWidth(2.0f), _gridWidth(0.8f) { // Initialize the list of curves. _curves = QMap(); // Set the grid. The colorscheme was already set in generateColorScheme(). _grid = new QwtPlotGrid; _grid->enableXMin(true); _grid->attach(this); _colors = QList(); ///> Color map for plots, includes 20 colors ///> Map will start from beginning when the first 20 colors are exceeded for(int i = 0; i < numColors; ++i) { _colors.append(baseColors[i]); } // Now that all objects have been initialized, color everything. styleChanged(qgcApp()->toolbox()->settingsManager()->appSettings()->indoorPalette()->rawValue().toBool()); } ChartPlot::~ChartPlot() { } QColor ChartPlot::getNextColor() { if(_nextColorIndex >= _colors.count()) { _nextColorIndex = 0; } return _colors[_nextColorIndex++]; } QColor ChartPlot::getColorForCurve(const QString& id) { return _curves.value(id)->pen().color(); } void ChartPlot::shuffleColors() { foreach(QwtPlotCurve* curve, _curves) { if(curve->isVisible()) { QPen pen(curve->pen()); pen.setColor(getNextColor()); curve->setPen(pen); } } } void ChartPlot::styleChanged(bool styleIsDark) { // Generate a new color list for curves and recolor them. for(int i = 0; i < numColors; ++i) { _colors[i] = styleIsDark ? baseColors[i].lighter(150) : baseColors[i].darker(150); } shuffleColors(); // Configure the rest of the UI colors based on the current theme. if(styleIsDark) { // Set canvas background setCanvasBackground(QColor(0, 0, 0)); // Configure the plot grid. _grid->setMinorPen(QPen(QColor(64, 64, 64), _gridWidth, Qt::SolidLine)); _grid->setMajorPen(QPen(QColor(96, 96, 96), _gridWidth, Qt::SolidLine)); } else { // Set canvas background setCanvasBackground(QColor(0xFF, 0xFF, 0xFF)); // Configure the plot grid. _grid->setMinorPen(QPen(QColor(192, 192, 192), _gridWidth, Qt::SolidLine)); _grid->setMajorPen(QPen(QColor(128, 128, 128), _gridWidth, Qt::SolidLine)); } // And finally refresh the widget to make sure all color changes are redrawn. replot(); }