From bdbf5fac613ddd0d264882a73fab80bfc31c1560 Mon Sep 17 00:00:00 2001 From: Huy Pham <42948410+hpham@users.noreply.github.com> Date: Tue, 4 Feb 2020 13:00:00 -0800 Subject: [PATCH 1/2] add recent files to gui.yaml for keeping track of recent files --- daemon/core/gui/menuaction.py | 17 +++++++++++++++++ daemon/core/gui/menubar.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/daemon/core/gui/menuaction.py b/daemon/core/gui/menuaction.py index 245eea70..b0bfb99d 100644 --- a/daemon/core/gui/menuaction.py +++ b/daemon/core/gui/menuaction.py @@ -158,3 +158,20 @@ class MenuAction: def config_throughput(self): dialog = ThroughputDialog(self.app, self.app) dialog.show() + + def add_recent_file_to_gui_config(self, file_path): + recent_files = self.app.guiconfig["recentfiles"] + num_files = len(recent_files) + if num_files == 0: + recent_files.insert(0, file_path) + elif 0 < num_files <= 3: + if file_path in recent_files: + recent_files.remove(file_path) + recent_files.insert(0, file_path) + else: + if num_files == 3: + recent_files.pop() + recent_files.insert(0, file_path) + else: + logging.error("unexpected number of recent files") + self.app.save_config() diff --git a/daemon/core/gui/menubar.py b/daemon/core/gui/menubar.py index afaf2b1a..76ca12e3 100644 --- a/daemon/core/gui/menubar.py +++ b/daemon/core/gui/menubar.py @@ -409,7 +409,7 @@ class Menubar(tk.Menu): menu.add_command(label="About", command=self.menuaction.show_about) self.add_cascade(label="Help", menu=menu) - def save(self): + def save(self, event=None): xml_file = self.app.core.xml_file if xml_file: self.app.core.save_xml(xml_file) From 6bb1d5cba2d5b12b51bd90dd170c31ad56ecd850 Mon Sep 17 00:00:00 2001 From: Huy Pham <42948410+hpham@users.noreply.github.com> Date: Tue, 4 Feb 2020 13:49:46 -0800 Subject: [PATCH 2/2] add a new data to track the most recently opened/saved files, and update recent files menu as the recent files change --- daemon/core/gui/appconfig.py | 1 + daemon/core/gui/menuaction.py | 9 +++++++-- daemon/core/gui/menubar.py | 17 ++++++++++++++--- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/daemon/core/gui/appconfig.py b/daemon/core/gui/appconfig.py index 6d11414b..f73a842c 100644 --- a/daemon/core/gui/appconfig.py +++ b/daemon/core/gui/appconfig.py @@ -94,6 +94,7 @@ def check_directory(): }, "servers": [{"name": "example", "address": "127.0.0.1", "port": 50051}], "nodes": [], + "recentfiles": [], "observers": [{"name": "hello", "cmd": "echo hello"}], } save(config) diff --git a/daemon/core/gui/menuaction.py b/daemon/core/gui/menuaction.py index 7f992d26..92657cc5 100644 --- a/daemon/core/gui/menuaction.py +++ b/daemon/core/gui/menuaction.py @@ -22,6 +22,8 @@ from core.gui.dialogs.sessions import SessionsDialog from core.gui.dialogs.throughput import ThroughputDialog from core.gui.task import BackgroundTask +MAX_FILES = 3 + if TYPE_CHECKING: from core.gui.app import Application @@ -78,6 +80,7 @@ class MenuAction: defaultextension=".xml", ) if file_path: + self.add_recent_file_to_gui_config(file_path) self.app.core.save_xml(file_path) def file_open_xml(self, event: tk.Event = None): @@ -93,6 +96,7 @@ class MenuAction: def open_xml_task(self, filename): if filename: + self.add_recent_file_to_gui_config(filename) self.app.core.xml_file = filename self.app.core.xml_dir = str(os.path.dirname(filename)) self.prompt_save_running_session() @@ -167,14 +171,15 @@ class MenuAction: num_files = len(recent_files) if num_files == 0: recent_files.insert(0, file_path) - elif 0 < num_files <= 3: + elif 0 < num_files <= MAX_FILES: if file_path in recent_files: recent_files.remove(file_path) recent_files.insert(0, file_path) else: - if num_files == 3: + if num_files == MAX_FILES: recent_files.pop() recent_files.insert(0, file_path) else: logging.error("unexpected number of recent files") self.app.save_config() + self.app.menubar.update_recent_files() diff --git a/daemon/core/gui/menubar.py b/daemon/core/gui/menubar.py index 6b369bdc..935e0b92 100644 --- a/daemon/core/gui/menubar.py +++ b/daemon/core/gui/menubar.py @@ -24,6 +24,7 @@ class Menubar(tk.Menu): self.master.config(menu=self) self.app = app self.menuaction = action.MenuAction(app, master) + self.recent_menu = None self.draw() def draw(self): @@ -58,9 +59,12 @@ class Menubar(tk.Menu): menu.add_command(label="Reload", underline=0, state=tk.DISABLED) self.app.bind_all("", self.save) - # some hard code values for testing - recent = tk.Menu(menu) - menu.add_cascade(label="Recent files", menu=recent) + self.recent_menu = tk.Menu(menu) + for i in self.app.guiconfig["recentfiles"]: + self.recent_menu.add_command( + label=i, command=partial(self.open_recent_files, i) + ) + menu.add_cascade(label="Recent files", menu=self.recent_menu) menu.add_separator() menu.add_command(label="Export Python script...", state=tk.DISABLED) menu.add_command(label="Execute XML or Python script...", state=tk.DISABLED) @@ -422,6 +426,13 @@ class Menubar(tk.Menu): else: logging.warning("File does not exist %s", filename) + def update_recent_files(self): + self.recent_menu.delete(0, tk.END) + for i in self.app.guiconfig["recentfiles"]: + self.recent_menu.add_command( + label=i, command=partial(self.open_recent_files, i) + ) + def save(self, event=None): xml_file = self.app.core.xml_file if xml_file: