Fix refresh on new/open file

This commit is contained in:
Maxime Réaux 2026-02-25 14:37:59 +01:00
parent 765c691b59
commit 5c124f9229
4 changed files with 33 additions and 12 deletions

View file

@ -96,7 +96,6 @@ class AppController:
self.navigation.refresh_players_view() self.navigation.refresh_players_view()
self.navigation.refresh_wars_view() self.navigation.refresh_wars_view()
self.update_window_title() self.update_window_title()
# TODO refresh details view if wars tab selected
def open_file(self) -> None: def open_file(self) -> None:
if self.is_dirty: if self.is_dirty:
@ -117,7 +116,6 @@ class AppController:
self.navigation.refresh_players_view() self.navigation.refresh_players_view()
self.navigation.refresh_wars_view() self.navigation.refresh_wars_view()
self.update_window_title() self.update_window_title()
# TODO refresh details view if wars tab selected
def save(self) -> None: def save(self) -> None:
if not self.current_file: if not self.current_file:
@ -287,7 +285,7 @@ class AppController:
e.action() e.action()
else: else:
return return
self.is_dirty = True self.is_dirty = True
self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) self.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
def delete_item(self, item_type: str, item_id: str) -> None: def delete_item(self, item_type: str, item_id: str) -> None:

View file

@ -31,7 +31,8 @@ class NavigationController:
self.app.view.display_players(players_for_display) self.app.view.display_players(players_for_display)
def refresh_wars_view(self) -> None: def refresh_wars_view(self) -> None:
wars: List[WarDTO] = [ wars = self.app.model.get_all_wars()
wars_dto: List[WarDTO] = [
WarDTO( WarDTO(
id=w.id, id=w.id,
name=w.name, name=w.name,
@ -57,7 +58,21 @@ class NavigationController:
) )
for w in self.app.model.get_all_wars() 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: def refresh(self, scope: RefreshScope) -> None:
match scope: match scope:
@ -87,6 +102,13 @@ class NavigationController:
# Commands methods # 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: def on_tree_selection_changed(self, selection: TreeSelection | None) -> None:
self.selected_war_id = None self.selected_war_id = None
self.selected_campaign_id = None self.selected_campaign_id = None

View file

@ -88,7 +88,6 @@ class War:
else: else:
new_events.append(ev) new_events.append(ev)
self.events = new_events self.events = new_events
# TODO Reopen rounds with battle on sector with influence objective
for camp in self.campaigns: for camp in self.campaigns:
for sect in camp.get_all_sectors(): for sect in camp.get_all_sectors():
if sect.influence_objective_id is not None: if sect.influence_objective_id is not None:
@ -107,7 +106,6 @@ class War:
) )
if new_state is True: if new_state is True:
has_tie_resolved = any(isinstance(ev, TieResolved) for ev in self.events) has_tie_resolved = any(isinstance(ev, TieResolved) for ev in self.events)
grant_influence = any( grant_influence = any(
(sect.influence_objective_id is not None) (sect.influence_objective_id is not None)
for camp in self.campaigns for camp in self.campaigns

View file

@ -90,6 +90,7 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
) )
self.majorValue.valueChanged.connect(self._on_major_changed) self.majorValue.valueChanged.connect(self._on_major_changed)
self.minorValue.valueChanged.connect(self._on_minor_changed) self.minorValue.valueChanged.connect(self._on_minor_changed)
self.warsTree.currentItemChanged.connect(self._emit_selection_changed)
self._apply_icons() self._apply_icons()
def _apply_icons(self) -> None: def _apply_icons(self) -> None:
@ -143,6 +144,11 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
return "wars" return "wars"
return "" return ""
def clear_tree_selection(self) -> None:
self.warsTree.blockSignals(True)
self.warsTree.setCurrentItem(None)
self.warsTree.blockSignals(False)
# General popups # General popups
def closeEvent(self, event: QCloseEvent | None = None) -> None: 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: def display_wars_tree(self, wars: List[WarDTO]) -> None:
tree = self.warsTree tree = self.warsTree
try: tree.blockSignals(True)
tree.currentItemChanged.disconnect()
except TypeError:
pass
tree.clear() tree.clear()
tree.setColumnCount(1) tree.setColumnCount(1)
tree.setHeaderLabels(["Wars"]) 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_TYPE, ItemType.ROUND)
rnd_item.setData(0, ROLE_ID, rnd.id) rnd_item.setData(0, ROLE_ID, rnd.id)
camp_item.addChild(rnd_item) camp_item.addChild(rnd_item)
tree.currentItemChanged.connect(self._emit_selection_changed)
tree.expandAll() tree.expandAll()
tree.blockSignals(False)
def select_tree_item(self, *, item_type: ItemType, item_id: str) -> None: def select_tree_item(self, *, item_type: ItemType, item_id: str) -> None:
def walk(item: QTreeWidgetItem) -> bool: def walk(item: QTreeWidgetItem) -> bool: