configpanelbutton.cpp 1.89 KB
#include "configpanelbutton.h"
#include "ui_configpanelbutton.h"

#include <QPixmap>
#include <QPainter>

ConfigPanelButton::ConfigPanelButton(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ConfigPanelButton)
{
    ui->setupUi(this);

    showingFavoriteButton = false;
    ui->favoriteButton->hide();

    textRect = QRect(20, 0, 556, 65);
    valueRect = QRect(556, 0, 265, 65);
    connect(ui->pushButton, SIGNAL(pressed()), SIGNAL(pressed()));
    connect(ui->pushButton, SIGNAL(released()), SIGNAL(released()));
    connect(ui->pushButton, SIGNAL(clicked()), SIGNAL(clicked()));
}

ConfigPanelButton::~ConfigPanelButton()
{
    delete ui;
}

void ConfigPanelButton::setText(const QString &text)
{
    if (text_ == text)
        return;

    text_ = text;

    updateIcon();
}

void ConfigPanelButton::setValue(const QString &value)
{
    if (value_ == value)
        return;

    value_ = value;

    updateIcon();
}

void ConfigPanelButton::showFavoriteButton()
{
    if (showingFavoriteButton)
        return;

    showingFavoriteButton = true;
    ui->favoriteButton->show();

    textRect = QRect(20 + 77, 0, 556 - 77, 65);
    updateIcon();
}

void ConfigPanelButton::hideFavoriteButton()
{
    if (!showingFavoriteButton)
        return;

    showingFavoriteButton = false;
    ui->favoriteButton->hide();

    textRect = QRect(20, 0, 556, 65);
    updateIcon();
}

void ConfigPanelButton::updateIcon()
{
    QPixmap pixmap(ui->pushButton->size());
    pixmap.fill(Qt::transparent);

    QFont font = ui->pushButton->font();
    font.setPixelSize(30);

    QPainter painter(&pixmap);
    painter.setFont(font);
    painter.setPen(Qt::white);
    painter.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, text_);
    painter.setPen(Qt::gray);
    painter.drawText(valueRect, Qt::AlignCenter, value_);

    QIcon icon(pixmap);
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(pixmap.size());
}