From 8a0257d130c6e393aeca8c215bb68e1500c86b8d Mon Sep 17 00:00:00 2001 From: Huy Pham <42948410+hpham@users.noreply.github.com> Date: Mon, 24 Feb 2020 12:51:47 -0800 Subject: [PATCH] disable copy/paste/delete shortcuts as well as commands during runtime state --- daemon/core/gui/coreclient.py | 3 --- daemon/core/gui/graph/graph.py | 12 +++++++++--- daemon/core/gui/menubar.py | 14 ++++++++++++++ daemon/core/gui/toolbar.py | 2 ++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/daemon/core/gui/coreclient.py b/daemon/core/gui/coreclient.py index 89ce7ba0..7d8e832c 100644 --- a/daemon/core/gui/coreclient.py +++ b/daemon/core/gui/coreclient.py @@ -1064,6 +1064,3 @@ class CoreClient: def service_been_modified(self, node_id: int) -> bool: return node_id in self.modified_service_nodes - - def is_runtime_state(self): - return self.state == core_pb2.SessionState.RUNTIME diff --git a/daemon/core/gui/graph/graph.py b/daemon/core/gui/graph/graph.py index d07039d4..5652fa40 100644 --- a/daemon/core/gui/graph/graph.py +++ b/daemon/core/gui/graph/graph.py @@ -656,11 +656,11 @@ class CanvasGraph(tk.Canvas): delete selected nodes and any data that relates to it """ logging.debug("press delete key") - if not self.app.core.is_runtime_state(): + if not self.app.core.is_runtime(): nodes = self.delete_selection_objects() self.core.delete_graph_nodes(nodes) else: - logging.debug("node deletion is disabled during runtime") + logging.info("node deletion is disabled during runtime state") def double_click(self, event: tk.Event): selected = self.get_selected(event) @@ -853,11 +853,17 @@ class CanvasGraph(tk.Canvas): self.core.create_link(edge, source, dest) def copy(self): - if self.selection and not self.app.core.is_runtime_state(): + if self.app.core.is_runtime(): + logging.info("copy is disabled during runtime state") + return + if self.selection: logging.debug("to copy %s nodes", len(self.selection)) self.to_copy = self.selection.keys() def paste(self): + if self.app.core.is_runtime(): + logging.info("paste is disabled during runtime state") + return # maps original node canvas id to copy node canvas id copy_map = {} # the edges that will be copy over diff --git a/daemon/core/gui/menubar.py b/daemon/core/gui/menubar.py index 935e0b92..f4c12014 100644 --- a/daemon/core/gui/menubar.py +++ b/daemon/core/gui/menubar.py @@ -25,6 +25,7 @@ class Menubar(tk.Menu): self.app = app self.menuaction = action.MenuAction(app, master) self.recent_menu = None + self.edit_menu = None self.draw() def draw(self): @@ -110,6 +111,7 @@ class Menubar(tk.Menu): self.app.master.bind_all("", self.menuaction.copy) self.app.master.bind_all("", self.menuaction.paste) + self.edit_menu = menu def draw_canvas_menu(self): """ @@ -439,3 +441,15 @@ class Menubar(tk.Menu): self.app.core.save_xml(xml_file) else: self.menuaction.file_save_as_xml() + + def change_menubar_item_state(self, is_runtime: bool): + for i in range(self.edit_menu.index("end")): + try: + label_name = self.edit_menu.entrycget(i, "label") + if label_name in ["Copy", "Paste"]: + if is_runtime: + self.edit_menu.entryconfig(i, state="disabled") + else: + self.edit_menu.entryconfig(i, state="normal") + except tk.TclError: + logging.debug("Ignore separators") diff --git a/daemon/core/gui/toolbar.py b/daemon/core/gui/toolbar.py index eff37257..3b4828d0 100644 --- a/daemon/core/gui/toolbar.py +++ b/daemon/core/gui/toolbar.py @@ -280,6 +280,7 @@ class Toolbar(ttk.Frame): server. """ self.app.canvas.hide_context() + self.app.menubar.change_menubar_item_state(is_runtime=True) self.app.statusbar.progress_bar.start(5) self.app.canvas.mode = GraphMode.SELECT self.time = time.perf_counter() @@ -469,6 +470,7 @@ class Toolbar(ttk.Frame): """ logging.info("Click stop button") self.app.canvas.hide_context() + self.app.menubar.change_menubar_item_state(is_runtime=False) self.app.statusbar.progress_bar.start(5) self.time = time.perf_counter() task = BackgroundTask(self, self.app.core.stop_session, self.stop_callback)