display pairing results in choice table

This commit is contained in:
Maxime Réaux 2026-03-19 09:02:22 +01:00
parent 9e602e8ca4
commit 4396b15c3a
9 changed files with 194 additions and 12 deletions

View file

@ -88,6 +88,9 @@ class ChoiceDTO:
priority_sector: str | None
secondary_sector: str | None
comment: str | None
priority_icon: QIcon | None = None
secondary_icon: QIcon | None = None
fallback_icon: QIcon | None = None
@dataclass(frozen=True, slots=True)
@ -103,8 +106,6 @@ class BattleDTO:
state_icon: QIcon | None
player1_icon: QIcon | None
player2_icon: QIcon | None
player1_tooltip: str | None = None
player2_tooltip: str | None = None
@dataclass(frozen=True, slots=True)

View file

@ -4,7 +4,14 @@ from PyQt6.QtWidgets import QDialog
from PyQt6.QtWidgets import QMessageBox
from PyQt6.QtGui import QIcon
from warchron.constants import ItemType, RefreshScope, Icons, IconName, ContextType
from warchron.constants import (
ItemType,
RefreshScope,
Icons,
IconName,
ContextType,
ChoiceStatus,
)
from warchron.model.exception import (
AbortedOperation,
DomainError,
@ -12,6 +19,7 @@ from warchron.model.exception import (
)
from warchron.model.tie_manager import TieResolver, TieContext
from warchron.model.result_checker import ResultChecker
from warchron.model.pairing import Pairing
from warchron.model.round import Round
from warchron.model.war import War
@ -62,6 +70,20 @@ class RoundController:
if choice.secondary_sector_id is not None
else ""
)
priority_icon = None
secondary_icon = None
fallback_icon = None
alloc = Pairing.get_round_allocation(
war,
rnd,
part.id,
)
if alloc.priority != ChoiceStatus.NONE:
priority_icon = QIcon(Icons.get_pixmap(IconName[alloc.priority.name]))
if alloc.secondary != ChoiceStatus.NONE:
secondary_icon = QIcon(Icons.get_pixmap(IconName[alloc.secondary.name]))
if alloc.fallback:
fallback_icon = QIcon(Icons.get_pixmap(IconName.FALLBACK))
choices_for_display.append(
ChoiceDTO(
id=choice.participant_id,
@ -71,9 +93,11 @@ class RoundController:
priority_sector=priority_name,
secondary_sector=secondary_name,
comment=choice.comment,
priority_icon=priority_icon,
secondary_icon=secondary_icon,
fallback_icon=fallback_icon,
)
)
# TODO display allocated sectors and used token
self.app.view.display_round_choices(choices_for_display)
battles_for_display: List[BattleDTO] = []
for sect in sectors:
@ -111,8 +135,7 @@ class RoundController:
winner_name = ""
p1_icon = None
p2_icon = None
p1_tooltip = None
p2_tooltip = None
# TODO use uniform draw/tie icon logic with choice, war, campaign...
if battle.is_draw():
p1_icon = Icons.get(IconName.DRAW)
p2_icon = Icons.get(IconName.DRAW)
@ -131,10 +154,8 @@ class RoundController:
pixmap = Icons.get_pixmap(IconName.TIEBREAK_TOKEN)
if effective_winner == p1_war:
p1_icon = QIcon(pixmap)
p1_tooltip = "Won by tie-break"
else:
p2_icon = QIcon(pixmap)
p2_tooltip = "Won by tie-break"
elif battle.winner_id:
if battle.winner_id == battle.player_1_id:
p1_icon = Icons.get(IconName.WIN)
@ -153,8 +174,6 @@ class RoundController:
state_icon=state_icon,
player1_icon=p1_icon,
player2_icon=p2_icon,
player1_tooltip=p1_tooltip,
player2_tooltip=p2_tooltip,
)
)
self.app.view.display_round_battles(battles_for_display)