add a button to more conveniently remove a node's service

This commit is contained in:
Huy Pham 2020-01-07 15:05:05 -08:00
parent 6105439ae4
commit be0f170f89
2 changed files with 50 additions and 15 deletions

View file

@ -68,22 +68,26 @@ class NodeServiceDialog(Dialog):
self.current.grid(sticky="nsew") self.current.grid(sticky="nsew")
for service in sorted(self.current_services): for service in sorted(self.current_services):
self.current.listbox.insert(tk.END, service) self.current.listbox.insert(tk.END, service)
if self.is_custom_service(service):
self.current.listbox.itemconfig(tk.END, bg="green")
frame = ttk.Frame(self.top) frame = ttk.Frame(self.top)
frame.grid(stick="ew") frame.grid(stick="ew")
for i in range(3): for i in range(4):
frame.columnconfigure(i, weight=1) frame.columnconfigure(i, weight=1)
button = ttk.Button(frame, text="Configure", command=self.click_configure) button = ttk.Button(frame, text="Configure", command=self.click_configure)
button.grid(row=0, column=0, sticky="ew", padx=PADX) button.grid(row=0, column=0, sticky="ew", padx=PADX)
button = ttk.Button(frame, text="Save", command=self.click_save) button = ttk.Button(frame, text="Save", command=self.click_save)
button.grid(row=0, column=1, sticky="ew", padx=PADX) button.grid(row=0, column=1, sticky="ew", padx=PADX)
button = ttk.Button(frame, text="Remove", command=self.click_remove)
button.grid(row=0, column=2, sticky="ew", padx=PADX)
button = ttk.Button(frame, text="Cancel", command=self.click_cancel) button = ttk.Button(frame, text="Cancel", command=self.click_cancel)
button.grid(row=0, column=2, sticky="ew") button.grid(row=0, column=3, sticky="ew")
# trigger group change # trigger group change
self.groups.listbox.event_generate("<<ListboxSelect>>") self.groups.listbox.event_generate("<<ListboxSelect>>")
def handle_group_change(self, event): def handle_group_change(self, event=None):
selection = self.groups.listbox.curselection() selection = self.groups.listbox.curselection()
if selection: if selection:
index = selection[0] index = selection[0]
@ -101,6 +105,8 @@ class NodeServiceDialog(Dialog):
self.current.listbox.delete(0, tk.END) self.current.listbox.delete(0, tk.END)
for name in sorted(self.current_services): for name in sorted(self.current_services):
self.current.listbox.insert(tk.END, name) self.current.listbox.insert(tk.END, name)
if self.is_custom_service(name):
self.current.listbox.itemconfig(tk.END, bg="green")
self.canvas_node.core_node.services[:] = self.current_services self.canvas_node.core_node.services[:] = self.current_services
def click_configure(self): def click_configure(self):
@ -132,3 +138,27 @@ class NodeServiceDialog(Dialog):
def click_cancel(self): def click_cancel(self):
self.current_services = None self.current_services = None
self.destroy() self.destroy()
def click_remove(self):
cur = self.current.listbox.curselection()
if cur:
service = self.current.listbox.get(cur[0])
self.current.listbox.delete(cur[0])
self.current_services.remove(service)
for checkbutton in self.services.frame.winfo_children():
if checkbutton["text"] == service:
checkbutton.invoke()
return
def is_custom_service(self, service):
service_configs = self.app.core.service_configs
file_configs = self.app.core.file_configs
if self.node_id in service_configs and service in service_configs[self.node_id]:
return True
if (
self.node_id in file_configs
and service in file_configs[self.node_id]
and file_configs[self.node_id][service]
):
return True
return False

View file

@ -22,6 +22,9 @@ class ServiceConfigDialog(Dialog):
self.core = app.core self.core = app.core
self.node_id = node_id self.node_id = node_id
self.service_name = service_name self.service_name = service_name
self.service_configs = app.core.service_configs
self.file_configs = app.core.file_configs
self.radiovar = tk.IntVar() self.radiovar = tk.IntVar()
self.radiovar.set(2) self.radiovar.set(2)
self.metadata = "" self.metadata = ""
@ -65,7 +68,7 @@ class ServiceConfigDialog(Dialog):
self.default_startup = default_config.startup[:] self.default_startup = default_config.startup[:]
self.default_validate = default_config.validate[:] self.default_validate = default_config.validate[:]
self.default_shutdown = default_config.shutdown[:] self.default_shutdown = default_config.shutdown[:]
custom_configs = self.app.core.service_configs custom_configs = self.service_configs
if ( if (
self.node_id in custom_configs self.node_id in custom_configs
and self.service_name in custom_configs[self.node_id] and self.service_name in custom_configs[self.node_id]
@ -398,10 +401,11 @@ class ServiceConfigDialog(Dialog):
def click_apply(self): def click_apply(self):
current_listbox = self.master.current.listbox current_listbox = self.master.current.listbox
if not self.is_custom_service(): if not self.is_custom_service():
if self.node_id in self.app.core.service_configs:
self.service_configs[self.node_id].pop(self.service_name, None)
current_listbox.itemconfig(current_listbox.curselection()[0], bg="") current_listbox.itemconfig(current_listbox.curselection()[0], bg="")
self.destroy() self.destroy()
return return
service_configs = self.app.core.service_configs
startup_commands = self.startup_commands_listbox.get(0, "end") startup_commands = self.startup_commands_listbox.get(0, "end")
shutdown_commands = self.shutdown_commands_listbox.get(0, "end") shutdown_commands = self.shutdown_commands_listbox.get(0, "end")
validate_commands = self.validate_commands_listbox.get(0, "end") validate_commands = self.validate_commands_listbox.get(0, "end")
@ -413,16 +417,15 @@ class ServiceConfigDialog(Dialog):
validate_commands, validate_commands,
shutdown_commands, shutdown_commands,
) )
if self.node_id not in service_configs: if self.node_id not in self.service_configs:
service_configs[self.node_id] = {} self.service_configs[self.node_id] = {}
self.app.core.service_configs[self.node_id][self.service_name] = config self.app.core.service_configs[self.node_id][self.service_name] = config
for file in self.modified_files: for file in self.modified_files:
file_configs = self.app.core.file_configs if self.node_id not in self.file_configs:
if self.node_id not in file_configs: self.file_configs[self.node_id] = {}
file_configs[self.node_id] = {} if self.service_name not in self.file_configs[self.node_id]:
if self.service_name not in file_configs[self.node_id]: self.file_configs[self.node_id][self.service_name] = {}
file_configs[self.node_id][self.service_name] = {} self.file_configs[self.node_id][self.service_name][
file_configs[self.node_id][self.service_name][
file file
] = self.temp_service_files[file] ] = self.temp_service_files[file]
@ -461,8 +464,10 @@ class ServiceConfigDialog(Dialog):
) )
def click_defaults(self): def click_defaults(self):
self.app.core.service_configs.pop(self.node_id, None) if self.node_id in self.service_configs:
self.app.core.file_configs.pop(self.node_id, None) self.service_configs[self.node_id].pop(self.service_name, None)
if self.node_id in self.file_configs:
self.app.core.file_configs[self.node_id].pop(self.service_name, None)
self.startup_commands = self.default_startup self.startup_commands = self.default_startup
self.validation_commands = self.default_validate self.validation_commands = self.default_validate
self.shutdown_commands = self.default_shutdown self.shutdown_commands = self.default_shutdown