Implemented top bar with turn counter and budget info. Added CSS stylesheet.

This commit is contained in:
Khopa 2019-07-05 20:05:27 +02:00
parent dc91f5004e
commit 2428d39308
11 changed files with 131 additions and 24 deletions

View File

@ -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_())

View File

@ -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;
}

View File

@ -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)")

View File

@ -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)

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -1,6 +0,0 @@
from PySide2.QtWidgets import QFrame
class QTopPanel(QFrame):
pass