Compare commits

..

No commits in common. "9f676f6b9d6a56c98825add059dcf58b33f70809" and "032ab2d2c4fc17b2257d8f73c9f1f72f40602a4d" have entirely different histories.

15 changed files with 121 additions and 812 deletions

View file

@ -15,8 +15,6 @@ class ItemType(StrEnum):
WAR_PARTICIPANT = "war_participant"
SECTOR = "sector"
CAMPAIGN_PARTICIPANT = "campaign_participant"
CHOICE = "choice"
BATTLE = "battle"
class RefreshScope(Enum):
NONE = auto()

View file

@ -5,19 +5,19 @@ 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, WarParticipantDialog, CampaignParticipantDialog, SectorDialog
from warchron.controller.dtos import ParticipantOption
from warchron.view.view import PlayerDialog, WarDialog, CampaignDialog, ObjectiveDialog, WarParticipantDialog, CampaignParticipantDialog, SectorDialog, ChoicesDialog
class Controller:
def __init__(self, model: Model, view: View):
self.model: Model = model
self.view: View = view
self.model = model
self.view = view
self.current_file: Path | None = None
self.selected_war_id: str = None
self.selected_campaign_id: str = None
self.selected_round_id: str = None
self.selected_war_id = None
self.selected_campaign_id = None
self.selected_round_id = None
self.view.on_close_callback = self.on_app_close
self.is_dirty: bool = False
self.is_dirty = False
self.__connect()
self.refresh_players_view()
self.refresh_wars_view()
@ -165,24 +165,8 @@ class Controller:
self.view.display_campaign_participants(participants_for_display)
def _fill_round_details(self, round_id: str):
rnd = self.model.get_round(round_id)
camp = self.model.get_campaign_by_round(round_id)
self.view.show_round_details(index=camp.get_round_index(round_id))
participants = self.model.get_round_participants(round_id)
choices_for_display = []
for part in participants:
choice = rnd.get_choice(part.id)
if not choice:
choice=self.model.create_choice(round_id=rnd.id, participant_id=part.id)
priority_name = camp.get_sector_name(choice.priority_sector_id) if choice else ""
secondary_name = camp.get_sector_name(choice.secondary_sector_id) if choice else ""
choices_for_display.append((
self.model.get_player_name(part.id),
priority_name,
secondary_name,
choice.participant_id
))
self.view.display_round_choices(choices_for_display)
index = self.model.get_round_index(round_id)
self.view.show_round_details(index=index)
def on_tree_selection_changed(self, selection):
self.selected_war_id = None
@ -341,9 +325,7 @@ class Controller:
theme = dialog.get_participant_theme()
self.model.update_campaign_participant(item_id, leader=leader, theme=theme)
self.refresh(RefreshScope.CAMPAIGN_DETAILS)
elif item_type == ItemType.CHOICE:
self.edit_round_choice(item_id)
self.refresh(RefreshScope.ROUND_DETAILS)
self.is_dirty = True
def delete_item(self, item_type: str, item_id: str):
reply = QMessageBox.question(
@ -574,34 +556,4 @@ class Controller:
return
rnd = 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)
# Choices methods
def edit_round_choice(self, choice_id: str):
round_id = self.selected_round_id
if not round_id:
return
camp, rnd, participants, sectors = self.model.get_round_choices_data(round_id)
choice = rnd.get_choice(choice_id)
if not choice:
return
part = camp.participants[choice.participant_id]
player = self.model.get_player(part.id)
part_opt = ParticipantOption(id=player.id, name=player.name)
dialog = ChoicesDialog(
self.view,
participants=[part_opt],
default_participant_id=part.id,
sectors=sectors,
default_priority_id=choice.priority_sector_id,
default_secondary_id=choice.secondary_sector_id,
)
if dialog.exec() != QDialog.DialogCode.Accepted:
return
rnd.set_choice(
participant_id=part.id,
priority_sector_id=dialog.get_priority_id(),
secondary_sector_id=dialog.get_secondary_id(),
)
self.refresh_and_select(RefreshScope.WARS_TREE, item_type=ItemType.ROUND, item_id=rnd.id)

View file

@ -1,7 +1,7 @@
from __future__ import annotations
from uuid import uuid4
from warchron.model.round import Round, Choice, Battle
from warchron.model.round import Round
class Campaign:
def __init__(self, name: str, month: int):
@ -10,7 +10,7 @@ class Campaign:
self.month: int = month
self.participants: dict[str, CampaignParticipant] = {}
self.sectors: dict[str, Sector] = {}
self.rounds: list[Round] = []
self.rounds = []
self.is_over = False
def set_id(self, new_id: str):
@ -72,8 +72,6 @@ class Campaign:
part.set_theme(theme)
def remove_campaign_participant(self, player_id: str):
# TODO manage choices referring to it
# TODO manage battles referring to it
del self.participants[player_id]
# Sector methods
@ -83,18 +81,12 @@ class Campaign:
self.sectors[sect.id] = sect
return sect
def get_sector(self, sector_id: str) -> Sector:
return self.sectors[sector_id]
def get_sector_name(self, sector_id: str) -> str:
if sector_id is None:
return ""
return self.sectors[sector_id].name
def get_sector(self, id: str) -> Sector:
return self.sectors[id]
def get_all_sectors(self) -> list[Sector]:
return list(self.sectors.values())
# TODO manage choices referring to it (round order!)
def update_sector(self, sector_id: str, *, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str):
sect = self.get_sector(sector_id)
sect.set_name(name)
@ -104,8 +96,6 @@ class Campaign:
sect.set_influence(influence_id)
def remove_sector(self, sector_id: str):
# TODO manage choices referring to it
# TODO manage battles referring to it
del self.sectors[sector_id]
# Round methods
@ -114,10 +104,7 @@ class Campaign:
return any(r.id == round_id for r in self.rounds)
def get_round(self, round_id: str) -> Round:
for rnd in self.rounds:
if rnd.id == round_id:
return rnd
raise KeyError(f"Round {round_id} not found")
return self.rounds[round_id]
def get_all_rounds(self) -> list[Round]:
return list(self.rounds)
@ -148,16 +135,6 @@ class Campaign:
return rnd.name
return ""
# Choice methods
def create_choice(self, round_id: str, participant_id: str) -> Choice:
rnd = self.get_round(round_id)
return rnd.create_choice(participant_id)
def remove_choice(self, round_id: str, participant_id: str) -> Choice:
rnd = self.get_round(round_id)
rnd.remove_choice(participant_id)
class CampaignParticipant:
def __init__(self,player_id: str, leader: str, theme: str):
self.id: str = player_id # ref to War.participants
@ -178,9 +155,9 @@ class Sector:
self.id: str = str(uuid4())
self.name: str = name
self.round_id: str = round_id
self.major_objective_id: str | None = major_id # ref to War.objectives
self.minor_objective_id: str | None = minor_id # ref to War.objectives
self.influence_objective_id: str | None = influence_id # ref to War.objectives
self.major_objective_id: str = major_id
self.minor_objective_id: str = minor_id
self.influence_objective_id: str = influence_id
def set_id(self, new_id: str):
self.id = new_id

View file

@ -6,7 +6,7 @@ from datetime import datetime
from warchron.model.player import Player
from warchron.model.war import War, Objective, WarParticipant
from warchron.model.campaign import Campaign, Sector, CampaignParticipant
from warchron.model.round import Round, Choice, Battle
from warchron.model.round import Round
class Model:
def __init__(self):
@ -76,7 +76,6 @@ class Model:
return list(self.players.values())
def remove_player(self, player_id: str):
# TODO manage war_participants referring to it
del self.players[player_id]
# War methods
@ -101,22 +100,6 @@ class Model:
return war
raise KeyError(f"Campaign {campaign_id} not found in any War")
def get_war_by_sector(self, sector_id: str) -> Campaign:
for war in self.wars.values():
for camp in war.campaigns:
for sect in camp.sectors.values():
if sect.id == sector_id:
return camp
raise KeyError(f"Sector {sector_id} not found in any War")
def get_war_by_round(self, round_id: str) -> Campaign:
for war in self.wars.values():
for camp in war.campaigns:
for rnd in camp.rounds:
if rnd.id == round_id:
return camp
raise KeyError(f"Round {round_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():
@ -124,7 +107,6 @@ class Model:
return war
raise KeyError(f"Objective {objective_id} not found in any War")
# TODO don't use this method as participant with same ID (player) can be in several wars!
def get_war_by_war_participant(self, participant_id: str) -> War:
for war in self.wars.values():
for part in war.participants.values():
@ -217,7 +199,6 @@ class Model:
return camp
raise KeyError(f"Round {round_id} not found")
# TODO don't use this method as participant with same ID (player) can be in several campaigns!
def get_campaign_by_campaign_participant(self, participant_id: str) -> Campaign:
for war in self.wars.values():
camp = war.get_campaign_by_campaign_participant(participant_id)
@ -255,8 +236,8 @@ class Model:
raise KeyError("Sector not found")
def update_sector(self, sector_id: str, *, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str):
war = self.get_war_by_sector(sector_id)
war.update_sector(sector_id, name=name, round_id=round_id, major_id=major_id, minor_id=minor_id, influence_id=influence_id)
camp = self.get_campaign_by_sector(sector_id)
camp.update_sector(sector_id, name=name, round_id=round_id, major_id=major_id, minor_id=minor_id, influence_id=influence_id)
def remove_sector(self, sector_id: str):
camp = self.get_campaign_by_sector(sector_id)
@ -305,35 +286,7 @@ class Model:
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 get_round_sectors(self, round_id: str) -> list[Sector]:
camp = self.get_campaign_by_round(round_id)
return [s for s in camp.sectors.values() if s.round_id == round_id]
def get_round_participants(self, round_id: str) -> list[CampaignParticipant]:
camp = self.get_campaign_by_round(round_id)
return list(camp.participants.values())
def remove_round(self, round_id: str):
war = self.get_war_by_round(round_id)
war.remove_round(round_id)
# Choices methods
def create_choice(self, round_id: str, participant_id: str) -> Choice:
war = self.get_war_by_round(round_id)
return war.create_choice(round_id, participant_id)
def remove_choice(self, round_id: str, participant_id: str):
war = self.get_war_by_round(round_id)
war.remove_choice(round_id, participant_id)
def get_round_choices_data(self, round_id: str):
camp = self.get_campaign_by_round(round_id)
rnd = self.get_round(round_id)
participants = camp.participants.values()
sectors = [
s for s in camp.sectors.values()
if s.round_id == round_id
]
return camp, rnd, participants, sectors
camp.remove_round(round_id)

View file

@ -1,11 +1,11 @@
from __future__ import annotations
from uuid import uuid4
class Round:
def __init__(self):
self.id: str = str(uuid4())
self.choices: dict[str, Choice] = {}
self.battles: dict[str, Battle] = {}
self.sectors = {}
self.choices = {}
self.battles = {}
self.is_over: bool = False
def set_id(self, new_id: str):
@ -14,9 +14,6 @@ class Round:
def set_state(self, new_state: bool):
self.is_over = new_state
def set_choice(self, participant_id: str, priority_sector_id: str | None, secondary_sector_id: str | None):
self.choices[participant_id] = Choice(participant_id, priority_sector_id, secondary_sector_id)
def toDict(self):
return {
"id": self.id,
@ -34,34 +31,4 @@ class Round:
# rnd.choices = data.get("choices", {})
# rnd.battles = data.get("battles", {})
rnd.set_state(data.get("is_over", False))
return rnd
# Choices methods
def get_choice(self, participant_id: str) -> Choice | None:
return self.choices.get(participant_id)
def create_choice(self, participant_id: str) -> Choice:
if participant_id not in self.choices:
choice = Choice(
participant_id=participant_id,
priority_sector_id=None,
secondary_sector_id=None
)
self.choices[participant_id] = choice
return self.choices[participant_id]
def remove_choice(self,participant_id: str):
del self.choices[participant_id]
class Choice:
def __init__(self, participant_id: str, priority_sector_id: str | None = None, secondary_sector_id: str | None = None):
self.participant_id: str = participant_id # ref to Campaign.participants
self.priority_sector_id: str | None = priority_sector_id # ref to Campaign.sectors
self.secondary_sector_id: str | None = secondary_sector_id # ref to Campaign.sectors
class Battle:
def __init__(self, sector_id: str, player_1_id: str | None = None, player_2_id: str | None = None):
self.sector_id: str = sector_id # ref to Campaign.sector
self.player_1_id: str | None = player_1_id # ref to Campaign.participants
self.player_2_id: str | None = player_2_id # ref to Campaign.participants
return rnd

View file

@ -3,7 +3,6 @@ from uuid import uuid4
from datetime import datetime
from warchron.model.campaign import Campaign, Sector, CampaignParticipant
from warchron.model.round import Round, Choice, Battle
class War:
@ -13,7 +12,7 @@ class War:
self.year: int = year
self.participants: dict[str, WarParticipant] = {}
self.objectives: dict[str, Objective] = {}
self.campaigns: list[Campaign] = []
self.campaigns = []
self.is_over: bool = False
def set_id(self, new_id: str):
@ -73,7 +72,6 @@ class War:
obj.set_description(description)
def remove_objective(self, objective_id: str):
# TODO manage sectors referring to it
del self.objectives[objective_id]
# War participant methods
@ -102,7 +100,6 @@ class War:
part.set_faction(faction)
def remove_war_participant(self, player_id: str):
# TODO manage campaign_participants referring to it
del self.participants[player_id]
# Campaign methods
@ -170,10 +167,10 @@ class War:
def get_sector(self, id: str) -> Sector:
return self.sectors[id]
def update_sector(self, sector_id: str, *, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str):
camp = self.get_campaign_by_sector(sector_id)
camp.update_sector(sector_id, name=name, round_id=round_id, major_id=major_id, minor_id=minor_id, influence_id=influence_id)
def update_sector(self, objective_id: str, *, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str):
obj = self.get_objective(objective_id)
obj.set_name(name)
def remove_sector(self, sector_id: str):
camp = self.get_campaign_by_sector(sector_id)
camp.remove_sector(sector_id)
@ -207,26 +204,6 @@ class War:
camp = self.get_campaign_by_campaign_participant(participant_id)
camp.remove_campaign_participant(participant_id)
# Round methods
def add_round(self, campaign_id: str) -> Round:
camp = self.get_campaign(campaign_id)
return camp.add_round()
def remove_round(self, round_id: str):
camp = self.get_campaign_by_round(round_id)
camp.remove_round(round_id)
# Choice methods
def create_choice(self, round_id: str, participant_id: str) -> Choice:
camp = self.get_campaign_by_round(round_id)
return camp.create_choice(round_id, participant_id)
def remove_choice(self, round_id: str, participant_id: str):
camp = self.get_campaign_by_round(round_id)
camp.remove_choice(round_id, participant_id)
class Objective:
def __init__(self, name: str, description: str):
self.id: str = str(uuid4())

View file

@ -1,78 +0,0 @@
# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_battle_result_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_battleResultDialog(object):
def setupUi(self, battleResultDialog):
battleResultDialog.setObjectName("battleResultDialog")
battleResultDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
battleResultDialog.resize(561, 246)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
battleResultDialog.setWindowIcon(icon)
self.formLayout = QtWidgets.QFormLayout(battleResultDialog)
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(parent=battleResultDialog)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
self.winnerComboBox = QtWidgets.QComboBox(parent=battleResultDialog)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.winnerComboBox.sizePolicy().hasHeightForWidth())
self.winnerComboBox.setSizePolicy(sizePolicy)
self.winnerComboBox.setObjectName("winnerComboBox")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.winnerComboBox)
self.label_2 = QtWidgets.QLabel(parent=battleResultDialog)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
self.score = QtWidgets.QLineEdit(parent=battleResultDialog)
self.score.setObjectName("score")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.score)
self.label_3 = QtWidgets.QLabel(parent=battleResultDialog)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_3)
self.victoryCondition = QtWidgets.QLineEdit(parent=battleResultDialog)
self.victoryCondition.setObjectName("victoryCondition")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.victoryCondition)
self.label_4 = QtWidgets.QLabel(parent=battleResultDialog)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_4)
self.battleComment = QtWidgets.QPlainTextEdit(parent=battleResultDialog)
self.battleComment.setObjectName("battleComment")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.ItemRole.FieldRole, self.battleComment)
self.buttonBox = QtWidgets.QDialogButtonBox(parent=battleResultDialog)
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
self.buttonBox.setObjectName("buttonBox")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.ItemRole.SpanningRole, self.buttonBox)
self.retranslateUi(battleResultDialog)
self.buttonBox.accepted.connect(battleResultDialog.accept) # type: ignore
self.buttonBox.rejected.connect(battleResultDialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(battleResultDialog)
def retranslateUi(self, battleResultDialog):
_translate = QtCore.QCoreApplication.translate
battleResultDialog.setWindowTitle(_translate("battleResultDialog", "Battle result"))
self.label.setText(_translate("battleResultDialog", "Winner"))
self.label_2.setText(_translate("battleResultDialog", "Score"))
self.label_3.setText(_translate("battleResultDialog", "Victory condition"))
self.label_4.setText(_translate("battleResultDialog", "Comment"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
battleResultDialog = QtWidgets.QDialog()
ui = Ui_battleResultDialog()
ui.setupUi(battleResultDialog)
battleResultDialog.show()
sys.exit(app.exec())

View file

@ -1,118 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>battleResultDialog</class>
<widget class="QDialog" name="battleResultDialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>561</width>
<height>246</height>
</rect>
</property>
<property name="windowTitle">
<string>Battle result</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../resources/warchron_logo.png</normaloff>../resources/warchron_logo.png</iconset>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Winner</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="winnerComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Score</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="score"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Victory condition</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="victoryCondition"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Comment</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPlainTextEdit" name="battleComment"/>
</item>
<item row="4" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>battleResultDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>battleResultDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -1,88 +0,0 @@
# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_choices_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_choicesDialog(object):
def setupUi(self, choicesDialog):
choicesDialog.setObjectName("choicesDialog")
choicesDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
choicesDialog.resize(561, 246)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
choicesDialog.setWindowIcon(icon)
self.gridLayout = QtWidgets.QGridLayout(choicesDialog)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(parent=choicesDialog)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.playerComboBox = QtWidgets.QComboBox(parent=choicesDialog)
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=choicesDialog)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.priorityComboBox = QtWidgets.QComboBox(parent=choicesDialog)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.priorityComboBox.sizePolicy().hasHeightForWidth())
self.priorityComboBox.setSizePolicy(sizePolicy)
self.priorityComboBox.setObjectName("priorityComboBox")
self.gridLayout.addWidget(self.priorityComboBox, 1, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(parent=choicesDialog)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.secondaryComboBox = QtWidgets.QComboBox(parent=choicesDialog)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.secondaryComboBox.sizePolicy().hasHeightForWidth())
self.secondaryComboBox.setSizePolicy(sizePolicy)
self.secondaryComboBox.setObjectName("secondaryComboBox")
self.gridLayout.addWidget(self.secondaryComboBox, 2, 1, 1, 1)
self.label_4 = QtWidgets.QLabel(parent=choicesDialog)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.choiceComment = QtWidgets.QPlainTextEdit(parent=choicesDialog)
self.choiceComment.setObjectName("choiceComment")
self.gridLayout.addWidget(self.choiceComment, 3, 1, 1, 1)
self.buttonBox = QtWidgets.QDialogButtonBox(parent=choicesDialog)
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, 4, 0, 1, 2)
self.retranslateUi(choicesDialog)
self.buttonBox.accepted.connect(choicesDialog.accept) # type: ignore
self.buttonBox.rejected.connect(choicesDialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(choicesDialog)
def retranslateUi(self, choicesDialog):
_translate = QtCore.QCoreApplication.translate
choicesDialog.setWindowTitle(_translate("choicesDialog", "Choices"))
self.label.setText(_translate("choicesDialog", "Player"))
self.label_2.setText(_translate("choicesDialog", "Priority"))
self.label_3.setText(_translate("choicesDialog", "Secondary"))
self.label_4.setText(_translate("choicesDialog", "Comment"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
choicesDialog = QtWidgets.QDialog()
ui = Ui_choicesDialog()
ui.setupUi(choicesDialog)
choicesDialog.show()
sys.exit(app.exec())

View file

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>choicesDialog</class>
<widget class="QDialog" name="choicesDialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>561</width>
<height>246</height>
</rect>
</property>
<property name="windowTitle">
<string>Choices</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../resources/warchron_logo.png</normaloff>../resources/warchron_logo.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Player</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="playerComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Priority</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="priorityComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Secondary</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="secondaryComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Comment</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPlainTextEdit" name="choiceComment"/>
</item>
<item row="4" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>choicesDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>choicesDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -183,27 +183,6 @@ class Ui_MainWindow(object):
self.gridLayout_4.addItem(spacerItem5, 5, 2, 1, 1)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.campaignParticipantsTable = QtWidgets.QTableWidget(parent=self.pageCampaign)
self.campaignParticipantsTable.setObjectName("campaignParticipantsTable")
self.campaignParticipantsTable.setColumnCount(5)
self.campaignParticipantsTable.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(4, item)
self.horizontalLayout_12.addWidget(self.campaignParticipantsTable)
self.addCampaignParticipantBtn = QtWidgets.QPushButton(parent=self.pageCampaign)
self.addCampaignParticipantBtn.setObjectName("addCampaignParticipantBtn")
self.horizontalLayout_12.addWidget(self.addCampaignParticipantBtn)
self.gridLayout_4.addLayout(self.horizontalLayout_12, 4, 0, 1, 3)
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.sectorsTable = QtWidgets.QTableWidget(parent=self.pageCampaign)
self.sectorsTable.setObjectName("sectorsTable")
self.sectorsTable.setColumnCount(5)
@ -218,11 +197,32 @@ class Ui_MainWindow(object):
self.sectorsTable.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.sectorsTable.setHorizontalHeaderItem(4, item)
self.horizontalLayout_13.addWidget(self.sectorsTable)
self.horizontalLayout_12.addWidget(self.sectorsTable)
self.addSectorBtn = QtWidgets.QPushButton(parent=self.pageCampaign)
self.addSectorBtn.setEnabled(True)
self.addSectorBtn.setObjectName("addSectorBtn")
self.horizontalLayout_13.addWidget(self.addSectorBtn)
self.horizontalLayout_12.addWidget(self.addSectorBtn)
self.gridLayout_4.addLayout(self.horizontalLayout_12, 4, 0, 1, 3)
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.campaignParticipantsTable = QtWidgets.QTableWidget(parent=self.pageCampaign)
self.campaignParticipantsTable.setObjectName("campaignParticipantsTable")
self.campaignParticipantsTable.setColumnCount(5)
self.campaignParticipantsTable.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.campaignParticipantsTable.setHorizontalHeaderItem(4, item)
self.horizontalLayout_13.addWidget(self.campaignParticipantsTable)
self.addCampaignParticipantBtn = QtWidgets.QPushButton(parent=self.pageCampaign)
self.addCampaignParticipantBtn.setObjectName("addCampaignParticipantBtn")
self.horizontalLayout_13.addWidget(self.addCampaignParticipantBtn)
self.gridLayout_4.addLayout(self.horizontalLayout_13, 2, 0, 1, 3)
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
@ -385,7 +385,7 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
self.selectedDetailsStack.setCurrentIndex(2)
self.selectedDetailsStack.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
@ -429,17 +429,6 @@ class Ui_MainWindow(object):
self.labelSectors.setText(_translate("MainWindow", "Sectors"))
self.labelParticipants_2.setText(_translate("MainWindow", "Participants"))
self.endCampaignBtn.setText(_translate("MainWindow", "End campaign"))
item = self.campaignParticipantsTable.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Name"))
item = self.campaignParticipantsTable.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Leader"))
item = self.campaignParticipantsTable.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Theme"))
item = self.campaignParticipantsTable.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "Victory pts."))
item = self.campaignParticipantsTable.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Theme pts."))
self.addCampaignParticipantBtn.setText(_translate("MainWindow", "Add participant"))
item = self.sectorsTable.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Name"))
item = self.sectorsTable.horizontalHeaderItem(1)
@ -451,6 +440,17 @@ class Ui_MainWindow(object):
item = self.sectorsTable.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Influence imp."))
self.addSectorBtn.setText(_translate("MainWindow", "Add Sector"))
item = self.campaignParticipantsTable.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Name"))
item = self.campaignParticipantsTable.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Leader"))
item = self.campaignParticipantsTable.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Theme"))
item = self.campaignParticipantsTable.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "Victory pts."))
item = self.campaignParticipantsTable.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Theme pts."))
self.addCampaignParticipantBtn.setText(_translate("MainWindow", "Add participant"))
self.campaignName.setText(_translate("MainWindow", "campaignName"))
self.campaignMonth.setText(_translate("MainWindow", "campaignMonth"))
self.labelChoices.setText(_translate("MainWindow", "Choices"))
@ -466,7 +466,7 @@ class Ui_MainWindow(object):
item = self.choicesTable.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Player"))
item = self.choicesTable.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Priority"))
item.setText(_translate("MainWindow", "Prioritary"))
item = self.choicesTable.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Secondary"))
self.resolvePairingBtn.setText(_translate("MainWindow", "Resolve pairing"))

View file

@ -150,7 +150,7 @@
<item>
<widget class="QStackedWidget" name="selectedDetailsStack">
<property name="currentIndex">
<number>2</number>
<number>3</number>
</property>
<widget class="QWidget" name="pageEmpty">
<layout class="QVBoxLayout" name="verticalLayout_4">
@ -379,46 +379,6 @@
</item>
<item row="4" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QTableWidget" name="campaignParticipantsTable">
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Leader</string>
</property>
</column>
<column>
<property name="text">
<string>Theme</string>
</property>
</column>
<column>
<property name="text">
<string>Victory pts.</string>
</property>
</column>
<column>
<property name="text">
<string>Theme pts.</string>
</property>
</column>
</widget>
</item>
<item>
<widget class="QPushButton" name="addCampaignParticipantBtn">
<property name="text">
<string>Add participant</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QTableWidget" name="sectorsTable">
<column>
@ -460,6 +420,46 @@
</item>
</layout>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QTableWidget" name="campaignParticipantsTable">
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Leader</string>
</property>
</column>
<column>
<property name="text">
<string>Theme</string>
</property>
</column>
<column>
<property name="text">
<string>Victory pts.</string>
</property>
</column>
<column>
<property name="text">
<string>Theme pts.</string>
</property>
</column>
</widget>
</item>
<item>
<widget class="QPushButton" name="addCampaignParticipantBtn">
<property name="text">
<string>Add participant</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
@ -573,7 +573,7 @@
</column>
<column>
<property name="text">
<string>Priority</string>
<string>Prioritary</string>
</property>
</column>
<column>

View file

@ -13,7 +13,7 @@ class Ui_sectorDialog(object):
def setupUi(self, sectorDialog):
sectorDialog.setObjectName("sectorDialog")
sectorDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
sectorDialog.resize(602, 338)
sectorDialog.resize(514, 129)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
sectorDialog.setWindowIcon(icon)
@ -59,13 +59,6 @@ class Ui_sectorDialog(object):
self.minorComboBox.setSizePolicy(sizePolicy)
self.minorComboBox.setObjectName("minorComboBox")
self.gridLayout.addWidget(self.minorComboBox, 1, 3, 1, 1)
self.label_7 = QtWidgets.QLabel(parent=sectorDialog)
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 2, 0, 1, 1)
self.sectorMission = QtWidgets.QLineEdit(parent=sectorDialog)
self.sectorMission.setText("")
self.sectorMission.setObjectName("sectorMission")
self.gridLayout.addWidget(self.sectorMission, 2, 1, 1, 1)
self.label_5 = QtWidgets.QLabel(parent=sectorDialog)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 2, 2, 1, 1)
@ -77,17 +70,11 @@ class Ui_sectorDialog(object):
self.influenceComboBox.setSizePolicy(sizePolicy)
self.influenceComboBox.setObjectName("influenceComboBox")
self.gridLayout.addWidget(self.influenceComboBox, 2, 3, 1, 1)
self.label_6 = QtWidgets.QLabel(parent=sectorDialog)
self.label_6.setObjectName("label_6")
self.gridLayout.addWidget(self.label_6, 3, 0, 1, 1)
self.sectorDescription = QtWidgets.QPlainTextEdit(parent=sectorDialog)
self.sectorDescription.setObjectName("sectorDescription")
self.gridLayout.addWidget(self.sectorDescription, 3, 1, 1, 3)
self.buttonBox = QtWidgets.QDialogButtonBox(parent=sectorDialog)
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, 4, 2, 1, 2)
self.gridLayout.addWidget(self.buttonBox, 3, 2, 1, 2)
self.retranslateUi(sectorDialog)
self.buttonBox.accepted.connect(sectorDialog.accept) # type: ignore
@ -101,9 +88,7 @@ class Ui_sectorDialog(object):
self.label_3.setText(_translate("sectorDialog", "Major objective"))
self.label.setText(_translate("sectorDialog", "Round"))
self.label_4.setText(_translate("sectorDialog", "Minor opportunity"))
self.label_7.setText(_translate("sectorDialog", "Mission"))
self.label_5.setText(_translate("sectorDialog", "Influence"))
self.label_6.setText(_translate("sectorDialog", "Description"))
if __name__ == "__main__":

View file

@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>602</width>
<height>338</height>
<width>514</width>
<height>129</height>
</rect>
</property>
<property name="windowTitle">
@ -86,20 +86,6 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Mission</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="sectorMission">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_5">
<property name="text">
@ -117,17 +103,7 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Description</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<widget class="QPlainTextEdit" name="sectorDescription"/>
</item>
<item row="4" column="2" colspan="2">
<item row="3" column="2" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>

View file

@ -7,7 +7,6 @@ from PyQt6.QtWidgets import QDialog, QFileDialog, QTreeWidgetItem, QMenu
from PyQt6.QtGui import QCloseEvent
from warchron.constants import ROLE_TYPE, ROLE_ID, ItemType
from warchron.controller.dtos import ParticipantOption
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
@ -16,7 +15,7 @@ from warchron.view.ui.ui_objective_dialog import Ui_objectiveDialog
from warchron.view.ui.ui_war_participant_dialog import Ui_warParticipantDialog
from warchron.view.ui.ui_campaign_participant_dialog import Ui_campaignParticipantDialog
from warchron.view.ui.ui_sector_dialog import Ui_sectorDialog
from warchron.view.ui.ui_choices_dialog import Ui_choicesDialog
from warchron.controller.dtos import ParticipantOption
# utils...
@ -51,11 +50,6 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
self.show_details(None)
self.playersTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.playersTable.customContextMenuRequested.connect(self._on_players_table_context_menu)
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)
self.addRoundBtn.clicked.connect(self._on_add_round_clicked)
# Pages
self.warParticipantsTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.warParticipantsTable.customContextMenuRequested.connect(self._on_war_participants_table_context_menu)
self.objectivesTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
@ -64,8 +58,10 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
self.campaignParticipantsTable.customContextMenuRequested.connect(self._on_campaign_participants_table_context_menu)
self.sectorsTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.sectorsTable.customContextMenuRequested.connect(self._on_sectors_table_context_menu)
self.choicesTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.choicesTable.customContextMenuRequested.connect(self._on_choices_table_context_menu)
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)
self.addRoundBtn.clicked.connect(self._on_add_round_clicked)
def _emit_selection_changed(self, current, previous):
if not self.on_tree_selection_changed:
@ -378,40 +374,10 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
# Round page
def _on_choices_table_context_menu(self, pos):
item = self.choicesTable.itemAt(pos)
if not item:
return
row = item.row()
name_item = self.choicesTable.item(row, 0)
if not name_item:
return
choice_id = name_item.data(Qt.ItemDataRole.UserRole)
if choice_id is None:
return
menu = QMenu(self)
edit_action = menu.addAction("Edit")
action = menu.exec(self.choicesTable.viewport().mapToGlobal(pos))
if action == edit_action and self.on_edit_item:
self.on_edit_item(ItemType.CHOICE, choice_id)
def show_round_details(self, *, index: int):
self.roundNb.setText(f"Round {index}")
def display_round_choices(self, participants: list[tuple[str, str, str, str]]):
table = self.choicesTable
table.clearContents()
table.setRowCount(len(participants))
for row, (participant, priority, secondary, choice_id) in enumerate(participants):
participant_item = QtWidgets.QTableWidgetItem(participant)
priority_item = QtWidgets.QTableWidgetItem(priority)
secondary_item = QtWidgets.QTableWidgetItem(secondary)
participant_item.setData(Qt.ItemDataRole.UserRole, choice_id)
table.setItem(row, 0, participant_item)
table.setItem(row, 1, priority_item)
table.setItem(row, 2, secondary_item)
table.resizeColumnsToContents()
class PlayerDialog(QDialog):
def __init__(self, parent=None, *, default_name: str = ""):
super().__init__(parent)
@ -538,29 +504,3 @@ class SectorDialog(QDialog):
def get_influence_id(self) -> str:
return self.ui.influenceComboBox.currentData()
class ChoicesDialog(QDialog):
def __init__(self, parent=None, *, participants: list, default_participant_id=None, sectors: list, default_priority_id=None, default_secondary_id=None):
super().__init__(parent)
self.ui = Ui_choicesDialog()
self.ui.setupUi(self)
for part in participants:
self.ui.playerComboBox.addItem(part.name, part.id)
select_if_exists(self.ui.playerComboBox, default_participant_id)
self.ui.playerComboBox.setEnabled(False)
self.ui.priorityComboBox.addItem("(none)", None)
self.ui.secondaryComboBox.addItem("(none)", None)
for sect in sectors:
self.ui.priorityComboBox.addItem(sect.name, sect.id)
self.ui.secondaryComboBox.addItem(sect.name, sect.id)
select_if_exists(self.ui.priorityComboBox, default_priority_id)
select_if_exists(self.ui.secondaryComboBox, default_secondary_id)
def get_participant_id(self) -> str:
return self.ui.playerComboBox.currentData()
def get_priority_id(self) -> str:
return self.ui.priorityComboBox.currentData()
def get_secondary_id(self) -> str:
return self.ui.secondaryComboBox.currentData()