feat: Erweiterte Einstellungen in main SettingsFrame integrieren und Layoutprobleme beheben.

This commit is contained in:
2025-09-06 18:31:57 +02:00
parent 2097573cbc
commit 4d70e0eee0
2 changed files with 51 additions and 23 deletions

View File

@@ -10,11 +10,11 @@ from shared_libs.message import MessageDialog
from pyimage_ui.password_dialog import PasswordDialog
class AdvancedSettingsFrame(tk.Toplevel):
def __init__(self, master, config_manager, app_instance, **kwargs):
class AdvancedSettingsFrame(ttk.Frame):
def __init__(self, master, config_manager, app_instance, show_main_settings_callback, **kwargs):
super().__init__(master, **kwargs)
self.title(Msg.STR["advanced_settings_title"])
self.show_main_settings_callback = show_main_settings_callback
self.config_manager = config_manager
self.app_instance = app_instance
self.current_view_index = 0
@@ -171,7 +171,7 @@ class AdvancedSettingsFrame(tk.Toplevel):
ttk.Button(button_frame, text=Msg.STR["apply"], command=self._apply_changes).pack(
side=tk.LEFT, padx=5)
ttk.Button(button_frame, text=Msg.STR["cancel"], command=self.destroy).pack(
ttk.Button(button_frame, text=Msg.STR["cancel"], command=self._cancel_changes).pack(
side=tk.LEFT, padx=5)
# Initial packing of frames (all hidden except the first one by _switch_view)
@@ -472,7 +472,10 @@ class AdvancedSettingsFrame(tk.Toplevel):
for item in self.manual_excludes_listbox.get(0, tk.END):
f.write(f"{item}\n")
self.destroy()
# Instead of destroying the Toplevel, hide this frame and show main settings
self.pack_forget()
if self.show_main_settings_callback:
self.show_main_settings_callback()
if self.app_instance:
current_source = self.app_instance.left_canvas_data.get('folder')
@@ -480,6 +483,12 @@ class AdvancedSettingsFrame(tk.Toplevel):
self.app_instance.actions.on_sidebar_button_click(
current_source)
def _cancel_changes(self):
# Hide this frame and show main settings without applying changes
self.pack_forget()
if self.show_main_settings_callback:
self.show_main_settings_callback()
def _load_exclude_patterns(self):
generated_patterns = []
if AppConfig.GENERATED_EXCLUDE_LIST_PATH.exists():

View File

@@ -20,12 +20,12 @@ class SettingsFrame(ttk.Frame):
self.user_exclude_patterns = []
# --- Container for Treeviews ---
trees_container = ttk.Frame(self)
trees_container.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
self.trees_container = ttk.Frame(self)
self.trees_container.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# --- Treeview for file/folder exclusion ---
self.tree_frame = ttk.LabelFrame(
trees_container, text=Msg.STR["user_defined_folder_settings"], padding=10)
self.trees_container, text=Msg.STR["user_defined_folder_settings"], padding=10)
self.tree_frame.pack(fill=tk.BOTH, expand=True)
columns = ("included", "name", "path")
@@ -45,7 +45,7 @@ class SettingsFrame(ttk.Frame):
# --- Treeview for hidden files (initially hidden) ---
self.hidden_tree_frame = ttk.LabelFrame(
trees_container, text=Msg.STR["hidden_files_and_folders"], padding=10)
self.trees_container, text=Msg.STR["hidden_files_and_folders"], padding=10)
self.hidden_tree = ttk.Treeview(
self.hidden_tree_frame, columns=columns, show="headings")
self.hidden_tree.heading("included", text=Msg.STR["in_backup"])
@@ -62,11 +62,11 @@ class SettingsFrame(ttk.Frame):
self.hidden_tree_frame.pack_forget() # Initially hidden
# --- Action Buttons ---
button_frame = ttk.Frame(self)
button_frame.pack(fill=tk.X, padx=10, pady=10)
self.button_frame = ttk.Frame(self)
self.button_frame.pack(fill=tk.X, padx=10, pady=10)
self.show_hidden_button = ttk.Button(
button_frame, command=self._toggle_hidden_files_view, style="TButton.Borderless.Round")
self.button_frame, command=self._toggle_hidden_files_view, style="TButton.Borderless.Round")
self.show_hidden_button.pack(side=tk.LEFT)
self.unhide_icon = self.master.master.master.image_manager.get_icon(
'hide')
@@ -75,26 +75,27 @@ class SettingsFrame(ttk.Frame):
self.show_hidden_button.config(image=self.unhide_icon)
add_to_exclude_button = ttk.Button(
button_frame, text=Msg.STR["add_to_exclude_list"], command=self._add_to_exclude_list)
self.button_frame, text=Msg.STR["add_to_exclude_list"], command=self._add_to_exclude_list)
add_to_exclude_button.pack(side=tk.LEFT, padx=5)
apply_button = ttk.Button(
button_frame, text=Msg.STR["apply"], command=self._apply_changes)
self.button_frame, text=Msg.STR["apply"], command=self._apply_changes)
apply_button.pack(side=tk.LEFT, padx=5)
cancel_button = ttk.Button(button_frame, text=Msg.STR["cancel"],
cancel_button = ttk.Button(self.button_frame, text=Msg.STR["cancel"],
command=lambda: self.navigation.toggle_mode("backup", 0))
cancel_button.pack(side=tk.LEFT, padx=5)
advanced_button = ttk.Button(
button_frame, text=Msg.STR["advanced"], command=self._open_advanced_settings)
self.button_frame, text=Msg.STR["advanced"], command=self._open_advanced_settings)
advanced_button.pack(side=tk.LEFT, padx=5)
reset_button = ttk.Button(
button_frame, text=Msg.STR["default_settings"], command=self.actions.reset_to_default_settings)
self.button_frame, text=Msg.STR["default_settings"], command=self.actions.reset_to_default_settings)
reset_button.pack(side=tk.RIGHT)
self.hidden_files_visible = False
self.advanced_settings_frame_instance = None # To hold the instance of AdvancedSettingsFrame
def _add_to_exclude_list(self) -> bool:
result = MessageDialog("ask", Msg.STR["exclude_dialog_text"], title=Msg.STR["add_to_exclude_list"], buttons=[
@@ -244,12 +245,30 @@ class SettingsFrame(ttk.Frame):
self._load_hidden_files()
def _open_advanced_settings(self):
advanced_settings_window = AdvancedSettingsFrame(
self.master,
config_manager=self.master.master.master.config_manager,
app_instance=self.master.master.master
)
advanced_settings_window.grab_set()
# Hide main settings UI elements
self.trees_container.pack_forget() # Hide the container for treeviews
self.button_frame.pack_forget()
# Create AdvancedSettingsFrame if not already created
if not self.advanced_settings_frame_instance:
self.advanced_settings_frame_instance = AdvancedSettingsFrame(
self, # Parent is now self (SettingsFrame)
config_manager=self.master.master.master.config_manager,
app_instance=self.master.master.master,
show_main_settings_callback=self._show_main_settings
)
# Pack the AdvancedSettingsFrame
self.advanced_settings_frame_instance.pack(fill=tk.BOTH, expand=True)
def _show_main_settings(self):
# Hide advanced settings frame
if self.advanced_settings_frame_instance:
self.advanced_settings_frame_instance.pack_forget()
# Show main settings UI elements
self.trees_container.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # Re-pack the container for treeviews
self.button_frame.pack(fill=tk.X, padx=10, pady=10) # Re-pack the button frame
def _toggle_hidden_files_view(self):
self.hidden_files_visible = not self.hidden_files_visible