lolautoaccept/src/runeaspektbutton.cpp

68 lines
1.5 KiB
C++

#include "runeaspektbutton.h"
#include "ui_runeaspektbutton.h"
#include <QDebug>
RuneAspektButton::RuneAspektButton(QWidget* parent) : QPushButton(parent), ui(new Ui::RuneAspektButton) {
ui->setupUi(this);
QObject::connect(this, &QPushButton::pressed, this, &RuneAspektButton::buttonPressed);
}
RuneAspektButton::~RuneAspektButton() {
delete this->ui;
}
void RuneAspektButton::setAspektsVector(std::vector<uint32_t>& aspekts) {
this->aspekts = &aspekts;
dataChanged();
}
void RuneAspektButton::setAspketSlot(int slot) {
aspektSlot = slot;
dataChanged();
}
void RuneAspektButton::setAspektId(uint32_t id) {
aspektId = id;
dataChanged();
}
bool RuneAspektButton::isSelected() const {
return (aspektSlot >= 0 // aspektSlot is valid
&& (int) aspekts->size() > aspektSlot // aspektSlot is valid
&& aspektId != 0 // aspektId is valid
&& aspekts->at(aspektSlot) == aspektId); // aspekt is selected
}
void RuneAspektButton::buttonPressed() {
if(Q_UNLIKELY(!(aspekts && aspektSlot >= 0))) return;
// toggle
bool oldState = isSelected();
int newValue = (oldState ? 0 : aspektId);
aspekts->at(aspektSlot) = newValue;
emit aspektToggled(!oldState);
}
void RuneAspektButton::dataChanged() {
if(!aspekts) return;
bool selection = isSelected();
qDebug() << text() << " datachanged - isSelected: " << selection;
setShowSelection(selection);
}
void RuneAspektButton::setShowSelection(bool selected) {
if(selected) {
setStyleSheet("border: 1px solid red;");
} else {
setStyleSheet("");
}
}