From bc130badc63b0608240ce560065f31704ac1f153 Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Sat, 22 Mar 2025 10:05:21 +0000 Subject: [PATCH] tidy up the design of the tone preset manager --- .gitignore | 1 + utils/__pycache__/text_to_mic.cpython-312.pyc | Bin 70175 -> 70175 bytes .../tone_presets_manager.cpython-312.pyc | Bin 24884 -> 26016 bytes utils/tone_presets_manager.py | 45 +++++++++++++++--- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index ed871af..eb4e9a6 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ vs/ config/ **/__pycache__/ +**__pycache__** \ No newline at end of file diff --git a/utils/__pycache__/text_to_mic.cpython-312.pyc b/utils/__pycache__/text_to_mic.cpython-312.pyc index 3f1e9ed94384c7ab2ea9e77a1577b8465f24bd9c..56c517e62095e99102c700e76d464d7b8bbbb8f7 100644 GIT binary patch delta 32 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 delta 5071 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 Z4e1ENCldbUEfe>9c9~iJxPeei`Y$gWpD6$U diff --git a/utils/tone_presets_manager.py b/utils/tone_presets_manager.py index 9364989..1b992bf 100644 --- a/utils/tone_presets_manager.py +++ b/utils/tone_presets_manager.py @@ -15,6 +15,9 @@ class TonePresetsManager: self.dialog.transient(parent) self.dialog.grab_set() + # Set the dialog background color + self.dialog.configure(background="#f0f0f0") + # Center the dialog on the screen self.center_dialog() @@ -32,8 +35,16 @@ class TonePresetsManager: style = ttk.Style() # 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)) + # Base frame style that will be used by all frames + style.configure("TonePresets.TFrame", background="#f0f0f0") + + # Update labelframe style with bold and centered title + style.configure("TonePresets.TLabelframe", borderwidth=0, relief="flat", background="#f0f0f0") + style.configure("TonePresets.TLabelframe.Label", + foreground="#333333", + background="#f0f0f0", + font=("Arial", 10, "bold"), + anchor="center") # Namespaced button style style.configure("TonePresets.TButton", foreground="#333333", background="#f0f0f0", font=("Arial", 10)) @@ -41,7 +52,7 @@ class TonePresetsManager: background=[("active", "#e0e0e0"), ("pressed", "#d0d0d0")]) # Namespaced label style - style.configure("TonePresets.TLabel", foreground="#333333", background="#ffffff", font=("Arial", 10)) + style.configure("TonePresets.TLabel", foreground="#333333", background="#f0f0f0", font=("Arial", 10)) # Listbox and Text widget styling will be applied directly to those widgets @@ -80,12 +91,19 @@ class TonePresetsManager: left_panel.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10)) left_panel.pack_propagate(False) + # Create labelframe with centered title select_frame = ttk.LabelFrame(left_panel, text="Tone Selection", padding="5", style="TonePresets.TLabelframe") select_frame.pack(fill=tk.BOTH, expand=True) + + # Use grid_propagate to ensure the title is properly centered + for child in select_frame.winfo_children(): + if child.winfo_class() == 'TLabel': + child.configure(anchor='center') + child.place(relx=0.5, rely=0, anchor='n') # Listbox for tones with scrollbar self.tone_list = tk.Listbox(select_frame, height=8, selectmode=tk.BROWSE, - bg="#ffffff", fg="#333333", + bg="#f0f0f0", fg="#333333", selectbackground="#0078d7", selectforeground="#ffffff", font=("Arial", 10)) tone_scrollbar = ttk.Scrollbar(select_frame, orient=tk.VERTICAL, command=self.tone_list.yview) @@ -126,8 +144,15 @@ class TonePresetsManager: self.right_panel = ttk.Frame(main_frame, style="TonePresets.TFrame") self.right_panel.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + # Create labelframe with centered title content_frame = ttk.LabelFrame(self.right_panel, text="Tone Description", padding="5", style="TonePresets.TLabelframe") content_frame.pack(fill=tk.BOTH, expand=True) + + # Use grid_propagate to ensure the title is properly centered + for child in content_frame.winfo_children(): + if child.winfo_class() == 'TLabel': + child.configure(anchor='center') + child.place(relx=0.5, rely=0, anchor='n') 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)) @@ -143,7 +168,7 @@ class TonePresetsManager: # Create the text widget with word wrap and vertical scrollbar self.content_text = tk.Text(text_frame, wrap=tk.WORD, yscrollcommand=v_scrollbar.set, - bg="#ffffff", fg="#333333", + bg="#f0f0f0", fg="#333333", font=("Arial", 10), relief="solid", borderwidth=1) self.content_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) @@ -226,7 +251,7 @@ class TonePresetsManager: tone_dialog.grab_set() # Set background color for a cleaner look - tone_dialog.configure(background="#ffffff") + tone_dialog.configure(background="#f0f0f0") # Center the new tone dialog dialog_width = 600 @@ -242,10 +267,16 @@ class TonePresetsManager: name_entry = ttk.Entry(name_frame) name_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(5, 0)) - # Tone description + # Tone description with consistent styling 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) + # Ensure the title is centered + for child in desc_frame.winfo_children(): + if child.winfo_class() == 'TLabel': + child.configure(anchor='center') + child.place(relx=0.5, rely=0, anchor='n') + # Create a frame for the text widget and scrollbar text_frame = ttk.Frame(desc_frame, style="TonePresets.TFrame") text_frame.pack(fill=tk.BOTH, expand=True)