auto create & edit battles

This commit is contained in:
Maxime Réaux 2026-01-30 18:55:39 +01:00
parent 9f676f6b9d
commit 6bd3ee31dc
10 changed files with 442 additions and 55 deletions

View file

@ -17,6 +17,7 @@ from warchron.view.ui.ui_war_participant_dialog import Ui_warParticipantDialog
from warchron.view.ui.ui_campaign_participant_dialog import Ui_campaignParticipantDialog
from warchron.view.ui.ui_sector_dialog import Ui_sectorDialog
from warchron.view.ui.ui_choices_dialog import Ui_choicesDialog
from warchron.view.ui.ui_battle_result_dialog import Ui_battleResultDialog
# utils...
@ -66,6 +67,8 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
self.sectorsTable.customContextMenuRequested.connect(self._on_sectors_table_context_menu)
self.choicesTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.choicesTable.customContextMenuRequested.connect(self._on_choices_table_context_menu)
self.battlesTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.battlesTable.customContextMenuRequested.connect(self._on_battles_table_context_menu)
def _emit_selection_changed(self, current, previous):
if not self.on_tree_selection_changed:
@ -395,6 +398,23 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
if action == edit_action and self.on_edit_item:
self.on_edit_item(ItemType.CHOICE, choice_id)
def _on_battles_table_context_menu(self, pos):
item = self.battlesTable.itemAt(pos)
if not item:
return
row = item.row()
name_item = self.battlesTable.item(row, 0)
if not name_item:
return
battle_id = name_item.data(Qt.ItemDataRole.UserRole)
if battle_id is None:
return
menu = QMenu(self)
edit_action = menu.addAction("Edit")
action = menu.exec(self.battlesTable.viewport().mapToGlobal(pos))
if action == edit_action and self.on_edit_item:
self.on_edit_item(ItemType.BATTLE, battle_id)
def show_round_details(self, *, index: int):
self.roundNb.setText(f"Round {index}")
@ -412,6 +432,20 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
table.setItem(row, 2, secondary_item)
table.resizeColumnsToContents()
def display_round_battles(self, sectors: list[tuple[str, str, str, str]]):
table = self.battlesTable
table.clearContents()
table.setRowCount(len(sectors))
for row, (sector, player_1, player_2, battle_id) in enumerate(sectors):
sector_item = QtWidgets.QTableWidgetItem(sector)
player_1_item = QtWidgets.QTableWidgetItem(player_1)
player_2_item = QtWidgets.QTableWidgetItem(player_2)
sector_item.setData(Qt.ItemDataRole.UserRole, battle_id)
table.setItem(row, 0, sector_item)
table.setItem(row, 1, player_1_item)
table.setItem(row, 2, player_2_item)
table.resizeColumnsToContents()
class PlayerDialog(QDialog):
def __init__(self, parent=None, *, default_name: str = ""):
super().__init__(parent)
@ -540,7 +574,13 @@ class SectorDialog(QDialog):
return self.ui.influenceComboBox.currentData()
class ChoicesDialog(QDialog):
def __init__(self, parent=None, *, participants: list, default_participant_id=None, sectors: list, default_priority_id=None, default_secondary_id=None):
def __init__(self, parent = None, *,
participants: list,
default_participant_id = None,
sectors: list,
default_priority_id = None,
default_secondary_id = None,
default_comment = None):
super().__init__(parent)
self.ui = Ui_choicesDialog()
self.ui.setupUi(self)
@ -555,6 +595,7 @@ class ChoicesDialog(QDialog):
self.ui.secondaryComboBox.addItem(sect.name, sect.id)
select_if_exists(self.ui.priorityComboBox, default_priority_id)
select_if_exists(self.ui.secondaryComboBox, default_secondary_id)
self.ui.choiceComment.setPlainText(default_comment)
def get_participant_id(self) -> str:
return self.ui.playerComboBox.currentData()
@ -564,3 +605,62 @@ class ChoicesDialog(QDialog):
def get_secondary_id(self) -> str:
return self.ui.secondaryComboBox.currentData()
def get_comment(self) -> str:
return self.ui.choiceComment.toPlainText().strip()
class BattlesDialog(QDialog):
def __init__(self, parent = None, *,
sectors: list,
default_sector_id = None,
players: list,
default_player_1_id = None,
default_player_2_id = None,
default_winner_id = None,
default_score = None,
default_victory_condition = None,
default_comment = None):
super().__init__(parent)
self.ui = Ui_battleResultDialog()
self.ui.setupUi(self)
for sect in sectors:
self.ui.sectorComboBox.addItem(sect.name, sect.id)
select_if_exists(self.ui.sectorComboBox, default_sector_id)
self.ui.sectorComboBox.setEnabled(False)
self.ui.player1ComboBox.addItem("(none)", None)
self.ui.player2ComboBox.addItem("(none)", None)
for play in players:
self.ui.player1ComboBox.addItem(play.name, play.id)
self.ui.player2ComboBox.addItem(play.name, play.id)
select_if_exists(self.ui.player1ComboBox, default_player_1_id)
select_if_exists(self.ui.player2ComboBox, default_player_2_id)
self.ui.winnerComboBox.addItem("(none)", None)
for play in players:
if play.id in (default_player_1_id, default_player_2_id):
self.ui.winnerComboBox.addItem(play.name, play.id)
select_if_exists(self.ui.winnerComboBox, default_winner_id)
self.ui.score.setText(default_score)
self.ui.victoryCondition.setText(default_victory_condition)
self.ui.battleComment.setPlainText(default_comment)
def get_sector_id(self) -> str:
return self.ui.sectorComboBox.currentData()
def get_player_1_id(self) -> str:
return self.ui.player1ComboBox.currentData()
def get_player_2_id(self) -> str:
return self.ui.player2ComboBox.currentData()
def get_winner_id(self) -> str:
return self.ui.winnerComboBox.currentData()
def get_score(self) -> str:
return self.ui.score.text().strip()
def get_victory_condition(self) -> str:
return self.ui.victoryCondition.text().strip()
def get_comment(self) -> str:
return self.ui.battleComment.toPlainText().strip()