refactor: convert settings dialog to tabbed interface and add about section

This commit is contained in:
Martin Tranberg
2026-04-07 13:32:19 +02:00
parent 205b1ac241
commit 4abf221887

View File

@@ -178,7 +178,9 @@ STRINGS = {
"settings_license_key": "Licensnøgle:", "settings_license_key": "Licensnøgle:",
"settings_license_status": "Status: Ikke aktiveret", "settings_license_status": "Status: Ikke aktiveret",
"settings_logging_group": "System / Diverse", "settings_logging_group": "System / Diverse",
"settings_logging": "Aktiver log-output (anbefales til fejlfinding)" "settings_logging": "Aktiver log-output (anbefales til fejlfinding)",
"settings_about_group": "Om programmet",
"settings_credits": "© 2026 SharePoint Explorer\n\nSkabt af:\nMartin Tranberg\nBlueprint"
}, },
"en": { "en": {
"title": "SharePoint Explorer", "title": "SharePoint Explorer",
@@ -272,7 +274,9 @@ STRINGS = {
"settings_license_key": "License Key:", "settings_license_key": "License Key:",
"settings_license_status": "Status: Not activated", "settings_license_status": "Status: Not activated",
"settings_logging_group": "System / Miscellaneous", "settings_logging_group": "System / Miscellaneous",
"settings_logging": "Enable log output (recommended for troubleshooting)" "settings_logging": "Enable log output (recommended for troubleshooting)",
"settings_about_group": "About",
"settings_credits": "© 2026 SharePoint Explorer\n\nCreated by:\nMartin Tranberg\nBlueprint"
} }
} }
@@ -403,7 +407,7 @@ class SettingsDialog(wx.Dialog):
def __init__(self, parent, current_settings): def __init__(self, parent, current_settings):
lang = current_settings.get("language", "da") lang = current_settings.get("language", "da")
title = STRINGS[lang].get("settings_title", "Settings") title = STRINGS[lang].get("settings_title", "Settings")
super().__init__(parent, title=title, size=(520, 720)) super().__init__(parent, title=title, size=(580, 550))
self.settings = current_settings.copy() self.settings = current_settings.copy()
self.lang = lang self.lang = lang
@@ -415,88 +419,101 @@ class SettingsDialog(wx.Dialog):
def InitUI(self): def InitUI(self):
vbox = wx.BoxSizer(wx.VERTICAL) vbox = wx.BoxSizer(wx.VERTICAL)
panel = wx.Panel(self) # --- TABBED INTERFACE (wx.Notebook) ---
inner_vbox = wx.BoxSizer(wx.VERTICAL) self.nb = wx.Notebook(self)
# --- Group: Authentication --- # 1. ACCOUNT TAB
auth_box = wx.StaticBox(panel, label=self.get_txt("settings_auth_group")) account_panel = wx.Panel(self.nb)
auth_sizer = wx.StaticBoxSizer(auth_box, wx.VERTICAL) account_vbox = wx.BoxSizer(wx.VERTICAL)
grid = wx.FlexGridSizer(2, 2, 10, 10) grid = wx.FlexGridSizer(2, 2, 10, 10)
grid.AddGrowableCol(1, 1) grid.AddGrowableCol(1, 1)
grid.Add(wx.StaticText(account_panel, label=self.get_txt("settings_client_id")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5)
self.client_id_ctrl = wx.TextCtrl(account_panel, value=self.settings.get("client_id", ""), size=(-1, 25))
grid.Add(self.client_id_ctrl, 1, wx.EXPAND)
grid.Add(wx.StaticText(panel, label=self.get_txt("settings_client_id")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5) grid.Add(wx.StaticText(account_panel, label=self.get_txt("settings_tenant_id")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5)
self.client_id_ctrl = wx.TextCtrl(panel, value=self.settings.get("client_id", ""), size=(-1, 25)) self.tenant_id_ctrl = wx.TextCtrl(account_panel, value=self.settings.get("tenant_id", ""), size=(-1, 25))
grid.Add(self.client_id_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) grid.Add(self.tenant_id_ctrl, 1, wx.EXPAND)
grid.Add(wx.StaticText(panel, label=self.get_txt("settings_tenant_id")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5) account_vbox.Add(grid, 1, wx.EXPAND | wx.ALL, 15)
self.tenant_id_ctrl = wx.TextCtrl(panel, value=self.settings.get("tenant_id", ""), size=(-1, 25)) account_panel.SetSizer(account_vbox)
grid.Add(self.tenant_id_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) self.nb.AddPage(account_panel, self.get_txt("settings_auth_group").split("/")[0].strip())
auth_sizer.Add(grid, 1, wx.EXPAND | wx.ALL, 10) # 2. PATHS TAB
inner_vbox.Add(auth_sizer, 0, wx.EXPAND | wx.ALL, 10) paths_panel = wx.Panel(self.nb)
paths_vbox = wx.BoxSizer(wx.VERTICAL)
paths_inner = wx.BoxSizer(wx.VERTICAL)
# --- Group: Paths --- paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_temp_dir")), 0, wx.BOTTOM, 5)
path_box = wx.StaticBox(panel, label=self.get_txt("settings_path_group")) self.temp_dir_picker = wx.DirPickerCtrl(paths_panel, path=self.settings.get("temp_dir", "C:\\Temp_SP"), style=wx.DIRP_DIR_MUST_EXIST)
path_sizer = wx.StaticBoxSizer(path_box, wx.VERTICAL) paths_inner.Add(self.temp_dir_picker, 0, wx.EXPAND | wx.BOTTOM, 15)
path_sizer.Add(wx.StaticText(panel, label=self.get_txt("settings_temp_dir")), 0, wx.BOTTOM, 5) paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_app_path")), 0, wx.BOTTOM, 5)
self.temp_dir_picker = wx.DirPickerCtrl(panel, path=self.settings.get("temp_dir", "C:\\Temp_SP"), app_path_box = wx.TextCtrl(paths_panel, value=CONFIG_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
style=wx.DIRP_DIR_MUST_EXIST) app_path_box.SetBackgroundColour(paths_panel.GetBackgroundColour())
path_sizer.Add(self.temp_dir_picker, 0, wx.EXPAND | wx.BOTTOM, 10) paths_inner.Add(app_path_box, 0, wx.EXPAND | wx.BOTTOM, 15)
path_sizer.Add(wx.StaticText(panel, label=self.get_txt("settings_app_path")), 0, wx.BOTTOM, 5) paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_active_temp_path")), 0, wx.BOTTOM, 5)
app_path_box = wx.TextCtrl(panel, value=CONFIG_DIR, style=wx.TE_READONLY | wx.BORDER_NONE) temp_path_box = wx.TextCtrl(paths_panel, value=TEMP_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
app_path_box.SetBackgroundColour(panel.GetBackgroundColour()) temp_path_box.SetBackgroundColour(paths_panel.GetBackgroundColour())
path_sizer.Add(app_path_box, 0, wx.EXPAND | wx.BOTTOM, 10) paths_inner.Add(temp_path_box, 0, wx.EXPAND)
path_sizer.Add(wx.StaticText(panel, label=self.get_txt("settings_active_temp_path")), 0, wx.BOTTOM, 5) paths_vbox.Add(paths_inner, 1, wx.EXPAND | wx.ALL, 15)
temp_path_box = wx.TextCtrl(panel, value=TEMP_DIR, style=wx.TE_READONLY | wx.BORDER_NONE) paths_panel.SetSizer(paths_vbox)
temp_path_box.SetBackgroundColour(panel.GetBackgroundColour()) self.nb.AddPage(paths_panel, self.get_txt("settings_path_group"))
path_sizer.Add(temp_path_box, 0, wx.EXPAND)
inner_vbox.Add(path_sizer, 0, wx.EXPAND | wx.ALL, 10) # 3. LICENSE TAB
lic_panel = wx.Panel(self.nb)
lic_vbox = wx.BoxSizer(wx.VERTICAL)
lic_inner = wx.BoxSizer(wx.VERTICAL)
# --- Group: License --- lic_inner.Add(wx.StaticText(lic_panel, label=self.get_txt("settings_license_key")), 0, wx.BOTTOM, 5)
lic_box = wx.StaticBox(panel, label=self.get_txt("settings_license_group")) self.license_ctrl = wx.TextCtrl(lic_panel, value=self.settings.get("license_key", ""))
lic_sizer = wx.StaticBoxSizer(lic_box, wx.VERTICAL) lic_inner.Add(self.license_ctrl, 0, wx.EXPAND | wx.BOTTOM, 5)
lic_sizer.Add(wx.StaticText(panel, label=self.get_txt("settings_license_key")), 0, wx.BOTTOM, 5) status_txt = wx.StaticText(lic_panel, label=self.get_txt("settings_license_status"))
self.license_ctrl = wx.TextCtrl(panel, value=self.settings.get("license_key", ""))
lic_sizer.Add(self.license_ctrl, 0, wx.EXPAND | wx.BOTTOM, 5)
status_txt = wx.StaticText(panel, label=self.get_txt("settings_license_status"))
status_txt.SetForegroundColour(wx.RED) status_txt.SetForegroundColour(wx.RED)
lic_sizer.Add(status_txt, 0, wx.TOP, 5) lic_inner.Add(status_txt, 0, wx.TOP, 5)
inner_vbox.Add(lic_sizer, 0, wx.EXPAND | wx.ALL, 10) lic_vbox.Add(lic_inner, 1, wx.EXPAND | wx.ALL, 15)
lic_panel.SetSizer(lic_vbox)
self.nb.AddPage(lic_panel, self.get_txt("settings_license_group").split("/")[0].strip())
# --- Group: Language --- # 4. SYSTEM TAB
lang_box = wx.StaticBox(panel, label=self.get_txt("settings_lang_group")) sys_panel = wx.Panel(self.nb)
lang_sizer = wx.StaticBoxSizer(lang_box, wx.HORIZONTAL) sys_vbox = wx.BoxSizer(wx.VERTICAL)
sys_inner = wx.BoxSizer(wx.VERTICAL)
lang_sizer.Add(wx.StaticText(panel, label=self.get_txt("settings_language")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 10) lang_hbox = wx.BoxSizer(wx.HORIZONTAL)
self.lang_choice = wx.Choice(panel, choices=["Dansk", "English"]) lang_hbox.Add(wx.StaticText(sys_panel, label=self.get_txt("settings_language")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 10)
self.lang_choice = wx.Choice(sys_panel, choices=["Dansk", "English"])
self.lang_choice.SetSelection(0 if self.settings.get("language") == "da" else 1) self.lang_choice.SetSelection(0 if self.settings.get("language") == "da" else 1)
lang_sizer.Add(self.lang_choice, 1, wx.EXPAND) lang_hbox.Add(self.lang_choice, 1, wx.EXPAND)
sys_inner.Add(lang_hbox, 0, wx.EXPAND | wx.BOTTOM, 15)
inner_vbox.Add(lang_sizer, 0, wx.EXPAND | wx.ALL, 10) self.logging_cb = wx.CheckBox(sys_panel, label=self.get_txt("settings_logging"))
# --- Group: Miscellaneous ---
misc_box = wx.StaticBox(panel, label=self.get_txt("settings_logging_group"))
misc_sizer = wx.StaticBoxSizer(misc_box, wx.VERTICAL)
self.logging_cb = wx.CheckBox(panel, label=self.get_txt("settings_logging"))
self.logging_cb.SetValue(self.settings.get("logging_enabled", True)) self.logging_cb.SetValue(self.settings.get("logging_enabled", True))
misc_sizer.Add(self.logging_cb, 0, wx.ALL, 10) sys_inner.Add(self.logging_cb, 0, wx.ALL, 5)
inner_vbox.Add(misc_sizer, 0, wx.EXPAND | wx.ALL, 10) sys_vbox.Add(sys_inner, 1, wx.EXPAND | wx.ALL, 15)
sys_panel.SetSizer(sys_vbox)
self.nb.AddPage(sys_panel, "System")
panel.SetSizer(inner_vbox) # 5. ABOUT TAB
inner_vbox.Fit(panel) about_panel = wx.Panel(self.nb)
vbox.Add(panel, 1, wx.EXPAND | wx.ALL, 0) about_vbox = wx.BoxSizer(wx.VERTICAL)
# --- Buttons --- about_info = wx.TextCtrl(about_panel, value=self.get_txt("settings_credits"), style=wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE)
about_info.SetBackgroundColour(about_panel.GetBackgroundColour())
about_vbox.Add(about_info, 1, wx.EXPAND | wx.ALL, 15)
about_panel.SetSizer(about_vbox)
self.nb.AddPage(about_panel, self.get_txt("settings_about_group"))
vbox.Add(self.nb, 1, wx.EXPAND | wx.ALL, 10)
# --- BUTTONS ---
btn_hbox = wx.BoxSizer(wx.HORIZONTAL) btn_hbox = wx.BoxSizer(wx.HORIZONTAL)
save_btn = wx.Button(self, label=self.get_txt("settings_save"), size=(150, 35)) save_btn = wx.Button(self, label=self.get_txt("settings_save"), size=(150, 35))
save_btn.SetBackgroundColour(wx.Colour(0, 120, 215)) # SharePoint Blue save_btn.SetBackgroundColour(wx.Colour(0, 120, 215)) # SharePoint Blue