ChartPlot.cc 2.9 KB
Newer Older
1
#include "ChartPlot.h"
2
#include "QGCApplication.h"
3

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
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)
};
26 27

ChartPlot::ChartPlot(QWidget *parent):
28
    QwtPlot(parent),
29
    nextColorIndex(0),
30
    symbolWidth(2.0f),
31
    curveWidth(2.0f),
Don Gagne's avatar
Don Gagne committed
32
    gridWidth(0.8f)
33
{
34 35 36
    // Initialize the list of curves.
    curves = QMap<QString, QwtPlotCurve*>();

37 38 39 40 41 42 43 44 45
    // Set the grid. The colorscheme was already set in generateColorScheme().
    grid = new QwtPlotGrid;
    grid->enableXMin(true);
    grid->attach(this);

    colors = QList<QColor>();

    ///> Color map for plots, includes 20 colors
    ///> Map will start from beginning when the first 20 colors are exceeded
46 47 48 49
    for (int i = 0; i < numColors; ++i)
    {
        colors.append(baseColors[i]);
    }
50 51

    // Now that all objects have been initialized, color everything.
52
    styleChanged(qgcApp()->styleIsDark());
53 54 55 56 57 58 59 60 61
}

ChartPlot::~ChartPlot()
{

}

QColor ChartPlot::getNextColor()
{
62 63 64 65 66
    if(nextColorIndex >= colors.count())
    {
        nextColorIndex = 0;
    }
    return colors[nextColorIndex++];
67 68
}

69
QColor ChartPlot::getColorForCurve(const QString &id)
70 71 72 73 74 75 76 77
{
    return curves.value(id)->pen().color();
}

void ChartPlot::shuffleColors()
{
    foreach (QwtPlotCurve* curve, curves)
    {
78 79 80 81 82
        if (curve->isVisible()) {
            QPen pen(curve->pen());
            pen.setColor(getNextColor());
            curve->setPen(pen);
        }
83 84 85
    }
}

86
void ChartPlot::styleChanged(bool styleIsDark)
87
{
88
    // Generate a new color list for curves and recolor them.
89
    for (int i = 0; i < numColors; ++i)
90
    {
91
        colors[i] = styleIsDark ? baseColors[i].lighter(150) : baseColors[i].darker(150);
92
    }
93
    shuffleColors();
94 95

    // Configure the rest of the UI colors based on the current theme.
96
    if (styleIsDark)
97 98
    {
        // Set canvas background
99 100
        setCanvasBackground(QColor(0, 0, 0));
        
101
        // Configure the plot grid.
102 103
        grid->setMinorPen(QPen(QColor(0xAA, 0xAA, 0xAA), gridWidth, Qt::DotLine));
        grid->setMajorPen(QPen(QColor(0xDD, 0xDD, 0xDD), gridWidth, Qt::DotLine));
104 105 106 107
    }
    else
    {
        // Set canvas background
108 109
        setCanvasBackground(QColor(0xFF, 0xFF, 0xFF));
        
110
        // Configure the plot grid.
111 112
        grid->setMinorPen(QPen(QColor(0x55, 0x55, 0x55), gridWidth, Qt::DotLine));
        grid->setMajorPen(QPen(QColor(0x22, 0x22, 0x22), gridWidth, Qt::DotLine));
113 114 115 116 117
    }

    // And finally refresh the widget to make sure all color changes are redrawn.
    replot();
}