From 14e327989cb133d47e250126356798baaa741176 Mon Sep 17 00:00:00 2001 From: Martin Tranberg Date: Mon, 30 Mar 2026 19:34:51 +0200 Subject: [PATCH] feat: add file editing workflow with manual completion button and info bar notifications --- sharepoint_browser.py | 53 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/sharepoint_browser.py b/sharepoint_browser.py index 67b229f..9e25c18 100644 --- a/sharepoint_browser.py +++ b/sharepoint_browser.py @@ -62,7 +62,10 @@ class SharePointApp(wx.Frame): self.tree_item_data = {} # Mappenoder -> {type, id, name, drive_id, path} self.tree_root = None self.is_navigating_back = False - + + # Threading/Sync til filredigering + self.edit_wait_event = threading.Event() + self.InitUI() self.Centre() self.Show() @@ -74,6 +77,14 @@ class SharePointApp(wx.Frame): main_sizer.Add(panel, 1, wx.EXPAND) vbox = wx.BoxSizer(wx.VERTICAL) + + # 0. INFO BAR (Beskeder der ikke blokerer) + self.info_bar = wx.InfoBar(panel) + vbox.Add(self.info_bar, 0, wx.EXPAND) + + # Timer til at skjule info bar + self.info_timer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, lambda e: self.info_bar.Dismiss(), self.info_timer) # 1. TOP NAVIGATION BAR nav_panel = wx.Panel(panel) @@ -89,6 +100,14 @@ class SharePointApp(wx.Frame): self.home_btn.Bind(wx.EVT_BUTTON, self.load_sites) nav_hbox.Add(self.home_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 5) + # NY KNAP: Gem ændringer (Vises kun ved redigering) + self.done_btn = wx.Button(nav_panel, label="💾 Gem ændringer i SharePoint", size=(200, 30)) + self.done_btn.SetBackgroundColour(wx.Colour(255, 69, 0)) # OrangeRed + self.done_btn.SetForegroundColour(wx.WHITE) + self.done_btn.Hide() + self.done_btn.Bind(wx.EVT_BUTTON, self.on_done_editing_clicked) + nav_hbox.Add(self.done_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 10) + nav_hbox.AddStretchSpacer(1) self.login_btn = wx.Button(nav_panel, label="Log ind", size=(120, 30)) @@ -103,6 +122,7 @@ class SharePointApp(wx.Frame): # 2. PATH BREADCRUMBS (Adresselinje-stil) self.path_panel = wx.Panel(panel, style=wx.BORDER_SIMPLE) self.path_panel.SetBackgroundColour(wx.WHITE) + self.path_panel.SetMinSize((-1, 38)) # Sikrer synbarhed self.path_sizer = wx.BoxSizer(wx.HORIZONTAL) self.path_panel.SetSizer(self.path_sizer) vbox.Add(self.path_panel, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10) @@ -150,6 +170,22 @@ class SharePointApp(wx.Frame): def set_status(self, text): wx.CallAfter(self.status_bar.SetStatusText, text) + def show_info(self, text, type=wx.ICON_INFORMATION, auto_hide=True): + def _do(): + self.info_bar.Dismiss() + self.info_bar.ShowMessage(text, type) + if auto_hide: + self.info_timer.Start(4000, oneShot=True) + else: + self.info_timer.Stop() + wx.CallAfter(_do) + + def on_done_editing_clicked(self, event): + print("[DEBUG] 'Jeg er færdig'-knap klikket.") + self.set_status("Knap trykket - Uploader nu...") + self.edit_wait_event.set() + self.info_bar.Dismiss() + def clear_main(self): self.list_ctrl.DeleteAllItems() self.current_items = [] @@ -179,6 +215,7 @@ class SharePointApp(wx.Frame): self.path_panel.Layout() self.path_panel.Refresh() + self.Layout() # Tving rammen til at opdatere, så stien kommer frem def _add_path_segment(self, label, node): btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE) @@ -494,7 +531,14 @@ class SharePointApp(wx.Frame): pass else: self.set_status("Fillås ikke detekteret.") - wx.CallAfter(wx.MessageBox, f"Vi kunne ikke detektere om '{file_name}' blev låst.\n\nTryk OK når du har gemt og LUKKET filen.", "Info", wx.OK | wx.ICON_INFORMATION) + self.edit_wait_event.clear() + wx.CallAfter(self.done_btn.Show) + wx.CallAfter(self.Layout) + self.show_info(f"Vi kan ikke se om du har gemt '{file_name}'. Klik på den orange knap øverst når du er færdig.", wx.ICON_WARNING, auto_hide=False) + # Vent på event (fra done_btn knap) + self.edit_wait_event.wait() + wx.CallAfter(self.done_btn.Hide) + wx.CallAfter(self.Layout) # 4. Upload self.set_status(f"Uploader ændringer...") @@ -509,11 +553,12 @@ class SharePointApp(wx.Frame): os.remove(local_path) self.set_status(f"Succes! '{file_name}' er opdateret.") - wx.CallAfter(wx.MessageBox, f"Filen '{file_name}' er gemt og tjekket ind korrekt.", "Færdig", wx.OK | wx.ICON_INFORMATION) + self.show_info(f"Filen '{file_name}' er gemt og tjekket ind korrekt.", wx.ICON_INFORMATION) except Exception as e: self.set_status(f"Fejl: {str(e)}") - wx.CallAfter(wx.MessageBox, f"Der skete en fejl:\n{e}", "Fejl", wx.OK | wx.ICON_ERROR) + self.show_info(f"Der skete en fejl: {e}", wx.ICON_ERROR) + if __name__ == "__main__":