44 lines
1.6 KiB
Python
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)
|