From 5c124f9229dfbf590ed4e065f477ee0432a70c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20R=C3=A9aux?= Date: Wed, 25 Feb 2026 14:37:59 +0100 Subject: [PATCH] Fix refresh on new/open file --- src/warchron/controller/app_controller.py | 4 +-- .../controller/navigation_controller.py | 26 +++++++++++++++++-- src/warchron/model/war.py | 2 -- src/warchron/view/view.py | 13 ++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/warchron/controller/app_controller.py b/src/warchron/controller/app_controller.py index 63909de..7f0bf9b 100644 --- a/src/warchron/controller/app_controller.py +++ b/src/warchron/controller/app_controller.py @@ -96,7 +96,6 @@ class AppController: self.navigation.refresh_players_view() self.navigation.refresh_wars_view() self.update_window_title() - # TODO refresh details view if wars tab selected def open_file(self) -> None: if self.is_dirty: @@ -117,7 +116,6 @@ class AppController: self.navigation.refresh_players_view() self.navigation.refresh_wars_view() self.update_window_title() - # TODO refresh details view if wars tab selected def save(self) -> None: if not self.current_file: @@ -287,7 +285,7 @@ class AppController: e.action() else: return - self.is_dirty = True + self.is_dirty = True self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) def delete_item(self, item_type: str, item_id: str) -> None: diff --git a/src/warchron/controller/navigation_controller.py b/src/warchron/controller/navigation_controller.py index fe84943..2a6aa47 100644 --- a/src/warchron/controller/navigation_controller.py +++ b/src/warchron/controller/navigation_controller.py @@ -31,7 +31,8 @@ class NavigationController: self.app.view.display_players(players_for_display) def refresh_wars_view(self) -> None: - wars: List[WarDTO] = [ + wars = self.app.model.get_all_wars() + wars_dto: List[WarDTO] = [ WarDTO( id=w.id, name=w.name, @@ -57,7 +58,21 @@ class NavigationController: ) for w in self.app.model.get_all_wars() ] - self.app.view.display_wars_tree(wars) + self.app.view.display_wars_tree(wars_dto) + if not wars: + self.clear_selection() + return + first_war = wars[0] + self.selected_war_id = first_war.id + self.selected_campaign_id = None + self.selected_round_id = None + self.app.view.select_tree_item( + item_type=ItemType.WAR, + item_id=first_war.id, + ) + self.app.view.show_details(ItemType.WAR) + self.app.wars._fill_war_details(first_war.id) + self.update_actions_state() def refresh(self, scope: RefreshScope) -> None: match scope: @@ -87,6 +102,13 @@ class NavigationController: # Commands methods + def clear_selection(self) -> None: + self.selected_war_id = None + self.selected_campaign_id = None + self.selected_round_id = None + self.app.view.clear_tree_selection() + self.app.view.show_details(None) + def on_tree_selection_changed(self, selection: TreeSelection | None) -> None: self.selected_war_id = None self.selected_campaign_id = None diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py index b6bf57c..a7db99e 100644 --- a/src/warchron/model/war.py +++ b/src/warchron/model/war.py @@ -88,7 +88,6 @@ class War: else: new_events.append(ev) self.events = new_events - # TODO Reopen rounds with battle on sector with influence objective for camp in self.campaigns: for sect in camp.get_all_sectors(): if sect.influence_objective_id is not None: @@ -107,7 +106,6 @@ class War: ) if new_state is True: has_tie_resolved = any(isinstance(ev, TieResolved) for ev in self.events) - grant_influence = any( (sect.influence_objective_id is not None) for camp in self.campaigns diff --git a/src/warchron/view/view.py b/src/warchron/view/view.py index 5e87ce3..31354a1 100644 --- a/src/warchron/view/view.py +++ b/src/warchron/view/view.py @@ -90,6 +90,7 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): ) self.majorValue.valueChanged.connect(self._on_major_changed) self.minorValue.valueChanged.connect(self._on_minor_changed) + self.warsTree.currentItemChanged.connect(self._emit_selection_changed) self._apply_icons() def _apply_icons(self) -> None: @@ -143,6 +144,11 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): return "wars" return "" + def clear_tree_selection(self) -> None: + self.warsTree.blockSignals(True) + self.warsTree.setCurrentItem(None) + self.warsTree.blockSignals(False) + # General popups def closeEvent(self, event: QCloseEvent | None = None) -> None: @@ -237,10 +243,7 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): def display_wars_tree(self, wars: List[WarDTO]) -> None: tree = self.warsTree - try: - tree.currentItemChanged.disconnect() - except TypeError: - pass + tree.blockSignals(True) tree.clear() tree.setColumnCount(1) tree.setHeaderLabels(["Wars"]) @@ -264,8 +267,8 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): rnd_item.setData(0, ROLE_TYPE, ItemType.ROUND) rnd_item.setData(0, ROLE_ID, rnd.id) camp_item.addChild(rnd_item) - tree.currentItemChanged.connect(self._emit_selection_changed) tree.expandAll() + tree.blockSignals(False) def select_tree_item(self, *, item_type: ItemType, item_id: str) -> None: def walk(item: QTreeWidgetItem) -> bool: