diff --git a/__pycache__/custom_file_dialog.cpython-312.pyc b/__pycache__/custom_file_dialog.cpython-312.pyc index 9b3533a..56fa39e 100644 Binary files a/__pycache__/custom_file_dialog.cpython-312.pyc and b/__pycache__/custom_file_dialog.cpython-312.pyc differ diff --git a/common_tools.py b/common_tools.py index a14e1e3..2d455c9 100755 --- a/common_tools.py +++ b/common_tools.py @@ -1,4 +1,3 @@ - """ Classes Method and Functions for lx Apps """ import logging @@ -327,7 +326,8 @@ class ConfigManager: """Load the config file and return the config as dict""" if not cls._config: try: - lines = Path(cls._config_file).read_text(encoding="utf-8").splitlines() + lines = Path(cls._config_file).read_text( + encoding="utf-8").splitlines() cls._config = { "updates": lines[1].strip(), "theme": lines[3].strip(), @@ -406,21 +406,38 @@ class ThemeManager: class Tooltip: - def __init__(self, widget, text, wraplength=250): + def __init__(self, widget, text, wraplength=250, state_var=None): self.widget = widget self.text = text self.wraplength = wraplength + self.state_var = state_var self.tooltip_window = None self.id = None - self.widget.bind("", self.enter) - self.widget.bind("", self.leave) - self.widget.bind("", self.leave) + self.update_bindings() + if self.state_var: + self.state_var.trace_add("write", self.update_bindings) - def enter(self, event=None): self.schedule() - def leave(self, event=None): self.unschedule(); self.hide_tooltip() + def update_bindings(self, *args): + self.widget.unbind("") + self.widget.unbind("") + self.widget.unbind("") - def schedule(self): self.unschedule( - ); self.id = self.widget.after(250, self.show_tooltip) + if self.state_var is None or self.state_var.get(): + self.widget.bind("", self.enter) + self.widget.bind("", self.leave) + self.widget.bind("", self.leave) + + def enter(self, event=None): + if self.state_var is None or self.state_var.get(): + self.schedule() + + def leave(self, event=None): + self.unschedule() + self.hide_tooltip() + + def schedule(self): + self.unschedule() + self.id = self.widget.after(250, self.show_tooltip) def unschedule(self): id = self.id @@ -429,12 +446,14 @@ class Tooltip: self.widget.after_cancel(id) def show_tooltip(self, event=None): + if self.tooltip_window or not self.text: + return x, y, _, _ = self.widget.bbox("insert") x += self.widget.winfo_rootx() + 25 y += self.widget.winfo_rooty() + 20 self.tooltip_window = tw = tk.Toplevel(self.widget) tw.wm_overrideredirect(True) - tw.wm_geometry(f"+{x}+{y}") + tw.wm_geometry(f"+" + str(x) + "+" + str(y)) label = ttk.Label(tw, text=self.text, justify=tk.LEFT, background="#FFFFE0", foreground="black", relief=tk.SOLID, borderwidth=1, wraplength=self.wraplength, padding=(4, 2, 4, 2)) label.pack(ipadx=1) @@ -455,17 +474,17 @@ class LogConfig: mode="a", encoding="utf-8", ) - formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") + formatter = logging.Formatter( + "%(asctime)s - %(levelname)s - %(message)s") file_handler.setFormatter(formatter) file_handler.setLevel(logging.DEBUG) logger = logging.getLogger() logger.addHandler(file_handler) -import os class IconManager: - def __init__(self, base_path='/usr/share/icons/lx-icons'): + def __init__(self, base_path='/usr/share/icons/lx-icons/'): self.base_path = base_path self.icons = {} self._define_icon_paths() @@ -615,7 +634,13 @@ class IconManager: except tk.TclError as e: print(f"Error loading icon '{key}' from '{full_path}': {e}") size = 32 # Default size - if '16' in rel_path: size = 16 - elif '48' in rel_path: size = 48 - elif '64' in rel_path: size = 64 + if '16' in rel_path: + size = 16 + elif '48' in rel_path: + size = 48 + elif '64' in rel_path: + size = 64 self.icons[key] = tk.PhotoImage(width=size, height=size) + + def get_icon(self, name): + return self.icons.get(name) \ No newline at end of file