2023-06-13 22:40:55 +02:00
|
|
|
#include "runeaspektbuttongroup.h"
|
|
|
|
|
|
|
|
#include "runeaspektbutton.h"
|
|
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
2023-06-19 20:58:55 +02:00
|
|
|
const int RuneAspektButtonGroup::INVALID_ASPEKT_ID = 0;
|
|
|
|
|
2023-06-13 22:40:55 +02:00
|
|
|
RuneAspektButtonGroup::RuneAspektButtonGroup(QObject* parent, uint32_t size) : QObject(parent), selectedRune(), size(size) {
|
|
|
|
selectedRune.reserve(size*2);
|
|
|
|
}
|
|
|
|
|
|
|
|
RuneAspektButtonGroup::~RuneAspektButtonGroup() {}
|
|
|
|
|
|
|
|
void RuneAspektButtonGroup::addButton(RuneAspektButton* button) {
|
|
|
|
QObject::connect(this, &RuneAspektButtonGroup::changed, button, &RuneAspektButton::dataChanged);
|
|
|
|
QObject::connect(button, &RuneAspektButton::aspektToggled, this, &RuneAspektButtonGroup::buttonPressed);
|
|
|
|
|
|
|
|
button->setButtonGroup(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void RuneAspektButtonGroup::setSelectedRunes(const QVector<int>& newRunes) {
|
|
|
|
selectedRune = newRunes;
|
|
|
|
|
|
|
|
qDebug() << "selectedRunes changed to: " << selectedRune << " refesching buttons";
|
|
|
|
|
|
|
|
emit changed();
|
|
|
|
}
|
|
|
|
|
2023-06-19 20:58:55 +02:00
|
|
|
void RuneAspektButtonGroup::setSubgroups(const QVector<QVector<int>>& newSubgroups) {
|
|
|
|
subgroups = newSubgroups;
|
|
|
|
}
|
|
|
|
|
2023-06-13 22:40:55 +02:00
|
|
|
void RuneAspektButtonGroup::buttonPressed(int aspektId) {
|
|
|
|
if(selectedRune.contains(aspektId)) {
|
|
|
|
selectedRune.removeAll(aspektId);
|
|
|
|
} else {
|
2023-06-19 20:58:55 +02:00
|
|
|
// check subgroups first
|
|
|
|
int otherSubgroupMember = getOtherSubgroupMemeber(aspektId);
|
|
|
|
if(otherSubgroupMember != INVALID_ASPEKT_ID) {
|
|
|
|
// collision in subgroup -> remove other member
|
|
|
|
selectedRune.removeAll(otherSubgroupMember);
|
|
|
|
}
|
|
|
|
|
2023-06-13 22:40:55 +02:00
|
|
|
selectedRune.push_back(aspektId);
|
|
|
|
|
|
|
|
if((uint32_t) selectedRune.size() > size) {
|
|
|
|
selectedRune.removeFirst();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
emit changed();
|
|
|
|
}
|
2023-06-19 20:58:55 +02:00
|
|
|
|
|
|
|
int RuneAspektButtonGroup::getOtherSubgroupMemeber(int aspektId) {
|
|
|
|
if(subgroups.empty()) {
|
|
|
|
return INVALID_ASPEKT_ID;
|
|
|
|
}
|
|
|
|
|
|
|
|
for(const QVector<int>& subgroup : subgroups) {
|
|
|
|
if(subgroup.contains(aspektId)) {
|
|
|
|
for(const int& subgroupMember : subgroup) {
|
|
|
|
if(aspektId != subgroupMember && selectedRune.contains(subgroupMember)) {
|
|
|
|
return subgroupMember;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return INVALID_ASPEKT_ID;
|
|
|
|
}
|