; minibrowser.pb
; ------------------------------------------------------------
; This is a minimalistic browser for admin purposes.
; It was derived from: MiniBrowser, (c) Fantaisie Software
; LICENSE  : GPL
; AUTHOR   : Michael H.G. Schmidt
; EMAIL    : michael@schmidt2.de
; DATE     : 20230309
; ------------------------------------------------------------
;


; VARIABLES
Global Security=#True
Global DefaultStartPage$="https://duckduckgo.com"
Global StartPage$=DefaultStartPage$

Procedure ResizeWebWindow()
  ResizeGadget(10, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0)-40)
  ResizeGadget(4, #PB_Ignore, #PB_Ignore, WindowWidth(0)-220, #PB_Ignore)
  ResizeGadget(5, WindowWidth(0)-30, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
EndProcedure

Procedure JavaScriptErrorMessages(WebGadget,MyState)
  Protected MyWebGadget.IWebBrowser2
  MyWebGadget=GetWindowLongPtr_(GadgetID(Webgadget), #GWL_USERDATA)
  MyWebGadget\put_Silent(MyState)
EndProcedure

Procedure toggleButton()
  
  BTN$ = GetGadgetText(1)
 
  If ( BTN$ = "Secure" )
    SetGadgetText(1, "INSECURE")
    Security = #False
  EndIf
  
  If ( BTN$ = "INSECURE" )
    SetGadgetText(1, "Secure")
    Security = #True
  EndIf
  
  JavaScriptErrorMessages(10,Security)
EndProcedure

Procedure Usage()
  MessageRequester("MiniBrowser",
    "usage: minibrowser < [/? | /I] [ URL ]" + Chr(13) + "  URL: webpage To show on start" + Chr(13) + "  /I = ignore security (SSL)" + Chr(13) + "  /? = show help",
    #PB_MessageRequester_Info)
	End 99
EndProcedure

; get arguments / check commandline ...
If ( CountProgramParameters() = 0 )
  StartPage$ = DefaultStartPage$
EndIf

If ( CountProgramParameters() >= 1 )
  If ( UCase(ProgramParameter(0)) = "/?" )
    Usage()
  ElseIf (UCase(ProgramParameter(0)) = "/I")
    StartPage$ = DefaultStartPage$
    Security = #False
  Else
    StartPage$ = ProgramParameter(0)
  EndIf
EndIf

If ( CountProgramParameters() = 2 )
  StartPage$ = ProgramParameter(1)  
EndIf

;
; MAIN
;

If OpenWindow(0, 100, 200, 800, 600, "MiniBrowser", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
 
  LoadFont(1,"Courier",10, #PB_Font_Bold)
  SetGadgetFont(#PB_Default, FontID(1))
  If ( Security )
    ButtonGadget(1, 0, 3, 80, 25, "Secure")
  Else
    ButtonGadget(1, 0, 3, 80, 25, "INSECURE")
  EndIf
  SetGadgetFont(#PB_Default, #PB_Default)
  
  ButtonGadget(2, 80, 3, 50, 25, "Back")
  ButtonGadget(3, 130, 3, 50, 25, "Stop")
  
  StringGadget(4, 185, 5, 0, 20, StartPage$)
  ButtonGadget(5, 0, 3, 25, 25, "Go")
  FrameGadget(6, 0, 30, 0, 2, "", 2) ; Nice little separator
  
  WebGadget(10, 1, 37, 1278, 732, "")
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  
  ; Use bindevent() to have a realtime window resize
  BindEvent(#PB_Event_SizeWindow, @ResizeWebWindow())
  ResizeWebWindow() ; Adjust the gadget to the current window size
  
  ; Use bindevent() to toggle the security button
  BindGadgetEvent(1, @toggleButton())
  
  SetGadgetState(10, #PB_Web_Refresh)
  JavaScriptErrorMessages(10,Security) ; Turn on/off Java Script Error Messages
  SetGadgetText(10, StartPage$)
  
  Repeat
    Event = WaitWindowEvent()
     
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            SetGadgetState(10, #PB_Web_Refresh)
          Case 2
            SetGadgetState(10, #PB_Web_Back)
          Case 3
            SetGadgetState(10, #PB_Web_Stop)
          Case 5
            SetGadgetText(10, GetGadgetText(4))
        EndSelect
        
      Case #PB_Event_Menu ; We only have one shortcut
        SetGadgetText(10, GetGadgetText(4))
    
    EndSelect
    
  Until Event = #PB_Event_CloseWindow

EndIf

; IDE Options = PureBasic 5.73 LTS (Windows - x64)
; CursorPosition = 16
; Folding = -
; EnableXP
; UseIcon = internet_free_icon.ico
; Executable = ..\tools\minibrowser.exe
; CompileSourceDirectory