ChartPlot.cc 2.99 KB
Newer Older
1
#include "ChartPlot.h"
2
#include "QGCApplication.h"
3
#include "SettingsManager.h"
4

5
const QColor ChartPlot::baseColors[numColors] = {
Gus Grubba's avatar
Gus Grubba committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
    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)
26
};
27

Gus Grubba's avatar
Gus Grubba committed
28
ChartPlot::ChartPlot(QWidget* parent):
29
    QwtPlot(parent),
Gus Grubba's avatar
Gus Grubba committed
30 31 32 33
    _nextColorIndex(0),
    _symbolWidth(2.0f),
    _curveWidth(2.0f),
    _gridWidth(0.8f)
34
{
35
    // Initialize the list of curves.
Gus Grubba's avatar
Gus Grubba committed
36
    _curves = QMap<QString, QwtPlotCurve*>();
37
    // Set the grid. The colorscheme was already set in generateColorScheme().
Gus Grubba's avatar
Gus Grubba committed
38 39 40 41
    _grid = new QwtPlotGrid;
    _grid->enableXMin(true);
    _grid->attach(this);
    _colors = QList<QColor>();
42 43
    ///> Color map for plots, includes 20 colors
    ///> Map will start from beginning when the first 20 colors are exceeded
Gus Grubba's avatar
Gus Grubba committed
44 45
    for(int i = 0; i < numColors; ++i) {
        _colors.append(baseColors[i]);
46
    }
47
    // Now that all objects have been initialized, color everything.
48
    styleChanged(qgcApp()->toolbox()->settingsManager()->appSettings()->indoorPalette()->rawValue().toBool());
49 50 51 52 53 54 55 56
}

ChartPlot::~ChartPlot()
{
}

QColor ChartPlot::getNextColor()
{
Gus Grubba's avatar
Gus Grubba committed
57 58
    if(_nextColorIndex >= _colors.count()) {
        _nextColorIndex = 0;
59
    }
Gus Grubba's avatar
Gus Grubba committed
60
    return _colors[_nextColorIndex++];
61 62
}

Gus Grubba's avatar
Gus Grubba committed
63
QColor ChartPlot::getColorForCurve(const QString& id)
64
{
Gus Grubba's avatar
Gus Grubba committed
65
    return _curves.value(id)->pen().color();
66 67 68 69
}

void ChartPlot::shuffleColors()
{
Gus Grubba's avatar
Gus Grubba committed
70 71
    foreach(QwtPlotCurve* curve, _curves) {
        if(curve->isVisible()) {
72 73 74 75
            QPen pen(curve->pen());
            pen.setColor(getNextColor());
            curve->setPen(pen);
        }
76 77 78
    }
}

79
void ChartPlot::styleChanged(bool styleIsDark)
80
{
81
    // Generate a new color list for curves and recolor them.
Gus Grubba's avatar
Gus Grubba committed
82 83
    for(int i = 0; i < numColors; ++i) {
        _colors[i] = styleIsDark ? baseColors[i].lighter(150) : baseColors[i].darker(150);
84
    }
85
    shuffleColors();
86
    // Configure the rest of the UI colors based on the current theme.
Gus Grubba's avatar
Gus Grubba committed
87
    if(styleIsDark) {
88
        // Set canvas background
89
        setCanvasBackground(QColor(0, 0, 0));
90
        // Configure the plot grid.
Gus Grubba's avatar
Gus Grubba committed
91 92 93
        _grid->setMinorPen(QPen(QColor(64, 64, 64), _gridWidth, Qt::SolidLine));
        _grid->setMajorPen(QPen(QColor(96, 96, 96), _gridWidth, Qt::SolidLine));
    } else {
94
        // Set canvas background
95
        setCanvasBackground(QColor(0xFF, 0xFF, 0xFF));
96
        // Configure the plot grid.
Gus Grubba's avatar
Gus Grubba committed
97 98
        _grid->setMinorPen(QPen(QColor(192, 192, 192), _gridWidth, Qt::SolidLine));
        _grid->setMajorPen(QPen(QColor(128, 128, 128), _gridWidth, Qt::SolidLine));
99 100 101 102
    }
    // And finally refresh the widget to make sure all color changes are redrawn.
    replot();
}