war add & display

This commit is contained in:
Maxime Réaux 2026-01-20 08:46:58 +01:00
parent cfa65a41f0
commit 9e966baf9b
4 changed files with 223 additions and 30 deletions

View file

@ -2,7 +2,7 @@ from pathlib import Path
from PyQt6.QtWidgets import QMessageBox, QDialog
from warchron.view.view import PlayerDialog
from warchron.view.view import PlayerDialog, WarDialog
class Controller:
def __init__(self, model, view):
@ -13,20 +13,32 @@ class Controller:
self.is_dirty = False
self.__connect()
self.refresh_players_view()
self.refresh_wars_view()
self.update_window_title()
def __connect(self):
self.view.addPlayerBtn.clicked.connect(self.add_player)
self.view.actionExit.triggered.connect(self.view.close)
self.view.actionNew.triggered.connect(self.new)
self.view.actionOpen.triggered.connect(self.open_file)
self.view.actionSave.triggered.connect(self.save)
self.view.actionSave_as.triggered.connect(self.save_as)
self.view.addPlayerBtn.clicked.connect(self.add_player)
self.view.addWarBtn.clicked.connect(self.add_war)
def refresh_players_view(self):
players = self.model.get_all_players()
self.view.display_players(players)
def on_app_close(self) -> bool:
if self.is_dirty:
reply = QMessageBox.question(
self.view,
"Unsaved changes",
"You have unsaved changes. Do you want to save before quitting?",
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No | QMessageBox.StandardButton.Cancel
)
if reply == QMessageBox.StandardButton.Yes:
self.save()
elif reply == QMessageBox.StandardButton.Cancel:
return False
return True
def new(self):
if self.is_dirty:
reply = QMessageBox.question(
@ -41,6 +53,7 @@ class Controller:
self.current_file = None
self.is_dirty = False
self.refresh_players_view()
self.refresh_wars_view()
self.update_window_title()
def open_file(self):
@ -60,22 +73,9 @@ class Controller:
self.current_file = path
self.is_dirty = False
self.refresh_players_view()
self.refresh_wars_view()
self.update_window_title()
def on_app_close(self) -> bool:
if self.is_dirty:
reply = QMessageBox.question(
self.view,
"Unsaved changes",
"You have unsaved changes. Do you want to save before quitting?",
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No | QMessageBox.StandardButton.Cancel
)
if reply == QMessageBox.StandardButton.Yes:
self.save()
elif reply == QMessageBox.StandardButton.Cancel:
return False
return True
def save(self):
if not self.current_file:
self.save_as()
@ -103,6 +103,9 @@ class Controller:
base = base + " *"
self.view.setWindowTitle(base)
def refresh_players_view(self):
players = self.model.get_all_players()
self.view.display_players(players)
def add_player(self):
dialog = PlayerDialog(self.view)
@ -120,3 +123,24 @@ class Controller:
self.is_dirty = True
self.refresh_players_view()
self.update_window_title()
def refresh_wars_view(self):
wars = self.model.get_all_wars()
self.view.display_wars(wars)
def add_war(self):
dialog = WarDialog(self.view)
result = dialog.exec() # modal blocking dialog
if result == QDialog.DialogCode.Accepted:
name = dialog.get_war_name()
if not name:
QMessageBox.warning(
self.view,
"Invalid name",
"War name cannot be empty."
)
return
self.model.add_war(name)
self.is_dirty = True
self.refresh_wars_view()
self.update_window_title()