Rework card menu handling (#6069)

* extract cardMenu from CardItem

* move cardMenu saving to TabGame

* delete TabGame::updateCardMenu

* move checking to updateCardMenu

* unset activeCard when all cards are unselected
This commit is contained in:
RickyRister 2025-08-15 02:13:28 -03:00 committed by GitHub
parent 1649f30389
commit 03bebbe4c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 106 additions and 123 deletions

View file

@ -24,30 +24,17 @@ CardItem::CardItem(Player *_owner, QGraphicsItem *parent, const CardRef &cardRef
{
owner->addCard(this);
cardMenu = new QMenu;
ptMenu = new QMenu;
moveMenu = new QMenu;
connect(&SettingsCache::instance().cardCounters(), &CardCounterSettings::colorChanged, this, [this](int counterId) {
if (counters.contains(counterId))
update();
});
retranslateUi();
}
CardItem::~CardItem()
{
delete cardMenu;
delete ptMenu;
delete moveMenu;
}
void CardItem::prepareDelete()
{
if (owner != nullptr) {
if (owner->getCardMenu() == cardMenu) {
owner->setCardMenu(nullptr);
if (owner->getGame()->getActiveCard() == this) {
owner->updateCardMenu(nullptr);
owner->getGame()->setActiveCard(nullptr);
}
owner = nullptr;
@ -79,8 +66,6 @@ void CardItem::setZone(CardZone *_zone)
void CardItem::retranslateUi()
{
moveMenu->setTitle(tr("&Move to"));
ptMenu->setTitle(tr("&Power / toughness"));
}
void CardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
@ -422,9 +407,13 @@ void CardItem::handleClickedToPlay(bool shiftHeld)
void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
if (event->button() == Qt::RightButton) {
if (cardMenu != nullptr && !cardMenu->isEmpty() && owner != nullptr) {
cardMenu->popup(event->screenPos());
return;
if (owner != nullptr) {
owner->getGame()->setActiveCard(this);
if (QMenu *cardMenu = owner->updateCardMenu(this)) {
cardMenu->popup(event->screenPos());
return;
}
}
} else if ((event->modifiers() != Qt::AltModifier) && (event->button() == Qt::LeftButton) &&
(!SettingsCache::instance().getDoubleClickToPlay())) {
@ -477,11 +466,11 @@ QVariant CardItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
if ((change == ItemSelectedHasChanged) && owner != nullptr) {
if (value == true) {
owner->setCardMenu(cardMenu);
owner->getGame()->setActiveCard(this);
} else if (owner->getCardMenu() == cardMenu) {
owner->setCardMenu(nullptr);
owner->updateCardMenu(this);
} else if (owner->scene()->selectedItems().isEmpty()) {
owner->getGame()->setActiveCard(nullptr);
owner->updateCardMenu(nullptr);
}
}
return AbstractCardItem::itemChange(change, value);