diff --git a/src/wargame_campaign/controller/controller.py b/src/wargame_campaign/controller/controller.py
index 5f77d49..a9869e5 100644
--- a/src/wargame_campaign/controller/controller.py
+++ b/src/wargame_campaign/controller/controller.py
@@ -1,15 +1,34 @@
+from PyQt6.QtWidgets import QMessageBox, QDialog
+
+from wargame_campaign.view.view import PlayerDialog
+
class Controller:
def __init__(self, model, view):
self.model = model
self.view = view
self.__connect()
-
+ self.refresh_players_view()
def __connect(self):
- # self.view.players_view.btn_add.clicked.connect(self.add_player)
+ self.view.addPlayerBtn.clicked.connect(self.add_player)
pass
- def add_player(self):
- print(f"test")
+ def refresh_players_view(self):
+ players = self.model.get_all_players()
+ self.view.display_players(players)
+ def add_player(self):
+ dialog = PlayerDialog(self.view)
+ result = dialog.exec() # modal blocking dialog
+ if result == QDialog.DialogCode.Accepted:
+ name = dialog.get_player_name()
+ if not name:
+ QMessageBox.warning(
+ self.view,
+ "Invalid name",
+ "Player name cannot be empty."
+ )
+ return
+ self.model.add_player(name)
+ self.refresh_players_view()
\ No newline at end of file
diff --git a/src/wargame_campaign/model/model.py b/src/wargame_campaign/model/model.py
index 2065b9e..494f432 100644
--- a/src/wargame_campaign/model/model.py
+++ b/src/wargame_campaign/model/model.py
@@ -9,6 +9,7 @@ class Model:
self.players = {}
data_file_path = Path("data/warmachron.json")
self.load_data(data_file_path)
+ self.save_data(data_file_path)
def load_data(self, data_file_path):
if not data_file_path.exists() or data_file_path.stat().st_size == 0:
@@ -17,10 +18,10 @@ class Model:
with open(data_file_path, "r", encoding="utf-8") as f:
data = json.load(f)
for player in data["players"] :
- print(f"player {player}")
saved_player = Player.fromDict(player["id"], player['name'])
self.players[saved_player.id] = saved_player
for war in data["wars"]:
+ # placeholder
pass
except json.JSONDecodeError:
raise RuntimeError("Data file is corrupted")
@@ -28,13 +29,12 @@ class Model:
def save_data(self, data_file_path):
if data_file_path.exists():
shutil.copy(data_file_path, data_file_path.with_suffix(".json.bak"))
-
data = {}
- data['verion'] = "1.0"
+ data['version'] = "1.0"
data['players'] = []
- for player in self.players:
+ data['wars'] = []
+ for player in self.players.values():
data['players'].append(player.toDict())
-
with open(data_file_path, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2)
@@ -53,3 +53,6 @@ class Model:
def delete_player(self, id):
del self.players[id]
+ def get_all_players(self) -> list[Player]:
+ return list(self.players.values())
+
diff --git a/src/wargame_campaign/model/player_service.py b/src/wargame_campaign/model/player_service.py
deleted file mode 100644
index c81f52e..0000000
--- a/src/wargame_campaign/model/player_service.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from models.player import create_player
-from model.repository import save_data
-
-def generate_player_id(players):
- return f"P{len(players) + 1}"
-
-def add_player(data, name):
- players = data["players"]
-
- if any(p["name"].lower() == name.lower() for p in players.values()):
- raise ValueError("Player already exists")
-
- player_id = generate_player_id(players)
- players[player_id] = create_player(player_id, name)
- save_data(data)
-
-def update_player(data, player_id, new_name):
- data["players"][player_id]["name"] = new_name
- save_data(data)
-
-def delete_player(data, player_id):
- del data["players"][player_id]
- save_data(data)
\ No newline at end of file
diff --git a/src/wargame_campaign/view/resources/arrow-curve-180-left.png b/src/wargame_campaign/view/resources/arrow-curve-180-left.png
new file mode 100644
index 0000000..2a361a0
Binary files /dev/null and b/src/wargame_campaign/view/resources/arrow-curve-180-left.png differ
diff --git a/src/wargame_campaign/view/resources/arrow-curve.png b/src/wargame_campaign/view/resources/arrow-curve.png
new file mode 100644
index 0000000..56776f5
Binary files /dev/null and b/src/wargame_campaign/view/resources/arrow-curve.png differ
diff --git a/src/wargame_campaign/view/resources/cross.png b/src/wargame_campaign/view/resources/cross.png
new file mode 100644
index 0000000..6b9fa6d
Binary files /dev/null and b/src/wargame_campaign/view/resources/cross.png differ
diff --git a/src/wargame_campaign/view/resources/disk--pencil.png b/src/wargame_campaign/view/resources/disk--pencil.png
new file mode 100644
index 0000000..47bf953
Binary files /dev/null and b/src/wargame_campaign/view/resources/disk--pencil.png differ
diff --git a/src/wargame_campaign/view/resources/disk.png b/src/wargame_campaign/view/resources/disk.png
new file mode 100644
index 0000000..c619461
Binary files /dev/null and b/src/wargame_campaign/view/resources/disk.png differ
diff --git a/src/wargame_campaign/view/resources/document.png b/src/wargame_campaign/view/resources/document.png
new file mode 100644
index 0000000..75f92b0
Binary files /dev/null and b/src/wargame_campaign/view/resources/document.png differ
diff --git a/src/wargame_campaign/view/resources/door--arrow.png b/src/wargame_campaign/view/resources/door--arrow.png
new file mode 100644
index 0000000..de2db77
Binary files /dev/null and b/src/wargame_campaign/view/resources/door--arrow.png differ
diff --git a/src/wargame_campaign/view/resources/folder.png b/src/wargame_campaign/view/resources/folder.png
new file mode 100644
index 0000000..ada85c4
Binary files /dev/null and b/src/wargame_campaign/view/resources/folder.png differ
diff --git a/src/wargame_campaign/view/resources/notebook--arrow.png b/src/wargame_campaign/view/resources/notebook--arrow.png
new file mode 100644
index 0000000..07ca850
Binary files /dev/null and b/src/wargame_campaign/view/resources/notebook--arrow.png differ
diff --git a/src/wargame_campaign/view/resources/pencil.png b/src/wargame_campaign/view/resources/pencil.png
new file mode 100644
index 0000000..3ef2fa6
Binary files /dev/null and b/src/wargame_campaign/view/resources/pencil.png differ
diff --git a/src/wargame_campaign/view/resources/plus.png b/src/wargame_campaign/view/resources/plus.png
new file mode 100644
index 0000000..4ac1baf
Binary files /dev/null and b/src/wargame_campaign/view/resources/plus.png differ
diff --git a/src/wargame_campaign/view/resources/question.png b/src/wargame_campaign/view/resources/question.png
new file mode 100644
index 0000000..30a4703
Binary files /dev/null and b/src/wargame_campaign/view/resources/question.png differ
diff --git a/src/wargame_campaign/view/resources/swords-small.png b/src/wargame_campaign/view/resources/swords-small.png
new file mode 100644
index 0000000..d76343b
Binary files /dev/null and b/src/wargame_campaign/view/resources/swords-small.png differ
diff --git a/src/wargame_campaign/view/resources/swords.png b/src/wargame_campaign/view/resources/swords.png
new file mode 100644
index 0000000..b862d6e
Binary files /dev/null and b/src/wargame_campaign/view/resources/swords.png differ
diff --git a/src/wargame_campaign/view/resources/users.png b/src/wargame_campaign/view/resources/users.png
new file mode 100644
index 0000000..a6aae04
Binary files /dev/null and b/src/wargame_campaign/view/resources/users.png differ
diff --git a/src/wargame_campaign/view/resources/wargame_campaign_logo.png b/src/wargame_campaign/view/resources/wargame_campaign_logo.png
new file mode 100644
index 0000000..b5ac134
Binary files /dev/null and b/src/wargame_campaign/view/resources/wargame_campaign_logo.png differ
diff --git a/src/wargame_campaign/view/ui/ui_main_window.py b/src/wargame_campaign/view/ui/ui_main_window.py
index f72092b..1b2a884 100644
--- a/src/wargame_campaign/view/ui/ui_main_window.py
+++ b/src/wargame_campaign/view/ui/ui_main_window.py
@@ -13,23 +13,151 @@ class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/wargame_campaign_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
+ self.tabWidget = QtWidgets.QTabWidget(parent=self.centralwidget)
+ self.tabWidget.setGeometry(QtCore.QRect(16, 9, 771, 531))
+ self.tabWidget.setObjectName("tabWidget")
+ self.playersTab = QtWidgets.QWidget()
+ self.playersTab.setObjectName("playersTab")
+ self.playersTable = QtWidgets.QTableWidget(parent=self.playersTab)
+ self.playersTable.setGeometry(QtCore.QRect(10, 60, 741, 431))
+ self.playersTable.setObjectName("playersTable")
+ self.playersTable.setColumnCount(2)
+ self.playersTable.setRowCount(0)
+ item = QtWidgets.QTableWidgetItem()
+ self.playersTable.setHorizontalHeaderItem(0, item)
+ item = QtWidgets.QTableWidgetItem()
+ self.playersTable.setHorizontalHeaderItem(1, item)
+ self.addPlayerBtn = QtWidgets.QPushButton(parent=self.playersTab)
+ self.addPlayerBtn.setGeometry(QtCore.QRect(20, 20, 75, 23))
+ self.addPlayerBtn.setObjectName("addPlayerBtn")
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/users.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.tabWidget.addTab(self.playersTab, icon1, "")
+ self.warsTab = QtWidgets.QWidget()
+ self.warsTab.setObjectName("warsTab")
+ self.warsTree = QtWidgets.QTreeWidget(parent=self.warsTab)
+ self.warsTree.setGeometry(QtCore.QRect(10, 60, 211, 431))
+ self.warsTree.setObjectName("warsTree")
+ self.warsTree.headerItem().setText(0, "1")
+ self.addWarBtn = QtWidgets.QPushButton(parent=self.warsTab)
+ self.addWarBtn.setGeometry(QtCore.QRect(20, 20, 75, 23))
+ self.addWarBtn.setObjectName("addWarBtn")
+ self.addCampaignBtn = QtWidgets.QPushButton(parent=self.warsTab)
+ self.addCampaignBtn.setEnabled(False)
+ self.addCampaignBtn.setGeometry(QtCore.QRect(110, 20, 91, 23))
+ self.addCampaignBtn.setObjectName("addCampaignBtn")
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/swords-small.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.tabWidget.addTab(self.warsTab, icon2, "")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
+ self.menuFile = QtWidgets.QMenu(parent=self.menubar)
+ self.menuFile.setObjectName("menuFile")
+ self.menuEdit = QtWidgets.QMenu(parent=self.menubar)
+ self.menuEdit.setObjectName("menuEdit")
+ self.menuHelp = QtWidgets.QMenu(parent=self.menubar)
+ self.menuHelp.setObjectName("menuHelp")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
+ self.actionNew = QtGui.QAction(parent=MainWindow)
+ icon3 = QtGui.QIcon()
+ icon3.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/document.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionNew.setIcon(icon3)
+ self.actionNew.setObjectName("actionNew")
+ self.actionOpen = QtGui.QAction(parent=MainWindow)
+ icon4 = QtGui.QIcon()
+ icon4.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/folder.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionOpen.setIcon(icon4)
+ self.actionOpen.setObjectName("actionOpen")
+ self.actionSave = QtGui.QAction(parent=MainWindow)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/disk.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionSave.setIcon(icon5)
+ self.actionSave.setObjectName("actionSave")
+ self.actionExit = QtGui.QAction(parent=MainWindow)
+ icon6 = QtGui.QIcon()
+ icon6.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/door--arrow.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionExit.setIcon(icon6)
+ self.actionExit.setObjectName("actionExit")
+ self.actionUndo = QtGui.QAction(parent=MainWindow)
+ icon7 = QtGui.QIcon()
+ icon7.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/arrow-curve-180-left.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionUndo.setIcon(icon7)
+ self.actionUndo.setObjectName("actionUndo")
+ self.actionRedo = QtGui.QAction(parent=MainWindow)
+ icon8 = QtGui.QIcon()
+ icon8.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/arrow-curve.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionRedo.setIcon(icon8)
+ self.actionRedo.setObjectName("actionRedo")
+ self.actionAbout = QtGui.QAction(parent=MainWindow)
+ icon9 = QtGui.QIcon()
+ icon9.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/question.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionAbout.setIcon(icon9)
+ self.actionAbout.setObjectName("actionAbout")
+ self.actionExport = QtGui.QAction(parent=MainWindow)
+ self.actionExport.setEnabled(False)
+ icon10 = QtGui.QIcon()
+ icon10.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/notebook--arrow.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionExport.setIcon(icon10)
+ self.actionExport.setObjectName("actionExport")
+ self.actionSave_as = QtGui.QAction(parent=MainWindow)
+ icon11 = QtGui.QIcon()
+ icon11.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/disk--pencil.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.actionSave_as.setIcon(icon11)
+ self.actionSave_as.setObjectName("actionSave_as")
+ self.menuFile.addAction(self.actionNew)
+ self.menuFile.addAction(self.actionOpen)
+ self.menuFile.addAction(self.actionSave)
+ self.menuFile.addAction(self.actionSave_as)
+ self.menuFile.addSeparator()
+ self.menuFile.addAction(self.actionExport)
+ self.menuFile.addSeparator()
+ self.menuFile.addAction(self.actionExit)
+ self.menuEdit.addAction(self.actionUndo)
+ self.menuEdit.addAction(self.actionRedo)
+ self.menuHelp.addAction(self.actionAbout)
+ self.menubar.addAction(self.menuFile.menuAction())
+ self.menubar.addAction(self.menuEdit.menuAction())
+ self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(MainWindow)
+ self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
+ MainWindow.setWindowTitle(_translate("MainWindow", "Wargame campaign"))
+ item = self.playersTable.horizontalHeaderItem(0)
+ item.setText(_translate("MainWindow", "Name"))
+ item = self.playersTable.horizontalHeaderItem(1)
+ item.setText(_translate("MainWindow", "ID"))
+ self.addPlayerBtn.setText(_translate("MainWindow", "Add player"))
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.playersTab), _translate("MainWindow", "Players"))
+ self.addWarBtn.setText(_translate("MainWindow", "Add war"))
+ self.addCampaignBtn.setText(_translate("MainWindow", "Add Campaign"))
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.warsTab), _translate("MainWindow", "Wars"))
+ self.menuFile.setTitle(_translate("MainWindow", "File"))
+ self.menuEdit.setTitle(_translate("MainWindow", "Edit"))
+ self.menuHelp.setTitle(_translate("MainWindow", "Help"))
+ self.actionNew.setText(_translate("MainWindow", "New"))
+ self.actionNew.setShortcut(_translate("MainWindow", "Ctrl+N"))
+ self.actionOpen.setText(_translate("MainWindow", "Open"))
+ self.actionSave.setText(_translate("MainWindow", "Save"))
+ self.actionExit.setText(_translate("MainWindow", "Exit"))
+ self.actionUndo.setText(_translate("MainWindow", "Undo"))
+ self.actionRedo.setText(_translate("MainWindow", "Redo"))
+ self.actionAbout.setText(_translate("MainWindow", "About"))
+ self.actionExport.setText(_translate("MainWindow", "Export"))
+ self.actionSave_as.setText(_translate("MainWindow", "Save as..."))
if __name__ == "__main__":
diff --git a/src/wargame_campaign/view/ui/ui_main_window.ui b/src/wargame_campaign/view/ui/ui_main_window.ui
index 7bff7e1..d68e721 100644
--- a/src/wargame_campaign/view/ui/ui_main_window.ui
+++ b/src/wargame_campaign/view/ui/ui_main_window.ui
@@ -11,20 +11,249 @@
- MainWindow
+ Wargame campaign
-
+
+
+ ../resources/wargame_campaign_logo.png../resources/wargame_campaign_logo.png
+
+
+
+
+
+ 16
+ 9
+ 771
+ 531
+
+
+
+ 1
+
+
+
+
+ ../resources/users.png../resources/users.png
+
+
+ Players
+
+
+
+
+ 10
+ 60
+ 741
+ 431
+
+
+
+
+ Name
+
+
+
+
+ ID
+
+
+
+
+
+
+ 20
+ 20
+ 75
+ 23
+
+
+
+ Add player
+
+
+
+
+
+
+ ../resources/swords-small.png../resources/swords-small.png
+
+
+ Wars
+
+
+
+
+ 10
+ 60
+ 211
+ 431
+
+
+
+
+ 1
+
+
+
+
+
+
+ 20
+ 20
+ 75
+ 23
+
+
+
+ Add war
+
+
+
+
+ false
+
+
+
+ 110
+ 20
+ 91
+ 23
+
+
+
+ Add Campaign
+
+
+
+
+
+
+
+
+ ../resources/document.png../resources/document.png
+
+
+ New
+
+
+ Ctrl+N
+
+
+
+
+
+ ../resources/folder.png../resources/folder.png
+
+
+ Open
+
+
+
+
+
+ ../resources/disk.png../resources/disk.png
+
+
+ Save
+
+
+
+
+
+ ../resources/door--arrow.png../resources/door--arrow.png
+
+
+ Exit
+
+
+
+
+
+ ../resources/arrow-curve-180-left.png../resources/arrow-curve-180-left.png
+
+
+ Undo
+
+
+
+
+
+ ../resources/arrow-curve.png../resources/arrow-curve.png
+
+
+ Redo
+
+
+
+
+
+ ../resources/question.png../resources/question.png
+
+
+ About
+
+
+
+
+ false
+
+
+
+ ../resources/notebook--arrow.png../resources/notebook--arrow.png
+
+
+ Export
+
+
+
+
+
+ ../resources/disk--pencil.png../resources/disk--pencil.png
+
+
+ Save as...
+
+
diff --git a/src/wargame_campaign/view/ui/ui_player_dialog.py b/src/wargame_campaign/view/ui/ui_player_dialog.py
new file mode 100644
index 0000000..5353e22
--- /dev/null
+++ b/src/wargame_campaign/view/ui/ui_player_dialog.py
@@ -0,0 +1,50 @@
+# Form implementation generated from reading ui file '.\src\wargame_campaign\view\ui\ui_player_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_playerDialog(object):
+ def setupUi(self, playerDialog):
+ playerDialog.setObjectName("playerDialog")
+ playerDialog.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
+ playerDialog.resize(378, 98)
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(".\\src\\wargame_campaign\\view\\ui\\../resources/wargame_campaign_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ playerDialog.setWindowIcon(icon)
+ self.buttonBox = QtWidgets.QDialogButtonBox(parent=playerDialog)
+ self.buttonBox.setGeometry(QtCore.QRect(10, 60, 341, 32))
+ self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+ self.buttonBox.setObjectName("buttonBox")
+ self.label = QtWidgets.QLabel(parent=playerDialog)
+ self.label.setGeometry(QtCore.QRect(10, 20, 47, 14))
+ self.label.setObjectName("label")
+ self.playerName = QtWidgets.QLineEdit(parent=playerDialog)
+ self.playerName.setGeometry(QtCore.QRect(60, 20, 113, 20))
+ self.playerName.setObjectName("playerName")
+
+ self.retranslateUi(playerDialog)
+ self.buttonBox.accepted.connect(playerDialog.accept) # type: ignore
+ self.buttonBox.rejected.connect(playerDialog.reject) # type: ignore
+ QtCore.QMetaObject.connectSlotsByName(playerDialog)
+
+ def retranslateUi(self, playerDialog):
+ _translate = QtCore.QCoreApplication.translate
+ playerDialog.setWindowTitle(_translate("playerDialog", "Player"))
+ self.label.setText(_translate("playerDialog", "Name:"))
+
+
+if __name__ == "__main__":
+ import sys
+ app = QtWidgets.QApplication(sys.argv)
+ playerDialog = QtWidgets.QDialog()
+ ui = Ui_playerDialog()
+ ui.setupUi(playerDialog)
+ playerDialog.show()
+ sys.exit(app.exec())
diff --git a/src/wargame_campaign/view/ui/ui_player_dialog.ui b/src/wargame_campaign/view/ui/ui_player_dialog.ui
new file mode 100644
index 0000000..029c92b
--- /dev/null
+++ b/src/wargame_campaign/view/ui/ui_player_dialog.ui
@@ -0,0 +1,98 @@
+
+
+ playerDialog
+
+
+ Qt::ApplicationModal
+
+
+
+ 0
+ 0
+ 378
+ 98
+
+
+
+ Player
+
+
+
+ ../resources/wargame_campaign_logo.png../resources/wargame_campaign_logo.png
+
+
+
+
+ 10
+ 60
+ 341
+ 32
+
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+ 10
+ 20
+ 47
+ 14
+
+
+
+ Name:
+
+
+
+
+
+ 60
+ 20
+ 113
+ 20
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ playerDialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ playerDialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/src/wargame_campaign/view/view.py b/src/wargame_campaign/view/view.py
index cf3c3ac..2898125 100644
--- a/src/wargame_campaign/view/view.py
+++ b/src/wargame_campaign/view/view.py
@@ -1,9 +1,29 @@
-from PyQt6 import uic, QtWidgets
+from PyQt6 import QtWidgets
+from PyQt6.QtWidgets import QDialog
+
from wargame_campaign.view.ui.ui_main_window import Ui_MainWindow
+from wargame_campaign.view.ui.ui_player_dialog import Ui_playerDialog
class View(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(View, self).__init__(parent)
self.setupUi(self)
+ def display_players(self, players: list):
+ table = self.playersTable
+ table.setRowCount(len(players))
+ for row, player in enumerate(players):
+ table.setItem(row, 0, QtWidgets.QTableWidgetItem(player.name))
+ table.setItem(row, 1, QtWidgets.QTableWidgetItem(player.id))
+
+ table.resizeColumnsToContents()
+
+class PlayerDialog(QDialog):
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.ui = Ui_playerDialog()
+ self.ui.setupUi(self)
+
+ def get_player_name(self) -> str:
+ return self.ui.playerName.text().strip()