#include "upgradeicon.h"

upgradeIcon::upgradeIcon(QWidget *parent) : QWidget(parent)
{
    setContentsMargins(0,0,0,0);
    borderWidth = 4;
    headWidth = 20;
    value = 50;
    minValue = 0;
    maxValue = 100;
    alarmValue = 20;
    borderRadio = 10;
    drawInRadio = 8;
    borderColor = QColor(96, 96, 96);
}

void upgradeIcon::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
    drawBorder(&painter);
    // drawRightHead(&painter);
    drawBackground(&painter);
    drawText(&painter);
}

void upgradeIcon::resizeEvent(QResizeEvent *)
{

}

// 画边框
void upgradeIcon::drawBorder(QPainter *painter)
{
    painter->save();
    painter->setPen(QPen(borderColor,borderWidth));
    borderRect = QRect(borderWidth,borderWidth,width()-2*borderWidth-headWidth,height()-2*borderWidth);
    painter->drawRoundedRect(borderRect,borderRadio,borderRadio);
    painter->restore();
}

// 画右边电池头部
void upgradeIcon::drawRightHead(QPainter *painter)
{
    painter->save();
    double headHeight = height()/2;
    painter->setPen(Qt::NoPen);
    painter->setBrush(QColor(96, 96, 96));
    QRectF headRect = QRectF(width()-headWidth-borderWidth/2,height()/2-headHeight/2,headWidth / 1.75,headHeight);
    painter->drawRect(headRect);
    painter->restore();
}

// 画数值对应颜色
void upgradeIcon::drawBackground(QPainter *painter)
{
    painter->save();
    double batteryWidth = width()-headWidth-3*borderWidth;                // 电池宽度
    double bgWidth= value * batteryWidth / (maxValue-minValue);           // 背景绘制宽度
    QLinearGradient batteryGradient(QPointF(0, 0), QPointF(borderWidth+bgWidth,height()));

    batteryGradient.setColorAt(0.0, QColor(135, 206, 250));
    // batteryGradient.setColorAt(1.0, QColor(102, 255, 0));

    painter->setBrush(QBrush(batteryGradient));
    painter->setPen(Qt::NoPen);
    QRectF rectBg = QRectF(borderWidth+borderWidth/2,borderWidth+borderWidth/2,bgWidth,height()-3*borderWidth);
    painter->drawRoundedRect(rectBg,drawInRadio,drawInRadio);
    painter->restore();
}

// 画百分比数值
void upgradeIcon::drawText(QPainter *painter)
{
    painter->save();
    QString value_str = QString("%1%").arg(value);
    painter->setPen(QPen(QColor(Qt::black)));
    double w = qMin(borderRect.width(),borderRect.height());
    // 文字大小自适应   90为控件初始高度，30位字体默认大小
    int fontSize = 30 * w / 90;
    painter->setFont(QFont("Microsoft YaHei UI",fontSize));
    painter->drawText(borderRect,value_str,QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
    painter->restore();
}

// 设置当前值
void upgradeIcon::setValue(int value)
{
    this->value = value;
    update();
}

void upgradeIcon::setMinValue(int min)
{
    minValue = min;
    update();
}

void upgradeIcon::setMaxValue(int max)
{
    maxValue = max;
    update();
}

void upgradeIcon::setRange(int min, int max)
{
    minValue = min;
    maxValue = max;
    update();
}

void upgradeIcon::setBorderWidth(int width)
{
    borderWidth = width;
    update();
}

void upgradeIcon::setBorderRadio(int radio)
{
    borderRadio = radio;
    update();
}

void upgradeIcon::setInRadio(int radio)
{
    drawInRadio = radio;
    update();
}

void upgradeIcon::setAlarmValue(int alarm)
{
    alarmValue = alarm;
    update();
}

void upgradeIcon::setBorderColor(QColor color)
{
    borderColor = color;
    update();
}

int upgradeIcon::getValue()
{
    return  value;
}

int upgradeIcon::getMinValue()
{
    return  minValue;
}

int upgradeIcon::getMaxValue()
{
    return  maxValue;
}

int upgradeIcon::getAlarmValue()
{
    return  alarmValue;
}
