diff options
| author | Bobby <[email protected]> | 2022-11-06 08:03:42 -0500 |
|---|---|---|
| committer | Bobby <[email protected]> | 2022-11-06 08:03:42 -0500 |
| commit | 2e3f84c8e402563a9c11850ad07d95f59cd43be3 (patch) | |
| tree | d2b6f5b2a3ee49cd933447fb61ab2bfd1d6c1c9e /src/texty.py | |
| parent | 57858724265b39bc829df8eaa41d7c04aa486734 (diff) | |
| download | texty-2e3f84c8e402563a9c11850ad07d95f59cd43be3.tar.xz texty-2e3f84c8e402563a9c11850ad07d95f59cd43be3.zip | |
feat: window manager and file manager
Diffstat (limited to 'src/texty.py')
| -rw-r--r-- | src/texty.py | 106 |
1 files changed, 62 insertions, 44 deletions
diff --git a/src/texty.py b/src/texty.py index 3b043e5..5e847a5 100644 --- a/src/texty.py +++ b/src/texty.py @@ -9,9 +9,8 @@ import tkinter as tk import click from config.defaults import DEFAULT_PREFS, KEYBINDS, MAC_KEYBINDS, PREFERENCES_FILE -from helpers.preferences import PreferenceManager - -logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) +from helpers.managers import FileManager, PreferenceManager +from helpers.windows import TextyWindow class Texty(tk.Tk): @@ -20,29 +19,24 @@ class Texty(tk.Tk): self.title("Texty") self.debug = debug self.prefs = PreferenceManager(DEFAULT_PREFS, PREFERENCES_FILE) - self.protocol("WM_DELETE_WINDOW", self.on_close) + self.fm = FileManager() self.system = self.call("tk", "windowingsystem") - self.log("Running Texty on %s" % self.system) - - self.option_add("*tearOff", False) - self.log("Tearoff disabled") - - # Bind Resize, Move, and Close - self.bind("<Configure>", self.save_prefs) - self.bind("<Destroy>", self.save_prefs) - self.log("Resize, Move, and Close bindings set to save preferences.") - - # Set Geometry - self.set_geometry() + self.log( + "Running Texty on system: {}, platform: {}".format( + self.system, sys.platform + ) + ) - # Create Menu Bar - self.bind_menu() + self.withdraw() + self.create_window() - def log(self, message): - if self.debug: - logging.info(message) + def create_window(self): + window = TextyWindow(self) + window.grab_set() + window.focus_set() + window.mainloop() - def set_geometry(self): + def get_window_geometry(self): width = self.prefs.get("width") height = self.prefs.get("height") x_pos = ( @@ -55,27 +49,21 @@ class Texty(tk.Tk): if self.prefs.get("y_pos") == "center" else self.prefs.get("y_pos") ) - self.geometry(f"{width}x{height}+{x_pos}+{y_pos}") self.log( "Window geometry set to {}x{}+{}+{}".format(width, height, x_pos, y_pos) ) + return f"{width}x{height}+{x_pos}+{y_pos}" - def save_prefs(self, event): - if not self.debug: - self.prefs.set("width", self.winfo_width()) - self.prefs.set("height", self.winfo_height()) - self.prefs.set("x_pos", self.winfo_x()) - self.prefs.set("y_pos", self.winfo_y()) - self.prefs.save() - - def bind_menu(self): + def get_menubar(self): menubar = tk.Menu(self) + # Setting Keybinds meta = "Command" if self.system == "aqua" else "Control" keybinds = {k: v.replace("meta", meta) for k, v in KEYBINDS.items()} mac_keybinds = {k: v.replace("meta", meta) for k, v in MAC_KEYBINDS.items()} self.log("Keybinds set to %s" % keybinds) + # macOS specific menu items if self.system == "aqua": self.log("MacOS detected, Additional Keybinds set to %s" % mac_keybinds) appmenu = tk.Menu(menubar, name="apple") @@ -83,28 +71,58 @@ class Texty(tk.Tk): appmenu.add_command(label="About Texty") appmenu.add_separator() self.createcommand("tk::mac::ShowPreferences", self.show_preferences) + appmenu.add_separator() - self.config(menu=menubar) + # File Menu + filemenu = tk.Menu(menubar) + menubar.add_cascade(menu=filemenu, label="File") + filemenu.add_command( + label="New Text File", accelerator=keybinds["New Text File"] + ) + filemenu.add_command(label="New Window", accelerator=keybinds["New Window"]) + # filemenu.add_command(label="New Tab", accelerator=keybinds["New Tab"]) + filemenu.add_separator() + filemenu.add_command(label="Open File", accelerator=keybinds["Open File"]) + filemenu.add_command(label="Save", accelerator=keybinds["Save"]) + filemenu.add_command(label="Save As", accelerator=keybinds["Save As"]) + filemenu.add_separator() + # filemenu.add_command(label="Close Tab", accelerator=keybinds["Close Tab"]) + if self.system == "aqua": + filemenu.add_command( + label="Close Window", accelerator=mac_keybinds["Close Window"] + ) + else: + filemenu.add_command(label="Quit", accelerator=keybinds["Close"]) + + # Configure Menubar for the current window + return menubar + + # Event Logger + def log(self, message): + if self.debug: + logging.info(message) + + # Save Preferences + def save_prefs(self, event): + if not self.debug: + self.prefs.set("width", self.winfo_width()) + self.prefs.set("height", self.winfo_height()) + self.prefs.set("x_pos", self.winfo_x()) + self.prefs.set("y_pos", self.winfo_y()) + self.prefs.save() def show_preferences(self): print("Show Preferences") - def on_close(self): - if self.system == "aqua": - self.destroy() - else: - self.quit() - @click.command() @click.option("--debug", is_flag=True, help="Enable debug mode.") -def main(debug): +def runtexty(debug): + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) if debug: logging.info("Running in debug mode. Preferences will not be saved.") - texty = Texty(debug=debug) - texty.protocol("WM_DELETE_WINDOW", texty.on_close) - texty.mainloop() + Texty(debug=debug) if __name__ == "__main__": - main() + runtexty() |
