updated observers dialog to create/edit/delete custom observers and save configuration
This commit is contained in:
parent
dd73c96830
commit
f5480c8e35
5 changed files with 68 additions and 61 deletions
|
@ -84,6 +84,12 @@ class CustomNode:
|
|||
self.services = services
|
||||
|
||||
|
||||
class Observer:
|
||||
def __init__(self, name, cmd):
|
||||
self.name = name
|
||||
self.cmd = cmd
|
||||
|
||||
|
||||
class CoreClient:
|
||||
def __init__(self, app):
|
||||
"""
|
||||
|
@ -124,24 +130,23 @@ class CoreClient:
|
|||
|
||||
def read_config(self):
|
||||
# read distributed server
|
||||
for server_config in self.app.config.get("servers", []):
|
||||
server = CoreServer(
|
||||
server_config["name"], server_config["address"], server_config["port"]
|
||||
)
|
||||
for config in self.app.config.get("servers", []):
|
||||
server = CoreServer(config["name"], config["address"], config["port"])
|
||||
self.servers[server.name] = server
|
||||
|
||||
# read custom nodes
|
||||
for node in self.app.config.get("nodes", []):
|
||||
image_file = node["image"]
|
||||
for config in self.app.config.get("nodes", []):
|
||||
image_file = config["image"]
|
||||
image = Images.get_custom(image_file)
|
||||
custom_node = CustomNode(
|
||||
node["name"], image, image_file, set(node["services"])
|
||||
config["name"], image, image_file, set(config["services"])
|
||||
)
|
||||
self.custom_nodes[custom_node.name] = custom_node
|
||||
|
||||
# read observers
|
||||
for observer in self.app.config.get("observers", []):
|
||||
self.custom_observers[observer["name"]] = observer["cmd"]
|
||||
for config in self.app.config.get("observers", []):
|
||||
observer = Observer(config["name"], config["cmd"])
|
||||
self.custom_observers[observer.name] = observer
|
||||
|
||||
def handle_events(self, event):
|
||||
logging.info("event: %s", event)
|
||||
|
|
|
@ -1,36 +1,31 @@
|
|||
import tkinter as tk
|
||||
|
||||
from coretk import appdirs
|
||||
from coretk.coreclient import Observer
|
||||
from coretk.dialogs.dialog import Dialog
|
||||
|
||||
|
||||
class Widget:
|
||||
def __init__(self, name, command):
|
||||
self.name = name
|
||||
self.command = command
|
||||
|
||||
|
||||
class ObserverWidgetsDialog(Dialog):
|
||||
class ObserverDialog(Dialog):
|
||||
def __init__(self, master, app):
|
||||
super().__init__(master, app, "Observer Widgets", modal=True)
|
||||
self.config_widgets = {}
|
||||
self.widgets = None
|
||||
self.observers = None
|
||||
self.save_button = None
|
||||
self.delete_button = None
|
||||
self.selected = None
|
||||
self.selected_index = None
|
||||
self.name = tk.StringVar()
|
||||
self.command = tk.StringVar()
|
||||
self.cmd = tk.StringVar()
|
||||
self.draw()
|
||||
|
||||
def draw(self):
|
||||
self.columnconfigure(0, weight=1)
|
||||
self.rowconfigure(0, weight=1)
|
||||
self.draw_widgets()
|
||||
self.draw_widget_fields()
|
||||
self.draw_widget_buttons()
|
||||
self.draw_listbox()
|
||||
self.draw_form_fields()
|
||||
self.draw_config_buttons()
|
||||
self.draw_apply_buttons()
|
||||
|
||||
def draw_widgets(self):
|
||||
def draw_listbox(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(sticky="nsew")
|
||||
frame.columnconfigure(0, weight=1)
|
||||
|
@ -39,15 +34,17 @@ class ObserverWidgetsDialog(Dialog):
|
|||
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL)
|
||||
scrollbar.grid(row=0, column=1, sticky="ns")
|
||||
|
||||
self.widgets = tk.Listbox(
|
||||
self.observers = tk.Listbox(
|
||||
frame, selectmode=tk.SINGLE, yscrollcommand=scrollbar.set
|
||||
)
|
||||
self.widgets.grid(row=0, column=0, sticky="nsew")
|
||||
self.widgets.bind("<<ListboxSelect>>", self.handle_widget_change)
|
||||
self.observers.grid(row=0, column=0, sticky="nsew")
|
||||
self.observers.bind("<<ListboxSelect>>", self.handle_observer_change)
|
||||
for name in sorted(self.app.core.custom_observers):
|
||||
self.observers.insert(tk.END, name)
|
||||
|
||||
scrollbar.config(command=self.widgets.yview)
|
||||
scrollbar.config(command=self.observers.yview)
|
||||
|
||||
def draw_widget_fields(self):
|
||||
def draw_form_fields(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(sticky="ew")
|
||||
frame.columnconfigure(1, weight=1)
|
||||
|
@ -59,10 +56,10 @@ class ObserverWidgetsDialog(Dialog):
|
|||
|
||||
label = tk.Label(frame, text="Command")
|
||||
label.grid(row=1, column=0, sticky="w")
|
||||
entry = tk.Entry(frame, textvariable=self.command)
|
||||
entry = tk.Entry(frame, textvariable=self.cmd)
|
||||
entry.grid(row=1, column=1, sticky="ew")
|
||||
|
||||
def draw_widget_buttons(self):
|
||||
def draw_config_buttons(self):
|
||||
frame = tk.Frame(self)
|
||||
frame.grid(pady=2, sticky="ew")
|
||||
for i in range(3):
|
||||
|
@ -87,58 +84,62 @@ class ObserverWidgetsDialog(Dialog):
|
|||
for i in range(2):
|
||||
frame.columnconfigure(i, weight=1)
|
||||
|
||||
button = tk.Button(
|
||||
frame, text="Save Configuration", command=self.click_save_configuration
|
||||
)
|
||||
button = tk.Button(frame, text="Save", command=self.click_save_config)
|
||||
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_save_config(self):
|
||||
observers = []
|
||||
for name in sorted(self.app.core.custom_observers):
|
||||
observer = self.app.core.custom_observers[name]
|
||||
observers.append({"name": observer.name, "cmd": observer.cmd})
|
||||
self.app.config["observers"] = observers
|
||||
appdirs.save_config(self.app.config)
|
||||
self.destroy()
|
||||
|
||||
def click_create(self):
|
||||
name = self.name.get()
|
||||
if name not in self.config_widgets:
|
||||
command = self.command.get()
|
||||
widget = Widget(name, command)
|
||||
self.config_widgets[name] = widget
|
||||
self.widgets.insert(tk.END, name)
|
||||
if name not in self.app.core.custom_observers:
|
||||
cmd = self.cmd.get()
|
||||
observer = Observer(name, cmd)
|
||||
self.app.core.custom_observers[name] = observer
|
||||
self.observers.insert(tk.END, name)
|
||||
|
||||
def click_save(self):
|
||||
name = self.name.get()
|
||||
if self.selected:
|
||||
previous_name = self.selected
|
||||
self.selected = name
|
||||
widget = self.config_widgets.pop(previous_name)
|
||||
widget.name = name
|
||||
widget.command = self.command.get()
|
||||
self.config_widgets[name] = widget
|
||||
self.widgets.delete(self.selected_index)
|
||||
self.widgets.insert(self.selected_index, name)
|
||||
self.widgets.selection_set(self.selected_index)
|
||||
observer = self.app.core.custom_observers.pop(previous_name)
|
||||
observer.name = name
|
||||
observer.cmd = self.cmd.get()
|
||||
self.app.core.custom_observers[name] = observer
|
||||
self.observers.delete(self.selected_index)
|
||||
self.observers.insert(self.selected_index, name)
|
||||
self.observers.selection_set(self.selected_index)
|
||||
|
||||
def click_delete(self):
|
||||
if self.selected:
|
||||
self.widgets.delete(self.selected_index)
|
||||
del self.config_widgets[self.selected]
|
||||
self.observers.delete(self.selected_index)
|
||||
del self.app.core.custom_observers[self.selected]
|
||||
self.selected = None
|
||||
self.selected_index = None
|
||||
self.name.set("")
|
||||
self.command.set("")
|
||||
self.widgets.selection_clear(0, tk.END)
|
||||
self.cmd.set("")
|
||||
self.observers.selection_clear(0, tk.END)
|
||||
self.save_button.config(state=tk.DISABLED)
|
||||
self.delete_button.config(state=tk.DISABLED)
|
||||
|
||||
def handle_widget_change(self, event):
|
||||
selection = self.widgets.curselection()
|
||||
def handle_observer_change(self, event):
|
||||
selection = self.observers.curselection()
|
||||
if selection:
|
||||
self.selected_index = selection[0]
|
||||
self.selected = self.widgets.get(self.selected_index)
|
||||
widget = self.config_widgets[self.selected]
|
||||
self.name.set(widget.name)
|
||||
self.command.set(widget.command)
|
||||
self.selected = self.observers.get(self.selected_index)
|
||||
observer = self.app.core.custom_observers[self.selected]
|
||||
self.name.set(observer.name)
|
||||
self.cmd.set(observer.cmd)
|
||||
self.save_button.config(state=tk.NORMAL)
|
||||
self.delete_button.config(state=tk.NORMAL)
|
||||
else:
|
|
@ -117,6 +117,7 @@ class ServersDialog(Dialog):
|
|||
)
|
||||
self.app.config["servers"] = servers
|
||||
appdirs.save_config(self.app.config)
|
||||
self.destroy()
|
||||
|
||||
def click_create(self):
|
||||
name = self.name.get()
|
||||
|
|
|
@ -11,7 +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.observerwidgets import ObserverWidgetsDialog
|
||||
from coretk.dialogs.observers import ObserverDialog
|
||||
from coretk.dialogs.servers import ServersDialog
|
||||
from coretk.dialogs.sessionoptions import SessionOptionsDialog
|
||||
from coretk.dialogs.sessions import SessionsDialog
|
||||
|
@ -118,5 +118,5 @@ class MenuAction:
|
|||
dialog.show()
|
||||
|
||||
def edit_observer_widgets(self):
|
||||
dialog = ObserverWidgetsDialog(self.app, self.app)
|
||||
dialog = ObserverDialog(self.app, self.app)
|
||||
dialog.show()
|
||||
|
|
|
@ -388,12 +388,12 @@ class Menubar(tk.Menu):
|
|||
command=partial(self.app.core.set_observer, cmd),
|
||||
)
|
||||
for name in sorted(self.app.core.custom_observers):
|
||||
cmd = self.app.core.custom_observers[name]
|
||||
observer = self.app.core.custom_observers[name]
|
||||
menu.add_radiobutton(
|
||||
label=name,
|
||||
variable=var,
|
||||
value=name,
|
||||
command=partial(self.app.core.set_observer, cmd),
|
||||
command=partial(self.app.core.set_observer, observer.cmd),
|
||||
)
|
||||
widget_menu.add_cascade(label="Observer Widgets", menu=menu)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue