exceptions adding in closed elements

This commit is contained in:
Maxime Réaux 2026-02-13 15:44:28 +01:00
parent 88bd28e949
commit a2b6c7c684
10 changed files with 179 additions and 82 deletions

View file

@ -31,8 +31,7 @@ class AppController:
self.navigation.refresh_wars_view()
self.update_window_title()
self.view.on_tree_selection_changed = self.navigation.on_tree_selection_changed
self.view.on_add_campaign = self.campaigns.add_campaign
self.view.on_add_round = self.rounds.add_round
self.view.on_add_item = self.add_item
def __connect(self) -> None:
self.view.actionExit.triggered.connect(self.view.close)
@ -41,20 +40,25 @@ class AppController:
self.view.actionSave.triggered.connect(self.save)
self.view.actionSave_as.triggered.connect(self.save_as)
self.view.actionAbout.triggered.connect(self.show_about)
self.view.addPlayerBtn.clicked.connect(self.players.add_player)
self.view.addWarBtn.clicked.connect(self.wars.add_war)
self.view.addPlayerBtn.clicked.connect(lambda: self.add_item(ItemType.PLAYER))
self.view.addWarBtn.clicked.connect(lambda: self.add_item(ItemType.WAR))
self.view.majorValue.valueChanged.connect(self.wars.set_major_value)
self.view.minorValue.valueChanged.connect(self.wars.set_minor_value)
self.view.influenceToken.toggled.connect(self.wars.set_influence_token)
self.view.addObjectiveBtn.clicked.connect(self.wars.add_objective)
self.view.addWarParticipantBtn.clicked.connect(self.wars.add_war_participant)
self.view.addObjectiveBtn.clicked.connect(
lambda: self.add_item(ItemType.OBJECTIVE)
)
self.view.addWarParticipantBtn.clicked.connect(
lambda: self.add_item(ItemType.WAR_PARTICIPANT)
)
self.view.endWarBtn.clicked.connect(self.wars.close_war)
self.view.addSectorBtn.clicked.connect(self.campaigns.add_sector)
self.view.addSectorBtn.clicked.connect(lambda: self.add_item(ItemType.SECTOR))
self.view.addCampaignParticipantBtn.clicked.connect(
self.campaigns.add_campaign_participant
lambda: self.add_item(ItemType.CAMPAIGN_PARTICIPANT)
)
self.view.endCampaignBtn.clicked.connect(self.campaigns.close_campaign)
self.view.endRoundBtn.clicked.connect(self.rounds.close_round)
self.view.on_add_item = self.add_item
self.view.on_edit_item = self.edit_item
self.view.on_delete_item = self.delete_item
@ -161,6 +165,72 @@ class AppController:
# Command methods
def add_item(self, item_type: str) -> None:
try:
if item_type == ItemType.PLAYER:
play = self.players.create_player()
if not play:
return
self.navigation.refresh(RefreshScope.PLAYERS_LIST)
elif item_type == ItemType.WAR:
war = self.wars.create_war()
if not war:
return
self.navigation.refresh_and_select(
RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war.id
)
elif item_type == ItemType.CAMPAIGN:
camp = self.campaigns.create_campaign()
if not camp:
return
self.navigation.refresh_and_select(
RefreshScope.WARS_TREE, item_type=ItemType.CAMPAIGN, item_id=camp.id
)
elif item_type == ItemType.OBJECTIVE:
obj = self.wars.create_objective()
if not obj:
return
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
elif item_type == ItemType.WAR_PARTICIPANT:
war_part = self.wars.create_war_participant()
if not war_part:
return
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
elif item_type == ItemType.SECTOR:
sect = self.campaigns.create_sector()
if not sect:
return
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
elif item_type == ItemType.CAMPAIGN_PARTICIPANT:
camp_part = self.campaigns.create_campaign_participant()
if not camp_part:
return
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
elif item_type == ItemType.ROUND:
rnd = self.rounds.create_round()
if not rnd:
return
self.navigation.refresh_and_select(
RefreshScope.WARS_TREE, item_type=ItemType.ROUND, item_id=rnd.id
)
self.is_dirty = True
except DomainError as e:
QMessageBox.warning(
self.view,
"Deletion forbidden",
str(e),
)
except RequiresConfirmation as e:
reply = QMessageBox.question(
self.view,
"Confirm update",
str(e),
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
)
if reply == QMessageBox.StandardButton.Yes:
e.action()
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
def edit_item(self, item_type: str, item_id: str) -> None:
try:
if item_type == ItemType.PLAYER:
@ -195,6 +265,12 @@ class AppController:
self.rounds.edit_round_battle(item_id)
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
self.is_dirty = True
except DomainError as e:
QMessageBox.warning(
self.view,
"Deletion forbidden",
str(e),
)
except RequiresConfirmation as e:
reply = QMessageBox.question(
self.view,