diff --git a/sharepoint_browser.py b/sharepoint_browser.py index fe0206f..f157215 100644 --- a/sharepoint_browser.py +++ b/sharepoint_browser.py @@ -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