diff --git a/qt_ui/main.py b/qt_ui/main.py index febca18a..93e05408 100644 --- a/qt_ui/main.py +++ b/qt_ui/main.py @@ -20,13 +20,19 @@ if __name__ == "__main__": # Load stuff persistency.setup(sys.argv[1]) + + css = "" + with open("./qt_ui/stylesheets/style.css") as stylesheet: + css = stylesheet.read() + sleep(0.5) uiconstants.load_icons() app.processEvents() # Start window window = QLiberationWindow() + window.setStyleSheet(css) window.show() - splash.finish(window) + splash.finish(window) sys.exit(app.exec_()) \ No newline at end of file diff --git a/qt_ui/stylesheets/style.css b/qt_ui/stylesheets/style.css new file mode 100644 index 00000000..002c616e --- /dev/null +++ b/qt_ui/stylesheets/style.css @@ -0,0 +1,19 @@ + + +QLiberationWindow{ +} + +QTopPanel, +QTopPanel *{ + background-color: #4E5760; + color: white; + font-size: 12px; + font-weight: bold; +} + +QPushButton[style="btn-primary"]{ + background-color:#699245; + color:white; + padding: 21px 5px 21px 5px; + margin-top: 6px; +} \ No newline at end of file diff --git a/qt_ui/widgets/QBudgetBox.py b/qt_ui/widgets/QBudgetBox.py new file mode 100644 index 00000000..f8157b4b --- /dev/null +++ b/qt_ui/widgets/QBudgetBox.py @@ -0,0 +1,29 @@ +from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox + +import qt_ui.uiconstants as CONST + + +class QBudgetBox(QGroupBox): + """ + UI Component to display current budget and player's money + """ + + def __init__(self): + super(QBudgetBox, self).__init__("Budget") + + self.money_icon = QLabel() + self.money_icon.setPixmap(CONST.ICONS["Money"]) + self.money_amount = QLabel() + + self.layout = QHBoxLayout() + self.layout.addWidget(self.money_icon) + self.layout.addWidget(self.money_amount) + self.setLayout(self.layout) + + def setBudget(self, budget, reward): + """ + Set the money amount to display + :param budget: Current money available + :param reward: Planned reward for next turn + """ + self.money_amount.setText(str(budget) + "M (+" + str(reward) + "M)") \ No newline at end of file diff --git a/qt_ui/widgets/QTopPanel.py b/qt_ui/widgets/QTopPanel.py new file mode 100644 index 00000000..d19446aa --- /dev/null +++ b/qt_ui/widgets/QTopPanel.py @@ -0,0 +1,31 @@ +from PySide2.QtWidgets import QFrame, QHBoxLayout, QPushButton + +from game import Game +from qt_ui.widgets.QBudgetBox import QBudgetBox +from qt_ui.widgets.QTurnCounter import QTurnCounter + + +class QTopPanel(QFrame): + + def __init__(self, game: Game): + super(QTopPanel, self).__init__() + self.game = game + self.init_ui() + + def init_ui(self): + + self.turnCounter = QTurnCounter() + self.turnCounter.setCurrentTurn(self.game.turn, self.game.current_day) + + self.budgetBox = QBudgetBox() + self.budgetBox.setBudget(self.game.budget, self.game.budget_reward_amount) + + self.passTurn = QPushButton("Pass Turn") + self.passTurn.setProperty("style", "btn-primary") + + self.layout = QHBoxLayout() + self.layout.addStretch(1) + self.layout.addWidget(self.turnCounter) + self.layout.addWidget(self.budgetBox) + self.layout.addWidget(self.passTurn) + self.setLayout(self.layout) \ No newline at end of file diff --git a/qt_ui/widgets/QTurnCounter.py b/qt_ui/widgets/QTurnCounter.py new file mode 100644 index 00000000..24b1bfb3 --- /dev/null +++ b/qt_ui/widgets/QTurnCounter.py @@ -0,0 +1,35 @@ +import datetime + +from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox + +import qt_ui.uiconstants as CONST + + +class QTurnCounter(QGroupBox): + """ + UI Component to display current turn and time info + """ + + def __init__(self): + super(QTurnCounter, self).__init__("Turn") + + self.icons = [CONST.ICONS["Dawn"], CONST.ICONS["Day"], CONST.ICONS["Dusk"], CONST.ICONS["Night"]] + + self.daytime_icon = QLabel() + self.daytime_icon.setPixmap(self.icons[0]) + self.turn_info = QLabel() + + self.layout = QHBoxLayout() + self.layout.addWidget(self.daytime_icon) + self.layout.addWidget(self.turn_info) + self.setLayout(self.layout) + + def setCurrentTurn(self, turn: int, current_day: datetime): + """ + Set the money amount to display + :arg turn Current turn number + :arg current_day Current day + """ + self.daytime_icon.setPixmap(self.icons[turn % 4]) + self.turn_info.setText(current_day.strftime("%d %b %Y")) + self.setTitle("Turn " + str(turn)) diff --git a/qt_ui/windows/QLiberationMap.py b/qt_ui/widgets/map/QLiberationMap.py similarity index 95% rename from qt_ui/windows/QLiberationMap.py rename to qt_ui/widgets/map/QLiberationMap.py index 9c118ebc..4bb9f982 100644 --- a/qt_ui/windows/QLiberationMap.py +++ b/qt_ui/widgets/map/QLiberationMap.py @@ -2,16 +2,15 @@ from typing import Dict from PySide2.QtCore import Qt from PySide2.QtGui import QPixmap, QBrush, QColor, QWheelEvent, QPen, QFont -from PySide2.QtWidgets import QWidget, QGraphicsWidget, QGraphicsView, QFrame, QGraphicsTextItem +from PySide2.QtWidgets import QGraphicsView, QFrame from gen import Conflict -from qt_ui.widgets.QMapControlPoint import QMapControlPoint -from qt_ui.widgets.QMapGroundObject import QMapGroundObject -from qt_ui.windows.QLiberationScene import QLiberationScene +from qt_ui.widgets.map.QMapControlPoint import QMapControlPoint +from qt_ui.widgets.map.QMapGroundObject import QMapGroundObject +from qt_ui.widgets.map.QLiberationScene import QLiberationScene from dcs import Point from theater import ControlPoint -from userdata import persistency from game import Game import qt_ui.uiconstants as CONST diff --git a/qt_ui/windows/QLiberationScene.py b/qt_ui/widgets/map/QLiberationScene.py similarity index 100% rename from qt_ui/windows/QLiberationScene.py rename to qt_ui/widgets/map/QLiberationScene.py diff --git a/qt_ui/widgets/QMapControlPoint.py b/qt_ui/widgets/map/QMapControlPoint.py similarity index 93% rename from qt_ui/widgets/QMapControlPoint.py rename to qt_ui/widgets/map/QMapControlPoint.py index 54cfb309..715ac590 100644 --- a/qt_ui/widgets/QMapControlPoint.py +++ b/qt_ui/widgets/map/QMapControlPoint.py @@ -49,11 +49,8 @@ class QMapControlPoint(QGraphicsRectItem): def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent): menu = QMenu("Menu", self.parent) - menu.addAction("Attack") - menu.addAction("See Info") - menu.addSeparator() - menu.addAction("Show Base Info") - menu.addAction("Show Base Info") + menu.addAction("Plan a strike on " + self.model.name + " airbase") + menu.addAction("See available intel") menu.exec_(event.screenPos()) @property diff --git a/qt_ui/widgets/QMapGroundObject.py b/qt_ui/widgets/map/QMapGroundObject.py similarity index 100% rename from qt_ui/widgets/QMapGroundObject.py rename to qt_ui/widgets/map/QMapGroundObject.py diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py index 0740f275..72dbe83b 100644 --- a/qt_ui/windows/QLiberationWindow.py +++ b/qt_ui/windows/QLiberationWindow.py @@ -1,10 +1,10 @@ from PySide2.QtGui import QIcon -from PySide2.QtWidgets import QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QMenuBar, QMainWindow, QAction, QToolBar, \ - QFrame +from PySide2.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QMainWindow, QAction, QFrame import webbrowser from qt_ui.uiconstants import URLS -from qt_ui.windows.QLiberationMap import QLiberationMap +from qt_ui.widgets.QTopPanel import QTopPanel +from qt_ui.widgets.map.QLiberationMap import QLiberationMap import qt_ui.uiconstants as CONST from qt_ui.windows.QNewGameWizard import NewGameWizard from userdata import persistency @@ -24,7 +24,6 @@ class QLiberationWindow(QMainWindow): self.setWindowIcon(QIcon("../resources/icon.png")) self.statusBar().showMessage('Ready') - self.initActions() self.init_menubar() self.init_toolbar() @@ -36,9 +35,7 @@ class QLiberationWindow(QMainWindow): vbox = QVBoxLayout() vbox.setMargin(0) - frame = QFrame() - frame.setFrameShape(frame.Box) - vbox.addWidget(frame) + vbox.addWidget(QTopPanel(self.game)) vbox.addLayout(hbox) central_widget = QWidget() diff --git a/qt_ui/windows/QTopPanel.py b/qt_ui/windows/QTopPanel.py deleted file mode 100644 index fb5d6cdf..00000000 --- a/qt_ui/windows/QTopPanel.py +++ /dev/null @@ -1,6 +0,0 @@ -from PySide2.QtWidgets import QFrame - - -class QTopPanel(QFrame): - - pass