from typing import cast, List from PyQt6.QtWidgets import QWidget, QDialog from warchron.constants import Icons, IconName from warchron.controller.dtos import ObjectiveDTO, RoundDTO from warchron.view.helpers import select_if_exists, format_round_label from warchron.view.ui.ui_sector_dialog import Ui_sectorDialog class SectorDialog(QDialog): def __init__( self, parent: QWidget | None = None, *, default_name: str = "", rounds: List[RoundDTO], default_round_id: str | None = None, objectives: List[ObjectiveDTO], default_major_id: str | None = None, default_minor_id: str | None = None, default_influence_id: str | None = None, default_mission: str | None = None, default_description: str | None = None, ) -> None: super().__init__(parent) self.ui: Ui_sectorDialog = Ui_sectorDialog() self.ui.setupUi(self) # type: ignore self.ui.sectorName.setText(default_name) self.ui.majorComboBox.addItem("(none)", None) self.ui.minorComboBox.addItem("(none)", None) self.ui.influenceComboBox.addItem("(none)", None) self.ui.roundComboBox.addItem("(none)", None) for index, rnd in enumerate(rounds, start=1): self.ui.roundComboBox.addItem(format_round_label(index), rnd.id) select_if_exists(self.ui.roundComboBox, default_round_id) for obj in objectives: self.ui.majorComboBox.addItem(obj.name, obj.id) self.ui.minorComboBox.addItem(obj.name, obj.id) self.ui.influenceComboBox.addItem(obj.name, obj.id) select_if_exists(self.ui.majorComboBox, default_major_id) select_if_exists(self.ui.minorComboBox, default_minor_id) select_if_exists(self.ui.influenceComboBox, default_influence_id) self.ui.sectorMission.setText(default_mission) self.ui.sectorDescription.setPlainText(default_description) self.setWindowIcon(Icons.get(IconName.WARCHRONICO)) def get_sector_name(self) -> str: return self.ui.sectorName.text().strip() def get_round_id(self) -> str | None: text = cast(str, self.ui.roundComboBox.currentData()) return text if text else None def get_major_id(self) -> str | None: text = cast(str, self.ui.majorComboBox.currentData()) return text if text else None def get_minor_id(self) -> str | None: text = cast(str, self.ui.minorComboBox.currentData()) return text if text else None def get_influence_id(self) -> str | None: text = cast(str, self.ui.influenceComboBox.currentData()) return text if text else None def get_mission(self) -> str | None: text = self.ui.sectorMission.text().strip() return text if text else None def get_description(self) -> str | None: text = self.ui.sectorDescription.toPlainText().strip() return text if text else None