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_status": "Status: Ikke aktiveret",
"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": {
"title": "SharePoint Explorer",
@@ -272,7 +274,9 @@ STRINGS = {
"settings_license_key": "License Key:",
"settings_license_status": "Status: Not activated",
"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):
lang = current_settings.get("language", "da")
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.lang = lang
@@ -415,88 +419,101 @@ class SettingsDialog(wx.Dialog):
def InitUI(self):
vbox = wx.BoxSizer(wx.VERTICAL)
panel = wx.Panel(self)
inner_vbox = wx.BoxSizer(wx.VERTICAL)
# --- TABBED INTERFACE (wx.Notebook) ---
self.nb = wx.Notebook(self)
# --- Group: Authentication ---
auth_box = wx.StaticBox(panel, label=self.get_txt("settings_auth_group"))
auth_sizer = wx.StaticBoxSizer(auth_box, wx.VERTICAL)
# 1. ACCOUNT TAB
account_panel = wx.Panel(self.nb)
account_vbox = wx.BoxSizer(wx.VERTICAL)
grid = wx.FlexGridSizer(2, 2, 10, 10)
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)
self.client_id_ctrl = wx.TextCtrl(panel, value=self.settings.get("client_id", ""), size=(-1, 25))
grid.Add(self.client_id_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
grid.Add(wx.StaticText(account_panel, label=self.get_txt("settings_tenant_id")), 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5)
self.tenant_id_ctrl = wx.TextCtrl(account_panel, value=self.settings.get("tenant_id", ""), size=(-1, 25))
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)
self.tenant_id_ctrl = wx.TextCtrl(panel, value=self.settings.get("tenant_id", ""), size=(-1, 25))
grid.Add(self.tenant_id_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
account_vbox.Add(grid, 1, wx.EXPAND | wx.ALL, 15)
account_panel.SetSizer(account_vbox)
self.nb.AddPage(account_panel, self.get_txt("settings_auth_group").split("/")[0].strip())
auth_sizer.Add(grid, 1, wx.EXPAND | wx.ALL, 10)
inner_vbox.Add(auth_sizer, 0, wx.EXPAND | wx.ALL, 10)
# 2. PATHS TAB
paths_panel = wx.Panel(self.nb)
paths_vbox = wx.BoxSizer(wx.VERTICAL)
paths_inner = wx.BoxSizer(wx.VERTICAL)
# --- Group: Paths ---
path_box = wx.StaticBox(panel, label=self.get_txt("settings_path_group"))
path_sizer = wx.StaticBoxSizer(path_box, wx.VERTICAL)
paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_temp_dir")), 0, wx.BOTTOM, 5)
self.temp_dir_picker = wx.DirPickerCtrl(paths_panel, path=self.settings.get("temp_dir", "C:\\Temp_SP"), style=wx.DIRP_DIR_MUST_EXIST)
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)
self.temp_dir_picker = wx.DirPickerCtrl(panel, path=self.settings.get("temp_dir", "C:\\Temp_SP"),
style=wx.DIRP_DIR_MUST_EXIST)
path_sizer.Add(self.temp_dir_picker, 0, wx.EXPAND | wx.BOTTOM, 10)
paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_app_path")), 0, wx.BOTTOM, 5)
app_path_box = wx.TextCtrl(paths_panel, value=CONFIG_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
app_path_box.SetBackgroundColour(paths_panel.GetBackgroundColour())
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)
app_path_box = wx.TextCtrl(panel, value=CONFIG_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
app_path_box.SetBackgroundColour(panel.GetBackgroundColour())
path_sizer.Add(app_path_box, 0, wx.EXPAND | wx.BOTTOM, 10)
paths_inner.Add(wx.StaticText(paths_panel, label=self.get_txt("settings_active_temp_path")), 0, wx.BOTTOM, 5)
temp_path_box = wx.TextCtrl(paths_panel, value=TEMP_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
temp_path_box.SetBackgroundColour(paths_panel.GetBackgroundColour())
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)
temp_path_box = wx.TextCtrl(panel, value=TEMP_DIR, style=wx.TE_READONLY | wx.BORDER_NONE)
temp_path_box.SetBackgroundColour(panel.GetBackgroundColour())
path_sizer.Add(temp_path_box, 0, wx.EXPAND)
paths_vbox.Add(paths_inner, 1, wx.EXPAND | wx.ALL, 15)
paths_panel.SetSizer(paths_vbox)
self.nb.AddPage(paths_panel, self.get_txt("settings_path_group"))
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_box = wx.StaticBox(panel, label=self.get_txt("settings_license_group"))
lic_sizer = wx.StaticBoxSizer(lic_box, wx.VERTICAL)
lic_inner.Add(wx.StaticText(lic_panel, label=self.get_txt("settings_license_key")), 0, wx.BOTTOM, 5)
self.license_ctrl = wx.TextCtrl(lic_panel, value=self.settings.get("license_key", ""))
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)
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 = wx.StaticText(lic_panel, label=self.get_txt("settings_license_status"))
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 ---
lang_box = wx.StaticBox(panel, label=self.get_txt("settings_lang_group"))
lang_sizer = wx.StaticBoxSizer(lang_box, wx.HORIZONTAL)
# 4. SYSTEM TAB
sys_panel = wx.Panel(self.nb)
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)
self.lang_choice = wx.Choice(panel, choices=["Dansk", "English"])
lang_hbox = wx.BoxSizer(wx.HORIZONTAL)
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)
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)
# --- 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 = wx.CheckBox(sys_panel, label=self.get_txt("settings_logging"))
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)
inner_vbox.Fit(panel)
vbox.Add(panel, 1, wx.EXPAND | wx.ALL, 0)
# 5. ABOUT TAB
about_panel = wx.Panel(self.nb)
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)
save_btn = wx.Button(self, label=self.get_txt("settings_save"), size=(150, 35))
save_btn.SetBackgroundColour(wx.Colour(0, 120, 215)) # SharePoint Blue