From 8a5f92b3cdce57f871b77c3451f975ee485a81a6 Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Fri, 21 Mar 2025 12:49:05 +0000 Subject: [PATCH] add new interface for setting keyboard shortcuts --- .../tone_presets_manager.cpython-312.pyc | Bin 24567 -> 24884 bytes utils/tone_presets_manager.py | 54 +++++++++--------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/utils/__pycache__/tone_presets_manager.cpython-312.pyc b/utils/__pycache__/tone_presets_manager.cpython-312.pyc index 9a9fabe0574706b3dfd57eefd7d20d2185594b04..04ae7087d54d558c9009b161b34b64c8933329a2 100644 GIT binary patch delta 3601 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 L)rH)3EHwAO6G>YA diff --git a/utils/tone_presets_manager.py b/utils/tone_presets_manager.py index 72b4329..9364989 100644 --- a/utils/tone_presets_manager.py +++ b/utils/tone_presets_manager.py @@ -31,17 +31,17 @@ class TonePresetsManager: """Configure ttk styles for a clean, modern appearance""" style = ttk.Style() - # Clean frame style without the yellow tint - style.configure("TLabelframe", borderwidth=1, relief="solid", background="#ffffff") - style.configure("TLabelframe.Label", foreground="#333333", background="#ffffff", font=("Arial", 10)) + # Use namespaced styles with "TonePresets." prefix to avoid affecting global styles + style.configure("TonePresets.TLabelframe", borderwidth=1, relief="solid", background="#ffffff") + style.configure("TonePresets.TLabelframe.Label", foreground="#333333", background="#ffffff", font=("Arial", 10)) - # Clean button style - style.configure("TButton", foreground="#333333", background="#f0f0f0", font=("Arial", 10)) - style.map("TButton", + # Namespaced button style + style.configure("TonePresets.TButton", foreground="#333333", background="#f0f0f0", font=("Arial", 10)) + style.map("TonePresets.TButton", background=[("active", "#e0e0e0"), ("pressed", "#d0d0d0")]) - # Label style - style.configure("TLabel", foreground="#333333", background="#ffffff", font=("Arial", 10)) + # Namespaced label style + style.configure("TonePresets.TLabel", foreground="#333333", background="#ffffff", font=("Arial", 10)) # Listbox and Text widget styling will be applied directly to those widgets @@ -63,7 +63,7 @@ class TonePresetsManager: def create_dialog(self): # Main container frame with padding - main_frame = ttk.Frame(self.dialog, padding="10") + main_frame = ttk.Frame(self.dialog, padding="10", style="TonePresets.TFrame") main_frame.pack(fill=tk.BOTH, expand=True) # Create left panel (tone selection) @@ -76,11 +76,11 @@ class TonePresetsManager: self.create_bottom_frame() def create_left_panel(self, main_frame): - left_panel = ttk.Frame(main_frame, width=200) + left_panel = ttk.Frame(main_frame, width=200, style="TonePresets.TFrame") left_panel.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10)) left_panel.pack_propagate(False) - select_frame = ttk.LabelFrame(left_panel, text="Tone Selection", padding="5") + select_frame = ttk.LabelFrame(left_panel, text="Tone Selection", padding="5", style="TonePresets.TLabelframe") select_frame.pack(fill=tk.BOTH, expand=True) # Listbox for tones with scrollbar @@ -102,12 +102,12 @@ class TonePresetsManager: self.tone_list.selection_set(all_tones.index(tone)) # Button frame - button_frame = ttk.Frame(left_panel) + button_frame = ttk.Frame(left_panel, style="TonePresets.TFrame") button_frame.pack(fill=tk.X, pady=5) # Action buttons - self.new_button = ttk.Button(button_frame, text="New Tone", command=self.create_new_tone) - self.delete_button = ttk.Button(button_frame, text="Delete", command=self.delete_current_tone) + self.new_button = ttk.Button(button_frame, text="New Tone", command=self.create_new_tone, style="TonePresets.TButton") + self.delete_button = ttk.Button(button_frame, text="Delete", command=self.delete_current_tone, style="TonePresets.TButton") self.new_button.pack(side=tk.LEFT, padx=2) self.delete_button.pack(side=tk.LEFT, padx=2) @@ -123,17 +123,17 @@ class TonePresetsManager: self.update_content() def create_right_panel(self, main_frame): - self.right_panel = ttk.Frame(main_frame) + self.right_panel = ttk.Frame(main_frame, style="TonePresets.TFrame") self.right_panel.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) - content_frame = ttk.LabelFrame(self.right_panel, text="Tone Description", padding="5") + content_frame = ttk.LabelFrame(self.right_panel, text="Tone Description", padding="5", style="TonePresets.TLabelframe") content_frame.pack(fill=tk.BOTH, expand=True) - self.edit_status_label = ttk.Label(content_frame, foreground="blue") + self.edit_status_label = ttk.Label(content_frame, foreground="blue", style="TonePresets.TLabel") self.edit_status_label.pack(anchor=tk.W, padx=5, pady=(5,0)) # Create a frame to contain the text widget and scrollbar - text_frame = ttk.Frame(content_frame) + text_frame = ttk.Frame(content_frame, style="TonePresets.TFrame") text_frame.pack(fill=tk.BOTH, expand=True, pady=5) # Create vertical scrollbar only @@ -152,11 +152,11 @@ class TonePresetsManager: v_scrollbar.config(command=self.content_text.yview) self.save_changes_button = ttk.Button(self.right_panel, text="Save Changes", - command=self.save_content_changes, state='disabled') + command=self.save_content_changes, state='disabled', style="TonePresets.TButton") self.save_changes_button.pack(pady=(5, 0), anchor=tk.E) def create_bottom_frame(self): - bottom_frame = ttk.Frame(self.dialog) + bottom_frame = ttk.Frame(self.dialog, style="TonePresets.TFrame") bottom_frame.pack(side=tk.BOTTOM, fill=tk.X, pady=10, padx=10) save_button = ctk.CTkButton( @@ -236,18 +236,18 @@ class TonePresetsManager: tone_dialog.geometry(f"{dialog_width}x{dialog_height}+{position_x}+{position_y}") # Name entry - name_frame = ttk.Frame(tone_dialog, padding="10") + name_frame = ttk.Frame(tone_dialog, padding="10", style="TonePresets.TFrame") name_frame.pack(fill=tk.X) - ttk.Label(name_frame, text="Tone Name:").pack(side=tk.LEFT) + ttk.Label(name_frame, text="Tone Name:", style="TonePresets.TLabel").pack(side=tk.LEFT) name_entry = ttk.Entry(name_frame) name_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(5, 0)) # Tone description - desc_frame = ttk.LabelFrame(tone_dialog, text="Tone Description", padding="10") + desc_frame = ttk.LabelFrame(tone_dialog, text="Tone Description", padding="10", style="TonePresets.TLabelframe") desc_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) # Create a frame for the text widget and scrollbar - text_frame = ttk.Frame(desc_frame) + text_frame = ttk.Frame(desc_frame, style="TonePresets.TFrame") text_frame.pack(fill=tk.BOTH, expand=True) # Create vertical scrollbar only @@ -302,12 +302,12 @@ class TonePresetsManager: tone_dialog.destroy() # Buttons - button_frame = ttk.Frame(tone_dialog) + button_frame = ttk.Frame(tone_dialog, style="TonePresets.TFrame") button_frame.pack(fill=tk.X, pady=10, padx=10) ttk.Button(button_frame, text="Save", - command=save_new_tone).pack(side=tk.RIGHT, padx=5) + command=save_new_tone, style="TonePresets.TButton").pack(side=tk.RIGHT, padx=5) ttk.Button(button_frame, text="Cancel", - command=tone_dialog.destroy).pack(side=tk.RIGHT) + command=tone_dialog.destroy, style="TonePresets.TButton").pack(side=tk.RIGHT) def delete_current_tone(self): """Delete the currently selected tone."""