Bottom Buttons UI ok

This commit is contained in:
2025-08-04 12:21:18 +02:00
parent d20a941c8c
commit 17fe3455b8
5 changed files with 78 additions and 51 deletions

View File

@@ -402,12 +402,12 @@ class WidgetManager:
self.settings_button = ttk.Button(bottom_controls_frame, image=self.dialog.icon_manager.get_icon(
'settings-2_small'), command=self.dialog.open_settings_dialog, style="Bottom.TButton.Borderless.Round")
self.settings_button.grid(
row=0, column=3, sticky="ne", padx=(0, 10), pady=(5, 0))
row=0, column=3, sticky="ne", padx=(0, 5), pady=(2, 0))
Tooltip(self.settings_button, "Einstellungen")
if self.dialog.dialog_mode == "save":
action_buttons_frame.grid_columnconfigure(0, weight=1)
self.filename_entry = ttk.Entry(action_buttons_frame)
self.filename_entry = ttk.Entry(action_buttons_frame, width=75)
save_button = ttk.Button(
action_buttons_frame, text="Speichern", command=self.dialog.on_save)
cancel_button = ttk.Button(
@@ -417,21 +417,21 @@ class WidgetManager:
if button_box_pos == 'left':
self.filename_entry.grid(
row=0, column=0, sticky="ew", padx=(10, 5))
save_button.grid(row=0, column=1, sticky="e", padx=(0, 10))
row=0, column=1, sticky="ew", padx=(10, 0))
save_button.grid(row=0, column=0, sticky="e", padx=(10, 5))
cancel_button.grid(row=1, column=0, sticky="w",
padx=(10, 5), pady=(5, 0))
padx=(10, 0), pady=(10, 0))
self.filter_combobox.grid(
row=1, column=1, sticky="w", padx=(0, 10), pady=(5, 0))
row=1, column=1, sticky="w", padx=(10, 0), pady=(10, 0))
else: # right
action_buttons_frame.grid_columnconfigure(1, weight=1)
save_button.grid(row=0, column=0, sticky="w", padx=(10, 5))
save_button.grid(row=0, column=1, sticky="w", padx=(5, 5))
self.filename_entry.grid(
row=0, column=1, sticky="ew", padx=(0, 10))
row=0, column=0, sticky="ew", padx=(0, 10))
self.filter_combobox.grid(
row=1, column=0, sticky="e", padx=(10, 5), pady=(5, 0))
row=1, column=0, sticky="e", padx=(0, 10), pady=(10, 0))
cancel_button.grid(row=1, column=1, sticky="e",
padx=(0, 10), pady=(5, 0))
padx=(0, 5), pady=(10, 0))
self.filter_combobox.bind(
"<<ComboboxSelected>>", self.dialog.on_filter_change)
@@ -446,17 +446,17 @@ class WidgetManager:
ft[0] for ft in self.dialog.filetypes], state="readonly")
if button_box_pos == 'left':
open_button.grid(row=0, column=0, sticky="w", padx=(10, 5))
open_button.grid(row=0, column=0, sticky="e", padx=(10, 5))
cancel_button.grid(row=1, column=0, sticky="w",
padx=(10, 5), pady=(5, 0))
padx=(10, 0), pady=(10, 0))
self.filter_combobox.grid(
row=1, column=1, sticky="w", padx=(0, 10), pady=(5, 0))
row=1, column=1, sticky="w", padx=(10, 0), pady=(10, 0))
else: # right
open_button.grid(row=0, column=1, sticky="e", padx=(10, 5))
open_button.grid(row=0, column=1, sticky="w", padx=(5, 5))
cancel_button.grid(row=1, column=1, sticky="e",
padx=(10, 5), pady=(5, 0))
padx=(0, 5), pady=(10, 0))
self.filter_combobox.grid(
row=1, column=0, sticky="w", padx=(0, 0), pady=(5, 0))
row=1, column=0, sticky="e", padx=(0, 5), pady=(10, 0))
self.filter_combobox.bind(
"<<ComboboxSelected>>", self.dialog.on_filter_change)

View File

@@ -21,47 +21,65 @@ class SettingsDialog(tk.Toplevel):
self.settings = CfdConfigManager.load()
# Variables
self.search_icon_pos = tk.StringVar(value=self.settings.get("search_icon_pos", "right"))
self.button_box_pos = tk.StringVar(value=self.settings.get("button_box_pos", "left"))
self.window_size_preset = tk.StringVar(value=self.settings.get("window_size_preset", "1050x850"))
self.default_view_mode = tk.StringVar(value=self.settings.get("default_view_mode", "icons"))
self.search_icon_pos = tk.StringVar(
value=self.settings.get("search_icon_pos", "right"))
self.button_box_pos = tk.StringVar(
value=self.settings.get("button_box_pos", "left"))
self.window_size_preset = tk.StringVar(
value=self.settings.get("window_size_preset", "1050x850"))
self.default_view_mode = tk.StringVar(
value=self.settings.get("default_view_mode", "icons"))
# --- UI Elements ---
main_frame = ttk.Frame(self, padding=10)
main_frame.pack(fill="both", expand=True)
# Search Icon Position
search_frame = ttk.LabelFrame(main_frame, text="Position der Such-Lupe", padding=10)
search_frame = ttk.LabelFrame(
main_frame, text="Position der Such-Lupe", padding=10)
search_frame.pack(fill="x", pady=5)
ttk.Radiobutton(search_frame, text="Links", variable=self.search_icon_pos, value="left").pack(side="left", padx=5)
ttk.Radiobutton(search_frame, text="Rechts", variable=self.search_icon_pos, value="right").pack(side="left", padx=5)
ttk.Radiobutton(search_frame, text="Links", variable=self.search_icon_pos,
value="left").pack(side="left", padx=5)
ttk.Radiobutton(search_frame, text="Rechts", variable=self.search_icon_pos,
value="right").pack(side="left", padx=5)
# Button Box Position
button_box_frame = ttk.LabelFrame(main_frame, text="Position der Dialog-Buttons", padding=10)
button_box_frame = ttk.LabelFrame(
main_frame, text="Position der Dialog-Buttons", padding=10)
button_box_frame.pack(fill="x", pady=5)
ttk.Radiobutton(button_box_frame, text="Links", variable=self.button_box_pos, value="left").pack(side="left", padx=5)
ttk.Radiobutton(button_box_frame, text="Rechts", variable=self.button_box_pos, value="right").pack(side="left", padx=5)
ttk.Radiobutton(button_box_frame, text="Links",
variable=self.button_box_pos, value="left").pack(side="left", padx=5)
ttk.Radiobutton(button_box_frame, text="Rechts",
variable=self.button_box_pos, value="right").pack(side="left", padx=5)
# Window Size
size_frame = ttk.LabelFrame(main_frame, text="Fenstergröße", padding=10)
size_frame = ttk.LabelFrame(
main_frame, text="Fenstergröße", padding=10)
size_frame.pack(fill="x", pady=5)
sizes = ["1050x850", "850x650", "650x450"]
size_combo = ttk.Combobox(size_frame, textvariable=self.window_size_preset, values=sizes, state="readonly")
size_combo = ttk.Combobox(
size_frame, textvariable=self.window_size_preset, values=sizes, state="readonly")
size_combo.pack(fill="x")
# Default View Mode
view_mode_frame = ttk.LabelFrame(main_frame, text="Standardansicht", padding=10)
view_mode_frame = ttk.LabelFrame(
main_frame, text="Standardansicht", padding=10)
view_mode_frame.pack(fill="x", pady=5)
ttk.Radiobutton(view_mode_frame, text="Kacheln", variable=self.default_view_mode, value="icons").pack(side="left", padx=5)
ttk.Radiobutton(view_mode_frame, text="Liste", variable=self.default_view_mode, value="list").pack(side="left", padx=5)
ttk.Radiobutton(view_mode_frame, text="Kacheln",
variable=self.default_view_mode, value="icons").pack(side="left", padx=5)
ttk.Radiobutton(view_mode_frame, text="Liste",
variable=self.default_view_mode, value="list").pack(side="left", padx=5)
# --- Action Buttons ---
button_frame = ttk.Frame(main_frame)
button_frame.pack(fill="x", pady=(10, 0))
ttk.Button(button_frame, text="Auf Standard zurücksetzen", command=self.reset_to_defaults).pack(side="left")
ttk.Button(button_frame, text="Speichern", command=self.save_settings).pack(side="right", padx=5)
ttk.Button(button_frame, text="Abbrechen", command=self.destroy).pack(side="right")
ttk.Button(button_frame, text="Auf Standard zurücksetzen",
command=self.reset_to_defaults).pack(side="left", padx=5)
ttk.Button(button_frame, text="Speichern",
command=self.save_settings).pack(side="right", padx=5)
ttk.Button(button_frame, text="Abbrechen",
command=self.destroy).pack(side="right")
def save_settings(self):
new_settings = {
@@ -88,17 +106,19 @@ class CustomFileDialog(tk.Toplevel):
self.my_tool_tip = None
self.dialog_mode = dialog_mode
self.load_settings()
# Set the window size
self.geometry(self.settings["window_size_preset"])
min_width, min_height = self.get_min_size_from_preset(self.settings["window_size_preset"])
min_width, min_height = self.get_min_size_from_preset(
self.settings["window_size_preset"])
self.minsize(min_width, min_height)
self.title(title)
self.image = IconManager()
width, height = map(int, self.settings["window_size_preset"].split('x'))
width, height = map(
int, self.settings["window_size_preset"].split('x'))
LxTools.center_window_cross_platform(self, width, height)
self.parent = parent
self.transient(parent)
@@ -111,7 +131,8 @@ class CustomFileDialog(tk.Toplevel):
self.current_filter_pattern = self.filetypes[0][1]
self.history = []
self.history_pos = -1
self.view_mode = tk.StringVar(value=self.settings.get("default_view_mode", "icons"))
self.view_mode = tk.StringVar(
value=self.settings.get("default_view_mode", "icons"))
self.show_hidden_files = tk.BooleanVar(value=False)
self.resize_job = None
self.last_width = 0
@@ -141,18 +162,20 @@ class CustomFileDialog(tk.Toplevel):
def reload_config_and_rebuild_ui(self):
self.load_settings()
# Update geometry and minsize
self.geometry(self.settings["window_size_preset"])
min_width, min_height = self.get_min_size_from_preset(self.settings["window_size_preset"])
min_width, min_height = self.get_min_size_from_preset(
self.settings["window_size_preset"])
self.minsize(min_width, min_height)
width, height = map(int, self.settings["window_size_preset"].split('x'))
width, height = map(
int, self.settings["window_size_preset"].split('x'))
LxTools.center_window_cross_platform(self, width, height)
# Re-create widgets
for widget in self.winfo_children():
widget.destroy()
self.style_manager = StyleManager(self)
self.widget_manager = WidgetManager(self, self.settings)
self._update_view_mode_buttons()
@@ -180,7 +203,6 @@ class CustomFileDialog(tk.Toplevel):
return self.icon_manager.get_icon(f'iso_{size}')
return self.icon_manager.get_icon(f'file_{size}')
def toggle_hidden_files(self):
self.show_hidden_files.set(not self.show_hidden_files.get())
if self.show_hidden_files.get():
@@ -250,7 +272,8 @@ class CustomFileDialog(tk.Toplevel):
self.widget_manager.path_entry.delete(0, tk.END)
self.widget_manager.path_entry.insert(0, "Suchbegriff eingeben...")
self.widget_manager.path_entry.select_range(0, tk.END)
self.after(50, lambda: self.widget_manager.path_entry.focus_set()) # Set focus reliably
# Set focus reliably
self.after(50, lambda: self.widget_manager.path_entry.focus_set())
self.widget_manager.path_entry.bind(
"<Return>", self.execute_search)
self.widget_manager.path_entry.bind(
@@ -287,11 +310,15 @@ class CustomFileDialog(tk.Toplevel):
def _update_view_mode_buttons(self):
"""Set the visual state of the view mode buttons."""
if self.view_mode.get() == "icons":
self.widget_manager.icon_view_button.configure(style="Header.TButton.Active.Round")
self.widget_manager.list_view_button.configure(style="Header.TButton.Borderless.Round")
self.widget_manager.icon_view_button.configure(
style="Header.TButton.Active.Round")
self.widget_manager.list_view_button.configure(
style="Header.TButton.Borderless.Round")
else:
self.widget_manager.list_view_button.configure(style="Header.TButton.Active.Round")
self.widget_manager.icon_view_button.configure(style="Header.TButton.Borderless.Round")
self.widget_manager.list_view_button.configure(
style="Header.TButton.Active.Round")
self.widget_manager.icon_view_button.configure(
style="Header.TButton.Borderless.Round")
def set_icon_view(self):
"""Set icon view and update button styles"""

View File

@@ -55,7 +55,7 @@ if __name__ == "__main__":
style = ttk.Style(root)
root.tk.call('source', f"{theme_path}/water.tcl")
try:
root.tk.call('set_theme', 'dark')
root.tk.call('set_theme', 'light')
except tk.TclError:
pass
root.mainloop()