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