aosworlds-pairing/team.py
2023-02-19 20:19:58 +01:00

144 lines
4.9 KiB
Python

import json
import os
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
path = "data/team.json"
class TeamsPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.activeTeam = None
self.teamKey = tk.StringVar()
self.teamName = tk.StringVar()
self.teamCountry = tk.StringVar()
self.teamMembers = []
self.teamSelector = ttk.Combobox(self, textvariable=self.teamKey)
self.loadTeams()
self.teamSelector.grid(column=1, row=1, sticky="ew")
self.teamSelector.bind("<<ComboboxSelected>>", self.setActiveTeam)
tk.Button(self, text="Delete", command=self.deleteTeam).grid(column=2, row=1, sticky="w")
if len(self.teams) == 0:
self.teamSelector.state(["readonly"])
tk.Button(self, text="New Team", command=self.createTeam).grid(column=4, row=1, sticky="ew")
tk.Label(self, text="Name:").grid(column=1, row=3)
tk.Entry(self, textvariable=self.teamName).grid(column=2, row=3, sticky="ew")
tk.Label(self, text="Country:").grid(column=1, row=4)
tk.Entry(self, textvariable=self.teamCountry).grid(column=2, row=4, sticky="ew")
tk.Label(self, text="Members:").grid(column=1, row=5)
self.teamMembersGrid = ttk.Frame(self)
self.teamMembersGrid.grid(column=2, row=5)
tk.Button(self, text="Save", command=self.saveTeam).grid(column=2, row=6)
def createTeam(self):
self.activeTeam = None
self.teamSelector.selection_clear()
self.teamKey.set("")
self.teamName.set("")
self.teamCountry.set("")
self.teamMembers = []
self.renderTeamMembers()
def loadTeams(self):
self.teams = {}
self.teamSelector["values"] = []
if os.path.exists(path):
file = open(path, "r")
self.teams = json.loads(file.read())
file.close()
self.teamSelector["values"] = list(self.teams.keys())
def deleteTeam(self):
key = self.teamKey.get()
confirmed = messagebox.askyesno(
message="Are you sure you want to delete team " + key + "?",
icon="question", title="Delete")
if confirmed:
self.loadTeams()
del self.teams[key]
file = open(path, "w")
file.write(json.dumps(self.teams))
file.close()
self.loadTeams()
self.createTeam()
def saveTeam(self):
key = self.teamKey.get()
name = self.teamName.get()
country = self.teamCountry.get()
members = self.teamMembers
if name != "" and country != "":
self.loadTeams()
team = {
"name": name,
"country": country,
"members": members
}
if key != "" and key != name:
del self.teams[key]
self.teamKey.set(name)
self.teams[name] = team
file = open(path, "w")
file.write(json.dumps(self.teams))
file.close()
self.loadTeams()
def setActiveTeam(self, event):
if self.teamKey.get() != "":
self.activeTeam = self.teams[self.teamKey.get()]
self.teamName.set(self.activeTeam["name"])
self.teamCountry.set(self.activeTeam["country"])
self.teamMembers = self.activeTeam["members"]
self.renderTeamMembers()
else:
self.teamSelector.selection_clear()
def renderTeamMembers(self):
self.teamMembersGrid.destroy()
self.teamMembersGrid = ttk.Frame(self)
self.teamMembersGrid.grid(column=2, row=5)
row = 1
for m in self.teamMembers:
tk.Label(self.teamMembersGrid, text=m["name"]).grid(column=1, row=row)
tk.Label(self.teamMembersGrid, text=m["army"]).grid(column=2, row=row)
tk.Button(self.teamMembersGrid, text="X", command=lambda: self.removeTeamMember(m)).grid(column=3, row=row)
row += 1
self.newTeamMemberName = tk.StringVar()
self.newTeamMemberArmy = tk.StringVar()
tk.Entry(self.teamMembersGrid, textvariable=self.newTeamMemberName).grid(column=1, row=row)
tk.Entry(self.teamMembersGrid, textvariable=self.newTeamMemberArmy).grid(column=2, row=row)
tk.Button(self.teamMembersGrid, text="+", command=self.addTeamMember).grid(column=3, row=row)
def addTeamMember(self):
name = self.newTeamMemberName.get()
army = self.newTeamMemberArmy.get()
if name != "" and army != "":
self.teamMembers.append({
"name": name,
"army": army,
})
self.renderTeamMembers()
def removeTeamMember(self, member):
self.teamMembers.remove(member)
self.renderTeamMembers()