feat: add file editing workflow with manual completion button and info bar notifications
This commit is contained in:
@@ -62,7 +62,10 @@ class SharePointApp(wx.Frame):
|
|||||||
self.tree_item_data = {} # Mappenoder -> {type, id, name, drive_id, path}
|
self.tree_item_data = {} # Mappenoder -> {type, id, name, drive_id, path}
|
||||||
self.tree_root = None
|
self.tree_root = None
|
||||||
self.is_navigating_back = False
|
self.is_navigating_back = False
|
||||||
|
|
||||||
|
# Threading/Sync til filredigering
|
||||||
|
self.edit_wait_event = threading.Event()
|
||||||
|
|
||||||
self.InitUI()
|
self.InitUI()
|
||||||
self.Centre()
|
self.Centre()
|
||||||
self.Show()
|
self.Show()
|
||||||
@@ -74,6 +77,14 @@ class SharePointApp(wx.Frame):
|
|||||||
main_sizer.Add(panel, 1, wx.EXPAND)
|
main_sizer.Add(panel, 1, wx.EXPAND)
|
||||||
|
|
||||||
vbox = wx.BoxSizer(wx.VERTICAL)
|
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
|
# 1. TOP NAVIGATION BAR
|
||||||
nav_panel = wx.Panel(panel)
|
nav_panel = wx.Panel(panel)
|
||||||
@@ -89,6 +100,14 @@ class SharePointApp(wx.Frame):
|
|||||||
self.home_btn.Bind(wx.EVT_BUTTON, self.load_sites)
|
self.home_btn.Bind(wx.EVT_BUTTON, self.load_sites)
|
||||||
nav_hbox.Add(self.home_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
|
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)
|
nav_hbox.AddStretchSpacer(1)
|
||||||
|
|
||||||
self.login_btn = wx.Button(nav_panel, label="Log ind", size=(120, 30))
|
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)
|
# 2. PATH BREADCRUMBS (Adresselinje-stil)
|
||||||
self.path_panel = wx.Panel(panel, style=wx.BORDER_SIMPLE)
|
self.path_panel = wx.Panel(panel, style=wx.BORDER_SIMPLE)
|
||||||
self.path_panel.SetBackgroundColour(wx.WHITE)
|
self.path_panel.SetBackgroundColour(wx.WHITE)
|
||||||
|
self.path_panel.SetMinSize((-1, 38)) # Sikrer synbarhed
|
||||||
self.path_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
self.path_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
self.path_panel.SetSizer(self.path_sizer)
|
self.path_panel.SetSizer(self.path_sizer)
|
||||||
vbox.Add(self.path_panel, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10)
|
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):
|
def set_status(self, text):
|
||||||
wx.CallAfter(self.status_bar.SetStatusText, 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):
|
def clear_main(self):
|
||||||
self.list_ctrl.DeleteAllItems()
|
self.list_ctrl.DeleteAllItems()
|
||||||
self.current_items = []
|
self.current_items = []
|
||||||
@@ -179,6 +215,7 @@ class SharePointApp(wx.Frame):
|
|||||||
|
|
||||||
self.path_panel.Layout()
|
self.path_panel.Layout()
|
||||||
self.path_panel.Refresh()
|
self.path_panel.Refresh()
|
||||||
|
self.Layout() # Tving rammen til at opdatere, så stien kommer frem
|
||||||
|
|
||||||
def _add_path_segment(self, label, node):
|
def _add_path_segment(self, label, node):
|
||||||
btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE)
|
btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE)
|
||||||
@@ -494,7 +531,14 @@ class SharePointApp(wx.Frame):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.set_status("Fillås ikke detekteret.")
|
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
|
# 4. Upload
|
||||||
self.set_status(f"Uploader ændringer...")
|
self.set_status(f"Uploader ændringer...")
|
||||||
@@ -509,11 +553,12 @@ class SharePointApp(wx.Frame):
|
|||||||
|
|
||||||
os.remove(local_path)
|
os.remove(local_path)
|
||||||
self.set_status(f"Succes! '{file_name}' er opdateret.")
|
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:
|
except Exception as e:
|
||||||
self.set_status(f"Fejl: {str(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__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user