feat: implement responsive UI with compact mode for navigation buttons on window resize

This commit is contained in:
Martin Tranberg
2026-03-31 17:04:43 +02:00
parent c5f18b520a
commit 6ab9901cc8

View File

@@ -441,8 +441,9 @@ class SharePointApp(wx.Frame):
self.active_edits = {} # item_id -> { "name": name, "event": Event, "waiting": bool }
self.favorites = settings.get("favorites", [])
self.fav_visible = settings.get("fav_visible", True)
self.sort_col = 0 # Default Name
self.sort_col = 0 # Default (Navn)
self.sort_asc = True
self.compact_mode = False
# System Ikoner
self.image_list = wx.ImageList(16, 16)
@@ -580,6 +581,8 @@ class SharePointApp(wx.Frame):
nav_panel.SetSizer(nav_hbox)
vbox.Add(nav_panel, 0, wx.EXPAND | wx.ALL, 5)
self.nav_hbox = nav_hbox # Gem til resize
self.nav_panel = nav_panel
# 2. PATH BREADCRUMBS (Adresselinje-stil)
self.path_panel = wx.Panel(panel, style=wx.BORDER_SIMPLE)
@@ -673,6 +676,7 @@ class SharePointApp(wx.Frame):
self.status_bar.SetStatusText(self.get_txt("status_ready"))
panel.SetSizer(vbox)
self.Bind(wx.EVT_SIZE, self.on_resize)
self.Layout()
def on_right_click(self, event):
@@ -1140,19 +1144,17 @@ class SharePointApp(wx.Frame):
def refresh_ui_texts(self):
# Update UI texts for main frame and buttons
self.SetTitle(self.get_txt("title"))
self.back_btn.SetLabel(self.get_txt("btn_back"))
self.home_btn.SetLabel(self.get_txt("btn_home"))
self.done_btn.SetLabel(self.get_txt("btn_save_changes"))
self.upload_btn.SetLabel(self.get_txt("btn_upload_file"))
self.upload_folder_btn.SetLabel(self.get_txt("btn_upload_folder"))
self.new_folder_btn.SetLabel(self.get_txt("btn_new_folder"))
self.refresh_btn.SetLabel(self.get_txt("btn_refresh"))
self.settings_btn.SetLabel(self.get_txt("btn_settings"))
# Hvis vi er i compact mode, skal vi ikke sætte labels på knapperne nu
if not self.compact_mode:
self._update_button_labels(full=True)
self.settings_btn.SetLabel(self.get_txt("btn_settings") if not self.compact_mode else "")
if self.access_token:
self.login_btn.SetLabel(self.get_txt("btn_logged_in"))
self.login_btn.SetLabel(self.get_txt("btn_logged_in") if not self.compact_mode else "")
else:
self.login_btn.SetLabel(self.get_txt("btn_login"))
self.login_btn.SetLabel(self.get_txt("btn_login") if not self.compact_mode else "")
# Re-set headers for ListCtrl
cols = [self.get_txt("col_name"), self.get_txt("col_type"), self.get_txt("col_size"), self.get_txt("col_modified")]
@@ -1218,6 +1220,72 @@ class SharePointApp(wx.Frame):
self.current_items = []
self.update_path_display()
def on_resize(self, event):
width = self.GetSize().width
threshold = 1100
if width < threshold and not self.compact_mode:
self.compact_mode = True
self._update_button_labels(full=False)
elif width >= threshold and self.compact_mode:
self.compact_mode = False
self._update_button_labels(full=True)
event.Skip()
def _update_button_labels(self, full=True):
if not self: return
try:
# Liste over knapper og deres tilhørende oversættelses-nøgle
btns = [
(self.back_btn, "btn_back", 40, 110),
(self.home_btn, "btn_home", 40, 110),
(self.refresh_btn, "btn_refresh", 40, 110),
(self.upload_btn, "btn_upload_file", 40, 130),
(self.upload_folder_btn, "btn_upload_folder", 40, 130),
(self.new_folder_btn, "btn_new_folder", 40, 120),
(self.settings_btn, "btn_settings", 40, 130)
]
for btn, key, compact_w, full_w in btns:
txt = self.get_txt(key)
btn.SetLabel(txt if full else "")
btn.SetToolTip(txt)
btn.SetMinSize((compact_w if not full else full_w, 30))
btn.SetSize((compact_w if not full else full_w, 30))
btn.SetBitmapMargins((12 if full else 10, 0))
# Special cases for Login and Done buttons
if full:
login_txt = self.get_txt("btn_logged_in") if self.access_token else self.get_txt("btn_login")
self.login_btn.SetLabel(login_txt)
self.login_btn.SetToolTip(login_txt)
self.login_btn.SetMinSize((130, 30))
self.login_btn.SetBitmapMargins((12, 0))
done_txt = self.get_txt("btn_save_changes")
self.done_btn.SetLabel(done_txt)
self.done_btn.SetToolTip(done_txt)
self.done_btn.SetMinSize((250, 30))
self.done_btn.SetBitmapMargins((12, 0))
else:
login_txt = self.get_txt("btn_logged_in") if self.access_token else self.get_txt("btn_login")
self.login_btn.SetLabel("")
self.login_btn.SetToolTip(login_txt)
self.login_btn.SetMinSize((40, 30))
self.login_btn.SetBitmapMargins((10, 0))
done_txt = self.get_txt("btn_save_changes")
self.done_btn.SetLabel("")
self.done_btn.SetToolTip(done_txt)
self.done_btn.SetMinSize((40, 30))
self.done_btn.SetBitmapMargins((10, 0))
self.nav_panel.Layout()
self.Layout()
except RuntimeError:
pass
def update_path_display(self):
if not self: return
try: