diff --git a/src/warchron/controller/campaign_controller.py b/src/warchron/controller/campaign_controller.py
index 96c3a9a..e0d37c1 100644
--- a/src/warchron/controller/campaign_controller.py
+++ b/src/warchron/controller/campaign_controller.py
@@ -36,6 +36,8 @@ class CampaignController:
major=war.get_objective_name(sect.major_objective_id),
minor=war.get_objective_name(sect.minor_objective_id),
influence=war.get_objective_name(sect.influence_objective_id),
+ mission=sect.mission,
+ description=sect.description,
)
for sect in sectors
]
@@ -214,6 +216,8 @@ class CampaignController:
major_id = dialog.get_major_id()
minor_id = dialog.get_minor_id()
influence_id = dialog.get_influence_id()
+ mission = dialog.get_mission()
+ description = dialog.get_description()
if not self._validate_sector_inputs(
name, round_id, major_id, minor_id, influence_id
):
@@ -225,6 +229,8 @@ class CampaignController:
major_id,
minor_id,
influence_id,
+ mission,
+ description,
)
self.app.is_dirty = True
self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
@@ -251,6 +257,8 @@ class CampaignController:
default_major_id=sect.major_objective_id,
default_minor_id=sect.minor_objective_id,
default_influence_id=sect.influence_objective_id,
+ default_mission=sect.mission,
+ default_description=sect.description,
)
if sect_dialog.exec() == QDialog.DialogCode.Accepted:
name = sect_dialog.get_sector_name()
@@ -258,6 +266,8 @@ class CampaignController:
major_id = sect_dialog.get_major_id()
minor_id = sect_dialog.get_minor_id()
influence_id = sect_dialog.get_influence_id()
+ mission = sect_dialog.get_mission()
+ description = sect_dialog.get_description()
self.app.model.update_sector(
sector_id,
name=name,
@@ -265,4 +275,6 @@ class CampaignController:
major_id=major_id,
minor_id=minor_id,
influence_id=influence_id,
+ mission=mission,
+ description=description,
)
diff --git a/src/warchron/controller/dtos.py b/src/warchron/controller/dtos.py
index d96df92..f428cd6 100644
--- a/src/warchron/controller/dtos.py
+++ b/src/warchron/controller/dtos.py
@@ -66,6 +66,8 @@ class SectorDTO:
major: str | None
minor: str | None
influence: str | None
+ mission: str | None
+ description: str | None
@dataclass
diff --git a/src/warchron/model/campaign.py b/src/warchron/model/campaign.py
index 4a847c0..fb16c97 100644
--- a/src/warchron/model/campaign.py
+++ b/src/warchron/model/campaign.py
@@ -152,8 +152,12 @@ class Campaign:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
) -> Sector:
- sect = Sector(name, round_id, major_id, minor_id, influence_id)
+ sect = Sector(
+ name, round_id, major_id, minor_id, influence_id, mission, description
+ )
self.sectors[sect.id] = sect
return sect
@@ -177,6 +181,8 @@ class Campaign:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
) -> None:
sect = self.get_sector(sector_id)
old_round_id = sect.round_id
@@ -187,6 +193,8 @@ class Campaign:
sect.set_major(major_id)
sect.set_minor(minor_id)
sect.set_influence(influence_id)
+ sect.set_mission(mission)
+ sect.set_description(description)
if old_round_id == round_id:
apply_update()
diff --git a/src/warchron/model/model.py b/src/warchron/model/model.py
index 36ab496..ca7cd10 100644
--- a/src/warchron/model/model.py
+++ b/src/warchron/model/model.py
@@ -301,9 +301,13 @@ class Model:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
) -> Sector:
camp = self.get_campaign(campaign_id)
- return camp.add_sector(name, round_id, major_id, minor_id, influence_id)
+ return camp.add_sector(
+ name, round_id, major_id, minor_id, influence_id, mission, description
+ )
# TODO replace multiloops by internal has_* method
def get_sector(self, sector_id: str) -> Sector:
@@ -323,6 +327,8 @@ class Model:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
) -> None:
war = self.get_war_by_sector(sector_id)
war.update_sector(
@@ -332,6 +338,8 @@ class Model:
major_id=major_id,
minor_id=minor_id,
influence_id=influence_id,
+ mission=mission,
+ description=description,
)
def remove_sector(self, sector_id: str) -> None:
diff --git a/src/warchron/model/sector.py b/src/warchron/model/sector.py
index 3b76068..479dcf6 100644
--- a/src/warchron/model/sector.py
+++ b/src/warchron/model/sector.py
@@ -11,6 +11,8 @@ class Sector:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
):
self.id: str = str(uuid4())
self.name: str = name
@@ -18,8 +20,8 @@ class Sector:
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.mission: str | None = None
- self.description: str | None = None
+ self.mission: str | None = mission
+ self.description: str | None = description
def set_id(self, new_id: str) -> None:
self.id = new_id
@@ -39,6 +41,12 @@ class Sector:
def set_influence(self, new_influence_id: str | None) -> None:
self.influence_objective_id = new_influence_id
+ def set_mission(self, new_mission_id: str | None) -> None:
+ self.mission = new_mission_id
+
+ def set_description(self, new_description: str | None) -> None:
+ self.description = new_description
+
def toDict(self) -> Dict[str, Any]:
return {
"id": self.id,
@@ -59,6 +67,8 @@ class Sector:
data.get("major_objective_id") or None,
data.get("minor_objective_id") or None,
data.get("influence_objective_id") or None,
+ data.get("mission") or None,
+ data.get("description") or None,
)
sec.set_id(data["id"])
sec.mission = data.get("mission") or None
diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py
index 71cbe5c..a2fa125 100644
--- a/src/warchron/model/war.py
+++ b/src/warchron/model/war.py
@@ -233,9 +233,13 @@ class War:
major_id: str,
minor_id: str,
influence_id: str,
+ mission: str,
+ description: str,
) -> Sector:
camp = self.get_campaign(campaign_id)
- return camp.add_sector(name, round_id, major_id, minor_id, influence_id)
+ return camp.add_sector(
+ name, round_id, major_id, minor_id, influence_id, mission, description
+ )
# TODO replace multiloops by internal has_* method
def get_sector(self, sector_id: str) -> Sector:
@@ -254,6 +258,8 @@ class War:
major_id: str | None,
minor_id: str | None,
influence_id: str | None,
+ mission: str | None,
+ description: str | None,
) -> None:
camp = self.get_campaign_by_sector(sector_id)
camp.update_sector(
@@ -263,6 +269,8 @@ class War:
major_id=major_id,
minor_id=minor_id,
influence_id=influence_id,
+ mission=mission,
+ description=description,
)
def remove_sector(self, sector_id: str) -> None:
diff --git a/src/warchron/view/sector_dialog.py b/src/warchron/view/sector_dialog.py
index 65e2802..783fb12 100644
--- a/src/warchron/view/sector_dialog.py
+++ b/src/warchron/view/sector_dialog.py
@@ -19,6 +19,8 @@ class SectorDialog(QDialog):
default_major_id: str | None = None,
default_minor_id: str | None = None,
default_influence_id: str | None = None,
+ default_mission: str | None = None,
+ default_description: str | None = None,
) -> None:
super().__init__(parent)
self.ui: Ui_sectorDialog = Ui_sectorDialog()
@@ -38,6 +40,8 @@ class SectorDialog(QDialog):
select_if_exists(self.ui.majorComboBox, default_major_id)
select_if_exists(self.ui.minorComboBox, default_minor_id)
select_if_exists(self.ui.influenceComboBox, default_influence_id)
+ self.ui.sectorMission.setText(default_mission)
+ self.ui.sectorDescription.setPlainText(default_description)
def get_sector_name(self) -> str:
return self.ui.sectorName.text().strip()
@@ -58,5 +62,10 @@ class SectorDialog(QDialog):
text = cast(str, self.ui.influenceComboBox.currentData())
return text if text else None
+ def get_mission(self) -> str | None:
+ text = self.ui.sectorMission.text().strip()
+ return text if text else None
-# TODO fix mission + description missing
+ def get_description(self) -> str | None:
+ text = self.ui.sectorDescription.toPlainText().strip()
+ return text if text else None
diff --git a/src/warchron/view/ui/ui_main_window.py b/src/warchron/view/ui/ui_main_window.py
index 234c75f..cb66fbd 100644
--- a/src/warchron/view/ui/ui_main_window.py
+++ b/src/warchron/view/ui/ui_main_window.py
@@ -272,7 +272,7 @@ class Ui_MainWindow(object):
self.sectorsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
self.sectorsTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
self.sectorsTable.setObjectName("sectorsTable")
- self.sectorsTable.setColumnCount(6)
+ self.sectorsTable.setColumnCount(7)
self.sectorsTable.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.sectorsTable.setHorizontalHeaderItem(0, item)
@@ -286,6 +286,8 @@ class Ui_MainWindow(object):
self.sectorsTable.setHorizontalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.sectorsTable.setHorizontalHeaderItem(5, item)
+ item = QtWidgets.QTableWidgetItem()
+ self.sectorsTable.setHorizontalHeaderItem(6, item)
self.sectorsTable.horizontalHeader().setStretchLastSection(False)
self.verticalLayout_5.addWidget(self.sectorsTable)
self.verticalLayout_7.addWidget(self.groupBox_3)
@@ -381,7 +383,7 @@ class Ui_MainWindow(object):
self.battlesTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
self.battlesTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
self.battlesTable.setObjectName("battlesTable")
- self.battlesTable.setColumnCount(3)
+ self.battlesTable.setColumnCount(5)
self.battlesTable.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.battlesTable.setHorizontalHeaderItem(0, item)
@@ -389,6 +391,10 @@ class Ui_MainWindow(object):
self.battlesTable.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.battlesTable.setHorizontalHeaderItem(2, item)
+ item = QtWidgets.QTableWidgetItem()
+ self.battlesTable.setHorizontalHeaderItem(3, item)
+ item = QtWidgets.QTableWidgetItem()
+ self.battlesTable.setHorizontalHeaderItem(4, item)
self.battlesTable.horizontalHeader().setStretchLastSection(False)
self.horizontalLayout_12.addWidget(self.battlesTable)
self.verticalLayout_8.addWidget(self.groupBox_6)
@@ -546,12 +552,14 @@ class Ui_MainWindow(object):
item = self.sectorsTable.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Round"))
item = self.sectorsTable.horizontalHeaderItem(2)
- item.setText(_translate("MainWindow", "Major obj."))
+ item.setText(_translate("MainWindow", "Mission"))
item = self.sectorsTable.horizontalHeaderItem(3)
- item.setText(_translate("MainWindow", "Minor opp."))
+ item.setText(_translate("MainWindow", "Major obj."))
item = self.sectorsTable.horizontalHeaderItem(4)
- item.setText(_translate("MainWindow", "Influence imp."))
+ item.setText(_translate("MainWindow", "Minor opp."))
item = self.sectorsTable.horizontalHeaderItem(5)
+ item.setText(_translate("MainWindow", "Influence imp."))
+ item = self.sectorsTable.horizontalHeaderItem(6)
item.setText(_translate("MainWindow", "Description"))
self.groupBox_4.setTitle(_translate("MainWindow", "Participants"))
self.addCampaignParticipantBtn.setText(_translate("MainWindow", "Add participant"))
@@ -585,6 +593,10 @@ class Ui_MainWindow(object):
item.setText(_translate("MainWindow", "Player 1"))
item = self.battlesTable.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Player 2"))
+ item = self.battlesTable.horizontalHeaderItem(3)
+ item.setText(_translate("MainWindow", "Score"))
+ item = self.battlesTable.horizontalHeaderItem(4)
+ item.setText(_translate("MainWindow", "Victory condition"))
self.endRoundBtn.setText(_translate("MainWindow", "End round"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.warsTab), _translate("MainWindow", "Wars"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
diff --git a/src/warchron/view/ui/ui_main_window.ui b/src/warchron/view/ui/ui_main_window.ui
index 735b3c0..12b1653 100644
--- a/src/warchron/view/ui/ui_main_window.ui
+++ b/src/warchron/view/ui/ui_main_window.ui
@@ -662,6 +662,11 @@
Round
+
+
+ Mission
+
+
Major obj.
@@ -917,6 +922,16 @@
Player 2
+
+
+ Score
+
+
+
+
+ Victory condition
+
+
diff --git a/src/warchron/view/view.py b/src/warchron/view/view.py
index e7b999b..75be8c3 100644
--- a/src/warchron/view/view.py
+++ b/src/warchron/view/view.py
@@ -431,15 +431,19 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
round_item = QtWidgets.QTableWidgetItem(
format_round_label(sect.round_index)
)
+ mission_item = QtWidgets.QTableWidgetItem(sect.mission)
major_item = QtWidgets.QTableWidgetItem(sect.major)
minor_item = QtWidgets.QTableWidgetItem(sect.minor)
influence_item = QtWidgets.QTableWidgetItem(sect.influence)
+ description_item = QtWidgets.QTableWidgetItem(sect.description)
name_item.setData(Qt.ItemDataRole.UserRole, sect.id)
table.setItem(row, 0, name_item)
table.setItem(row, 1, round_item)
- table.setItem(row, 2, major_item)
- table.setItem(row, 3, minor_item)
- table.setItem(row, 4, influence_item)
+ table.setItem(row, 2, mission_item)
+ table.setItem(row, 3, major_item)
+ table.setItem(row, 4, minor_item)
+ table.setItem(row, 5, influence_item)
+ table.setItem(row, 6, description_item)
table.resizeColumnsToContents()
def display_campaign_participants(