added servers dialog for distributed core, updated usages of ttk.Combobox to readonly
This commit is contained in:
parent
22601a4580
commit
68a5468ffb
6 changed files with 197 additions and 8 deletions
|
@ -56,6 +56,13 @@ class Edge:
|
|||
self.interface_2 = None
|
||||
|
||||
|
||||
class CoreServer:
|
||||
def __init__(self, name, address, port):
|
||||
self.name = name
|
||||
self.address = address
|
||||
self.port = port
|
||||
|
||||
|
||||
class CoreClient:
|
||||
def __init__(self, app):
|
||||
"""
|
||||
|
@ -68,6 +75,9 @@ class CoreClient:
|
|||
self.master = app.master
|
||||
self.interface_helper = None
|
||||
|
||||
# distributed server data
|
||||
self.servers = {}
|
||||
|
||||
# data for managing the current session
|
||||
self.nodes = {}
|
||||
self.edges = {}
|
||||
|
|
|
@ -616,7 +616,7 @@ class CoreMenubar(object):
|
|||
)
|
||||
session_menu.add_command(
|
||||
label="Emulation servers...",
|
||||
command=action.session_emulation_servers,
|
||||
command=self.menu_action.session_servers,
|
||||
underline=0,
|
||||
)
|
||||
session_menu.add_command(
|
||||
|
|
|
@ -32,7 +32,9 @@ class HookDialog(Dialog):
|
|||
initial_state = core_pb2.SessionState.Enum.Name(core_pb2.SessionState.RUNTIME)
|
||||
self.state.set(initial_state)
|
||||
self.name.set(f"{initial_state.lower()}_hook.sh")
|
||||
combobox = ttk.Combobox(frame, textvariable=self.state, values=values)
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.state, values=values, state="readonly"
|
||||
)
|
||||
combobox.grid(row=0, column=2, sticky="ew")
|
||||
combobox.bind("<<ComboboxSelected>>", self.state_change)
|
||||
|
||||
|
|
|
@ -43,10 +43,16 @@ class NodeConfigDialog(Dialog):
|
|||
entry = tk.Entry(frame, textvariable=self.name)
|
||||
entry.grid(row=0, column=0, padx=2, sticky="ew")
|
||||
|
||||
combobox = ttk.Combobox(frame, textvariable=self.type, values=DEFAULTNODES)
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.type, values=DEFAULTNODES, state="readonly"
|
||||
)
|
||||
combobox.grid(row=0, column=1, padx=2, sticky="ew")
|
||||
|
||||
combobox = ttk.Combobox(frame, textvariable=self.server, values=["localhost"])
|
||||
servers = [""]
|
||||
servers.extend(list(sorted(self.app.core.servers.keys())))
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.server, values=servers, state="readonly"
|
||||
)
|
||||
combobox.current(0)
|
||||
combobox.grid(row=0, column=2, sticky="ew")
|
||||
|
||||
|
|
169
coretk/coretk/dialogs/servers.py
Normal file
169
coretk/coretk/dialogs/servers.py
Normal file
|
@ -0,0 +1,169 @@
|
|||
import tkinter as tk
|
||||
|
||||
from coretk.coreclient import CoreServer
|
||||
from coretk.dialogs.dialog import Dialog
|
||||
|
||||
DEFAULT_NAME = "example"
|
||||
DEFAULT_ADDRESS = "127.0.0.1"
|
||||
DEFAULT_PORT = 50051
|
||||
|
||||
|
||||
class ServersDialog(Dialog):
|
||||
def __init__(self, master, app):
|
||||
super().__init__(master, app, "CORE Servers", modal=True)
|
||||
self.name = tk.StringVar(value=DEFAULT_NAME)
|
||||
self.address = tk.StringVar(value=DEFAULT_ADDRESS)
|
||||
self.port = tk.IntVar(value=DEFAULT_PORT)
|
||||
self.servers = None
|
||||
self.selected_index = None
|
||||
self.selected = None
|
||||
self.save_button = None
|
||||
self.delete_button = None
|
||||
self.draw()
|
||||
|
||||
def draw(self):
|
||||
self.columnconfigure(0, weight=1)
|
||||
self.rowconfigure(0, weight=1)
|
||||
self.draw_servers()
|
||||
self.draw_server_configuration()
|
||||
self.draw_servers_buttons()
|
||||
self.draw_apply_buttons()
|
||||
|
||||
def draw_servers(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(pady=2, sticky="nsew")
|
||||
frame.columnconfigure(0, weight=1)
|
||||
frame.rowconfigure(0, weight=1)
|
||||
|
||||
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL)
|
||||
scrollbar.grid(row=0, column=1, sticky="ns")
|
||||
|
||||
self.servers = tk.Listbox(
|
||||
frame,
|
||||
selectmode=tk.SINGLE,
|
||||
yscrollcommand=scrollbar.set,
|
||||
relief=tk.FLAT,
|
||||
highlightthickness=0.5,
|
||||
bd=0,
|
||||
)
|
||||
self.servers.grid(row=0, column=0, sticky="nsew")
|
||||
self.servers.bind("<<ListboxSelect>>", self.handle_server_change)
|
||||
|
||||
for server in self.app.core.servers:
|
||||
self.servers.insert(tk.END, server)
|
||||
|
||||
scrollbar.config(command=self.servers.yview)
|
||||
|
||||
def draw_server_configuration(self):
|
||||
label = tk.Label(self, text="Server Configuration")
|
||||
label.grid(pady=2, sticky="ew")
|
||||
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(pady=2, sticky="ew")
|
||||
frame.columnconfigure(1, weight=1)
|
||||
frame.columnconfigure(3, weight=1)
|
||||
frame.columnconfigure(5, weight=1)
|
||||
|
||||
label = tk.Label(frame, text="Name")
|
||||
label.grid(row=0, column=0, sticky="w")
|
||||
entry = tk.Entry(frame, textvariable=self.name)
|
||||
entry.grid(row=0, column=1, sticky="ew")
|
||||
|
||||
label = tk.Label(frame, text="Address")
|
||||
label.grid(row=0, column=2, sticky="w")
|
||||
entry = tk.Entry(frame, textvariable=self.address)
|
||||
entry.grid(row=0, column=3, sticky="ew")
|
||||
|
||||
label = tk.Label(frame, text="Port")
|
||||
label.grid(row=0, column=4, sticky="w")
|
||||
entry = tk.Entry(frame, textvariable=self.port)
|
||||
entry.grid(row=0, column=5, sticky="ew")
|
||||
|
||||
def draw_servers_buttons(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(pady=2, sticky="ew")
|
||||
for i in range(3):
|
||||
frame.columnconfigure(i, weight=1)
|
||||
|
||||
button = tk.Button(frame, text="Create", command=self.click_create)
|
||||
button.grid(row=0, column=0, sticky="ew")
|
||||
|
||||
self.save_button = tk.Button(
|
||||
frame, text="Save", state=tk.DISABLED, command=self.click_save
|
||||
)
|
||||
self.save_button.grid(row=0, column=1, sticky="ew")
|
||||
|
||||
self.delete_button = tk.Button(
|
||||
frame, text="Delete", state=tk.DISABLED, command=self.click_delete
|
||||
)
|
||||
self.delete_button.grid(row=0, column=2, sticky="ew")
|
||||
|
||||
def draw_apply_buttons(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(sticky="ew")
|
||||
for i in range(2):
|
||||
frame.columnconfigure(i, weight=1)
|
||||
|
||||
button = tk.Button(
|
||||
frame, text="Save Configuration", command=self.click_save_configuration
|
||||
)
|
||||
button.grid(row=0, column=0, sticky="ew")
|
||||
|
||||
button = tk.Button(frame, text="Cancel", command=self.destroy)
|
||||
button.grid(row=0, column=1, sticky="ew")
|
||||
|
||||
def click_save_configuration(self):
|
||||
pass
|
||||
|
||||
def click_create(self):
|
||||
name = self.name.get()
|
||||
if name not in self.app.core.servers:
|
||||
address = self.address.get()
|
||||
port = self.port.get()
|
||||
server = CoreServer(name, address, port)
|
||||
self.app.core.servers[name] = server
|
||||
self.servers.insert(tk.END, name)
|
||||
|
||||
def click_save(self):
|
||||
name = self.name.get()
|
||||
if self.selected and name not in self.app.core.servers:
|
||||
previous_name = self.selected
|
||||
self.selected = name
|
||||
server = self.app.core.servers.pop(previous_name)
|
||||
server.name = name
|
||||
server.address = self.address.get()
|
||||
server.port = self.port.get()
|
||||
self.app.core.servers[name] = server
|
||||
self.servers.delete(self.selected_index)
|
||||
self.servers.insert(self.selected_index, name)
|
||||
self.servers.selection_set(self.selected_index)
|
||||
|
||||
def click_delete(self):
|
||||
if self.selected:
|
||||
self.servers.delete(self.selected_index)
|
||||
del self.app.core.servers[self.selected]
|
||||
self.selected = None
|
||||
self.selected_index = None
|
||||
self.name.set(DEFAULT_NAME)
|
||||
self.address.set(DEFAULT_ADDRESS)
|
||||
self.port.set(DEFAULT_PORT)
|
||||
self.servers.selection_clear(0, tk.END)
|
||||
self.save_button.config(state=tk.DISABLED)
|
||||
self.delete_button.config(state=tk.DISABLED)
|
||||
|
||||
def handle_server_change(self, event):
|
||||
selection = self.servers.curselection()
|
||||
if selection:
|
||||
self.selected_index = selection[0]
|
||||
self.selected = self.servers.get(self.selected_index)
|
||||
server = self.app.core.servers[self.selected]
|
||||
self.name.set(server.name)
|
||||
self.address.set(server.address)
|
||||
self.port.set(server.port)
|
||||
self.save_button.config(state=tk.NORMAL)
|
||||
self.delete_button.config(state=tk.NORMAL)
|
||||
else:
|
||||
self.selected_index = None
|
||||
self.selected = None
|
||||
self.save_button.config(state=tk.DISABLED)
|
||||
self.delete_button.config(state=tk.DISABLED)
|
|
@ -11,6 +11,7 @@ from coretk.appdirs import XML_PATH
|
|||
from coretk.dialogs.canvasbackground import CanvasBackgroundDialog
|
||||
from coretk.dialogs.canvassizeandscale import SizeAndScaleDialog
|
||||
from coretk.dialogs.hooks import HooksDialog
|
||||
from coretk.dialogs.servers import ServersDialog
|
||||
from coretk.dialogs.sessionoptions import SessionOptionsDialog
|
||||
from coretk.dialogs.sessions import SessionsDialog
|
||||
|
||||
|
@ -295,10 +296,6 @@ def session_reset_node_positions():
|
|||
logging.debug("Click session reset node positions")
|
||||
|
||||
|
||||
def session_emulation_servers():
|
||||
logging.debug("Click session emulation servers")
|
||||
|
||||
|
||||
def help_about():
|
||||
logging.debug("Click help About")
|
||||
|
||||
|
@ -401,3 +398,8 @@ class MenuAction:
|
|||
logging.debug("Click session hooks")
|
||||
dialog = HooksDialog(self.app, self.app)
|
||||
dialog.show()
|
||||
|
||||
def session_servers(self):
|
||||
logging.debug("Click session emulation servers")
|
||||
dialog = ServersDialog(self.app, self.app)
|
||||
dialog.show()
|
||||
|
|
Loading…
Add table
Reference in a new issue