Skip to content
Snippets Groups Projects
Commit 273babce authored by pompolic's avatar pompolic
Browse files

UI touchup

- TKinter code is now in PresentationLayer.init_gui()
- aligned things better on the grid
- added placeholder widget for parser hierarchy information
parent 811c2210
Branches api-WIP
No related tags found
No related merge requests found
......@@ -2,11 +2,14 @@ from tkinter import *
from tkinter import ttk
class PresentationLayer():
def __init__(self, parser, name_var, address_var, input_chunk_var):
def __init__(self, parser):
self.top_parser = parser
self.top_parser_name = name_var
self.top_parser_address = address_var
self.input_chunk = input_chunk_var
self.root = None
self.frame = None
self.top_parser_name = None
self.top_parser_address = None
self.input_chunk = None
def set_top_parser(self,parser):
self.top_parser = parser
......@@ -16,6 +19,44 @@ class PresentationLayer():
def set_input_chunk(self, input_chunk):
self.input_chunk.set(input_chunk)
# let's avoid polluting the global namespace
def init_gui(self):
self.root = Tk()
self.root.title("Parser Visualization")
self.frame = ttk.Frame(self.root, padding="12 12 12 12")
self.frame.grid(column=0, row=0)
self.root.columnconfigure(0, weight=1)
self.root.rowconfigure(0, weight=1)
self.top_parser_name = StringVar()
self.top_parser_name.set(self.top_parser.name)
self.top_parser_address = StringVar()
self.top_parser_address.set(hex(self.top_parser.address))
self.input_chunk = StringVar()
self.input_chunk.set(top_level_parse.get_input_chunk())
#self.set_top_parser(top_level_parse.peek_parser())
#self.set_input_chunk(top_level_parse.get_input_chunk())
#"Current parser" widgets
ttk.Label(self.frame, text="Current parser").grid(column=1, row=1)
ttk.Label(self.frame, textvariable=self.top_parser_name).grid(column=1, row=2)
ttk.Label(self.frame, textvariable=presentation_layer.top_parser_address).grid(column=1, row=3)
# Display a chunk of the input
ttk.Label(self.frame, text="Input").grid(column=2, row=1)
ttk.Label(self.frame, textvariable=self.input_chunk).grid(column=2, row=2)
# ParserHierarchy widget (sequence members, parsers this one contains, etc)
# Showing parser decisions is probably possible by capturing the return value of h_do_parse
ttk.Label(self.frame, text="Parser hierarchy").grid(column=2, row=3)
ttk.Label(self.frame, text="[Placeholder, Placeholder, Placeholder]").grid(column=2, row=4)
ttk.Button(self.frame, text="Step", command=step).grid(column=1, row=4)
def mainloop(self):
self.root.mainloop()
def step(*args):
gdb.execute("hammer-parse-step 1")
presentation_layer.set_top_parser(top_level_parse.peek_parser())
......@@ -24,32 +65,7 @@ def step(*args):
if top_level_parse is None:
print("Please import parser name script")
else:
root = Tk()
root.title("Parser visualization")
frame = ttk.Frame(root, padding="12 12 12 12")
frame.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
parser = StringVar() # TODO: encapsulate variables to avoid namespace pollution
parser_addr = StringVar()
input_chunk = StringVar()
presentation_layer = PresentationLayer(top_level_parse.peek_parser(), parser, parser_addr, input_chunk)
presentation_layer.set_top_parser(top_level_parse.peek_parser())
presentation_layer.set_input_chunk(top_level_parse.get_input_chunk())
#presentation_layer.top_parser_name = parser
#presentation_layer.top_parser_addr = parser_addr
#presentation_layer.top_parser = top_level_parse.peek_parser()
#presentation_layer.set_top_parser(top_level_parse.peek_parser())
#presentation_layer.top_parser = top_level_parse.peek_parser()
ttk.Label(frame, textvariable=presentation_layer.top_parser_name).grid(column=1, row=1)
#ttk.Label(frame, text="Placeholder name").grid(column=1, row=1)
ttk.Label(frame, textvariable=presentation_layer.top_parser_address).grid(column=1, row=2)
#ttk.Label(frame, text="Placeholder address").grid(column=1, row=2)
ttk.Label(frame, textvariable=presentation_layer.input_chunk).grid(column=2, row=1)
ttk.Button(frame, text="Step", command=step).grid(column=1, row=3)
root.mainloop()
presentation_layer = PresentationLayer(top_level_parse.peek_parser())
presentation_layer.init_gui()
presentation_layer.mainloop()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment