68 lines
1.5 KiB
C++
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("");
|
|
}
|
|
} |