Page 1 of 1

TouchBar use?

Posted: Tue May 08, 2018 3:57 pm
by HarrysLad
I must be missing something really simple here but ...
How do I code to put application buttons on the TouchBar of my MacBook Pro (October 2017) :?
I can't see anything relevant in the docs or on-line.
Example code would be very welcome as would a link to documentation (if this actually exists).

Dave

Re: TouchBar use?

Posted: Tue May 08, 2018 7:40 pm
by mk-soft
At the moment the touch bar in the version PB v5.62 is deactivated because of massive problems with MacOS 10.9 and Xcode 8.x.
PrinterRequester and WebGadget can lead to crashes.
I tested it with MacOS 10.10.x and Xcode 9.x.
It seems to work correctly again with the current version of Xcode. But I can't guarantee it.

You can reactivate the touchbar for PB-APP with a workaround.

But I don't know how you can add your own functions to the touchbar via cocoa.

Translated with www.DeepL.com/Translator

Code: Select all

;-TOP

; Touchbar workaround by mk-soft
; Version v1.03
; Date 08/15/2017

Procedure IsTouchbar()
  Protected standardUserDefaults, r1
  standardUserDefaults = CocoaMessage(0, 0, "NSUserDefaults standardUserDefaults")
  r1 = CocoaMessage(0, standardUserDefaults, "integerForKey:$", @"NSFunctionBarAPIEnabled")
  ProcedureReturn r1
EndProcedure

Procedure DisableTouchbar()
  Protected standardUserDefaults
  If IsTouchbar()
    standardUserDefaults = CocoaMessage(0, 0, "NSUserDefaults standardUserDefaults")
    CocoaMessage(0, standardUserDefaults, "setBool:", #NO, "forKey:$", @"NSFunctionBarAPIEnabled")
    RunProgram(ProgramFilename(), ProgramParameter(), GetCurrentDirectory())
    End
  EndIf
EndProcedure

Procedure EnableTouchbar()
  Protected standardUserDefaults
  If IsTouchbar() = 0
    standardUserDefaults = CocoaMessage(0, 0, "NSUserDefaults standardUserDefaults")
    CocoaMessage(0, standardUserDefaults, "setBool:", #YES, "forKey:$", @"NSFunctionBarAPIEnabled")
    RunProgram(ProgramFilename(), ProgramParameter(), GetCurrentDirectory())
    End
  EndIf
EndProcedure

; ***************************************************************************************

CompilerIf #PB_Compiler_IsMainFile
  
  Debug IsTouchbar()
  EnableTouchbar()
  ;DisableTouchbar()
  
  If OpenWindow(0, 0, 0, 600, 300, "WebGadget: "+Str(IsTouchbar()), #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
       CreateImage(0,16,16)
    StartDrawing(ImageOutput(0))
      Box(0,0,16,16,RGB(255,255,255))
      Box(4,4,8,8,RGB(255,0,0))
    StopDrawing()
    CreateImage(1,16,16)
    StartDrawing(ImageOutput(1))
      Box(0,0,16,16,RGB(255,0,0))
      Box(4,4,8,8,RGB(255,255,255))
    StopDrawing()
    If CreateToolBar(0, WindowID(0), #PB_ToolBar_Large)
      ToolBarImageButton(0,ImageID(0))
      ToolBarImageButton(1,ImageID(1))
    EndIf
    
    ;Delay(100)
    ; this website doesn't crash the app
    ;WebGadget(0, 10, 10, 580, 280, "http://www.apple.com") 
    ; this website crashes the app
    WebGadget(0, 10, 10, 580, 280, "http://google.com") 
    
    Repeat 
      ; crash with "http://google.com"
    Until WaitWindowEvent() = #PB_Event_CloseWindow  ; <- Invalid memory access
  EndIf
CompilerEndIf