QGCRadioChannelDisplay.cpp 6.11 KB
Newer Older
1 2 3 4
#include "QGCRadioChannelDisplay.h"
#include <QPainter>
QGCRadioChannelDisplay::QGCRadioChannelDisplay(QWidget *parent) : QWidget(parent)
{
5 6
    m_showMinMax = false;
    m_min = 0;
7
    m_max = 1;
8 9 10 11
    m_value = 1500;
    m_orientation = Qt::Vertical;
    m_name = "Yaw";
}
12 13 14 15 16
void QGCRadioChannelDisplay::setName(QString name)
{
    m_name = name;
    update();
}
17 18 19 20 21 22 23 24 25 26 27 28

void QGCRadioChannelDisplay::setOrientation(Qt::Orientation orient)
{
    m_orientation = orient;
    update();
}
void QGCRadioChannelDisplay::paintEvent(QPaintEvent *event)
{
    //Values range from 0-3000.
    //1500 is the middle, static servo value.
    QPainter painter(this);

29 30 31 32 33 34 35 36 37 38
    int currval = m_value;
    if (currval > m_max)
    {
        currval = m_max;
    }
    if (currval < m_min)
    {
        currval = m_min;
    }

39 40 41 42 43
    if (m_orientation == Qt::Vertical)
    {
        painter.drawRect(0,0,width()-1,(height()-1) - (painter.fontMetrics().height() * 2));
        painter.setBrush(Qt::SolidPattern);
        painter.setPen(QColor::fromRgb(50,255,50));
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
        //m_value - m_min / m_max - m_min

        if (!m_showMinMax)
        {
            int newval = (height()-2-(painter.fontMetrics().height() * 2)) * ((float)(currval - m_min) / ((m_max-m_min)+1));
            int newvaly = (height()-2-(painter.fontMetrics().height() * 2)) - newval;
            painter.drawRect(1,newvaly,width()-3,((height()-2) - newvaly - (painter.fontMetrics().height() * 2)));
        }
        else
        {
            int newval = (height()-2-(painter.fontMetrics().height() * 2)) * ((float)(currval / 3001.0));
            int newvaly = (height()-2-(painter.fontMetrics().height() * 2)) - newval;
            painter.drawRect(1,newvaly,width()-3,((height()-2) - newvaly - (painter.fontMetrics().height() * 2)));
        }

59 60 61 62 63 64 65 66 67 68
        QString valstr = QString::number(m_value);
        painter.setPen(QColor::fromRgb(255,255,255));
        painter.drawText((width()/2.0) - (painter.fontMetrics().width(m_name)/2.0),((height()-3) - (painter.fontMetrics().height()*1)),m_name);
        painter.drawText((width()/2.0) - (painter.fontMetrics().width(valstr)/2.0),((height()-3) - (painter.fontMetrics().height() * 0)),valstr);
        if (m_showMinMax)
        {
            painter.setBrush(Qt::NoBrush);
            painter.setPen(QColor::fromRgb(255,0,0));
            int maxyval = (height()-3 - (painter.fontMetrics().height() * 2)) - (((height()-3-(painter.fontMetrics().height() * 2)) * ((float)m_max / 3000.0)));
            int minyval = (height()-3 - (painter.fontMetrics().height() * 2)) - (((height()-3-(painter.fontMetrics().height() * 2)) * ((float)m_min / 3000.0)));
69
            painter.drawRect(2,maxyval,width()-3,minyval - maxyval);
70 71 72 73 74 75 76 77 78 79
            QString minstr = QString::number(m_min);
            painter.drawText((width() / 2.0) - (painter.fontMetrics().width("min")/2.0),minyval,"min");
            painter.drawText((width() / 2.0) - (painter.fontMetrics().width(minstr)/2.0),minyval + painter.fontMetrics().height(),minstr);

            QString maxstr = QString::number(m_max);
            painter.drawText((width() / 2.0) - (painter.fontMetrics().width("max")/2.0),maxyval,"max");
            painter.drawText((width() / 2.0) - (painter.fontMetrics().width(maxstr)/2.0),maxyval + painter.fontMetrics().height(),maxstr);

            //painter.drawRect(width() * ,2,((width()-1) * ((float)m_max / 3000.0)) - (width() * ((float)m_min / 3000.0)),(height()-5) - (painter.fontMetrics().height() * 2));
        }
80 81 82 83 84 85
    }
    else
    {
        painter.drawRect(0,0,width()-1,(height()-1) - (painter.fontMetrics().height() * 2));
        painter.setBrush(Qt::SolidPattern);
        painter.setPen(QColor::fromRgb(50,255,50));
86 87 88 89 90 91 92 93
        if (!m_showMinMax)
        {
            painter.drawRect(1,1,(width()-3) * ((float)(currval-m_min) / (m_max-m_min)),(height()-3) - (painter.fontMetrics().height() * 2));
        }
        else
        {
            painter.drawRect(1,1,(width()-3) * ((float)currval / 3000.0),(height()-3) - (painter.fontMetrics().height() * 2));
        }
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
        painter.setPen(QColor::fromRgb(255,255,255));
        QString valstr = QString::number(m_value);
        painter.drawText((width()/2.0) - (painter.fontMetrics().width(m_name)/2.0),((height()-3) - (painter.fontMetrics().height()*1)),m_name);
        painter.drawText((width()/2.0) - (painter.fontMetrics().width(valstr)/2.0),((height()-3) - (painter.fontMetrics().height() * 0)),valstr);
        if (m_showMinMax)
        {
            painter.setBrush(Qt::NoBrush);
            painter.setPen(QColor::fromRgb(255,0,0));
            painter.drawRect(width() * ((float)m_min / 3000.0),2,((width()-1) * ((float)m_max / 3000.0)) - (width() * ((float)m_min / 3000.0)),(height()-5) - (painter.fontMetrics().height() * 2));

            QString minstr = QString::number(m_min);
            painter.drawText((width() * ((float)m_min / 3000.0)) - (painter.fontMetrics().width("min")/2.0),((height()-3) - (painter.fontMetrics().height()*1)),"min");
            painter.drawText((width() * ((float)m_min / 3000.0)) - (painter.fontMetrics().width(minstr)/2.0),((height()-3) - (painter.fontMetrics().height() * 0)),minstr);

            QString maxstr = QString::number(m_max);
            painter.drawText((width() * ((float)m_max / 3000.0)) - (painter.fontMetrics().width("max")/2.0),((height()-3) - (painter.fontMetrics().height()*1)),"max");
            painter.drawText((width() * ((float)m_max / 3000.0)) - (painter.fontMetrics().width(maxstr)/2.0),((height()-3) - (painter.fontMetrics().height() * 0)),maxstr);
        }
    }
}

void QGCRadioChannelDisplay::setValue(int value)
{
117 118 119 120 121 122 123 124 125 126 127 128
    if (value < 0)
    {
        m_value = 0;
    }
    else if (value > 3000)
    {
        m_value = 3000;
    }
    else
    {
        m_value = value;
    }
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
    update();
}

void QGCRadioChannelDisplay::showMinMax()
{
    m_showMinMax = true;
    update();
}

void QGCRadioChannelDisplay::hideMinMax()
{
    m_showMinMax = false;
    update();
}

void QGCRadioChannelDisplay::setMin(int value)
{
    m_min = value;
147 148 149 150
    if (m_min == m_max)
    {
        m_min--;
    }
151 152 153 154 155 156
    update();
}

void QGCRadioChannelDisplay::setMax(int value)
{
    m_max = value;
157 158 159 160
    if (m_min == m_max)
    {
        m_max++;
    }
161 162
    update();
}