diff --git a/example.json b/example.json index 6dba8a4..e94efdd 100644 --- a/example.json +++ b/example.json @@ -30,7 +30,7 @@ "name": "Llael War 2025", "year": 2025, - "participants": { + "entrants": { "e7844fbb-8366-44e4-bb43-89b9eef6ef64": { "war_points": 0, "influence_tokens": 1 diff --git a/src/warchron/constants.py b/src/warchron/constants.py deleted file mode 100644 index 1d431b6..0000000 --- a/src/warchron/constants.py +++ /dev/null @@ -1,24 +0,0 @@ -from enum import StrEnum -from enum import Enum, auto - -from PyQt6.QtCore import Qt - -ROLE_TYPE = Qt.ItemDataRole.UserRole -ROLE_ID = Qt.ItemDataRole.UserRole + 1 - -class ItemType(StrEnum): - PLAYER = "player" - WAR = "war" - CAMPAIGN = "campaign" - ROUND = "round" - OBJECTIVE = "objective" - WAR_PARTICIPANT = "war_participant" - -class RefreshScope(Enum): - NONE = auto() - PLAYERS_LIST = auto() - WARS_TREE = auto() - WAR_DETAILS = auto() - CAMPAIGN_DETAILS = auto() - ROUND_DETAILS = auto() - diff --git a/src/warchron/controller/controller.py b/src/warchron/controller/controller.py index af71bbd..62c1397 100644 --- a/src/warchron/controller/controller.py +++ b/src/warchron/controller/controller.py @@ -5,8 +5,7 @@ from PyQt6.QtWidgets import QMessageBox, QDialog from warchron.model.model import Model from warchron.view.view import View -from warchron.constants import ItemType, RefreshScope -from warchron.view.view import PlayerDialog, WarDialog, CampaignDialog, ObjectiveDialog, ParticipantDialog +from warchron.view.view import PlayerDialog, WarDialog, CampaignDialog class Controller: def __init__(self, model: Model, view: View): @@ -35,8 +34,6 @@ class Controller: 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) - self.view.addObjectiveBtn.clicked.connect(self.add_objective) - self.view.addWarParticipantBtn.clicked.connect(self.add_war_participant) self.view.on_edit_item = self.edit_item self.view.on_delete_item = self.delete_item @@ -53,8 +50,6 @@ class Controller: elif reply == QMessageBox.StandardButton.Cancel: return False return True - - # Menu bar methods def new(self): if self.is_dirty: @@ -110,8 +105,6 @@ class Controller: self.is_dirty = False self.update_window_title() -# Display methods - def update_window_title(self): base = "WarChron" if self.current_file: @@ -128,169 +121,32 @@ class Controller: def refresh_wars_view(self): wars = self.model.get_all_wars() - self.view.display_wars_tree(wars) + self.view.display_wars(wars) - def _fill_war_details(self, war_id: str): - war = self.model.get_war(war_id) - self.view.show_war_details(name=war.name, year=war.year) - objectives = war.get_all_objectives() - self.view.display_war_objectives(objectives) - participants = war.get_all_war_participants() - participants_for_display = [ - (self.model.get_player_name(p.id), p.faction, p.id) - for p in participants - ] - self.view.display_war_participants(participants_for_display) - - def _fill_campaign_details(self, campaign_id: str): - camp = self.model.get_campaign(campaign_id) - self.view.show_campaign_details(name=camp.name, month=camp.month) - - def _fill_round_details(self, round_id: str): - index = self.model.get_round_index(round_id) - self.view.show_round_details(index=index) + def refresh_views(self): + current = self.view.get_current_tab() + if current == "players": + self.refresh_players_view() + elif current == "wars": + self.refresh_wars_view() def on_tree_selection_changed(self, selection): self.selected_war_id = None self.selected_campaign_id = None self.selected_round_id = None if selection: - item_type = selection["type"] - item_id = selection["id"] - if item_type == ItemType.WAR: - self.selected_war_id = item_id - self.view.show_details(ItemType.WAR) - self._fill_war_details(item_id) - elif item_type == ItemType.CAMPAIGN: - self.selected_campaign_id = item_id - self.view.show_details(ItemType.CAMPAIGN) - self._fill_campaign_details(item_id) - elif item_type == ItemType.ROUND: - self.selected_round_id = item_id - self.view.show_details(ItemType.ROUND) - self._fill_round_details(item_id) - else: - self.view.show_details(None) - self.update_actions_state() - return + if selection["type"] == "war": + self.selected_war_id = selection["id"] + elif selection["type"] == "campaign": + self.selected_campaign_id = selection["id"] + elif selection["type"] == "round": + self.selected_round_id = selection["id"] self.update_actions_state() def update_actions_state(self): self.view.set_add_campaign_enabled(self.selected_war_id is not None) self.view.set_add_round_enabled(self.selected_campaign_id is not None) - def refresh(self, scope: RefreshScope): - match scope: - case RefreshScope.PLAYERS_LIST: - self.refresh_players_view() - case RefreshScope.WARS_TREE: - self.refresh_wars_view() - case RefreshScope.WAR_DETAILS: - if self.selected_war_id: - self.view.show_details(ItemType.WAR) - self._fill_war_details(self.selected_war_id) - case RefreshScope.CAMPAIGN_DETAILS: - if self.selected_campaign_id: - self.view.show_details(ItemType.CAMPAIGN) - self._fill_campaign_details(self.selected_campaign_id) - case RefreshScope.ROUND_DETAILS: - if self.selected_round_id: - self.view.show_details(ItemType.ROUND) - self._fill_round_details(self.selected_round_id) - self.update_window_title() - -# Common command methods - - def refresh_and_select(self, scope: RefreshScope, *, item_type: ItemType, item_id: str): - self.refresh(scope) - self.view.select_tree_item(item_type=item_type, item_id=item_id) - - def edit_item(self, item_type: str, item_id: str): - if item_type == ItemType.PLAYER: - play = self.model.get_player(item_id) - dialog = PlayerDialog(self.view, default_name=play.name) - if dialog.exec() == QDialog.DialogCode.Accepted: - name = dialog.get_player_name() - if not self._validate_player_inputs(name): - return - self.model.update_player(item_id, name=name) - self.refresh(RefreshScope.PLAYERS_LIST) - elif item_type == ItemType.WAR: - war = self.model.get_war(item_id) - dialog = WarDialog(self.view, default_name=war.name, default_year=war.year) - if dialog.exec() == QDialog.DialogCode.Accepted: - name = dialog.get_war_name() - year = dialog.get_war_year() - if not self._validate_war_inputs(name, year): - return - self.model.update_war(item_id, name=name, year=year) - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war.id) - elif item_type == ItemType.CAMPAIGN: - camp = self.model.get_campaign(item_id) - dialog = CampaignDialog(self.view, default_name=camp.name, default_month=camp.month) - if dialog.exec() == QDialog.DialogCode.Accepted: - name = dialog.get_campaign_name() - month = dialog.get_campaign_month() - if not self._validate_campaign_inputs(name, month): - return - self.model.update_campaign(item_id, name=name, month=month) - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.CAMPAIGN, item_id=camp.id) - elif item_type == ItemType.OBJECTIVE: - obj = self.model.get_objective(item_id) - dialog = ObjectiveDialog(self.view, default_name=obj.name, default_description=obj.description) - if dialog.exec() == QDialog.DialogCode.Accepted: - name = dialog.get_objective_name() - description = dialog.get_objective_description() - if not self._validate_objective_inputs(name, description): - return - self.model.update_objective(item_id, name=name, description=description) - self.refresh(RefreshScope.WAR_DETAILS) - elif item_type == ItemType.WAR_PARTICIPANT: - part = self.model.get_war_participant(item_id) - player = self.model.get_player(part.id) - dialog = ParticipantDialog(self.view, players=[player], default_player_id=part.id, default_faction=part.faction) - if dialog.exec() == QDialog.DialogCode.Accepted: - id = dialog.get_player_id() - faction = dialog.get_participant_faction() - self.model.update_war_participant(item_id, faction=faction) - self.refresh(RefreshScope.WAR_DETAILS) - self.is_dirty = True - - def delete_item(self, item_type: str, item_id: str): - reply = QMessageBox.question( - self.view, - "Confirm deletion", - "Are you sure you want to delete this item?", - QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No - ) - if reply != QMessageBox.StandardButton.Yes: - return - if item_type == ItemType.PLAYER: - self.model.remove_player(item_id) - self.refresh(RefreshScope.PLAYERS_LIST) - elif item_type == ItemType.WAR: - self.model.remove_war(item_id) - self.refresh(RefreshScope.WARS_TREE) - elif item_type == ItemType.CAMPAIGN: - war = self.model.get_war_by_campaign(item_id) - war_id = war.id - self.model.remove_campaign(item_id) - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war_id) - elif item_type == ItemType.OBJECTIVE: - self.model.remove_objective(item_id) - self.refresh(RefreshScope.WAR_DETAILS) - elif item_type == ItemType.WAR_PARTICIPANT: - self.model.remove_war_participant(item_id) - self.refresh(RefreshScope.WAR_DETAILS) - elif item_type == ItemType.ROUND: - camp = self.model.get_campaign_by_round(item_id) - camp_id = camp.id - self.model.remove_round(item_id) - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.CAMPAIGN, item_id=camp_id) - self.is_dirty = True - -# Player methods - def _validate_player_inputs(self, name: str) -> bool: if not name.strip(): QMessageBox.warning( @@ -310,9 +166,8 @@ class Controller: return self.model.add_player(name) self.is_dirty = True - self.refresh(RefreshScope.PLAYERS_LIST) - -# War methods + self.refresh_players_view() + self.update_window_title() def _validate_war_inputs(self, name: str, year: int) -> bool: if not name.strip(): @@ -339,54 +194,10 @@ class Controller: year = dialog.get_war_year() if not self._validate_war_inputs(name, year): return - war = self.model.add_war(name, year) + self.model.add_war(name, year) self.is_dirty = True - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war.id) - -# Objective methods - - def _validate_objective_inputs(self, name: str, description: int) -> bool: - if not name.strip(): - QMessageBox.warning( - self.view, - "Invalid name", - "Campaign name cannot be empty." - ) - return False - return True - - def add_objective(self): - if not self.selected_war_id: - return - dialog = ObjectiveDialog(self.view) - if dialog.exec() != QDialog.DialogCode.Accepted: - return - name = dialog.get_objective_name() - description = dialog.get_objective_description() - if not name: - return - self.model.add_objective(self.selected_war_id, name, description) - self.is_dirty = True - self.refresh(RefreshScope.WAR_DETAILS) - -# War participant methods - - def add_war_participant(self): - if not self.selected_war_id: - return - players = self.model.get_available_players(self.selected_war_id) - dialog = ParticipantDialog(self.view, players=players) - if dialog.exec() != QDialog.DialogCode.Accepted: - return - player_id = dialog.get_player_id() - faction = dialog.get_participant_faction() - if not player_id: - return - self.model.add_war_participant(self.selected_war_id, player_id, faction) - self.is_dirty = True - self.refresh(RefreshScope.WAR_DETAILS) - -# Campaign methods + self.refresh_wars_view() + self.update_window_title() def _validate_campaign_inputs(self, name: str, month: int) -> bool: if not name.strip(): @@ -415,15 +226,66 @@ class Controller: month = dialog.get_campaign_month() if not self._validate_campaign_inputs(name, month): return - camp = self.model.add_campaign(self.selected_war_id, name, month) + self.model.add_campaign(self.selected_war_id, name, month) self.is_dirty = True - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.CAMPAIGN, item_id=camp.id) - -# Round methods + self.refresh_wars_view() + self.update_window_title() def add_round(self): if not self.selected_campaign_id: return - rnd = self.model.add_round(self.selected_campaign_id) + self.model.add_round(self.selected_campaign_id) self.is_dirty = True - self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.ROUND, item_id=rnd.id) \ No newline at end of file + self.refresh_wars_view() + self.update_window_title() + + def edit_item(self, item_type: str, item_id: str): + if item_type == "player": + play = self.model.get_player(item_id) + dialog = PlayerDialog(self.view, default_name=play.name) + if dialog.exec() == QDialog.DialogCode.Accepted: + name = dialog.get_player_name() + if not self._validate_player_inputs(name): + return + self.model.update_player(item_id, name=name) + elif item_type == "war": + war = self.model.get_war(item_id) + dialog = WarDialog(self.view, default_name=war.name, default_year=war.year) + if dialog.exec() == QDialog.DialogCode.Accepted: + name = dialog.get_war_name() + year = dialog.get_war_year() + if not self._validate_war_inputs(name, year): + return + self.model.update_war(item_id, name=name, year=year) + elif item_type == "campaign": + camp = self.model.get_campaign(item_id) + dialog = CampaignDialog(self.view, default_name=camp.name, default_month=camp.month) + if dialog.exec() == QDialog.DialogCode.Accepted: + name = dialog.get_campaign_name() + month = dialog.get_campaign_month() + if not self._validate_campaign_inputs(name, month): + return + self.model.update_campaign(item_id, name=name, month=month) + self.is_dirty = True + self.refresh_views() + + def delete_item(self, item_type: str, item_id: str): + reply = QMessageBox.question( + self.view, + "Confirm deletion", + "Are you sure you want to delete this item?", + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No + ) + if reply != QMessageBox.StandardButton.Yes: + return + if item_type == "player": + self.model.remove_player(item_id) + elif item_type == "war": + self.model.remove_war(item_id) + elif item_type == "campaign": + self.model.remove_campaign(item_id) + elif item_type == "round": + self.model.remove_round(item_id) + self.is_dirty = True + self.refresh_views() + diff --git a/src/warchron/model/campaign.py b/src/warchron/model/campaign.py index 76c9d9b..66dd16d 100644 --- a/src/warchron/model/campaign.py +++ b/src/warchron/model/campaign.py @@ -1,29 +1,27 @@ -from __future__ import annotations from uuid import uuid4 from datetime import datetime from warchron.model.round import Round class Campaign: - def __init__(self, name: str, month: int): - self.id: str = str(uuid4()) - self.name: str = name - self.month: int = month - self.participants = {} - self.sectors = {} + def __init__(self, name, month): + self.id = str(uuid4()) + self.name = name + self.month = month + self.entrants = {} self.rounds = [] self.is_over = False - def set_id(self, new_id: str): + def set_id(self, new_id): self.id = new_id - def set_name(self, new_name: str): + def set_name(self, new_name): self.name = new_name - def set_month(self, new_month: int): + def set_month(self, new_month): self.month = new_month - def set_state(self, new_state: bool): + def set_state(self, new_state): self.is_over = new_state def toDict(self): @@ -31,7 +29,7 @@ class Campaign: "id" : self.id, "name" : self.name, "month" : self.month, - # "participants" : self.participants, + # "entrants" : self.entrants, "rounds": [rnd.toDict() for rnd in self.rounds], "is_over": self.is_over } @@ -40,16 +38,13 @@ class Campaign: def fromDict(data: dict): camp = Campaign(name=data["name"], month=data["month"]) camp.set_id(data["id"]) - # camp.participants = data.get("participants", {}) + # camp.entrants = data.get("entrants", {}) for rnd_data in data.get("rounds", []): camp.rounds.append(Round.fromDict(rnd_data)) camp.set_state(data.get("is_over", False)) return camp - - def has_round(self, round_id: str) -> bool: - return any(r.id == round_id for r in self.rounds) - def get_round(self, round_id: str) -> Round: + def get_round(self, round_id) -> Round: return self.rounds[round_id] def get_all_rounds(self) -> list[Round]: @@ -64,25 +59,3 @@ class Campaign: rnd = next((r for r in self.rounds if r.id == round_id), None) if rnd: self.rounds.remove(rnd) - - def get_round_index(self, round_id: str) -> int: - for index, rnd in enumerate(self.rounds, start=1): - if rnd.id == round_id: - return index - raise KeyError("Round not found in campaign") - -class CampaignParticipant: - def __init__(self,war_participant_id: str, leader: str): - self.id: str = war_participant_id # ref to War.participants - self.leader: str = leader - self.victory_points = 0 - self.objective_points = {} - -class Sector: - def __init__(self, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str): - self.id: str = str(uuid4()) - self.name: str = name - self.major_objective_id: str = major_id - self.minor_objective_id: str = minor_id - self.influence_objective_id: str = influence_id - self.round_id: str = round_id diff --git a/src/warchron/model/model.py b/src/warchron/model/model.py index 6f8c222..f488eed 100644 --- a/src/warchron/model/model.py +++ b/src/warchron/model/model.py @@ -4,16 +4,14 @@ import shutil from datetime import datetime from warchron.model.player import Player -from warchron.model.war import War, Objective, WarParticipant +from warchron.model.war import War from warchron.model.campaign import Campaign from warchron.model.round import Round class Model: def __init__(self): - self.players: dict[str, Player] = {} - self.wars: dict[str, War] = {} - -# File management methods + self.players = {} + self.wars = {} def new(self): self.players.clear() @@ -55,8 +53,6 @@ class Model: with open(path, "w", encoding="utf-8") as f: json.dump(data, f, indent=2) -# Player methods - def add_player(self, name): player = Player(name) self.players[player.id] = player @@ -64,22 +60,17 @@ class Model: def get_player(self, id): return self.players[id] - - def get_player_name(self, player_id: str) -> str: - return self.players[player_id].name - + def update_player(self, player_id: str, *, name: str): player = self.get_player(player_id) player.set_name(name) + def delete_player(self, id): + del self.players[id] + def get_all_players(self) -> list[Player]: return list(self.players.values()) - def remove_player(self, player_id: str): - del self.players[player_id] - -# War methods - def get_default_war_values(self) -> dict: return { "year": datetime.now().year @@ -100,20 +91,6 @@ class Model: return war raise KeyError(f"Campaign {campaign_id} not found in any War") - def get_war_by_objective(self, objective_id: str) -> War: - for war in self.wars.values(): - for obj in war.objectives.values(): - if obj.id == objective_id: - return war - raise KeyError(f"Objective {objective_id} not found in any War") - - def get_war_by_war_participant(self, participant_id: str) -> War: - for war in self.wars.values(): - for part in war.participants.values(): - if part.id == participant_id: - return war - raise KeyError(f"Participant {participant_id} not found in any War") - def update_war(self, war_id: str, *, name: str, year: int): war = self.get_war(war_id) war.set_name(name) @@ -122,61 +99,6 @@ class Model: def get_all_wars(self) -> list[War]: return list(self.wars.values()) - def remove_war(self, war_id: str): - del self.wars[war_id] - -# Objective methods - - def add_objective(self, war_id: str, name: str, description: str) -> Objective: - war = self.get_war(war_id) - return war.add_objective(name, description) - - def get_objective(self, objective_id) -> Objective: - for war in self.wars.values(): - for obj in war.objectives.values(): - if obj.id == objective_id: - return obj - raise KeyError("Objective not found") - - def update_objective(self, objective_id: str, *, name: str, description: str): - war = self.get_war_by_objective(objective_id) - war.update_objective(objective_id, name=name, description=description) - - def remove_objective(self, objective_id: str): - war = self.get_war_by_objective(objective_id) - war.remove_objective(objective_id) - -# War participant methods - - def get_available_players(self, war_id: str) -> list[Player]: - war = self.get_war(war_id) - return [ - player - for player in self.players.values() - if not war.has_participant(player.id) - ] - - def add_war_participant(self, war_id: str, player_id: str, faction: str) -> Objective: - war = self.get_war(war_id) - return war.add_war_participant(player_id, faction) - - def get_war_participant(self, participant_id) -> WarParticipant: - for war in self.wars.values(): - for part in war.participants.values(): - if part.id == participant_id: - return part - raise KeyError("Participant not found") - - def update_war_participant(self, participant_id: str, *, faction: str): - war = self.get_war_by_war_participant(participant_id) - war.update_war_participant(participant_id, faction=faction) - - def remove_war_participant(self, participant_id: str): - war = self.get_war_by_war_participant(participant_id) - war.remove_war_participant(participant_id) - -# Campaign methods - def get_default_campaign_values(self, war_id: str) -> dict: war = self.get_war(war_id) return war.get_default_campaign_values() @@ -203,12 +125,6 @@ class Model: war = self.get_war_by_campaign(campaign_id) war.update_campaign(campaign_id, name=name, month=month) - def remove_campaign(self, campaign_id: str): - war = self.get_war_by_campaign(campaign_id) - war.remove_campaign(campaign_id) - -# Round methods - def add_round(self, campaign_id: str) -> Round: campaign = self.get_campaign(campaign_id) return campaign.add_round() @@ -220,11 +136,17 @@ class Model: if rnd.id == round_id: return rnd raise KeyError("Round not found") + + def remove_player(self, player_id: str): + del self.players[player_id] - def get_round_index(self, round_id: str) -> int: - camp = self.get_campaign_by_round(round_id) - return camp.get_round_index(round_id) + def remove_war(self, war_id: str): + del self.wars[war_id] + + def remove_campaign(self, campaign_id: str): + war = self.get_war_by_campaign(campaign_id) + war.remove_campaign(campaign_id) def remove_round(self, round_id: str): camp = self.get_campaign_by_round(round_id) - camp.remove_round(round_id) + camp.remove_round(round_id) \ No newline at end of file diff --git a/src/warchron/model/round.py b/src/warchron/model/round.py index a32d0d6..c80012f 100644 --- a/src/warchron/model/round.py +++ b/src/warchron/model/round.py @@ -2,16 +2,16 @@ from uuid import uuid4 class Round: def __init__(self): - self.id: str = str(uuid4()) + self.id = str(uuid4()) self.sectors = {} self.choices = {} self.battles = {} - self.is_over: bool = False + self.is_over = False - def set_id(self, new_id: str): + def set_id(self, new_id): self.id = new_id - def set_state(self, new_state: bool): + def set_state(self, new_state): self.is_over = new_state def toDict(self): diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py index 9e3b402..0633564 100644 --- a/src/warchron/model/war.py +++ b/src/warchron/model/war.py @@ -1,30 +1,27 @@ -from __future__ import annotations from uuid import uuid4 from datetime import datetime from warchron.model.campaign import Campaign - class War: - def __init__(self, name: str, year: int): - self.id: str = str(uuid4()) - self.name: str = name - self.year: int = year - self.participants: dict[str, WarParticipant] = {} - self.objectives: dict[str, Objective] = {} + def __init__(self, name, year): + self.id = str(uuid4()) + self.name = name + self.year = year + self.entrants = {} self.campaigns = [] - self.is_over: bool = False + self.is_over = False - def set_id(self, new_id: str): + def set_id(self, new_id): self.id = new_id - def set_name(self, new_name: str): + def set_name(self, new_name): self.name = new_name - def set_year(self, new_year: int): + def set_year(self, new_year): self.year = new_year - def set_state(self, new_state: bool): + def set_state(self, new_state): self.is_over = new_state def toDict(self): @@ -32,7 +29,7 @@ class War: "id" : self.id, "name" : self.name, "year" : self.year, - # "participants" : self.participants, + # "entrants" : self.entrants, "campaigns": [camp.toDict() for camp in self.campaigns], "is_over": self.is_over } @@ -41,66 +38,12 @@ class War: def fromDict(data: dict): war = War(name=data["name"], year=data["year"]) war.set_id(data["id"]) - # war.participants = data.get("participants", {}) + # war.entrants = data.get("entrants", {}) for camp_data in data.get("campaigns", []): war.campaigns.append(Campaign.fromDict(camp_data)) war.set_state(data.get("is_over", False)) return war -# Objective methods - - def add_objective(self, name: str, description: str) -> Objective: - objective = Objective(name, description) - self.objectives[objective.id] = objective - return objective - - def get_objective(self, id: str) -> Objective: - return self.objectives[id] - - def get_all_objectives(self) -> list[Objective]: - return list(self.objectives.values()) - - def update_objective(self, objective_id: str, *, name: str, description: str): - obj = self.get_objective(objective_id) - obj.set_name(name) - obj.set_description(description) - - def remove_objective(self, objective_id: str): - del self.objectives[objective_id] - -# War participant methods - - def get_all_war_participants_ids(self) -> set[str]: - return set(self.participants.keys()) - - def has_participant(self, player_id: str) -> bool: - return player_id in self.participants - - def add_war_participant(self, player_id: str, faction: str) -> WarParticipant: - if player_id in self.participants: - raise ValueError("Player already registered in this war") - participant = WarParticipant(player_id, faction) - self.participants[participant.id] = participant - return participant - - def get_war_participant(self, id: str) -> WarParticipant: - return self.participants[id] - - def get_all_war_participants(self) -> list[WarParticipant]: - return list(self.participants.values()) - - def update_war_participant(self, player_id: str, *, faction: str): - part = self.get_war_participant(player_id) - part.set_faction(faction) - - def remove_war_participant(self, player_id: str): - del self.participants[player_id] - -# Campaign methods - - def has_campaign(self, campaign_id: str) -> bool: - return any(c.id == campaign_id for c in self.campaigns) - def get_default_campaign_values(self) -> dict: return { "month": datetime.now().month @@ -113,7 +56,7 @@ class War: self.campaigns.append(campaign) return campaign - def get_campaign(self, campaign_id: str) -> Campaign: + def get_campaign(self, campaign_id) -> Campaign: for camp in self.campaigns: if camp.id == campaign_id: return camp @@ -136,31 +79,4 @@ class War: def remove_campaign(self, campaign_id: str): camp = self.get_campaign(campaign_id) - self.campaigns.remove(camp) - -class Objective: - def __init__(self, name: str, description: str): - self.id: str = str(uuid4()) - self.name: str = name - self.description: str = description - - def set_id(self, new_id: str): - self.id = new_id - - def set_name(self, new_name: str): - self.name = new_name - - def set_description(self, new_description: str): - self.description = new_description - -class WarParticipant: - def __init__(self, player_id: str, faction: str): - self.id: str = player_id # ref to Model.players - self.faction: str = faction - - def set_id(self, new_id: str): - self.id = new_id - - def set_faction(self, new_faction: str): - self.faction = new_faction - + self.campaigns.remove(camp) \ No newline at end of file diff --git a/src/warchron/view/ui/ui_main_window.py b/src/warchron/view/ui/ui_main_window.py index 5bfbf54..f9839e1 100644 --- a/src/warchron/view/ui/ui_main_window.py +++ b/src/warchron/view/ui/ui_main_window.py @@ -26,7 +26,7 @@ class Ui_MainWindow(object): self.playersTable = QtWidgets.QTableWidget(parent=self.playersTab) self.playersTable.setGeometry(QtCore.QRect(10, 60, 741, 431)) self.playersTable.setObjectName("playersTable") - self.playersTable.setColumnCount(4) + self.playersTable.setColumnCount(3) self.playersTable.setRowCount(0) item = QtWidgets.QTableWidgetItem() self.playersTable.setHorizontalHeaderItem(0, item) @@ -34,8 +34,6 @@ class Ui_MainWindow(object): self.playersTable.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.playersTable.setHorizontalHeaderItem(2, item) - item = QtWidgets.QTableWidgetItem() - self.playersTable.setHorizontalHeaderItem(3, item) self.addPlayerBtn = QtWidgets.QPushButton(parent=self.playersTab) self.addPlayerBtn.setGeometry(QtCore.QRect(20, 20, 75, 23)) self.addPlayerBtn.setObjectName("addPlayerBtn") @@ -47,6 +45,9 @@ class Ui_MainWindow(object): self.warsTree = QtWidgets.QTreeWidget(parent=self.warsTab) self.warsTree.setGeometry(QtCore.QRect(10, 60, 211, 431)) self.warsTree.setObjectName("warsTree") + item_0 = QtWidgets.QTreeWidgetItem(self.warsTree) + item_1 = QtWidgets.QTreeWidgetItem(item_0) + item_2 = QtWidgets.QTreeWidgetItem(item_1) self.addWarBtn = QtWidgets.QPushButton(parent=self.warsTab) self.addWarBtn.setGeometry(QtCore.QRect(20, 20, 75, 23)) self.addWarBtn.setObjectName("addWarBtn") @@ -81,50 +82,104 @@ class Ui_MainWindow(object): font.setPointSize(12) self.warYear.setFont(font) self.warYear.setObjectName("warYear") - self.labelParticipants = QtWidgets.QLabel(parent=self.pageWar) - self.labelParticipants.setGeometry(QtCore.QRect(10, 150, 111, 16)) - self.labelParticipants.setObjectName("labelParticipants") - self.addWarParticipantBtn = QtWidgets.QPushButton(parent=self.pageWar) - self.addWarParticipantBtn.setGeometry(QtCore.QRect(420, 270, 81, 23)) - self.addWarParticipantBtn.setObjectName("addWarParticipantBtn") - self.warParticipantsTable = QtWidgets.QTableWidget(parent=self.pageWar) - self.warParticipantsTable.setGeometry(QtCore.QRect(10, 170, 401, 211)) - self.warParticipantsTable.setObjectName("warParticipantsTable") - self.warParticipantsTable.setColumnCount(5) - self.warParticipantsTable.setRowCount(0) + self.labelEntrants = QtWidgets.QLabel(parent=self.pageWar) + self.labelEntrants.setGeometry(QtCore.QRect(10, 200, 47, 13)) + self.labelEntrants.setObjectName("labelEntrants") + self.addEntrantBtn = QtWidgets.QPushButton(parent=self.pageWar) + self.addEntrantBtn.setGeometry(QtCore.QRect(430, 310, 75, 23)) + self.addEntrantBtn.setObjectName("addEntrantBtn") + self.playersTable_2 = QtWidgets.QTableWidget(parent=self.pageWar) + self.playersTable_2.setGeometry(QtCore.QRect(10, 220, 401, 201)) + self.playersTable_2.setObjectName("playersTable_2") + self.playersTable_2.setColumnCount(4) + self.playersTable_2.setRowCount(6) item = QtWidgets.QTableWidgetItem() - self.warParticipantsTable.setHorizontalHeaderItem(0, item) + self.playersTable_2.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() - self.warParticipantsTable.setHorizontalHeaderItem(1, item) + self.playersTable_2.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() - self.warParticipantsTable.setHorizontalHeaderItem(2, item) + self.playersTable_2.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() - self.warParticipantsTable.setHorizontalHeaderItem(3, item) + self.playersTable_2.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() - self.warParticipantsTable.setHorizontalHeaderItem(4, item) - self.endWarBtn = QtWidgets.QPushButton(parent=self.pageWar) - self.endWarBtn.setEnabled(True) - self.endWarBtn.setGeometry(QtCore.QRect(230, 400, 61, 23)) - self.endWarBtn.setObjectName("endWarBtn") - self.objectivesTable = QtWidgets.QTableWidget(parent=self.pageWar) - self.objectivesTable.setGeometry(QtCore.QRect(10, 60, 401, 71)) - self.objectivesTable.setObjectName("objectivesTable") - self.objectivesTable.setColumnCount(2) - self.objectivesTable.setRowCount(0) + self.playersTable_2.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() - self.objectivesTable.setHorizontalHeaderItem(0, item) + self.playersTable_2.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() - self.objectivesTable.setHorizontalHeaderItem(1, item) - self.labelObjectives = QtWidgets.QLabel(parent=self.pageWar) - self.labelObjectives.setGeometry(QtCore.QRect(10, 40, 111, 20)) - self.labelObjectives.setObjectName("labelObjectives") - self.addObjectiveBtn = QtWidgets.QPushButton(parent=self.pageWar) - self.addObjectiveBtn.setEnabled(True) - self.addObjectiveBtn.setGeometry(QtCore.QRect(420, 80, 91, 23)) + self.playersTable_2.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(0, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(0, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(1, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(1, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(2, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(2, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(3, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(3, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(3, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(3, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(4, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(4, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(4, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(4, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(5, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(5, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(5, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_2.setItem(5, 3, item) + self.addCampaignBtn_2 = QtWidgets.QPushButton(parent=self.pageWar) + self.addCampaignBtn_2.setEnabled(True) + self.addCampaignBtn_2.setGeometry(QtCore.QRect(230, 120, 91, 23)) font = QtGui.QFont() font.setPointSize(10) - self.addObjectiveBtn.setFont(font) - self.addObjectiveBtn.setObjectName("addObjectiveBtn") + self.addCampaignBtn_2.setFont(font) + self.addCampaignBtn_2.setObjectName("addCampaignBtn_2") + self.listWidget = QtWidgets.QListWidget(parent=self.pageWar) + self.listWidget.setGeometry(QtCore.QRect(10, 80, 211, 91)) + self.listWidget.setObjectName("listWidget") + item = QtWidgets.QListWidgetItem() + self.listWidget.addItem(item) + self.labelCampaigns = QtWidgets.QLabel(parent=self.pageWar) + self.labelCampaigns.setGeometry(QtCore.QRect(10, 60, 61, 16)) + self.labelCampaigns.setObjectName("labelCampaigns") + self.addRoundBtn_8 = QtWidgets.QPushButton(parent=self.pageWar) + self.addRoundBtn_8.setEnabled(True) + self.addRoundBtn_8.setGeometry(QtCore.QRect(410, 400, 91, 23)) + self.addRoundBtn_8.setObjectName("addRoundBtn_8") self.selectedDetailsStack.addWidget(self.pageWar) self.pageCampaign = QtWidgets.QWidget() self.pageCampaign.setObjectName("pageCampaign") @@ -134,106 +189,350 @@ class Ui_MainWindow(object): font.setPointSize(12) self.campaignName.setFont(font) self.campaignName.setObjectName("campaignName") - self.labelSectors = QtWidgets.QLabel(parent=self.pageCampaign) - self.labelSectors.setGeometry(QtCore.QRect(10, 40, 91, 16)) - self.labelSectors.setObjectName("labelSectors") - self.addCampaignParticipantBtn = QtWidgets.QPushButton(parent=self.pageCampaign) - self.addCampaignParticipantBtn.setGeometry(QtCore.QRect(420, 270, 75, 23)) - self.addCampaignParticipantBtn.setObjectName("addCampaignParticipantBtn") + self.labelRound = QtWidgets.QLabel(parent=self.pageCampaign) + self.labelRound.setGeometry(QtCore.QRect(10, 50, 91, 16)) + self.labelRound.setObjectName("labelRound") + self.addEntrantBtn_2 = QtWidgets.QPushButton(parent=self.pageCampaign) + self.addEntrantBtn_2.setGeometry(QtCore.QRect(420, 310, 75, 23)) + self.addEntrantBtn_2.setObjectName("addEntrantBtn_2") self.campaignMonth = QtWidgets.QLabel(parent=self.pageCampaign) self.campaignMonth.setGeometry(QtCore.QRect(280, 10, 121, 16)) font = QtGui.QFont() font.setPointSize(12) self.campaignMonth.setFont(font) self.campaignMonth.setObjectName("campaignMonth") - self.labelParticipants_2 = QtWidgets.QLabel(parent=self.pageCampaign) - self.labelParticipants_2.setGeometry(QtCore.QRect(10, 180, 47, 13)) - self.labelParticipants_2.setObjectName("labelParticipants_2") - self.campaignParticipantsTable = QtWidgets.QTableWidget(parent=self.pageCampaign) - self.campaignParticipantsTable.setGeometry(QtCore.QRect(10, 200, 401, 181)) - self.campaignParticipantsTable.setObjectName("campaignParticipantsTable") - self.campaignParticipantsTable.setColumnCount(4) - self.campaignParticipantsTable.setRowCount(0) + self.labelEntrants_2 = QtWidgets.QLabel(parent=self.pageCampaign) + self.labelEntrants_2.setGeometry(QtCore.QRect(10, 200, 47, 13)) + self.labelEntrants_2.setObjectName("labelEntrants_2") + self.playersTable_3 = QtWidgets.QTableWidget(parent=self.pageCampaign) + self.playersTable_3.setGeometry(QtCore.QRect(10, 220, 401, 201)) + self.playersTable_3.setObjectName("playersTable_3") + self.playersTable_3.setColumnCount(4) + self.playersTable_3.setRowCount(6) item = QtWidgets.QTableWidgetItem() - self.campaignParticipantsTable.setHorizontalHeaderItem(0, item) + self.playersTable_3.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() - self.campaignParticipantsTable.setHorizontalHeaderItem(1, item) + self.playersTable_3.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() - self.campaignParticipantsTable.setHorizontalHeaderItem(2, item) + self.playersTable_3.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() - self.campaignParticipantsTable.setHorizontalHeaderItem(3, item) - self.sectorsTable = QtWidgets.QTableWidget(parent=self.pageCampaign) - self.sectorsTable.setGeometry(QtCore.QRect(10, 60, 401, 101)) - self.sectorsTable.setObjectName("sectorsTable") - self.sectorsTable.setColumnCount(5) - self.sectorsTable.setRowCount(0) + self.playersTable_3.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() - self.sectorsTable.setHorizontalHeaderItem(0, item) + self.playersTable_3.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() - self.sectorsTable.setHorizontalHeaderItem(1, item) + self.playersTable_3.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() - self.sectorsTable.setHorizontalHeaderItem(2, item) + self.playersTable_3.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() - self.sectorsTable.setHorizontalHeaderItem(3, item) + self.playersTable_3.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() - self.sectorsTable.setHorizontalHeaderItem(4, item) + self.playersTable_3.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(0, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(0, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(1, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(1, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(2, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(2, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(3, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(3, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(3, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(3, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(4, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(4, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(4, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(4, 3, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(5, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(5, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(5, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_3.setItem(5, 3, item) + self.addRoundBtn_2 = QtWidgets.QPushButton(parent=self.pageCampaign) + self.addRoundBtn_2.setEnabled(True) + self.addRoundBtn_2.setGeometry(QtCore.QRect(360, 90, 91, 23)) + self.addRoundBtn_2.setObjectName("addRoundBtn_2") + self.playersTable_4 = QtWidgets.QTableWidget(parent=self.pageCampaign) + self.playersTable_4.setGeometry(QtCore.QRect(10, 80, 331, 91)) + self.playersTable_4.setObjectName("playersTable_4") + self.playersTable_4.setColumnCount(3) + self.playersTable_4.setRowCount(3) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setVerticalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setVerticalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(0, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(1, 2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_4.setItem(2, 2, item) self.addSectorBtn = QtWidgets.QPushButton(parent=self.pageCampaign) - self.addSectorBtn.setEnabled(True) - self.addSectorBtn.setGeometry(QtCore.QRect(420, 110, 71, 23)) + self.addSectorBtn.setEnabled(False) + self.addSectorBtn.setGeometry(QtCore.QRect(360, 130, 91, 23)) self.addSectorBtn.setObjectName("addSectorBtn") self.endCampaignBtn = QtWidgets.QPushButton(parent=self.pageCampaign) self.endCampaignBtn.setEnabled(True) - self.endCampaignBtn.setGeometry(QtCore.QRect(210, 400, 91, 23)) + self.endCampaignBtn.setGeometry(QtCore.QRect(410, 400, 91, 23)) self.endCampaignBtn.setObjectName("endCampaignBtn") self.selectedDetailsStack.addWidget(self.pageCampaign) self.pageRound = QtWidgets.QWidget() self.pageRound.setObjectName("pageRound") self.labelChoices = QtWidgets.QLabel(parent=self.pageRound) - self.labelChoices.setGeometry(QtCore.QRect(10, 40, 91, 16)) + self.labelChoices.setGeometry(QtCore.QRect(10, 170, 91, 16)) self.labelChoices.setObjectName("labelChoices") self.choicesTable = QtWidgets.QTableWidget(parent=self.pageRound) - self.choicesTable.setGeometry(QtCore.QRect(10, 60, 301, 141)) + self.choicesTable.setGeometry(QtCore.QRect(10, 190, 271, 91)) self.choicesTable.setObjectName("choicesTable") - self.choicesTable.setColumnCount(3) - self.choicesTable.setRowCount(0) + self.choicesTable.setColumnCount(2) + self.choicesTable.setRowCount(6) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.choicesTable.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.choicesTable.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() - self.choicesTable.setHorizontalHeaderItem(2, item) + self.choicesTable.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(3, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(3, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(4, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(4, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(5, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable.setItem(5, 1, item) self.roundNb = QtWidgets.QLabel(parent=self.pageRound) self.roundNb.setGeometry(QtCore.QRect(10, 10, 241, 16)) font = QtGui.QFont() font.setPointSize(12) self.roundNb.setFont(font) self.roundNb.setObjectName("roundNb") - self.resolvePairingBtn = QtWidgets.QPushButton(parent=self.pageRound) - self.resolvePairingBtn.setEnabled(True) - self.resolvePairingBtn.setGeometry(QtCore.QRect(320, 110, 91, 23)) - self.resolvePairingBtn.setObjectName("resolvePairingBtn") - self.battlesTable = QtWidgets.QTableWidget(parent=self.pageRound) - self.battlesTable.setGeometry(QtCore.QRect(10, 240, 301, 111)) - self.battlesTable.setObjectName("battlesTable") - self.battlesTable.setColumnCount(3) - self.battlesTable.setRowCount(0) + self.resolveBtn = QtWidgets.QPushButton(parent=self.pageRound) + self.resolveBtn.setEnabled(True) + self.resolveBtn.setGeometry(QtCore.QRect(290, 220, 91, 23)) + self.resolveBtn.setObjectName("resolveBtn") + self.playersTable_6 = QtWidgets.QTableWidget(parent=self.pageRound) + self.playersTable_6.setGeometry(QtCore.QRect(10, 320, 271, 91)) + self.playersTable_6.setObjectName("playersTable_6") + self.playersTable_6.setColumnCount(2) + self.playersTable_6.setRowCount(3) item = QtWidgets.QTableWidgetItem() - self.battlesTable.setHorizontalHeaderItem(0, item) + self.playersTable_6.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() - self.battlesTable.setHorizontalHeaderItem(1, item) + self.playersTable_6.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() - self.battlesTable.setHorizontalHeaderItem(2, item) - self.enterResultBtn = QtWidgets.QPushButton(parent=self.pageRound) - self.enterResultBtn.setEnabled(True) - self.enterResultBtn.setGeometry(QtCore.QRect(320, 290, 91, 23)) - self.enterResultBtn.setObjectName("enterResultBtn") + self.playersTable_6.setVerticalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.playersTable_6.setItem(2, 1, item) + self.resultBtn = QtWidgets.QPushButton(parent=self.pageRound) + self.resultBtn.setEnabled(True) + self.resultBtn.setGeometry(QtCore.QRect(290, 360, 91, 23)) + self.resultBtn.setObjectName("resultBtn") self.endRoundBtn = QtWidgets.QPushButton(parent=self.pageRound) self.endRoundBtn.setEnabled(True) - self.endRoundBtn.setGeometry(QtCore.QRect(220, 400, 71, 23)) + self.endRoundBtn.setGeometry(QtCore.QRect(410, 400, 91, 23)) self.endRoundBtn.setObjectName("endRoundBtn") - self.labelBattles = QtWidgets.QLabel(parent=self.pageRound) - self.labelBattles.setGeometry(QtCore.QRect(10, 220, 91, 16)) - self.labelBattles.setObjectName("labelBattles") + self.labelChoices_2 = QtWidgets.QLabel(parent=self.pageRound) + self.labelChoices_2.setGeometry(QtCore.QRect(10, 300, 91, 16)) + self.labelChoices_2.setObjectName("labelChoices_2") + self.choicesTable_2 = QtWidgets.QTableWidget(parent=self.pageRound) + self.choicesTable_2.setGeometry(QtCore.QRect(10, 70, 421, 91)) + self.choicesTable_2.setObjectName("choicesTable_2") + self.choicesTable_2.setColumnCount(4) + self.choicesTable_2.setRowCount(9) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(5, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(6, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(7, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setVerticalHeaderItem(8, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(0, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(0, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(1, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(1, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(2, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(2, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(3, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(3, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(3, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(3, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(4, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(4, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(4, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(4, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(5, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(5, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(5, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(5, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(6, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(6, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(6, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(6, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(7, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(7, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(7, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(7, 3, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(8, 0, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(8, 1, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(8, 2, item) + item = QtWidgets.QTableWidgetItem() + self.choicesTable_2.setItem(8, 3, item) + self.labelChoices_3 = QtWidgets.QLabel(parent=self.pageRound) + self.labelChoices_3.setGeometry(QtCore.QRect(10, 40, 91, 16)) + self.labelChoices_3.setObjectName("labelChoices_3") + self.addSectorBtn_2 = QtWidgets.QPushButton(parent=self.pageRound) + self.addSectorBtn_2.setEnabled(True) + self.addSectorBtn_2.setGeometry(QtCore.QRect(430, 100, 91, 23)) + self.addSectorBtn_2.setObjectName("addSectorBtn_2") self.selectedDetailsStack.addWidget(self.pageRound) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/swords-small.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) @@ -327,78 +626,342 @@ class Ui_MainWindow(object): item.setText(_translate("MainWindow", "Wars")) item = self.playersTable.horizontalHeaderItem(2) item.setText(_translate("MainWindow", "Wins")) - item = self.playersTable.horizontalHeaderItem(3) - item.setText(_translate("MainWindow", "Rewards")) self.addPlayerBtn.setText(_translate("MainWindow", "Add player")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.playersTab), _translate("MainWindow", "Players")) + __sortingEnabled = self.warsTree.isSortingEnabled() + self.warsTree.setSortingEnabled(False) + self.warsTree.topLevelItem(0).setText(0, _translate("MainWindow", "warItem")) + self.warsTree.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "campaignItem")) + self.warsTree.topLevelItem(0).child(0).child(0).setText(0, _translate("MainWindow", "roundItem")) + self.warsTree.setSortingEnabled(__sortingEnabled) self.addWarBtn.setText(_translate("MainWindow", "Add war")) self.addCampaignBtn.setText(_translate("MainWindow", "Add Campaign")) self.addRoundBtn.setText(_translate("MainWindow", "Add Round")) self.labelSelect.setText(_translate("MainWindow", "Select an element within the tree to show/edit details.")) self.warName.setText(_translate("MainWindow", "warName")) self.warYear.setText(_translate("MainWindow", "warYear")) - self.labelParticipants.setText(_translate("MainWindow", "Participants")) - self.addWarParticipantBtn.setText(_translate("MainWindow", "Add participant")) - item = self.warParticipantsTable.horizontalHeaderItem(0) + self.labelEntrants.setText(_translate("MainWindow", "Entrants")) + self.addEntrantBtn.setText(_translate("MainWindow", "Add entrant")) + item = self.playersTable_2.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Name")) - item = self.warParticipantsTable.horizontalHeaderItem(1) + item = self.playersTable_2.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Faction")) - item = self.warParticipantsTable.horizontalHeaderItem(2) + item = self.playersTable_2.horizontalHeaderItem(2) item.setText(_translate("MainWindow", "Campaigns")) - item = self.warParticipantsTable.horizontalHeaderItem(3) - item.setText(_translate("MainWindow", "Victory pts.")) - item = self.warParticipantsTable.horizontalHeaderItem(4) - item.setText(_translate("MainWindow", "Theme pts")) - self.endWarBtn.setText(_translate("MainWindow", "End war")) - item = self.objectivesTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Name")) - item = self.objectivesTable.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "Description")) - self.labelObjectives.setText(_translate("MainWindow", "Objectives")) - self.addObjectiveBtn.setText(_translate("MainWindow", "Add objective")) + item = self.playersTable_2.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Wins")) + __sortingEnabled = self.playersTable_2.isSortingEnabled() + self.playersTable_2.setSortingEnabled(False) + item = self.playersTable_2.item(0, 0) + item.setText(_translate("MainWindow", "Alice")) + item = self.playersTable_2.item(0, 1) + item.setText(_translate("MainWindow", "army A")) + item = self.playersTable_2.item(0, 2) + item.setText(_translate("MainWindow", "2")) + item = self.playersTable_2.item(0, 3) + item.setText(_translate("MainWindow", "1")) + item = self.playersTable_2.item(1, 0) + item.setText(_translate("MainWindow", "Bob")) + item = self.playersTable_2.item(1, 1) + item.setText(_translate("MainWindow", "army B")) + item = self.playersTable_2.item(1, 2) + item.setText(_translate("MainWindow", "2")) + item = self.playersTable_2.item(1, 3) + item.setText(_translate("MainWindow", "1")) + item = self.playersTable_2.item(2, 0) + item.setText(_translate("MainWindow", "Charlie")) + item = self.playersTable_2.item(2, 1) + item.setText(_translate("MainWindow", "army C")) + item = self.playersTable_2.item(2, 2) + item.setText(_translate("MainWindow", "2")) + item = self.playersTable_2.item(2, 3) + item.setText(_translate("MainWindow", "0")) + item = self.playersTable_2.item(3, 0) + item.setText(_translate("MainWindow", "Dave")) + item = self.playersTable_2.item(3, 1) + item.setText(_translate("MainWindow", "army D")) + item = self.playersTable_2.item(3, 2) + item.setText(_translate("MainWindow", "1")) + item = self.playersTable_2.item(3, 3) + item.setText(_translate("MainWindow", "0")) + item = self.playersTable_2.item(4, 0) + item.setText(_translate("MainWindow", "Eve")) + item = self.playersTable_2.item(4, 1) + item.setText(_translate("MainWindow", "army E")) + item = self.playersTable_2.item(4, 2) + item.setText(_translate("MainWindow", "1")) + item = self.playersTable_2.item(4, 3) + item.setText(_translate("MainWindow", "0")) + item = self.playersTable_2.item(5, 0) + item.setText(_translate("MainWindow", "Fred")) + item = self.playersTable_2.item(5, 1) + item.setText(_translate("MainWindow", "army F")) + item = self.playersTable_2.item(5, 2) + item.setText(_translate("MainWindow", "2")) + item = self.playersTable_2.item(5, 3) + item.setText(_translate("MainWindow", "0")) + self.playersTable_2.setSortingEnabled(__sortingEnabled) + self.addCampaignBtn_2.setText(_translate("MainWindow", "Add Campaign")) + __sortingEnabled = self.listWidget.isSortingEnabled() + self.listWidget.setSortingEnabled(False) + item = self.listWidget.item(0) + item.setText(_translate("MainWindow", "campaignName")) + self.listWidget.setSortingEnabled(__sortingEnabled) + self.labelCampaigns.setText(_translate("MainWindow", "Campaigns")) + self.addRoundBtn_8.setText(_translate("MainWindow", "End war")) self.campaignName.setText(_translate("MainWindow", "campaignName")) - self.labelSectors.setText(_translate("MainWindow", "Sectors")) - self.addCampaignParticipantBtn.setText(_translate("MainWindow", "Add participant")) + self.labelRound.setText(_translate("MainWindow", "Sectors by round")) + self.addEntrantBtn_2.setText(_translate("MainWindow", "Add entrant")) self.campaignMonth.setText(_translate("MainWindow", "campaignMonth")) - self.labelParticipants_2.setText(_translate("MainWindow", "Participants")) - item = self.campaignParticipantsTable.horizontalHeaderItem(0) + self.labelEntrants_2.setText(_translate("MainWindow", "Entrants")) + item = self.playersTable_3.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Name")) - item = self.campaignParticipantsTable.horizontalHeaderItem(1) + item = self.playersTable_3.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Leader")) - item = self.campaignParticipantsTable.horizontalHeaderItem(2) - item.setText(_translate("MainWindow", "Victory pts.")) - item = self.campaignParticipantsTable.horizontalHeaderItem(3) - item.setText(_translate("MainWindow", "Theme pts.")) - item = self.sectorsTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Name")) - item = self.sectorsTable.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "Round")) - item = self.sectorsTable.horizontalHeaderItem(2) - item.setText(_translate("MainWindow", "Major obj.")) - item = self.sectorsTable.horizontalHeaderItem(3) - item.setText(_translate("MainWindow", "Minor opp.")) - item = self.sectorsTable.horizontalHeaderItem(4) - item.setText(_translate("MainWindow", "Influence imp.")) + item = self.playersTable_3.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Battles")) + item = self.playersTable_3.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Wins")) + __sortingEnabled = self.playersTable_3.isSortingEnabled() + self.playersTable_3.setSortingEnabled(False) + item = self.playersTable_3.item(0, 0) + item.setText(_translate("MainWindow", "Alice")) + item = self.playersTable_3.item(0, 1) + item.setText(_translate("MainWindow", "boss A")) + item = self.playersTable_3.item(0, 2) + item.setText(_translate("MainWindow", "6")) + item = self.playersTable_3.item(0, 3) + item.setText(_translate("MainWindow", "5")) + item = self.playersTable_3.item(1, 0) + item.setText(_translate("MainWindow", "Bob")) + item = self.playersTable_3.item(1, 1) + item.setText(_translate("MainWindow", "boss B")) + item = self.playersTable_3.item(1, 2) + item.setText(_translate("MainWindow", "6")) + item = self.playersTable_3.item(1, 3) + item.setText(_translate("MainWindow", "5")) + item = self.playersTable_3.item(2, 0) + item.setText(_translate("MainWindow", "Charlie")) + item = self.playersTable_3.item(2, 1) + item.setText(_translate("MainWindow", "boss C")) + item = self.playersTable_3.item(2, 2) + item.setText(_translate("MainWindow", "6")) + item = self.playersTable_3.item(2, 3) + item.setText(_translate("MainWindow", "3")) + item = self.playersTable_3.item(3, 0) + item.setText(_translate("MainWindow", "Dave")) + item = self.playersTable_3.item(3, 1) + item.setText(_translate("MainWindow", "boss D")) + item = self.playersTable_3.item(3, 2) + item.setText(_translate("MainWindow", "3")) + item = self.playersTable_3.item(3, 3) + item.setText(_translate("MainWindow", "2")) + item = self.playersTable_3.item(4, 0) + item.setText(_translate("MainWindow", "Eve")) + item = self.playersTable_3.item(4, 1) + item.setText(_translate("MainWindow", "boss E")) + item = self.playersTable_3.item(4, 2) + item.setText(_translate("MainWindow", "3")) + item = self.playersTable_3.item(4, 3) + item.setText(_translate("MainWindow", "1")) + item = self.playersTable_3.item(5, 0) + item.setText(_translate("MainWindow", "Fred")) + item = self.playersTable_3.item(5, 1) + item.setText(_translate("MainWindow", "boss F")) + item = self.playersTable_3.item(5, 2) + item.setText(_translate("MainWindow", "6")) + item = self.playersTable_3.item(5, 3) + item.setText(_translate("MainWindow", "2")) + self.playersTable_3.setSortingEnabled(__sortingEnabled) + self.addRoundBtn_2.setText(_translate("MainWindow", "Add Round")) + item = self.playersTable_4.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Round 1")) + item = self.playersTable_4.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Round 2")) + item = self.playersTable_4.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Round 3")) + __sortingEnabled = self.playersTable_4.isSortingEnabled() + self.playersTable_4.setSortingEnabled(False) + item = self.playersTable_4.item(0, 0) + item.setText(_translate("MainWindow", "Zone A")) + item = self.playersTable_4.item(0, 1) + item.setText(_translate("MainWindow", "Zone D")) + item = self.playersTable_4.item(0, 2) + item.setText(_translate("MainWindow", "Zone G")) + item = self.playersTable_4.item(1, 0) + item.setText(_translate("MainWindow", "Zone B")) + item = self.playersTable_4.item(1, 1) + item.setText(_translate("MainWindow", "Zone E")) + item = self.playersTable_4.item(1, 2) + item.setText(_translate("MainWindow", "Zone H")) + item = self.playersTable_4.item(2, 0) + item.setText(_translate("MainWindow", "Zone C")) + item = self.playersTable_4.item(2, 1) + item.setText(_translate("MainWindow", "Zone F")) + item = self.playersTable_4.item(2, 2) + item.setText(_translate("MainWindow", "Zone I")) + self.playersTable_4.setSortingEnabled(__sortingEnabled) self.addSectorBtn.setText(_translate("MainWindow", "Add Sector")) self.endCampaignBtn.setText(_translate("MainWindow", "End campaign")) self.labelChoices.setText(_translate("MainWindow", "Choices")) + item = self.choicesTable.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "Alice")) + item = self.choicesTable.verticalHeaderItem(1) + item.setText(_translate("MainWindow", "Bob")) + item = self.choicesTable.verticalHeaderItem(2) + item.setText(_translate("MainWindow", "Charlie")) + item = self.choicesTable.verticalHeaderItem(3) + item.setText(_translate("MainWindow", "Dave")) + item = self.choicesTable.verticalHeaderItem(4) + item.setText(_translate("MainWindow", "Eve")) + item = self.choicesTable.verticalHeaderItem(5) + item.setText(_translate("MainWindow", "Fred")) item = self.choicesTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Player")) - item = self.choicesTable.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Prioritary")) - item = self.choicesTable.horizontalHeaderItem(2) + item = self.choicesTable.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Secondary")) + __sortingEnabled = self.choicesTable.isSortingEnabled() + self.choicesTable.setSortingEnabled(False) + item = self.choicesTable.item(0, 0) + item.setText(_translate("MainWindow", "Zone A")) + item = self.choicesTable.item(0, 1) + item.setText(_translate("MainWindow", "Zone C")) + item = self.choicesTable.item(1, 0) + item.setText(_translate("MainWindow", "Zone B")) + item = self.choicesTable.item(1, 1) + item.setText(_translate("MainWindow", "Zone C")) + item = self.choicesTable.item(2, 0) + item.setText(_translate("MainWindow", "Zone A")) + item = self.choicesTable.item(2, 1) + item.setText(_translate("MainWindow", "Zone B")) + item = self.choicesTable.item(3, 0) + item.setText(_translate("MainWindow", "Zone C")) + item = self.choicesTable.item(3, 1) + item.setText(_translate("MainWindow", "Zone A")) + item = self.choicesTable.item(4, 0) + item.setText(_translate("MainWindow", "Zone C")) + item = self.choicesTable.item(4, 1) + item.setText(_translate("MainWindow", "Zone B")) + item = self.choicesTable.item(5, 0) + item.setText(_translate("MainWindow", "Zone B")) + item = self.choicesTable.item(5, 1) + item.setText(_translate("MainWindow", "Zone C")) + self.choicesTable.setSortingEnabled(__sortingEnabled) self.roundNb.setText(_translate("MainWindow", "Round Nb")) - self.resolvePairingBtn.setText(_translate("MainWindow", "Resolve pairing")) - item = self.battlesTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Sector")) - item = self.battlesTable.horizontalHeaderItem(1) + self.resolveBtn.setText(_translate("MainWindow", "Resolve pairing")) + item = self.playersTable_6.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "Zone A")) + item = self.playersTable_6.verticalHeaderItem(1) + item.setText(_translate("MainWindow", "Zone B")) + item = self.playersTable_6.verticalHeaderItem(2) + item.setText(_translate("MainWindow", "Zone C")) + item = self.playersTable_6.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Player 1")) - item = self.battlesTable.horizontalHeaderItem(2) + item = self.playersTable_6.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Player 2")) - self.enterResultBtn.setText(_translate("MainWindow", "Enter results")) + __sortingEnabled = self.playersTable_6.isSortingEnabled() + self.playersTable_6.setSortingEnabled(False) + item = self.playersTable_6.item(0, 0) + item.setText(_translate("MainWindow", "Alice")) + item = self.playersTable_6.item(0, 1) + item.setText(_translate("MainWindow", "Charlie")) + item = self.playersTable_6.item(1, 0) + item.setText(_translate("MainWindow", "Bob")) + item = self.playersTable_6.item(1, 1) + item.setText(_translate("MainWindow", "Fred")) + item = self.playersTable_6.item(2, 0) + item.setText(_translate("MainWindow", "Dave")) + item = self.playersTable_6.item(2, 1) + item.setText(_translate("MainWindow", "Eve")) + self.playersTable_6.setSortingEnabled(__sortingEnabled) + self.resultBtn.setText(_translate("MainWindow", "Enter results")) self.endRoundBtn.setText(_translate("MainWindow", "End round")) - self.labelBattles.setText(_translate("MainWindow", "Battles")) + self.labelChoices_2.setText(_translate("MainWindow", "Battles")) + item = self.choicesTable_2.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Name")) + item = self.choicesTable_2.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Major")) + item = self.choicesTable_2.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Minor")) + item = self.choicesTable_2.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Influence")) + __sortingEnabled = self.choicesTable_2.isSortingEnabled() + self.choicesTable_2.setSortingEnabled(False) + item = self.choicesTable_2.item(0, 0) + item.setText(_translate("MainWindow", "Zone A")) + item = self.choicesTable_2.item(0, 1) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(0, 2) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(0, 3) + item.setText(_translate("MainWindow", "False")) + item = self.choicesTable_2.item(1, 0) + item.setText(_translate("MainWindow", "Zone B")) + item = self.choicesTable_2.item(1, 1) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(1, 2) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(1, 3) + item.setText(_translate("MainWindow", "True")) + item = self.choicesTable_2.item(2, 0) + item.setText(_translate("MainWindow", "Zone C")) + item = self.choicesTable_2.item(2, 1) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(2, 2) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(2, 3) + item.setText(_translate("MainWindow", "False")) + item = self.choicesTable_2.item(3, 0) + item.setText(_translate("MainWindow", "Zone D")) + item = self.choicesTable_2.item(3, 1) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(3, 2) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(3, 3) + item.setText(_translate("MainWindow", "True")) + item = self.choicesTable_2.item(4, 0) + item.setText(_translate("MainWindow", "Zone E")) + item = self.choicesTable_2.item(4, 1) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(4, 2) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(4, 3) + item.setText(_translate("MainWindow", "False")) + item = self.choicesTable_2.item(5, 0) + item.setText(_translate("MainWindow", "Zone F")) + item = self.choicesTable_2.item(5, 1) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(5, 2) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(5, 3) + item.setText(_translate("MainWindow", "False")) + item = self.choicesTable_2.item(6, 0) + item.setText(_translate("MainWindow", "Zone G")) + item = self.choicesTable_2.item(6, 1) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(6, 2) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(6, 3) + item.setText(_translate("MainWindow", "True")) + item = self.choicesTable_2.item(7, 0) + item.setText(_translate("MainWindow", "Zone H")) + item = self.choicesTable_2.item(7, 1) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(7, 2) + item.setText(_translate("MainWindow", "type3")) + item = self.choicesTable_2.item(7, 3) + item.setText(_translate("MainWindow", "False")) + item = self.choicesTable_2.item(8, 0) + item.setText(_translate("MainWindow", "Zone I")) + item = self.choicesTable_2.item(8, 1) + item.setText(_translate("MainWindow", "type1")) + item = self.choicesTable_2.item(8, 2) + item.setText(_translate("MainWindow", "type2")) + item = self.choicesTable_2.item(8, 3) + item.setText(_translate("MainWindow", "False")) + self.choicesTable_2.setSortingEnabled(__sortingEnabled) + self.labelChoices_3.setText(_translate("MainWindow", "Choices")) + self.addSectorBtn_2.setText(_translate("MainWindow", "Add sector")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.warsTab), _translate("MainWindow", "Wars")) self.menuFile.setTitle(_translate("MainWindow", "File")) self.menuEdit.setTitle(_translate("MainWindow", "Edit")) diff --git a/src/warchron/view/ui/ui_main_window.ui b/src/warchron/view/ui/ui_main_window.ui index 2cb8313..8a1bc4d 100644 --- a/src/warchron/view/ui/ui_main_window.ui +++ b/src/warchron/view/ui/ui_main_window.ui @@ -62,11 +62,6 @@ Wins - - - Rewards - - @@ -104,6 +99,21 @@ + + + warItem + + + + campaignItem + + + + roundItem + + + + @@ -214,41 +224,71 @@ warYear - + 10 - 150 - 111 - 16 + 200 + 47 + 13 - Participants + Entrants - + - 420 - 270 - 81 + 430 + 310 + 75 23 - Add participant + Add entrant - + 10 - 170 + 220 401 - 211 + 201 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name @@ -266,72 +306,138 @@ - Victory pts. + Wins - + - Theme pts + Alice - + + + + army A + + + + + 2 + + + + + 1 + + + + + Bob + + + + + army B + + + + + 2 + + + + + 1 + + + + + Charlie + + + + + army C + + + + + 2 + + + + + 0 + + + + + Dave + + + + + army D + + + + + 1 + + + + + 0 + + + + + Eve + + + + + army E + + + + + 1 + + + + + 0 + + + + + Fred + + + + + army F + + + + + 2 + + + + + 0 + + - + true 230 - 400 - 61 - 23 - - - - End war - - - - - - 10 - 60 - 401 - 71 - - - - - Name - - - - - Description - - - - - - - 10 - 40 - 111 - 20 - - - - Objectives - - - - - true - - - - 420 - 80 + 120 91 23 @@ -342,7 +448,51 @@ - Add objective + Add Campaign + + + + + + 10 + 80 + 211 + 91 + + + + + campaignName + + + + + + + 10 + 60 + 61 + 16 + + + + Campaigns + + + + + true + + + + 410 + 400 + 91 + 23 + + + + End war @@ -365,30 +515,30 @@ campaignName - + 10 - 40 + 50 91 16 - Sectors + Sectors by round - + 420 - 270 + 310 75 23 - Add participant + Add entrant @@ -409,28 +559,58 @@ campaignMonth - + 10 - 180 + 200 47 13 - Participants + Entrants - + 10 - 200 + 220 401 - 181 + 201 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name @@ -443,59 +623,245 @@ - Victory pts. + Battles - Theme pts. + Wins + + + Alice + + + + + boss A + + + + + 6 + + + + + 5 + + + + + Bob + + + + + boss B + + + + + 6 + + + + + 5 + + + + + Charlie + + + + + boss C + + + + + 6 + + + + + 3 + + + + + Dave + + + + + boss D + + + + + 3 + + + + + 2 + + + + + Eve + + + + + boss E + + + + + 3 + + + + + 1 + + + + + Fred + + + + + boss F + + + + + 6 + + + + + 2 + + - - - - 10 - 60 - 401 - 101 - - - - - Name - - - - - Round - - - - - Major obj. - - - - - Minor opp. - - - - - Influence imp. - - - - + true - 420 - 110 - 71 + 360 + 90 + 91 + 23 + + + + Add Round + + + + + + 10 + 80 + 331 + 91 + + + + + + + + + + + + + + + + + + + + Round 1 + + + + + Round 2 + + + + + Round 3 + + + + + Zone A + + + + + Zone D + + + + + Zone G + + + + + Zone B + + + + + Zone E + + + + + Zone H + + + + + Zone C + + + + + Zone F + + + + + Zone I + + + + + + false + + + + 360 + 130 + 91 23 @@ -509,7 +875,7 @@ - 210 + 410 400 91 23 @@ -525,7 +891,7 @@ 10 - 40 + 170 91 16 @@ -538,16 +904,41 @@ 10 - 60 - 301 - 141 + 190 + 271 + 91 - + - Player + Alice - + + + + Bob + + + + + Charlie + + + + + Dave + + + + + Eve + + + + + Fred + + Prioritary @@ -558,6 +949,66 @@ Secondary + + + Zone A + + + + + Zone C + + + + + Zone B + + + + + Zone C + + + + + Zone A + + + + + Zone B + + + + + Zone C + + + + + Zone A + + + + + Zone C + + + + + Zone B + + + + + Zone B + + + + + Zone C + + @@ -577,14 +1028,14 @@ Round Nb - + true - 320 - 110 + 290 + 220 91 23 @@ -593,20 +1044,30 @@ Resolve pairing - + 10 - 240 - 301 - 111 + 320 + 271 + 91 - + - Sector + Zone A - + + + + Zone B + + + + + Zone C + + Player 1 @@ -617,15 +1078,45 @@ Player 2 + + + Alice + + + + + Charlie + + + + + Bob + + + + + Fred + + + + + Dave + + + + + Eve + + - + true - 320 - 290 + 290 + 360 91 23 @@ -640,9 +1131,9 @@ - 220 + 410 400 - 71 + 91 23 @@ -650,11 +1141,11 @@ End round - + 10 - 220 + 300 91 16 @@ -663,6 +1154,290 @@ Battles + + + + 10 + 70 + 421 + 91 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name + + + + + Major + + + + + Minor + + + + + Influence + + + + + Zone A + + + + + type1 + + + + + type3 + + + + + False + + + + + Zone B + + + + + type2 + + + + + type1 + + + + + True + + + + + Zone C + + + + + type3 + + + + + type2 + + + + + False + + + + + Zone D + + + + + type1 + + + + + type3 + + + + + True + + + + + Zone E + + + + + type3 + + + + + type2 + + + + + False + + + + + Zone F + + + + + type2 + + + + + type1 + + + + + False + + + + + Zone G + + + + + type3 + + + + + type1 + + + + + True + + + + + Zone H + + + + + type2 + + + + + type3 + + + + + False + + + + + Zone I + + + + + type1 + + + + + type2 + + + + + False + + + + + + + 10 + 40 + 91 + 16 + + + + Choices + + + + + true + + + + 430 + 100 + 91 + 23 + + + + Add sector + + diff --git a/src/warchron/view/ui/ui_objective_dialog.py b/src/warchron/view/ui/ui_objective_dialog.py deleted file mode 100644 index 6892af6..0000000 --- a/src/warchron/view/ui/ui_objective_dialog.py +++ /dev/null @@ -1,59 +0,0 @@ -# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_objective_dialog.ui' -# -# Created by: PyQt6 UI code generator 6.7.1 -# -# WARNING: Any manual changes made to this file will be lost when pyuic6 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt6 import QtCore, QtGui, QtWidgets - - -class Ui_objectiveDialog(object): - def setupUi(self, objectiveDialog): - objectiveDialog.setObjectName("objectiveDialog") - objectiveDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal) - objectiveDialog.resize(394, 148) - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - objectiveDialog.setWindowIcon(icon) - self.gridLayout = QtWidgets.QGridLayout(objectiveDialog) - self.gridLayout.setObjectName("gridLayout") - self.label = QtWidgets.QLabel(parent=objectiveDialog) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - self.objectiveName = QtWidgets.QLineEdit(parent=objectiveDialog) - self.objectiveName.setObjectName("objectiveName") - self.gridLayout.addWidget(self.objectiveName, 0, 1, 1, 1) - self.label_2 = QtWidgets.QLabel(parent=objectiveDialog) - self.label_2.setObjectName("label_2") - self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) - self.objectiveDescription = QtWidgets.QTextEdit(parent=objectiveDialog) - self.objectiveDescription.setObjectName("objectiveDescription") - self.gridLayout.addWidget(self.objectiveDescription, 1, 1, 1, 1) - self.buttonBox = QtWidgets.QDialogButtonBox(parent=objectiveDialog) - self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok) - self.buttonBox.setObjectName("buttonBox") - self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 2) - - self.retranslateUi(objectiveDialog) - self.buttonBox.accepted.connect(objectiveDialog.accept) # type: ignore - self.buttonBox.rejected.connect(objectiveDialog.reject) # type: ignore - QtCore.QMetaObject.connectSlotsByName(objectiveDialog) - - def retranslateUi(self, objectiveDialog): - _translate = QtCore.QCoreApplication.translate - objectiveDialog.setWindowTitle(_translate("objectiveDialog", "Objective")) - self.label.setText(_translate("objectiveDialog", "Name")) - self.label_2.setText(_translate("objectiveDialog", "Description")) - - -if __name__ == "__main__": - import sys - app = QtWidgets.QApplication(sys.argv) - objectiveDialog = QtWidgets.QDialog() - ui = Ui_objectiveDialog() - ui.setupUi(objectiveDialog) - objectiveDialog.show() - sys.exit(app.exec()) diff --git a/src/warchron/view/ui/ui_objective_dialog.ui b/src/warchron/view/ui/ui_objective_dialog.ui deleted file mode 100644 index 28b0d52..0000000 --- a/src/warchron/view/ui/ui_objective_dialog.ui +++ /dev/null @@ -1,91 +0,0 @@ - - - objectiveDialog - - - Qt::ApplicationModal - - - - 0 - 0 - 394 - 148 - - - - Objective - - - - ../resources/warchron_logo.png../resources/warchron_logo.png - - - - - - Name - - - - - - - - - - Description - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - objectiveDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - objectiveDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/warchron/view/ui/ui_participant_dialog.py b/src/warchron/view/ui/ui_participant_dialog.py deleted file mode 100644 index 7e82342..0000000 --- a/src/warchron/view/ui/ui_participant_dialog.py +++ /dev/null @@ -1,64 +0,0 @@ -# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_participant_dialog.ui' -# -# Created by: PyQt6 UI code generator 6.7.1 -# -# WARNING: Any manual changes made to this file will be lost when pyuic6 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt6 import QtCore, QtGui, QtWidgets - - -class Ui_participantDialog(object): - def setupUi(self, participantDialog): - participantDialog.setObjectName("participantDialog") - participantDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal) - participantDialog.resize(394, 148) - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - participantDialog.setWindowIcon(icon) - self.gridLayout = QtWidgets.QGridLayout(participantDialog) - self.gridLayout.setObjectName("gridLayout") - self.label = QtWidgets.QLabel(parent=participantDialog) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - self.playerComboBox = QtWidgets.QComboBox(parent=participantDialog) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.playerComboBox.sizePolicy().hasHeightForWidth()) - self.playerComboBox.setSizePolicy(sizePolicy) - self.playerComboBox.setObjectName("playerComboBox") - self.gridLayout.addWidget(self.playerComboBox, 0, 1, 1, 1) - self.label_2 = QtWidgets.QLabel(parent=participantDialog) - self.label_2.setObjectName("label_2") - self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) - self.faction = QtWidgets.QLineEdit(parent=participantDialog) - self.faction.setObjectName("faction") - self.gridLayout.addWidget(self.faction, 1, 1, 1, 1) - self.buttonBox = QtWidgets.QDialogButtonBox(parent=participantDialog) - self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok) - self.buttonBox.setObjectName("buttonBox") - self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 2) - - self.retranslateUi(participantDialog) - self.buttonBox.accepted.connect(participantDialog.accept) # type: ignore - self.buttonBox.rejected.connect(participantDialog.reject) # type: ignore - QtCore.QMetaObject.connectSlotsByName(participantDialog) - - def retranslateUi(self, participantDialog): - _translate = QtCore.QCoreApplication.translate - participantDialog.setWindowTitle(_translate("participantDialog", "Participant")) - self.label.setText(_translate("participantDialog", "Player")) - self.label_2.setText(_translate("participantDialog", "Faction")) - - -if __name__ == "__main__": - import sys - app = QtWidgets.QApplication(sys.argv) - participantDialog = QtWidgets.QDialog() - ui = Ui_participantDialog() - ui.setupUi(participantDialog) - participantDialog.show() - sys.exit(app.exec()) diff --git a/src/warchron/view/ui/ui_participant_dialog.ui b/src/warchron/view/ui/ui_participant_dialog.ui deleted file mode 100644 index 238ea5e..0000000 --- a/src/warchron/view/ui/ui_participant_dialog.ui +++ /dev/null @@ -1,98 +0,0 @@ - - - participantDialog - - - Qt::ApplicationModal - - - - 0 - 0 - 394 - 148 - - - - Participant - - - - ../resources/warchron_logo.png../resources/warchron_logo.png - - - - - - Player - - - - - - - - 0 - 0 - - - - - - - - Faction - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - participantDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - participantDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/warchron/view/view.py b/src/warchron/view/view.py index b5932e8..3792855 100644 --- a/src/warchron/view/view.py +++ b/src/warchron/view/view.py @@ -6,13 +6,13 @@ from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QDialog, QFileDialog, QTreeWidgetItem, QMenu from PyQt6.QtGui import QCloseEvent -from warchron.constants import ROLE_TYPE, ROLE_ID, ItemType from warchron.view.ui.ui_main_window import Ui_MainWindow from warchron.view.ui.ui_player_dialog import Ui_playerDialog from warchron.view.ui.ui_war_dialog import Ui_warDialog from warchron.view.ui.ui_campaign_dialog import Ui_campaignDialog -from warchron.view.ui.ui_objective_dialog import Ui_objectiveDialog -from warchron.view.ui.ui_participant_dialog import Ui_participantDialog + +ROLE_TYPE = Qt.ItemDataRole.UserRole +ROLE_ID = Qt.ItemDataRole.UserRole + 1 class View(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self, parent=None): @@ -24,13 +24,9 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): self.on_add_round = None self.on_edit_item = None self.on_delete_item = None - self.show_details(None) self.playersTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.playersTable.customContextMenuRequested.connect(self._on_players_table_context_menu) - self.warParticipantsTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) - self.warParticipantsTable.customContextMenuRequested.connect(self._on_war_participants_table_context_menu) - self.objectivesTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) - self.objectivesTable.customContextMenuRequested.connect(self._on_objectives_table_context_menu) + self.warsTree.currentItemChanged.connect(self._emit_selection_changed) self.warsTree.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.warsTree.customContextMenuRequested.connect(self._on_wars_tree_context_menu) self.addCampaignBtn.clicked.connect(self._on_add_campaign_clicked) @@ -47,15 +43,46 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): "id": current.data(0, ROLE_ID), }) - def get_current_tab(self) -> str: - index = self.tabWidget.currentIndex() - if index == 0: - return "players" - elif index == 1: - return "wars" - return "" + def _on_players_table_context_menu(self, pos): + item = self.playersTable.itemAt(pos) + if not item: + return + player_id = item.data(Qt.ItemDataRole.UserRole) + menu = QMenu(self) + edit_action = menu.addAction("Edit") + delete_action = menu.addAction("Delete") + action = menu.exec(self.playersTable.viewport().mapToGlobal(pos)) + if action == edit_action and self.on_edit_item: + self.on_edit_item("player", player_id) + elif action == delete_action and self.on_delete_item: + self.on_delete_item("player", player_id) -# General popups + def _on_wars_tree_context_menu(self, pos): + item = self.warsTree.itemAt(pos) + if not item: + return + item_type = item.data(0, ROLE_TYPE) + item_id = item.data(0, ROLE_ID) + menu = QMenu(self) + edit_action = None + if item_type != "round": + edit_action = menu.addAction("Edit") + delete_action = menu.addAction("Delete") + action = menu.exec(self.warsTree.viewport().mapToGlobal(pos)) + if action == edit_action: + if self.on_edit_item: + self.on_edit_item(item_type, item_id) + elif action == delete_action: + if self.on_delete_item: + self.on_delete_item(item_type, item_id) + + def _on_add_campaign_clicked(self): + if self.on_add_campaign: + self.on_add_campaign() + + def _on_add_round_clicked(self): + if self.on_add_round: + self.on_add_round() def closeEvent(self, event: QCloseEvent): if self.on_close_callback: @@ -83,26 +110,6 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): ) return Path(filename) if filename else None -# Players view - - def _on_players_table_context_menu(self, pos): - item = self.playersTable.itemAt(pos) - if not item: - return - row = item.row() - name_item = self.playersTable.item(row, 0) - if not name_item: - return - player_id = name_item.data(Qt.ItemDataRole.UserRole) - menu = QMenu(self) - edit_action = menu.addAction("Edit") - delete_action = menu.addAction("Delete") - action = menu.exec(self.playersTable.viewport().mapToGlobal(pos)) - if action == edit_action and self.on_edit_item: - self.on_edit_item(ItemType.PLAYER, player_id) - elif action == delete_action and self.on_delete_item: - self.on_delete_item(ItemType.PLAYER, player_id) - def display_players(self, players: list): table = self.playersTable table.setRowCount(len(players)) @@ -112,89 +119,28 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): table.setItem(row, 0, play_item) table.resizeColumnsToContents() -# Wars view - - def _on_add_campaign_clicked(self): - if self.on_add_campaign: - self.on_add_campaign() - - def _on_add_round_clicked(self): - if self.on_add_round: - self.on_add_round() - - def set_add_campaign_enabled(self, enabled: bool): - self.addCampaignBtn.setEnabled(enabled) - - def set_add_round_enabled(self, enabled: bool): - self.addRoundBtn.setEnabled(enabled) - - def _on_wars_tree_context_menu(self, pos): - item = self.warsTree.itemAt(pos) - if not item: - return - item_type = item.data(0, ROLE_TYPE) - item_id = item.data(0, ROLE_ID) - menu = QMenu(self) - edit_action = None - if item_type != ItemType.ROUND: - edit_action = menu.addAction("Edit") - delete_action = menu.addAction("Delete") - action = menu.exec(self.warsTree.viewport().mapToGlobal(pos)) - if action == edit_action: - if self.on_edit_item: - self.on_edit_item(item_type, item_id) - elif action == delete_action: - if self.on_delete_item: - self.on_delete_item(item_type, item_id) - - def _format_war_label(self, war) -> str: - return f"{war.name} ({war.year})" - - def _format_campaign_label(self, camp) -> str: - return f"{camp.name} ({calendar.month_name[camp.month]})" - - def _format_round_label(self, round, index: int) -> str: - return f"Round {index}" - - def display_wars_tree(self, wars: list): + def display_wars(self, wars: list): tree = self.warsTree tree.clear() tree.setColumnCount(1) tree.setHeaderLabels(["Wars"]) for war in wars: - war_item = QTreeWidgetItem([self._format_war_label(war)]) - war_item.setData(0, ROLE_TYPE, ItemType.WAR) + war_item = QTreeWidgetItem([f"{war.name} ({war.year})"]) + war_item.setData(0, ROLE_TYPE, "war") war_item.setData(0, ROLE_ID, war.id) tree.addTopLevelItem(war_item) for camp in war.get_all_campaigns(): - camp_item = QTreeWidgetItem([self._format_campaign_label(camp)]) - camp_item.setData(0, ROLE_TYPE, ItemType.CAMPAIGN) + camp_item = QTreeWidgetItem([f"{camp.name} ({calendar.month_name[camp.month]})"]) + camp_item.setData(0, ROLE_TYPE, "campaign") camp_item.setData(0, ROLE_ID, camp.id) war_item.addChild(camp_item) for index, rnd in enumerate(camp.get_all_rounds(), start=1): - rnd_item = QTreeWidgetItem([self._format_round_label(rnd, index)]) - rnd_item.setData(0, ROLE_TYPE, ItemType.ROUND) + rnd_item = QTreeWidgetItem([f"Round {index}"]) + rnd_item.setData(0, ROLE_TYPE, "round") rnd_item.setData(0, ROLE_ID, rnd.id) camp_item.addChild(rnd_item) - tree.currentItemChanged.connect(self._emit_selection_changed) tree.expandAll() - def select_tree_item(self, *, item_type: ItemType, item_id: str): - def walk(item: QTreeWidgetItem): - if ( - item.data(0, ROLE_TYPE) == item_type - and item.data(0, ROLE_ID) == item_id - ): - self.warsTree.setCurrentItem(item) - return True - for i in range(item.childCount()): - if walk(item.child(i)): - return True - return False - for i in range(self.warsTree.topLevelItemCount()): - if walk(self.warsTree.topLevelItem(i)): - return - def get_selected_tree_item(self): item = self.warsTree.currentItem() if not item: @@ -204,94 +150,20 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow): "id": item.data(0, ROLE_ID) } - def show_details(self, item_type: str | None): - if item_type == ItemType.WAR: - self.selectedDetailsStack.setCurrentWidget(self.pageWar) - elif item_type == ItemType.CAMPAIGN: - self.selectedDetailsStack.setCurrentWidget(self.pageCampaign) - elif item_type == ItemType.ROUND: - self.selectedDetailsStack.setCurrentWidget(self.pageRound) - else: - self.selectedDetailsStack.setCurrentWidget(self.pageEmpty) + def set_add_campaign_enabled(self, enabled: bool): + self.addCampaignBtn.setEnabled(enabled) -# War page + def set_add_round_enabled(self, enabled: bool): + self.addRoundBtn.setEnabled(enabled) - def _on_objectives_table_context_menu(self, pos): - item = self.objectivesTable.itemAt(pos) - if not item: - return - row = item.row() - name_item = self.objectivesTable.item(row, 0) - if not name_item: - return - objective_id = name_item.data(Qt.ItemDataRole.UserRole) - menu = QMenu(self) - edit_action = menu.addAction("Edit") - delete_action = menu.addAction("Delete") - action = menu.exec(self.objectivesTable.viewport().mapToGlobal(pos)) - if action == edit_action and self.on_edit_item: - self.on_edit_item(ItemType.OBJECTIVE, objective_id) - elif action == delete_action and self.on_delete_item: - self.on_delete_item(ItemType.OBJECTIVE, objective_id) - - def _on_war_participants_table_context_menu(self, pos): - item = self.warParticipantsTable.itemAt(pos) - if not item: - return - row = item.row() - name_item = self.warParticipantsTable.item(row, 0) - if not name_item: - return - participant_id = name_item.data(Qt.ItemDataRole.UserRole) - menu = QMenu(self) - edit_action = menu.addAction("Edit") - delete_action = menu.addAction("Delete") - action = menu.exec(self.warParticipantsTable.viewport().mapToGlobal(pos)) - if action == edit_action and self.on_edit_item: - self.on_edit_item(ItemType.WAR_PARTICIPANT, participant_id) - elif action == delete_action and self.on_delete_item: - self.on_delete_item(ItemType.WAR_PARTICIPANT, participant_id) - - def show_war_details(self, *, name: str, year: int): - self.warName.setText(name) - self.warYear.setText(str(year)) - - def display_war_objectives(self, objectives: list): - table = self.objectivesTable - table.clearContents() - table.setRowCount(len(objectives)) - for row, obj in enumerate(objectives): - name_item = QtWidgets.QTableWidgetItem(obj.name) - desc_item = QtWidgets.QTableWidgetItem(obj.description) - name_item.setData(Qt.ItemDataRole.UserRole, obj.id) - table.setItem(row, 0, name_item) - table.setItem(row, 1, desc_item) - table.resizeColumnsToContents() - - def display_war_participants(self, participants: list[tuple[str, str, str]]): - table = self.warParticipantsTable - table.clearContents() - table.setRowCount(len(participants)) - for row, (name, faction, pid) in enumerate(participants): - name_item = QtWidgets.QTableWidgetItem(name) - fact_item = QtWidgets.QTableWidgetItem(faction) - name_item.setData(Qt.ItemDataRole.UserRole, pid) - table.setItem(row, 0, name_item) - table.setItem(row, 1, fact_item) - table.resizeColumnsToContents() - -# Campaign page - - def show_campaign_details(self, *, name: str, month: int): - self.campaignName.setText(name) - self.campaignMonth.setText(calendar.month_name[month]) - -# Round page - - def show_round_details(self, *, index: int): - self.roundNb.setText(f"Round {index}") - - + def get_current_tab(self) -> str: + index = self.tabWidget.currentIndex() + if index == 0: + return "players" + elif index == 1: + return "wars" + return "" + class PlayerDialog(QDialog): def __init__(self, parent=None, *, default_name: str = ""): super().__init__(parent) @@ -330,38 +202,4 @@ class CampaignDialog(QDialog): return self.ui.campaignName.text().strip() def get_campaign_month(self) -> int: - return int(self.ui.campaignMonth.value()) - -class ObjectiveDialog(QDialog): - def __init__(self, parent=None, *, default_name="", default_description=""): - super().__init__(parent) - self.ui = Ui_objectiveDialog() - self.ui.setupUi(self) - self.ui.objectiveName.setText(default_name) - self.ui.objectiveDescription.setPlainText(default_description) - - def get_objective_name(self) -> str: - return self.ui.objectiveName.text().strip() - - def get_objective_description(self) -> str: - return self.ui.objectiveDescription.toPlainText().strip() - -class ParticipantDialog(QDialog): - def __init__(self, parent=None, *, players: list, default_player_id=None, default_faction="", editable_player=True): - super().__init__(parent) - self.ui = Ui_participantDialog() - self.ui.setupUi(self) - for player in players: - self.ui.playerComboBox.addItem(player.name, player.id) - if default_player_id: - index = self.ui.playerComboBox.findData(default_player_id) - if index != -1: - self.ui.playerComboBox.setCurrentIndex(index) - self.ui.playerComboBox.setEnabled(editable_player) - self.ui.faction.setText(default_faction) - - def get_player_id(self) -> str: - return self.ui.playerComboBox.currentData() - - def get_participant_faction(self) -> str: - return self.ui.faction.text().strip() \ No newline at end of file + return int(self.ui.campaignMonth.value()) \ No newline at end of file