move war settings in a dedicated menu

This commit is contained in:
Maxime Réaux 2026-03-23 11:55:15 +01:00
parent 7a9322aa75
commit 188f5256fb
13 changed files with 924 additions and 251 deletions

View file

@ -42,9 +42,7 @@ class AppController:
self.view.actionAbout.triggered.connect(self.show_about) self.view.actionAbout.triggered.connect(self.show_about)
self.view.addPlayerBtn.clicked.connect(lambda: self.add_item(ItemType.PLAYER)) self.view.addPlayerBtn.clicked.connect(lambda: self.add_item(ItemType.PLAYER))
self.view.addWarBtn.clicked.connect(lambda: self.add_item(ItemType.WAR)) self.view.addWarBtn.clicked.connect(lambda: self.add_item(ItemType.WAR))
self.view.majorValue.valueChanged.connect(self.wars.set_major_value) self.view.settingsBtn.clicked.connect(self.wars.open_settings)
self.view.minorValue.valueChanged.connect(self.wars.set_minor_value)
self.view.influenceToken.toggled.connect(self.wars.set_influence_token)
self.view.addObjectiveBtn.clicked.connect( self.view.addObjectiveBtn.clicked.connect(
lambda: self.add_item(ItemType.OBJECTIVE) lambda: self.add_item(ItemType.OBJECTIVE)
) )

View file

@ -138,3 +138,10 @@ class WarParticipantScoreDTO:
@dataclass @dataclass
class TieDialogData: class TieDialogData:
title: str title: str
@dataclass
class WarSettingsDTO:
major_value: int
minor_value: int
influence_token: bool

View file

@ -19,9 +19,10 @@ if TYPE_CHECKING:
from warchron.controller.dtos import ( from warchron.controller.dtos import (
ParticipantOption, ParticipantOption,
WarParticipantScoreDTO, WarParticipantScoreDTO,
WarSettingsDTO,
ObjectiveDTO, ObjectiveDTO,
) )
from warchron.model.war import War from warchron.model.war import War, WarSettings
from warchron.model.war_participant import WarParticipant from warchron.model.war_participant import WarParticipant
from warchron.model.objective import Objective from warchron.model.objective import Objective
from warchron.model.tiebreaking import TieContext, TieBreaker from warchron.model.tiebreaking import TieContext, TieBreaker
@ -33,6 +34,7 @@ from warchron.view.war_dialog import WarDialog
from warchron.view.objective_dialog import ObjectiveDialog from warchron.view.objective_dialog import ObjectiveDialog
from warchron.view.war_participant_dialog import WarParticipantDialog from warchron.view.war_participant_dialog import WarParticipantDialog
from warchron.view.tie_dialog import TieDialog from warchron.view.tie_dialog import TieDialog
from warchron.view.settings_dialog import SettingsDialog
class WarController: class WarController:
@ -42,11 +44,6 @@ class WarController:
def _fill_war_details(self, war_id: str) -> None: def _fill_war_details(self, war_id: str) -> None:
war = self.app.model.get_war(war_id) war = self.app.model.get_war(war_id)
self.app.view.show_war_details(name=war.name, year=war.year) self.app.view.show_war_details(name=war.name, year=war.year)
self.app.view.set_war_objective_values(
major=war.major_value,
minor=war.minor_value,
influence=war.influence_token,
)
objectives = war.get_all_objectives() objectives = war.get_all_objectives()
objectives_for_display: List[ObjectiveDTO] = [ objectives_for_display: List[ObjectiveDTO] = [
ObjectiveDTO(id=obj.id, name=obj.name, description=obj.description) ObjectiveDTO(id=obj.id, name=obj.name, description=obj.description)
@ -189,50 +186,32 @@ class WarController:
bids_map[ctx.key()] = dialog.get_bids() bids_map[ctx.key()] = dialog.get_bids()
return bids_map return bids_map
def set_major_value(self, value: int) -> None: def open_settings(self) -> None:
war_id = self.app.navigation.selected_war_id war_id = self.app.navigation.selected_war_id
if not war_id: if not war_id:
return return
try: settings = self.app.model.get_war_settings(war_id)
self.app.model.set_major_value(war_id, value) settings_for_display = WarSettingsDTO(
except DomainError as e: major_value=settings.major_value,
QMessageBox.warning( minor_value=settings.minor_value,
self.app.view, influence_token=settings.influence_token,
"Setting forbidden",
str(e),
) )
dialog = SettingsDialog(self.app.view)
dialog.load_settings(settings_for_display)
if dialog.exec() != QDialog.DialogCode.Accepted:
return return
self.app.is_dirty = True if not dialog.has_changes():
self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
def set_minor_value(self, value: int) -> None:
war_id = self.app.navigation.selected_war_id
if not war_id:
return return
try: new_settingsDTO = dialog.get_settings()
self.app.model.set_minor_value(war_id, value) new_settings = WarSettings(
except DomainError as e: new_settingsDTO.major_value,
QMessageBox.warning( new_settingsDTO.minor_value,
self.app.view, new_settingsDTO.influence_token,
"Setting forbidden",
str(e),
) )
return
self.app.is_dirty = True
self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
def set_influence_token(self, checked: bool) -> None:
war_id = self.app.navigation.selected_war_id
if not war_id:
return
try: try:
self.app.model.set_influence_token(war_id, checked) self.app.model.apply_war_settings(war_id, new_settings)
except DomainError as e: except DomainError as e:
QMessageBox.warning( QMessageBox.warning(self.app.view, "Setting forbidden", str(e))
self.app.view,
"Setting forbidden",
str(e),
)
return return
except RequiresConfirmation as e: except RequiresConfirmation as e:
reply = QMessageBox.question( reply = QMessageBox.question(
@ -245,7 +224,7 @@ class WarController:
e.action() e.action()
else: else:
return return
self.app.is_dirty = True self.is_dirty = True
self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)
self.app.navigation.refresh_and_select( self.app.navigation.refresh_and_select(
RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war_id RefreshScope.WARS_TREE, item_type=ItemType.WAR, item_id=war_id

View file

@ -6,7 +6,7 @@ from datetime import datetime
from warchron.model.exception import ForbiddenOperation from warchron.model.exception import ForbiddenOperation
from warchron.model.player import Player from warchron.model.player import Player
from warchron.model.war import War from warchron.model.war import War, WarSettings
from warchron.model.war_participant import WarParticipant from warchron.model.war_participant import WarParticipant
from warchron.model.objective import Objective from warchron.model.objective import Objective
from warchron.model.campaign import Campaign from warchron.model.campaign import Campaign
@ -165,17 +165,13 @@ class Model:
war.set_name(name) war.set_name(name)
war.set_year(year) war.set_year(year)
def set_major_value(self, war_id: str, value: int) -> None: def get_war_settings(self, war_id: str) -> WarSettings:
war = self.get_war(war_id) war = self.wars[war_id]
war.set_major_value(value) return war.get_war_settings()
def set_minor_value(self, war_id: str, value: int) -> None: def apply_war_settings(self, war_id: str, settings: WarSettings) -> None:
war = self.get_war(war_id) war = self.get_war(war_id)
war.set_minor_value(value) war.apply_war_settings(settings)
def set_influence_token(self, war_id: str, value: bool) -> None:
war = self.get_war(war_id)
war.set_influence_token(value)
def get_all_wars(self) -> List[War]: def get_all_wars(self) -> List[War]:
return list(self.wars.values()) return list(self.wars.values())

View file

@ -291,7 +291,6 @@ class Pairing:
) )
for battle in available for battle in available
] ]
print(f"scored for pid {pid}: {scored}")
scored.sort(key=lambda x: x[0]) scored.sort(key=lambda x: x[0])
best_score = scored[0][0] best_score = scored[0][0]
best_battles = [b for s, b in scored if s == best_score] best_battles = [b for s, b in scored if s == best_score]
@ -314,7 +313,6 @@ class Pairing:
rematch_penalty = 0 rematch_penalty = 0
for opp in occupants: for opp in occupants:
key = (pid, opp) if pid < opp else (opp, pid) key = (pid, opp) if pid < opp else (opp, pid)
print(f"key for occupant {opp}: {key}")
rematch_penalty += match_counts.get(key, 0) rematch_penalty += match_counts.get(key, 0)
return rematch_penalty * rematch_weight + occupancy_penalty * occupancy_weight return rematch_penalty * rematch_weight + occupancy_penalty * occupancy_weight

View file

@ -1,4 +1,5 @@
from __future__ import annotations from __future__ import annotations
from dataclasses import dataclass
from uuid import uuid4 from uuid import uuid4
from datetime import datetime from datetime import datetime
from typing import Any, Dict, List, Set from typing import Any, Dict, List, Set
@ -25,6 +26,13 @@ from warchron.model.choice import Choice
from warchron.model.battle import Battle from warchron.model.battle import Battle
@dataclass
class WarSettings:
major_value: int
minor_value: int
influence_token: bool
class War: class War:
def __init__(self, name: str, year: int) -> None: def __init__(self, name: str, year: int) -> None:
self.id: str = str(uuid4()) self.id: str = str(uuid4())
@ -48,6 +56,21 @@ class War:
def set_year(self, new_year: int) -> None: def set_year(self, new_year: int) -> None:
self.year = new_year self.year = new_year
def get_war_settings(self) -> WarSettings:
return WarSettings(
self.major_value,
self.minor_value,
self.influence_token,
)
def apply_war_settings(self, settings: WarSettings) -> None:
if settings.major_value != self.major_value:
self.set_major_value(settings.major_value)
if settings.minor_value != self.minor_value:
self.set_minor_value(settings.minor_value)
if settings.influence_token != self.influence_token:
self.set_influence_token(settings.influence_token)
def set_major_value(self, new_value: int) -> None: def set_major_value(self, new_value: int) -> None:
if self.is_over: if self.is_over:
raise ForbiddenOperation("Can't set major value of a closed war.") raise ForbiddenOperation("Can't set major value of a closed war.")

View file

@ -0,0 +1,66 @@
from PyQt6.QtWidgets import QWidget, QDialog, QDialogButtonBox
from warchron.constants import Icons, IconName
from warchron.controller.dtos import WarSettingsDTO
from warchron.view.ui.ui_settings_dialog import Ui_settingsDialog
class SettingsDialog(QDialog):
def __init__(
self,
parent: QWidget | None = None,
) -> None:
super().__init__(parent)
self.ui: Ui_settingsDialog = Ui_settingsDialog()
self.ui.setupUi(self) # type: ignore
self._original: WarSettingsDTO | None = None
self.ui.majorValue.setMinimum(0)
self.ui.minorValue.setMinimum(0)
self.ui.majorValue.valueChanged.connect(self._on_major_changed)
self.ui.minorValue.valueChanged.connect(self._on_minor_changed)
self.ui.buttonBox.accepted.connect(self.accept)
self.ui.buttonBox.rejected.connect(self.reject)
self._validate()
self.setWindowIcon(Icons.get(IconName.WARCHRONICO))
def load_settings(self, settings: WarSettingsDTO) -> None:
self._original = settings
self.ui.majorValue.blockSignals(True)
self.ui.minorValue.blockSignals(True)
self.ui.influenceToken.blockSignals(True)
self.ui.majorValue.setValue(settings.major_value)
self.ui.minorValue.setValue(settings.minor_value)
self.ui.influenceToken.setChecked(settings.influence_token)
self.ui.minorValue.setMaximum(settings.major_value)
self.ui.majorValue.setMinimum(settings.minor_value)
self.ui.majorValue.blockSignals(False)
self.ui.minorValue.blockSignals(False)
self.ui.influenceToken.blockSignals(False)
self._validate()
def get_settings(self) -> WarSettingsDTO:
return WarSettingsDTO(
major_value=self.ui.majorValue.value(),
minor_value=self.ui.minorValue.value(),
influence_token=self.ui.influenceToken.isChecked(),
)
def has_changes(self) -> bool:
if self._original is None:
return True
return self.get_settings() != self._original
def _validate(self) -> None:
valid = self.ui.majorValue.value() >= self.ui.minorValue.value()
ok_btn = self.ui.buttonBox.button(QDialogButtonBox.StandardButton.Ok)
if ok_btn is not None:
ok_btn.setEnabled(valid)
def _on_major_changed(self, value: int) -> None:
self.ui.minorValue.setMaximum(value)
self._validate()
def _on_minor_changed(self, value: int) -> None:
self.ui.majorValue.setMinimum(value)
self._validate()

View file

@ -124,6 +124,17 @@ class Ui_MainWindow(object):
self.warYear.setObjectName("warYear") self.warYear.setObjectName("warYear")
self.horizontalLayout_8.addWidget(self.warYear) self.horizontalLayout_8.addWidget(self.warYear)
self.verticalLayout_10.addLayout(self.horizontalLayout_8) self.verticalLayout_10.addLayout(self.horizontalLayout_8)
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_7.addItem(spacerItem3)
self.label_19 = QtWidgets.QLabel(parent=self.pageWar)
self.label_19.setObjectName("label_19")
self.horizontalLayout_7.addWidget(self.label_19)
self.settingsBtn = QtWidgets.QToolButton(parent=self.pageWar)
self.settingsBtn.setObjectName("settingsBtn")
self.horizontalLayout_7.addWidget(self.settingsBtn)
self.verticalLayout_10.addLayout(self.horizontalLayout_7)
self.groupBox = QtWidgets.QGroupBox(parent=self.pageWar) self.groupBox = QtWidgets.QGroupBox(parent=self.pageWar)
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(10) font.setPointSize(10)
@ -137,43 +148,8 @@ class Ui_MainWindow(object):
self.addObjectiveBtn.setEnabled(True) self.addObjectiveBtn.setEnabled(True)
self.addObjectiveBtn.setObjectName("addObjectiveBtn") self.addObjectiveBtn.setObjectName("addObjectiveBtn")
self.horizontalLayout_3.addWidget(self.addObjectiveBtn) self.horizontalLayout_3.addWidget(self.addObjectiveBtn)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem3)
self.label = QtWidgets.QLabel(parent=self.groupBox)
self.label.setObjectName("label")
self.horizontalLayout_3.addWidget(self.label)
self.majorValue = QtWidgets.QSpinBox(parent=self.groupBox)
self.majorValue.setMinimum(1)
self.majorValue.setObjectName("majorValue")
self.horizontalLayout_3.addWidget(self.majorValue)
self.label_5 = QtWidgets.QLabel(parent=self.groupBox)
self.label_5.setObjectName("label_5")
self.horizontalLayout_3.addWidget(self.label_5)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem4) self.horizontalLayout_3.addItem(spacerItem4)
self.label_2 = QtWidgets.QLabel(parent=self.groupBox)
self.label_2.setObjectName("label_2")
self.horizontalLayout_3.addWidget(self.label_2)
self.minorValue = QtWidgets.QSpinBox(parent=self.groupBox)
self.minorValue.setMinimum(1)
self.minorValue.setObjectName("minorValue")
self.horizontalLayout_3.addWidget(self.minorValue)
self.label_4 = QtWidgets.QLabel(parent=self.groupBox)
self.label_4.setObjectName("label_4")
self.horizontalLayout_3.addWidget(self.label_4)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem5)
self.label_3 = QtWidgets.QLabel(parent=self.groupBox)
self.label_3.setObjectName("label_3")
self.horizontalLayout_3.addWidget(self.label_3)
self.influenceToken = QtWidgets.QCheckBox(parent=self.groupBox)
self.influenceToken.setEnabled(True)
self.influenceToken.setCheckable(True)
self.influenceToken.setChecked(True)
self.influenceToken.setObjectName("influenceToken")
self.horizontalLayout_3.addWidget(self.influenceToken)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem6)
self.verticalLayout.addLayout(self.horizontalLayout_3) self.verticalLayout.addLayout(self.horizontalLayout_3)
self.objectivesTable = QtWidgets.QTableWidget(parent=self.groupBox) self.objectivesTable = QtWidgets.QTableWidget(parent=self.groupBox)
self.objectivesTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) self.objectivesTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
@ -201,8 +177,8 @@ class Ui_MainWindow(object):
self.addWarParticipantBtn = QtWidgets.QPushButton(parent=self.groupBox_2) self.addWarParticipantBtn = QtWidgets.QPushButton(parent=self.groupBox_2)
self.addWarParticipantBtn.setObjectName("addWarParticipantBtn") self.addWarParticipantBtn.setObjectName("addWarParticipantBtn")
self.horizontalLayout_5.addWidget(self.addWarParticipantBtn) self.horizontalLayout_5.addWidget(self.addWarParticipantBtn)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_5.addItem(spacerItem7) self.horizontalLayout_5.addItem(spacerItem5)
self.verticalLayout_2.addLayout(self.horizontalLayout_5) self.verticalLayout_2.addLayout(self.horizontalLayout_5)
self.warParticipantsTable = QtWidgets.QTableWidget(parent=self.groupBox_2) self.warParticipantsTable = QtWidgets.QTableWidget(parent=self.groupBox_2)
self.warParticipantsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) self.warParticipantsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
@ -226,8 +202,8 @@ class Ui_MainWindow(object):
self.verticalLayout_10.addWidget(self.groupBox_2) self.verticalLayout_10.addWidget(self.groupBox_2)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout() self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.horizontalLayout_6.setObjectName("horizontalLayout_6")
spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem8) self.horizontalLayout_6.addItem(spacerItem6)
self.endWarBtn = QtWidgets.QPushButton(parent=self.pageWar) self.endWarBtn = QtWidgets.QPushButton(parent=self.pageWar)
self.endWarBtn.setEnabled(True) self.endWarBtn.setEnabled(True)
self.endWarBtn.setObjectName("endWarBtn") self.endWarBtn.setObjectName("endWarBtn")
@ -246,8 +222,8 @@ class Ui_MainWindow(object):
self.campaignName.setFont(font) self.campaignName.setFont(font)
self.campaignName.setObjectName("campaignName") self.campaignName.setObjectName("campaignName")
self.horizontalLayout_11.addWidget(self.campaignName) self.horizontalLayout_11.addWidget(self.campaignName)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_11.addItem(spacerItem9) self.horizontalLayout_11.addItem(spacerItem7)
self.campaignMonth = QtWidgets.QLabel(parent=self.pageCampaign) self.campaignMonth = QtWidgets.QLabel(parent=self.pageCampaign)
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(12) font.setPointSize(12)
@ -268,8 +244,8 @@ class Ui_MainWindow(object):
self.addSectorBtn.setEnabled(True) self.addSectorBtn.setEnabled(True)
self.addSectorBtn.setObjectName("addSectorBtn") self.addSectorBtn.setObjectName("addSectorBtn")
self.horizontalLayout_17.addWidget(self.addSectorBtn) self.horizontalLayout_17.addWidget(self.addSectorBtn)
spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_17.addItem(spacerItem10) self.horizontalLayout_17.addItem(spacerItem8)
self.verticalLayout_5.addLayout(self.horizontalLayout_17) self.verticalLayout_5.addLayout(self.horizontalLayout_17)
self.sectorsTable = QtWidgets.QTableWidget(parent=self.groupBox_3) self.sectorsTable = QtWidgets.QTableWidget(parent=self.groupBox_3)
self.sectorsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) self.sectorsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
@ -306,8 +282,8 @@ class Ui_MainWindow(object):
self.addCampaignParticipantBtn = QtWidgets.QPushButton(parent=self.groupBox_4) self.addCampaignParticipantBtn = QtWidgets.QPushButton(parent=self.groupBox_4)
self.addCampaignParticipantBtn.setObjectName("addCampaignParticipantBtn") self.addCampaignParticipantBtn.setObjectName("addCampaignParticipantBtn")
self.horizontalLayout_18.addWidget(self.addCampaignParticipantBtn) self.horizontalLayout_18.addWidget(self.addCampaignParticipantBtn)
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_18.addItem(spacerItem11) self.horizontalLayout_18.addItem(spacerItem9)
self.verticalLayout_6.addLayout(self.horizontalLayout_18) self.verticalLayout_6.addLayout(self.horizontalLayout_18)
self.campaignParticipantsTable = QtWidgets.QTableWidget(parent=self.groupBox_4) self.campaignParticipantsTable = QtWidgets.QTableWidget(parent=self.groupBox_4)
self.campaignParticipantsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) self.campaignParticipantsTable.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
@ -330,8 +306,8 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addWidget(self.groupBox_4) self.verticalLayout_7.addWidget(self.groupBox_4)
self.horizontalLayout_10 = QtWidgets.QHBoxLayout() self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10") self.horizontalLayout_10.setObjectName("horizontalLayout_10")
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_10.addItem(spacerItem12) self.horizontalLayout_10.addItem(spacerItem10)
self.endCampaignBtn = QtWidgets.QPushButton(parent=self.pageCampaign) self.endCampaignBtn = QtWidgets.QPushButton(parent=self.pageCampaign)
self.endCampaignBtn.setEnabled(True) self.endCampaignBtn.setEnabled(True)
self.endCampaignBtn.setObjectName("endCampaignBtn") self.endCampaignBtn.setObjectName("endCampaignBtn")
@ -376,8 +352,8 @@ class Ui_MainWindow(object):
self.verticalLayout_8.addWidget(self.groupBox_5) self.verticalLayout_8.addWidget(self.groupBox_5)
self.horizontalLayout_13 = QtWidgets.QHBoxLayout() self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13") self.horizontalLayout_13.setObjectName("horizontalLayout_13")
spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_13.addItem(spacerItem13) self.horizontalLayout_13.addItem(spacerItem11)
self.resolvePairingBtn = QtWidgets.QPushButton(parent=self.pageRound) self.resolvePairingBtn = QtWidgets.QPushButton(parent=self.pageRound)
self.resolvePairingBtn.setEnabled(True) self.resolvePairingBtn.setEnabled(True)
self.resolvePairingBtn.setObjectName("resolvePairingBtn") self.resolvePairingBtn.setObjectName("resolvePairingBtn")
@ -413,8 +389,8 @@ class Ui_MainWindow(object):
self.verticalLayout_8.addWidget(self.groupBox_6) self.verticalLayout_8.addWidget(self.groupBox_6)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout() self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9") self.horizontalLayout_9.setObjectName("horizontalLayout_9")
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_9.addItem(spacerItem14) self.horizontalLayout_9.addItem(spacerItem12)
self.endRoundBtn = QtWidgets.QPushButton(parent=self.pageRound) self.endRoundBtn = QtWidgets.QPushButton(parent=self.pageRound)
self.endRoundBtn.setEnabled(True) self.endRoundBtn.setEnabled(True)
self.endRoundBtn.setObjectName("endRoundBtn") self.endRoundBtn.setObjectName("endRoundBtn")
@ -476,7 +452,7 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1) self.tabWidget.setCurrentIndex(1)
self.selectedDetailsStack.setCurrentIndex(3) self.selectedDetailsStack.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
@ -500,14 +476,10 @@ class Ui_MainWindow(object):
self.backgroundImage.setText(_translate("MainWindow", "IMAGE")) self.backgroundImage.setText(_translate("MainWindow", "IMAGE"))
self.warName.setText(_translate("MainWindow", "warName")) self.warName.setText(_translate("MainWindow", "warName"))
self.warYear.setText(_translate("MainWindow", "warYear")) self.warYear.setText(_translate("MainWindow", "warYear"))
self.label_19.setText(_translate("MainWindow", "Settings"))
self.settingsBtn.setText(_translate("MainWindow", "..."))
self.groupBox.setTitle(_translate("MainWindow", "Objectives")) self.groupBox.setTitle(_translate("MainWindow", "Objectives"))
self.addObjectiveBtn.setText(_translate("MainWindow", "Add objective")) self.addObjectiveBtn.setText(_translate("MainWindow", "Add objective"))
self.label.setText(_translate("MainWindow", "Major objective"))
self.label_5.setText(_translate("MainWindow", "points"))
self.label_2.setText(_translate("MainWindow", "Minor opportunity"))
self.label_4.setText(_translate("MainWindow", "points"))
self.label_3.setText(_translate("MainWindow", "Influence"))
self.influenceToken.setText(_translate("MainWindow", "Token"))
self.objectivesTable.setSortingEnabled(True) self.objectivesTable.setSortingEnabled(True)
item = self.objectivesTable.horizontalHeaderItem(0) item = self.objectivesTable.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Name")) item.setText(_translate("MainWindow", "Name"))

View file

@ -157,7 +157,7 @@
</widget> </widget>
<widget class="QStackedWidget" name="selectedDetailsStack"> <widget class="QStackedWidget" name="selectedDetailsStack">
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="pageEmpty"> <widget class="QWidget" name="pageEmpty">
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
@ -242,6 +242,37 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<spacer name="horizontalSpacer_18">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>Settings</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="settingsBtn">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="font"> <property name="font">
@ -265,110 +296,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Major objective</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="majorValue">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Minor opportunity</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="minorValue">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Influence</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="influenceToken">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Token</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<spacer name="horizontalSpacer_16"> <spacer name="horizontalSpacer_16">
<property name="orientation"> <property name="orientation">

View file

@ -0,0 +1,8 @@
# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_settings.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.

View file

@ -0,0 +1,232 @@
# Form implementation generated from reading ui file '.\src\warchron\view\ui\ui_settings_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_settingsDialog(object):
def setupUi(self, settingsDialog):
settingsDialog.setObjectName("settingsDialog")
settingsDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
settingsDialog.resize(661, 377)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(".\\src\\warchron\\view\\ui\\../resources/warchron_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
settingsDialog.setWindowIcon(icon)
self.verticalLayout_4 = QtWidgets.QVBoxLayout(settingsDialog)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.groupBox_2 = QtWidgets.QGroupBox(parent=settingsDialog)
font = QtGui.QFont()
font.setPointSize(10)
self.groupBox_2.setFont(font)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_5 = QtWidgets.QLabel(parent=self.groupBox_2)
self.label_5.setObjectName("label_5")
self.horizontalLayout.addWidget(self.label_5)
self.winValue = QtWidgets.QSpinBox(parent=self.groupBox_2)
self.winValue.setEnabled(False)
self.winValue.setMinimum(1)
self.winValue.setObjectName("winValue")
self.horizontalLayout.addWidget(self.winValue)
self.label_14 = QtWidgets.QLabel(parent=self.groupBox_2)
self.label_14.setObjectName("label_14")
self.horizontalLayout.addWidget(self.label_14)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.label_6 = QtWidgets.QLabel(parent=self.groupBox_2)
self.label_6.setObjectName("label_6")
self.horizontalLayout.addWidget(self.label_6)
self.drawValue = QtWidgets.QSpinBox(parent=self.groupBox_2)
self.drawValue.setEnabled(False)
self.drawValue.setSuffix("")
self.drawValue.setMinimum(0)
self.drawValue.setProperty("value", 0)
self.drawValue.setObjectName("drawValue")
self.horizontalLayout.addWidget(self.drawValue)
self.label_15 = QtWidgets.QLabel(parent=self.groupBox_2)
self.label_15.setObjectName("label_15")
self.horizontalLayout.addWidget(self.label_15)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_12 = QtWidgets.QLabel(parent=self.groupBox_2)
self.label_12.setObjectName("label_12")
self.horizontalLayout_5.addWidget(self.label_12)
self.rankingComboBox = QtWidgets.QComboBox(parent=self.groupBox_2)
self.rankingComboBox.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rankingComboBox.sizePolicy().hasHeightForWidth())
self.rankingComboBox.setSizePolicy(sizePolicy)
self.rankingComboBox.setObjectName("rankingComboBox")
self.rankingComboBox.addItem("")
self.horizontalLayout_5.addWidget(self.rankingComboBox)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_5.addItem(spacerItem2)
self.verticalLayout_2.addLayout(self.horizontalLayout_5)
self.verticalLayout_4.addWidget(self.groupBox_2)
self.groupBox = QtWidgets.QGroupBox(parent=settingsDialog)
font = QtGui.QFont()
font.setPointSize(10)
self.groupBox.setFont(font)
self.groupBox.setObjectName("groupBox")
self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_4 = QtWidgets.QLabel(parent=self.groupBox)
self.label_4.setObjectName("label_4")
self.horizontalLayout_3.addWidget(self.label_4)
self.majorValue = QtWidgets.QSpinBox(parent=self.groupBox)
self.majorValue.setMinimum(1)
self.majorValue.setObjectName("majorValue")
self.horizontalLayout_3.addWidget(self.majorValue)
self.label_8 = QtWidgets.QLabel(parent=self.groupBox)
self.label_8.setObjectName("label_8")
self.horizontalLayout_3.addWidget(self.label_8)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem3)
self.label_9 = QtWidgets.QLabel(parent=self.groupBox)
self.label_9.setObjectName("label_9")
self.horizontalLayout_3.addWidget(self.label_9)
self.minorValue = QtWidgets.QSpinBox(parent=self.groupBox)
self.minorValue.setMinimum(1)
self.minorValue.setObjectName("minorValue")
self.horizontalLayout_3.addWidget(self.minorValue)
self.label_10 = QtWidgets.QLabel(parent=self.groupBox)
self.label_10.setObjectName("label_10")
self.horizontalLayout_3.addWidget(self.label_10)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem4)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.label_11 = QtWidgets.QLabel(parent=self.groupBox)
self.label_11.setObjectName("label_11")
self.horizontalLayout_4.addWidget(self.label_11)
self.influenceToken = QtWidgets.QCheckBox(parent=self.groupBox)
self.influenceToken.setEnabled(True)
self.influenceToken.setCheckable(True)
self.influenceToken.setChecked(True)
self.influenceToken.setObjectName("influenceToken")
self.horizontalLayout_4.addWidget(self.influenceToken)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_4.addItem(spacerItem5)
self.verticalLayout.addLayout(self.horizontalLayout_4)
self.verticalLayout_4.addWidget(self.groupBox)
self.groupBox_3 = QtWidgets.QGroupBox(parent=settingsDialog)
font = QtGui.QFont()
font.setPointSize(10)
self.groupBox_3.setFont(font)
self.groupBox_3.setObjectName("groupBox_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_3)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.label_17 = QtWidgets.QLabel(parent=self.groupBox_3)
self.label_17.setObjectName("label_17")
self.horizontalLayout_7.addWidget(self.label_17)
self.fallbackComboBox = QtWidgets.QComboBox(parent=self.groupBox_3)
self.fallbackComboBox.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.fallbackComboBox.sizePolicy().hasHeightForWidth())
self.fallbackComboBox.setSizePolicy(sizePolicy)
self.fallbackComboBox.setObjectName("fallbackComboBox")
self.fallbackComboBox.addItem("")
self.horizontalLayout_7.addWidget(self.fallbackComboBox)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_7.addItem(spacerItem6)
self.label_18 = QtWidgets.QLabel(parent=self.groupBox_3)
self.label_18.setObjectName("label_18")
self.horizontalLayout_7.addWidget(self.label_18)
self.influenceToken_2 = QtWidgets.QCheckBox(parent=self.groupBox_3)
self.influenceToken_2.setEnabled(False)
self.influenceToken_2.setText("")
self.influenceToken_2.setCheckable(True)
self.influenceToken_2.setChecked(True)
self.influenceToken_2.setObjectName("influenceToken_2")
self.horizontalLayout_7.addWidget(self.influenceToken_2)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_7.addItem(spacerItem7)
self.verticalLayout_3.addLayout(self.horizontalLayout_7)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_13 = QtWidgets.QLabel(parent=self.groupBox_3)
self.label_13.setObjectName("label_13")
self.horizontalLayout_6.addWidget(self.label_13)
self.rematchValue = QtWidgets.QSpinBox(parent=self.groupBox_3)
self.rematchValue.setEnabled(False)
self.rematchValue.setMinimum(1)
self.rematchValue.setObjectName("rematchValue")
self.horizontalLayout_6.addWidget(self.rematchValue)
spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem8)
self.label_16 = QtWidgets.QLabel(parent=self.groupBox_3)
self.label_16.setObjectName("label_16")
self.horizontalLayout_6.addWidget(self.label_16)
self.occupancyValue = QtWidgets.QSpinBox(parent=self.groupBox_3)
self.occupancyValue.setEnabled(False)
self.occupancyValue.setMinimum(1)
self.occupancyValue.setObjectName("occupancyValue")
self.horizontalLayout_6.addWidget(self.occupancyValue)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem9)
self.verticalLayout_3.addLayout(self.horizontalLayout_6)
self.verticalLayout_4.addWidget(self.groupBox_3)
self.buttonBox = QtWidgets.QDialogButtonBox(parent=settingsDialog)
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout_4.addWidget(self.buttonBox)
self.retranslateUi(settingsDialog)
self.buttonBox.accepted.connect(settingsDialog.accept) # type: ignore
self.buttonBox.rejected.connect(settingsDialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(settingsDialog)
def retranslateUi(self, settingsDialog):
_translate = QtCore.QCoreApplication.translate
settingsDialog.setWindowTitle(_translate("settingsDialog", "Settings"))
self.groupBox_2.setTitle(_translate("settingsDialog", "Scores"))
self.label_5.setText(_translate("settingsDialog", "Win"))
self.label_14.setText(_translate("settingsDialog", "victory points"))
self.label_6.setText(_translate("settingsDialog", "Draw"))
self.label_15.setText(_translate("settingsDialog", "victory points"))
self.label_12.setText(_translate("settingsDialog", "Ranking mode"))
self.rankingComboBox.setItemText(0, _translate("settingsDialog", "Sum points & tie-breaks"))
self.groupBox.setTitle(_translate("settingsDialog", "Objectives"))
self.label_4.setText(_translate("settingsDialog", "Major objective"))
self.label_8.setText(_translate("settingsDialog", "narrative points"))
self.label_9.setText(_translate("settingsDialog", "Minor opportunity"))
self.label_10.setText(_translate("settingsDialog", "narrative points"))
self.label_11.setText(_translate("settingsDialog", "Underlying influence"))
self.influenceToken.setText(_translate("settingsDialog", "Token"))
self.groupBox_3.setTitle(_translate("settingsDialog", "Pairing"))
self.label_17.setText(_translate("settingsDialog", "Fallback mode"))
self.fallbackComboBox.setItemText(0, _translate("settingsDialog", "Best ranking first & avoid rematch"))
self.label_18.setText(_translate("settingsDialog", "Shuffle"))
self.label_13.setText(_translate("settingsDialog", "Rematch weight"))
self.label_16.setText(_translate("settingsDialog", "Occupancy weight"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
settingsDialog = QtWidgets.QDialog()
ui = Ui_settingsDialog()
ui.setupUi(settingsDialog)
settingsDialog.show()
sys.exit(app.exec())

View file

@ -0,0 +1,493 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>settingsDialog</class>
<widget class="QDialog" name="settingsDialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>661</width>
<height>377</height>
</rect>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../resources/warchron_logo.png</normaloff>../resources/warchron_logo.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="title">
<string>Scores</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Win</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="winValue">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>victory points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Draw</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="drawValue">
<property name="enabled">
<bool>false</bool>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>victory points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>Ranking mode</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="rankingComboBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Sum points &amp; tie-breaks</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="title">
<string>Objectives</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Major objective</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="majorValue">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>narrative points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Minor opportunity</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="minorValue">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>narrative points</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>Underlying influence</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="influenceToken">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Token</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_16">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="title">
<string>Pairing</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_17">
<property name="text">
<string>Fallback mode</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="fallbackComboBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Best ranking first &amp; avoid rematch</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Shuffle</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="influenceToken_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_17">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_13">
<property name="text">
<string>Rematch weight</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="rematchValue">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>Occupancy weight</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="occupancyValue">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<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>settingsDialog</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>settingsDialog</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

@ -36,15 +36,10 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
self.on_tree_selection_changed: ( self.on_tree_selection_changed: (
Callable[[TreeSelection | None], None] | None Callable[[TreeSelection | None], None] | None
) = None ) = None
self.on_major_value_changed: Callable[[int], None] | None = None
self.on_minot_value_changed: Callable[[int], None] | None = None
self.majorValue.setMinimum(0)
self.minorValue.setMinimum(0)
self.on_influence_token_changed: Callable[[int], None] | None = None
self.on_add_item: Callable[[str], None] | None = None self.on_add_item: Callable[[str], None] | None = None
self.on_edit_item: Callable[[str, str], None] | None = None self.on_edit_item: Callable[[str, str], None] | None = None
self.on_delete_item: Callable[[str, str], None] | None = None self.on_delete_item: Callable[[str, str], None] | None = None
self.splitter.setSizes([200, 800]) self.splitter.setSizes([300, 900])
self.show_details(None) self.show_details(None)
self.playersTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.playersTable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.playersTable.customContextMenuRequested.connect( self.playersTable.customContextMenuRequested.connect(
@ -88,8 +83,6 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
self.battlesTable.customContextMenuRequested.connect( self.battlesTable.customContextMenuRequested.connect(
self._on_battles_table_context_menu self._on_battles_table_context_menu
) )
self.majorValue.valueChanged.connect(self._on_major_changed)
self.minorValue.valueChanged.connect(self._on_minor_changed)
self.warsTree.currentItemChanged.connect(self._emit_selection_changed) self.warsTree.currentItemChanged.connect(self._emit_selection_changed)
self._apply_icons() self._apply_icons()
@ -422,25 +415,6 @@ class View(QtWidgets.QMainWindow, Ui_MainWindow):
table.sortItems(2, Qt.SortOrder.DescendingOrder) table.sortItems(2, Qt.SortOrder.DescendingOrder)
table.resizeColumnsToContents() table.resizeColumnsToContents()
def _on_major_changed(self, value: int) -> None:
self.minorValue.setMaximum(value)
def _on_minor_changed(self, value: int) -> None:
self.majorValue.setMinimum(value)
def set_war_objective_values(self, major: int, minor: int, influence: bool) -> None:
self.majorValue.blockSignals(True)
self.minorValue.blockSignals(True)
self.influenceToken.blockSignals(True)
self.majorValue.setValue(major)
self.minorValue.setValue(minor)
self.influenceToken.setChecked(influence)
self.minorValue.setMaximum(major)
self.majorValue.setMinimum(minor)
self.majorValue.blockSignals(False)
self.minorValue.blockSignals(False)
self.influenceToken.blockSignals(False)
# Campaign page # Campaign page
def _on_sectors_table_context_menu(self, pos: QPoint) -> None: def _on_sectors_table_context_menu(self, pos: QPoint) -> None: