Global GoogleFileID$


Procedure ReadFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Loaded
      Debug "File #" + File + " loaded"
      SetGadgetText(0, ReadString(0, #PB_File_IgnoreEOL))
      CloseFile(0)
      
    Case #PB_Status_Error
      ; File loading has failed
      Debug "Error when loading file #" + File
  EndSelect
EndProcedure


Procedure SaveFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "File #" + File + " saved"
      Debug Filename$

    Case #PB_Status_Error
      ; File saving has failed
      Debug "Error when saving file #" + File
  EndSelect
EndProcedure



Procedure OnSelectedFiles()
  While NextSelectedFile()
    GoogleFileID$ = SelectedFileID()
    ReadFile(0, GoogleFileID$, @ReadFileCallback(), #PB_GoogleDriveFile)
  Wend
EndProcedure


Procedure OnOpenFile()
  OpenFileRequester("", @OnSelectedFiles(), #PB_Requester_GoogleDrive)
EndProcedure


Procedure OnNewFile()
  SetGadgetText(0, "")
  GoogleFileID$ = ""
EndProcedure


Procedure OnSaveFile()
  If GoogleFileID$
    Debug "Existing file will be modified"
    Result = CreateFile(0, GoogleFileID$, @SaveFileCallback(), #PB_GoogleDriveFile)
  Else
    Debug "A new file will be created (New file.txt)"
    Result = CreateFile(0, "New file.txt", @SaveFileCallback()) ; Create a new file on the drive
  EndIf
  
  If Result
    WriteString(0, GetGadgetText(0))
    ExportFile(0, "application/octet-stream", #PB_GoogleDriveFile)
  EndIf
  
EndProcedure


Procedure Start()
  OpenWindow(0, 10, 10, 600, 400, "SpiderEditor", #PB_Window_ScreenCentered)
  
  CreateMenu(0, WindowID(0)) ; Create an empty menu to have the keyboard event working
  
  ; Create our toolbar
  ;
  CreateToolBar(0, WindowID(0))
  ToolBarImageButton(0, ImageID(0))
  ToolBarImageButton(1, ImageID(1))
  ToolBarImageButton(2, ImageID(2))
  
  EditorGadget(0, 0, 0, 600, 370)
  
  BindMenuEvent(0, 0, @OnNewFile())
  BindMenuEvent(0, 1, @OnOpenFile())
  BindMenuEvent(0, 2, @OnSaveFile())
  
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_N, 0)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_O, 1)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_S, 2)
EndProcedure


Procedure GoogleDriveReady()
  Debug "Google drive ready to use.."
EndProcedure


Procedure Loading(Type, Filename$)
  Static NbLoadedElements
  
  NbLoadedElements+1
  If NbLoadedElements = 3 ; Finished the loading of all images, we can start the application
    Start()
  EndIf
EndProcedure


UseGoogleDrive("568545051626-vlffi940ra93pmb3pl3tq1eaueejje7h", 
               "AIzaSyAp_978UH3YhI4czaGaFmWWvN14AJgNfVQ", @GoogleDriveReady())

; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loading())

LoadImage(0, "Data/ToolBar/New.png")
LoadImage(1, "Data/ToolBar/Open.png")
LoadImage(2, "Data/ToolBar/Save.png")