127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
#builtins
|
|
import tkinter as Tk
|
|
from tkinter import ttk as Ttk
|
|
from tkinter import font
|
|
from os import path
|
|
|
|
#packages
|
|
from PIL import ImageTk, Image
|
|
|
|
#custom stuff
|
|
from storage import readSave, save
|
|
import api, ui
|
|
|
|
#load icon
|
|
icoPng = Image.open(path.join("assets","babynet.png"))
|
|
|
|
#initialize root
|
|
root = Tk.Tk()
|
|
root.title("SPASESHUPS")
|
|
ico = ImageTk.PhotoImage(icoPng)
|
|
root.wm_iconphoto(False, ico)
|
|
|
|
#add the three main sections
|
|
#header contains auth keys and such
|
|
headerFrame = ui.Container(root, freezeCols=1)
|
|
headerFrame.widget.grid(row=0, column=0, sticky='new')
|
|
|
|
#requestFrame is the main body where the request buttons will be
|
|
requestFrame = ui.Container(root)
|
|
requestFrame.widget.grid(row=1, column=0, sticky='nesw')
|
|
|
|
#response frame is where the output lives
|
|
responseFrame = ui.Container(root)
|
|
responseFrame.widget.grid(row=2, column=0, sticky="snew")
|
|
|
|
#populate the header
|
|
accToken = Tk.StringVar()
|
|
accAuthBox = ui.SavedEntryBox(headerFrame.widget, 'acc_token', accToken)
|
|
Ttk.Label(headerFrame.widget, text="ACCOUNT TOKEN:").grid(row=0, column=0, sticky='e')
|
|
accAuthBox.widget.grid(row=0, column=1, columnspan=5, sticky='ew')
|
|
|
|
agentToken = Tk.StringVar()
|
|
agentAuthBox = ui.SavedEntryBox(headerFrame.widget, 'active_agent_token', agentToken)
|
|
Ttk.Label(headerFrame.widget, text="AGENT TOKEN:").grid(row=1, column=0, sticky='e')
|
|
agentAuthBox.widget.grid(row=1, column=1, columnspan=5, sticky='ew')
|
|
#freeze the label column
|
|
headerFrame.widget.columnconfigure(0, weight=0)
|
|
|
|
#populate and style the response frame
|
|
resLabel = Tk.Text(responseFrame.widget, background='grey17', foreground='white')
|
|
resLabel.grid(row=0, column=0, sticky='news')
|
|
resLabel.insert('1.0', "Awaiting call...")
|
|
resLabel['state'] = 'disabled'
|
|
resScrollbarV = Ttk.Scrollbar(responseFrame.widget, orient='vertical', command=resLabel.yview)
|
|
resLabel.configure(yscrollcommand=resScrollbarV.set)
|
|
resScrollbarV.grid(row=0, column=1, rowspan=2, sticky='ns')
|
|
|
|
def updateResponse(newText):
|
|
resLabel['state'] = 'normal'
|
|
resLabel.delete('1.0', 'end')
|
|
resLabel.insert('1.0', newText)
|
|
resLabel['state'] = 'disabled'
|
|
|
|
Ttk.Style().configure('Shaded.TFrame', background='grey17')
|
|
responseFrame.widget.configure(borderwidth=2, relief='groove', style='Shaded.TFrame')
|
|
|
|
#populate the request frame
|
|
makeFrame = ui.RequesterFrame(requestFrame.widget, 'CREATE')
|
|
makeFrame.widget.grid(row=0, column=0, sticky='nsew')
|
|
|
|
#new agent
|
|
callsignVar = Tk.StringVar()
|
|
factionVar = Tk.StringVar()
|
|
ui.FieldLabel(makeFrame.widget, 'Callsign:', 1)
|
|
ui.EntryBox(makeFrame.widget, callsignVar).widget.grid(row=1, column=2, sticky='ew')
|
|
ui.FieldLabel(makeFrame.widget, 'Faction Name:', 2)
|
|
ui.EntryBox(makeFrame.widget, factionVar).widget.grid(row=2, column=2, sticky='ew')
|
|
def newAgent(args):
|
|
resCode, resData = api.newAgent(*args)
|
|
updateResponse(ui.formatResponse(resCode, resData))
|
|
try:
|
|
agentToken.set(resData['token'])
|
|
if int(resCode) < 300:
|
|
agentAuthBox.saveValue()
|
|
except:
|
|
pass
|
|
return resCode, resData
|
|
newAgentButton = ui.ApiButton(makeFrame.widget, 'NEW AGENT', 3, newAgent, (accToken, callsignVar, factionVar))
|
|
|
|
viewFrame = ui.RequesterFrame(requestFrame.widget, 'VIEW')
|
|
viewFrame.widget.grid(row=0, column=1, sticky='nesw')
|
|
|
|
#view agent
|
|
def viewAgent(args):
|
|
resCode, resData = api.viewAgent(*args)
|
|
updateResponse(ui.formatResponse(resCode, resData))
|
|
return resCode, resData
|
|
viewAgentButton = ui.ApiButton(viewFrame.widget, 'VIEW AGENT', 2, viewAgent, (agentToken))
|
|
|
|
useFrame = ui.RequesterFrame(requestFrame.widget, 'USE')
|
|
useFrame.widget.grid(row=0, column=2, sticky='nsew')
|
|
|
|
|
|
#finalize the layout
|
|
makeFrame.finalize()
|
|
useFrame.finalize()
|
|
viewFrame.finalize()
|
|
|
|
headerFrame.finalize()
|
|
requestFrame.finalize()
|
|
|
|
#response frame finalize doesnt help much so do it manually
|
|
responseFrame.widget.grid_rowconfigure(0, weight=1)
|
|
responseFrame.widget.grid_columnconfigure(0, weight=1)
|
|
responseFrame.widget.grid_columnconfigure(1, weight=0)
|
|
|
|
for child in root.winfo_children():
|
|
child.grid_configure(padx = 5, pady = 5)
|
|
|
|
#sort out scaling for the top 3 frames
|
|
root.columnconfigure(0, weight=1)
|
|
root.rowconfigure(0, weight=0)
|
|
root.rowconfigure(1, weight=1)
|
|
root.rowconfigure(2, weight=1, minsize=300)
|
|
|
|
#aaaand go
|
|
root.mainloop() |