Improved style of main menu, configuration menu, and base menu

This commit is contained in:
Khopa 2018-08-08 21:22:00 +02:00
parent 14cd54668e
commit 1b2ad5b419
6 changed files with 92 additions and 51 deletions

View File

@ -1,6 +1,7 @@
from ui.eventmenu import *
from game.game import *
from .styles import STYLES
class BaseMenu(Menu):
@ -9,7 +10,6 @@ class BaseMenu(Menu):
def __init__(self, window: Window, parent, game: Game, cp: ControlPoint):
super(BaseMenu, self).__init__(window, parent, game)
self.cp = cp
self.base = cp.base
self.frame = window.right_pane
@ -26,15 +26,15 @@ class BaseMenu(Menu):
existing_units = self.base.total_units_of_type(unit_type)
scheduled_units = self.event.units.get(unit_type, 0)
Label(self.frame, text="{}".format(db.unit_type_name(unit_type))).grid(row=row, sticky=W)
Label(self.frame, text="{}".format(db.unit_type_name(unit_type)), **STYLES["widget"]).grid(row=row, sticky=W)
label = Label(self.frame, text="({})".format(existing_units))
label = Label(self.frame, text="({})".format(existing_units), **STYLES["widget"])
label.grid(column=1, row=row)
self.bought_amount_labels[unit_type] = label
Label(self.frame, text="{}m".format(unit_price)).grid(column=2, row=row)
Button(self.frame, text="+", command=self.buy(unit_type)).grid(column=3, row=row)
Button(self.frame, text="-", command=self.sell(unit_type)).grid(column=4, row=row)
Label(self.frame, text="{}m".format(unit_price), **STYLES["widget"]).grid(column=2, row=row, sticky=E)
Button(self.frame, text="+", command=self.buy(unit_type), **STYLES["btn-primary"]).grid(column=3, row=row, padx=(10,0))
Button(self.frame, text="-", command=self.sell(unit_type), **STYLES["btn-warning"]).grid(column=4, row=row, padx=(10,5))
row += 1
units = {
@ -47,11 +47,11 @@ class BaseMenu(Menu):
self.budget_label = Label(self.frame, text="Budget: {}m".format(self.game.budget))
self.budget_label.grid(row=row, sticky=W)
Button(self.frame, text="Back", command=self.dismiss).grid(column=4, row=row)
Button(self.frame, text="Back", command=self.dismiss, **STYLES["btn-primary"]).grid(column=4, row=row)
row += 1
for task_type, units in units.items():
Label(self.frame, text="{}".format(db.task_name(task_type))).grid(row=row, columnspan=5); row += 1
Label(self.frame, text="{}".format(db.task_name(task_type)), **STYLES["strong"]).grid(row=row, columnspan=5, sticky=NSEW); row += 1
units = list(set(units))
units.sort(key=lambda x: db.PRICES[x])

View File

@ -1,5 +1,6 @@
from tkinter import *
from tkinter.ttk import *
from .styles import STYLES
from ui.window import *
@ -34,22 +35,36 @@ class ConfigurationMenu(Menu):
def display(self):
self.window.clear_right_pane()
Label(self.frame, text="Player coalition skill").grid(row=0, column=0)
Label(self.frame, text="Enemy coalition skill").grid(row=1, column=0)
# Header
head = Frame(self.frame, **STYLES["header"])
head.grid(row=0, column=0, columnspan=2, sticky=NSEW)
Label(head, text="Configuration", **STYLES["title"]).grid()
OptionMenu(self.frame, self.player_skill_var, "Average", "Good", "High", "Excellent").grid(row=0, column=1)
OptionMenu(self.frame, self.enemy_skill_var, "Average", "Good", "High", "Excellent").grid(row=1, column=1)
# Body
body = Frame(self.frame, **STYLES["body"])
body.grid(row=1, column=0, sticky=NSEW)
Label(self.frame, text="Aircraft cold start").grid(row=2, column=0)
Label(self.frame, text="Takeoff only for player group").grid(row=3, column=0)
Label(self.frame, text="Disable night missions").grid(row=4, column=0)
Label(body, text="Player coalition skill", **STYLES["widget"]).grid(row=0, column=0, sticky=W)
Label(body, text="Enemy coalition skill", **STYLES["widget"]).grid(row=1, column=0, sticky=W)
Checkbutton(self.frame, variable=self.cold_start_var).grid(row=2, column=1)
Checkbutton(self.frame, variable=self.takeoff_var).grid(row=3, column=1)
Checkbutton(self.frame, variable=self.night_var).grid(row=4, column=1)
p_skill = OptionMenu(body, self.player_skill_var, "Average", "Good", "High", "Excellent")
p_skill.grid(row=0, column=1, sticky=E, pady=5)
p_skill.configure(**STYLES["btn-primary"])
Button(self.frame, text="Back", command=self.dismiss).grid(row=5, column=0, columnspan=1)
Button(self.frame, text="Cheat +200m", command=self.cheat_money).grid(row=6, column=1)
e_skill = OptionMenu(body, self.enemy_skill_var, "Average", "Good", "High", "Excellent")
e_skill.grid(row=1, column=1, sticky=E)
e_skill.configure(**STYLES["btn-primary"])
Label(body, text="Aircraft cold start", **STYLES["widget"]).grid(row=2, column=0, sticky=W)
Label(body, text="Takeoff only for player group", **STYLES["widget"]).grid(row=3, column=0, sticky=W)
Label(body, text="Disable night missions", **STYLES["widget"]).grid(row=4, column=0, sticky=W)
Checkbutton(body, variable=self.cold_start_var, **STYLES["radiobutton"]).grid(row=2, column=1, sticky=E)
Checkbutton(body, variable=self.takeoff_var, **STYLES["radiobutton"]).grid(row=3, column=1, sticky=E)
Checkbutton(body, variable=self.night_var, **STYLES["radiobutton"]).grid(row=4, column=1, sticky=E)
Button(body, text="Back", command=self.dismiss, **STYLES["btn-primary"]).grid(row=5, column=1, sticky=E, pady=30)
Button(body, text="Cheat +200m", command=self.cheat_money, **STYLES["btn-danger"]).grid(row=6, column=1)
def cheat_money(self):
self.game.budget += 200

View File

@ -1,11 +1,13 @@
import pickle
from ui.basemenu import *
from ui.overviewcanvas import *
from ui.configurationmenu import *
from game.game import *
from ui.basemenu import *
from ui.configurationmenu import *
from ui.overviewcanvas import *
from userdata import persistency
from .styles import STYLES
import tkinter as tk
from tkinter import ttk
class MainMenu(Menu):
@ -18,45 +20,57 @@ class MainMenu(Menu):
self.upd.update()
self.frame = self.window.right_pane
self.frame.grid_columnconfigure(0, weight=1)
self.frame.columnconfigure(0, weight=1)
self.frame.rowconfigure(0, weight=1)
def display(self):
persistency.save_game(self.game)
self.window.clear_right_pane()
self.upd.update()
row = 1
row = 0
# Header :
header = Frame(self.frame, **STYLES["header"])
Button(header, text="Configuration", command=self.configuration_menu, **STYLES["btn-primary"]).grid(column=0, row=0, sticky=NE)
Label(header, text="Budget: {}m (+{}m)".format(self.game.budget, self.game.budget_reward_amount), **STYLES["strong"]).grid(column=1, row=0, sticky=NSEW, padx=50)
Button(header, text="Pass turn", command=self.pass_turn, **STYLES["btn-primary"]).grid(column=2, row=0, sticky=NW)
header.grid(column=0, row=0, sticky=N+EW)
body = LabelFrame(self.frame, **STYLES["body"])
body.grid(column=0, row=1, sticky=NSEW)
def label(text):
nonlocal row
Label(self.frame, text=text).grid(row=row, sticky=NW)
nonlocal row, body
frame = LabelFrame(body, **STYLES["label-frame"])
frame.grid(row=row, sticky=NSEW, columnspan=2)
Label(frame, text=text, **STYLES["widget"]).grid(row=row, sticky=NS)
row += 1
def event_button(event):
nonlocal row
Message(self.frame, text="{}{} at {}".format(
nonlocal row, body
frame = LabelFrame(body, **STYLES["label-frame"])
frame.grid(row=row, sticky=NSEW)
Message(frame, text="{}{} at {}".format(
event.defender_name == self.game.player and "Enemy attacking: " or "",
event,
event.to_cp,
), aspect=1600).grid(column=0, row=row, sticky=NW)
Button(self.frame, text=">", command=self.start_event(event)).grid(column=0, row=row, sticky=NE+S); row += 1
), aspect=1600, **STYLES["widget"]).grid(column=0, row=0, sticky=NSEW)
Button(body, text=">", command=self.start_event(event), **STYLES["btn-primary"]).grid(column=1, row=row, sticky=E)
row += 1
def destination_header(text, separator=True):
nonlocal row
if separator:
Separator(self.frame, orient=HORIZONTAL).grid(row=row, sticky=EW); row += 1
Label(self.frame, text=text).grid(column=0, row=row, sticky=N); row += 1
def destination_header(text, pady=0):
nonlocal row, body
Label(body, text=text, **STYLES["strong"]).grid(column=0, columnspan=2, row=row, sticky=N+EW, pady=(pady,0)); row += 1
Button(self.frame, text="Configuration", command=self.configuration_menu).grid(column=0, row=0, sticky=NE)
Button(self.frame, text="Pass turn", command=self.pass_turn).grid(column=0, row=0, sticky=NW)
Label(self.frame, text="Budget: {}m (+{}m)".format(self.game.budget, self.game.budget_reward_amount)).grid(column=0, row=0, sticky=N)
Separator(self.frame, orient='horizontal').grid(row=row, sticky=EW); row += 1
#Separator(self.frame, orient='horizontal').grid(row=row, sticky=EW); row += 1
events = self.game.events
events.sort(key=lambda x: x.from_cp.name)
events.sort(key=lambda x: x.informational and 2 or (self.game.is_player_attack(x) and 1 or 0))
destination = None
deliveries = False
for event in events:
if not event.informational:
if self.game.is_player_attack(event):
@ -64,10 +78,13 @@ class MainMenu(Menu):
else:
new_destination = "Enemy attack"
if destination != new_destination:
destination_header(new_destination, destination is not None)
destination_header(new_destination)
destination = new_destination
if event.informational:
if not deliveries:
deliveries = True
destination_header("Deliveries", 15)
label(str(event))
else:
event_button(event)
@ -92,3 +109,7 @@ class MainMenu(Menu):
self.basemenu = BaseMenu(self.window, self, self.game, cp)
self.basemenu.display()

View File

@ -65,7 +65,7 @@ class NewGameMenu(Menu):
head.grid(row=0, column=0, sticky=NSEW)
Label(head, text="Start a new game", **STYLES["title"]).grid()
# Main Frame
# Body
body = Frame(self.frame, **STYLES["body"])
body.grid(row=1, column=0, sticky=NSEW)

View File

@ -8,6 +8,8 @@ PADDING_Y = 5
FG_COLOR = "white"
BG_COLOR = "#4E5760"
BTN_COLOR = "#699245"
YELLOW = "#FDB731"
RED = "#D0232E"
BG_TITLE_COLOR = "#2D3E50"
# Fonts
@ -19,13 +21,16 @@ TITLE_FONT = (FONT_FAMILY, 16, "bold italic")
# List of styles
STYLES = {}
STYLES["label-frame"] = {"font": BOLD_FONT, "bg": BG_COLOR, "fg": FG_COLOR}
STYLES["frame-wrapper"] = {"bg": BG_COLOR, "relief":"sunken"}
STYLES["body"] = {"bg": BG_COLOR, "padx": 35, "pady": 35}
STYLES["body"] = {"bg": BG_COLOR, "padx": 25, "pady": 35}
STYLES["strong"] = {"font": BOLD_FONT, "bg": BG_TITLE_COLOR, "fg": FG_COLOR}
STYLES["widget"] = {"bg": BG_COLOR, "fg": FG_COLOR, "padx": PADDING_X, "pady": PADDING_Y, "font": DEFAULT_FONT}
STYLES["radiobutton"] = {"bg": BG_COLOR, "fg": "black", "padx": PADDING_X, "pady": PADDING_Y, "font": DEFAULT_FONT,
"activebackground": BG_COLOR, "highlightbackground": BG_COLOR, "selectcolor": "white"}
STYLES["title"] = {"bg": BG_TITLE_COLOR, "fg": FG_COLOR, "padx": PADDING_X, "pady": PADDING_Y, "font": TITLE_FONT}
STYLES["header"] = {"bg": BG_TITLE_COLOR}
STYLES["btn-primary"] = {"bg": BTN_COLOR, "fg": FG_COLOR, "padx": PADDING_X, "pady": PADDING_Y, "font": DEFAULT_FONT}
STYLES["btn-primary"] = {"bg": BTN_COLOR, "fg": FG_COLOR, "padx": PADDING_X, "pady": 2, "font": DEFAULT_FONT}
STYLES["btn-danger"] = {"bg": RED, "fg": FG_COLOR, "padx": PADDING_X, "pady": 2, "font": DEFAULT_FONT}
STYLES["btn-warning"] = {"bg": YELLOW, "fg": FG_COLOR, "padx": PADDING_X, "pady": 2, "font": DEFAULT_FONT}

View File

@ -1,6 +1,6 @@
from tkinter import *
from game.game import *
from .styles import BG_COLOR
from .styles import BG_COLOR,BG_TITLE_COLOR
class Window:
image = None
@ -24,9 +24,9 @@ class Window:
self.frame.grid_columnconfigure(1, weight=1)
self.frame.grid_rowconfigure(0, weight=1)
self.left_pane = Frame(self.frame)
self.left_pane = Frame(self.frame, bg=BG_TITLE_COLOR)
self.left_pane.grid(row=0, column=0, sticky=NSEW)
self.right_pane = Frame(self.frame)
self.right_pane = Frame(self.frame, bg=BG_COLOR)
self.right_pane.grid(row=0, column=1, sticky=NSEW)
self.tk.focus()