warchron_app/src/warchron/controller/player_controller.py
2026-02-13 15:44:28 +01:00

44 lines
1.6 KiB
Python

from typing import TYPE_CHECKING
from PyQt6.QtWidgets import QMessageBox, QDialog
from warchron.constants import RefreshScope
from warchron.model.player import Player
if TYPE_CHECKING:
from warchron.controller.app_controller import AppController
from warchron.view.player_dialog import PlayerDialog
class PlayerController:
def __init__(self, app: "AppController"):
self.app: AppController = app
def _validate_player_inputs(self, name: str) -> bool:
if not name.strip():
QMessageBox.warning(
self.app.view, "Invalid name", "Player name cannot be empty."
)
return False
return True
def create_player(self) -> Player | None:
dialog = PlayerDialog(self.app.view)
result = dialog.exec()
if result != QDialog.DialogCode.Accepted:
return None
name = dialog.get_player_name()
if not self._validate_player_inputs(name):
return None
return self.app.model.add_player(name)
def edit_player(self, player_id: str) -> None:
play = self.app.model.get_player(player_id)
player_dialog = PlayerDialog(self.app.view, default_name=play.name)
if player_dialog.exec() == QDialog.DialogCode.Accepted:
name = player_dialog.get_player_name()
if not self._validate_player_inputs(name):
return
self.app.model.update_player(player_id, name=name)
# Propagate update to participants
self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)