refactor(ui): Separate bottom bar layout logic into methods
Extract the layout logic for the different dialog modes (save/open) and button positions (left/right) into dedicated methods within the WidgetManager class. This improves readability and maintainability, making future changes easier and less error-prone.
This commit is contained in:
124
cfd_ui_setup.py
124
cfd_ui_setup.py
@@ -115,7 +115,47 @@ class WidgetManager:
|
||||
self.settings = settings
|
||||
self.setup_widgets()
|
||||
|
||||
def _layout_save_buttons_left(self):
|
||||
self.save_button.pack(in_=self.left_container, side="left", padx=(0, 5))
|
||||
self.cancel_button.pack(in_=self.left_container, side="left")
|
||||
self.filter_combobox.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.trash_button.pack(in_=self.right_container, side="right", padx=(5,0))
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
|
||||
def _layout_save_buttons_right(self):
|
||||
self.trash_button.pack(in_=self.left_container, side="left")
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.filter_combobox.pack(in_=self.center_container, side="right", pady=(5,0), padx=(0,5))
|
||||
self.save_button.pack(in_=self.right_container, side="left", padx=(5, 5))
|
||||
self.cancel_button.pack(in_=self.right_container, side="left")
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
|
||||
def _layout_open_buttons_left(self):
|
||||
self.open_button.pack(in_=self.left_container, side="left", padx=(0, 5))
|
||||
self.cancel_button.pack(in_=self.left_container, side="left")
|
||||
self.filter_combobox.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
|
||||
def _layout_open_buttons_right(self):
|
||||
# Corrected layout: search status left, filter combobox right
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.filter_combobox.pack(in_=self.center_container, side="right", pady=(5,0), padx=(0,5))
|
||||
|
||||
# Corrected button layout
|
||||
self.trash_button.pack(in_=self.left_container, side="bottom", pady=(0, 5))
|
||||
|
||||
action_button_frame = ttk.Frame(self.right_container, style="AccentBottom.TFrame")
|
||||
action_button_frame.pack(side="bottom", anchor="se")
|
||||
|
||||
self.open_button.pack(in_=action_button_frame, side="left", padx=(0, 5))
|
||||
self.cancel_button.pack(in_=action_button_frame, side="left")
|
||||
self.settings_button.pack(in_=self.right_container, side="top", anchor="ne", pady=(0,5))
|
||||
|
||||
|
||||
def setup_widgets(self):
|
||||
# ... (rest of the setup_widgets method up to the bottom bar)
|
||||
# Main container
|
||||
main_frame = ttk.Frame(self.dialog, style='Accent.TFrame')
|
||||
main_frame.pack(fill="both", expand=True)
|
||||
@@ -396,86 +436,56 @@ class WidgetManager:
|
||||
self.dialog.bind("<Configure>", self.dialog.on_window_resize)
|
||||
|
||||
# --- Bottom Bar ---
|
||||
# This frame will contain the action buttons and status bar
|
||||
self.action_status_frame = ttk.Frame(content_frame, style="AccentBottom.TFrame")
|
||||
self.action_status_frame.grid(row=1, column=0, sticky="ew", pady=(5, 10), padx=10)
|
||||
|
||||
# Create three main containers for alignment
|
||||
self.left_container = ttk.Frame(self.action_status_frame, style="AccentBottom.TFrame")
|
||||
self.center_container = ttk.Frame(self.action_status_frame, style="AccentBottom.TFrame")
|
||||
self.right_container = ttk.Frame(self.action_status_frame, style="AccentBottom.TFrame")
|
||||
|
||||
# Configure the containers' expansion behavior
|
||||
self.action_status_frame.grid_columnconfigure(0, weight=0) # Left container
|
||||
self.action_status_frame.grid_columnconfigure(1, weight=1) # Center container (expands)
|
||||
self.action_status_frame.grid_columnconfigure(2, weight=0) # Right container
|
||||
|
||||
self.action_status_frame.grid_columnconfigure(1, weight=1)
|
||||
self.left_container.grid(row=0, column=0, sticky='w')
|
||||
self.center_container.grid(row=0, column=1, sticky='ew')
|
||||
self.right_container.grid(row=0, column=2, sticky='e')
|
||||
|
||||
# --- Define Widgets (All belong to action_status_frame) ---
|
||||
self.status_bar = ttk.Label(self.action_status_frame, text="", anchor="w", style="AccentBottom.TLabel")
|
||||
self.search_entry = ttk.Entry(self.action_status_frame)
|
||||
self.search_status_label = ttk.Label(self.action_status_frame, text="", style="AccentBottom.TLabel")
|
||||
# --- Define Widgets ---
|
||||
self.status_bar = ttk.Label(self.center_container, text="", anchor="w", style="AccentBottom.TLabel")
|
||||
self.search_entry = ttk.Entry(self.center_container)
|
||||
self.search_status_label = ttk.Label(self.center_container, text="", style="AccentBottom.TLabel")
|
||||
self.settings_button = ttk.Button(self.action_status_frame, image=self.dialog.icon_manager.get_icon('settings-2_small'),
|
||||
command=self.dialog.open_settings_dialog, style="Bottom.TButton.Borderless.Round")
|
||||
self.trash_button = ttk.Button(self.action_status_frame, image=self.dialog.icon_manager.get_icon('trash_small2'),
|
||||
command=self.dialog.delete_selected_item, style="Bottom.TButton.Borderless.Round")
|
||||
Tooltip(self.trash_button, "Ausgewähltes Element löschen/verschieben")
|
||||
|
||||
# --- Arrange Widgets based on Mode and Settings ---
|
||||
button_box_pos = self.settings.get("button_box_pos", "left")
|
||||
|
||||
if self.dialog.dialog_mode == "save":
|
||||
self.filename_entry = ttk.Entry(self.action_status_frame)
|
||||
save_button = ttk.Button(self.action_status_frame, text="Speichern", command=self.dialog.on_save)
|
||||
cancel_button = ttk.Button(self.action_status_frame, text="Abbrechen", command=self.dialog.on_cancel)
|
||||
self.filter_combobox = ttk.Combobox(self.action_status_frame, values=[ft[0] for ft in self.dialog.filetypes], state="readonly")
|
||||
|
||||
# Pack widgets into their respective containers
|
||||
self.filename_entry.pack(in_=self.center_container, side="top", fill="x", expand=True)
|
||||
|
||||
if button_box_pos == 'left':
|
||||
save_button.pack(in_=self.left_container, side="left", padx=(0, 5))
|
||||
cancel_button.pack(in_=self.left_container, side="left")
|
||||
self.filter_combobox.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.trash_button.pack(in_=self.right_container, side="right", padx=(5,0))
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
else: # right
|
||||
self.trash_button.pack(in_=self.left_container, side="left")
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.filter_combobox.pack(in_=self.center_container, side="right", pady=(5,0), padx=(0,5))
|
||||
save_button.pack(in_=self.right_container, side="left", padx=(5, 5))
|
||||
cancel_button.pack(in_=self.right_container, side="left")
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
|
||||
self.filename_entry = ttk.Entry(self.center_container)
|
||||
self.save_button = ttk.Button(self.action_status_frame, text="Speichern", command=self.dialog.on_save)
|
||||
self.cancel_button = ttk.Button(self.action_status_frame, text="Abbrechen", command=self.dialog.on_cancel)
|
||||
self.filter_combobox = ttk.Combobox(self.center_container, values=[ft[0] for ft in self.dialog.filetypes], state="readonly")
|
||||
self.filter_combobox.bind("<<ComboboxSelected>>", self.dialog.on_filter_change)
|
||||
self.filter_combobox.set(self.dialog.filetypes[0][0])
|
||||
|
||||
self.filename_entry.pack(side="top", fill="x", expand=True)
|
||||
|
||||
if button_box_pos == 'left':
|
||||
self._layout_save_buttons_left()
|
||||
else:
|
||||
self._layout_save_buttons_right()
|
||||
else: # Open mode
|
||||
open_button = ttk.Button(self.action_status_frame, text="Öffnen", command=self.dialog.on_open)
|
||||
cancel_button = ttk.Button(self.action_status_frame, text="Abbrechen", command=self.dialog.on_cancel)
|
||||
self.filter_combobox = ttk.Combobox(self.action_status_frame, values=[ft[0] for ft in self.dialog.filetypes], state="readonly")
|
||||
|
||||
# Pack status bar and search entry into the center
|
||||
self.status_bar.pack(in_=self.center_container, side="top", fill="x")
|
||||
self.search_entry.pack(in_=self.center_container, side="top", fill="x")
|
||||
self.search_entry.pack_forget() # Initially hidden
|
||||
|
||||
if button_box_pos == 'left':
|
||||
open_button.pack(in_=self.left_container, side="left", padx=(0, 5))
|
||||
cancel_button.pack(in_=self.left_container, side="left")
|
||||
self.filter_combobox.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0), padx=(5,0))
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
else: # right
|
||||
self.search_status_label.pack(in_=self.center_container, side="left", pady=(5,0))
|
||||
self.filter_combobox.pack(in_=self.center_container, side="right", pady=(5,0), padx=(0,5))
|
||||
open_button.pack(in_=self.right_container, side="left", padx=(0, 5))
|
||||
cancel_button.pack(in_=self.right_container, side="left")
|
||||
self.settings_button.pack(in_=self.right_container, side="right")
|
||||
|
||||
self.open_button = ttk.Button(self.action_status_frame, text="Öffnen", command=self.dialog.on_open)
|
||||
self.cancel_button = ttk.Button(self.action_status_frame, text="Abbrechen", command=self.dialog.on_cancel)
|
||||
self.filter_combobox = ttk.Combobox(self.center_container, values=[ft[0] for ft in self.dialog.filetypes], state="readonly")
|
||||
self.filter_combobox.bind("<<ComboboxSelected>>", self.dialog.on_filter_change)
|
||||
self.filter_combobox.set(self.dialog.filetypes[0][0])
|
||||
|
||||
self.status_bar.pack(side="top", fill="x")
|
||||
self.search_entry.pack(side="top", fill="x")
|
||||
self.search_entry.pack_forget()
|
||||
|
||||
if button_box_pos == 'left':
|
||||
self._layout_open_buttons_left()
|
||||
else:
|
||||
self._layout_open_buttons_right()
|
||||
|
Reference in New Issue
Block a user