It is currently Wed Nov 20, 2019 2:36 pm

All times are UTC + 1 hour




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Example sheet NSAlert with options
PostPosted: Tue Jul 30, 2019 3:04 pm 
Offline
Enthusiast
Enthusiast

Joined: Thu May 30, 2013 4:39 pm
Posts: 468
Code:

; NSBlock module by Wilbert  July 17, 2015

DeclareModule NSBlock
 
  Structure NSBlock
    *isa
    flags.l
    reserved.l
    *invoke
    *descriptor
  EndStructure
 
  Structure NSBlockWithPtr
    *block.NSBlock
    _block.NSBlock
  EndStructure
 
  Declare InitNSBlockWithPtr(*NSBlockWithPtr.NSBlockWithPtr, *Invoke, IsGlobal = #True)
 
EndDeclareModule

Module NSBlock
 
  Global.i NSConcreteGlobalBlock, NSConcreteStackBlock, DyLib
 
  DyLib = OpenLibrary(#PB_Any, "libSystem.dylib")
  If DyLib
    NSConcreteGlobalBlock = GetFunction(DyLib, "_NSConcreteGlobalBlock")
    NSConcreteStackBlock = GetFunction(DyLib, "_NSConcreteStackBlock")   
    CloseLibrary(DyLib)
  EndIf
 
  If Not NSConcreteGlobalBlock
    MessageRequester("Error", "Unable to access _NSConcreteGlobalBlock symbol")
    End
  EndIf
 
  DataSection
    NSBlockDescriptor:
    Data.i 0, SizeOf(NSBlock), 0, 0
  EndDataSection
 
  Procedure InitNSBlockWithPtr(*NSBlockWithPtr.NSBlockWithPtr, *Invoke, IsGlobal = #True)
    *NSBlockWithPtr\block = @*NSBlockWithPtr\_block
    With *NSBlockWithPtr\_block
      If IsGlobal
        \isa = NSConcreteGlobalBlock
        \flags = $30000000
      Else
        \isa = NSConcreteStackBlock
        \flags = $20000000
      EndIf
      \invoke = *Invoke
      \descriptor = ?NSBlockDescriptor
    EndWith
  EndProcedure
 
EndModule

; *** End of NSBlock module ***


UseModule NSBlock

#NSCriticalAlertStyle = 2
#NSInformationalAlertStyle = 1
#NSWarningAlertStyle = 0

Enumeration NSAlertButton
  #firstButton =1000
  #secondButton
  #thirdButton
EndEnumeration

#NSShiftKeyMask      = 1 << 17
#NSControlKeyMask    = 1 << 18
#NSAlternateKeyMask  = 1 << 19
#NSCommandKeyMask    = 1 << 20

Global MyBlockWithPtr.NSBlockWithPtr, NSAlert

;//App Preferences
Global defaults = CocoaMessage(0, 0, "NSUserDefaults standardUserDefaults")


;//Custom Icon for Alert
Global myIcon = CreateImage(#PB_Any, 64, 64, 32, $FFF26A0B)

Global mainWindow, strGadget, button

ProcedureC ModalSheetCallback(*Block.NSBlock, returnCode)
 
  suppressionButton = CocoaMessage(0, NSAlert, "suppressionButton")
  If CocoaMessage(0, suppressionButton, "state")
    CocoaMessage(0, defaults, "setBool:", #YES, "forKey:$", @"alertSuppressionKey")
  EndIf
 

  Select returnCode
    Case #firstButton
      Debug "OK"
    Case #secondButton
      Debug "Not OK"
    Case #thirdButton
      Debug "its coold"
  EndSelect
 
  If IsGadget(strGadget)
    FreeGadget(strGadget)
  EndIf
 
EndProcedure


InitNSBlockWithPtr(@MyBlockWithPtr, @ModalSheetCallback())



Procedure sheetAlert(message.s = "", informativeText.s= "", hasAccessory = #NO, icon = #Null)
 
  If CocoaMessage(0, defaults, "boolForKey:$", @"alertSuppressionKey") = #NO
    NSAlert = CocoaMessage(0,CocoaMessage(0, 0, "NSAlert alloc"), "init")
   
    CocoaMessage(0, NSAlert, "setMessageText:$", @message)
    CocoaMessage(0, NSAlert, "setInformativeText:$", @informativeText)
   
   
    defaultButton =CocoaMessage(0, NSAlert, "addButtonWithTitle:$", @"OK")
   
    noButton =CocoaMessage(0, NSAlert, "addButtonWithTitle:$", @"not OK")
    CocoaMessage(0, noButton, "setKeyEquivalent:$", @"n")
    CocoaMessage(0, noButton, "setKeyEquivalentModifierMask:", #NSCommandKeyMask)
   
    iButton =CocoaMessage(0, NSAlert, "addButtonWithTitle:$", @"I'm freezing")
    CocoaMessage(0, iButton, "setKeyEquivalent:$", @"i")
    CocoaMessage(0, iButton, "setKeyEquivalentModifierMask:", #NSCommandKeyMask)
   
;     CocoaMessage(0, NSAlert, "setDelegate:", NSAlert)
   
    CocoaMessage(0, NSAlert, "setAlertStyle:", #NSInformationalAlertStyle)
   
    If icon
      CocoaMessage(0, NSAlert, "setIcon:", ImageID(icon))
    EndIf
   
   
   
   
    CocoaMessage(0, NSAlert, "setShowsSuppressionButton:", #YES)
    suppressionButton = CocoaMessage(0, NSAlert, "suppressionButton")
    CocoaMessage(0, suppressionButton, "setTitle:$", @"Do Not show this warning again")
   
   
    If hasAccessory
      strGadget = StringGadget(#PB_Any, 20, 68, 327, 20, "...you answare")
     
      strGadgetID = GadgetID(strGadget)
      CocoaMessage(0, NSAlert, "setAccessoryView:", strGadgetID)
     
     
      CocoaMessage(0, strGadgetID, "currentEditor")
     
      ;//Set defaultButton action while StringGadget has focus
      CocoaMessage(0, strGadgetID, "setTarget:", defaultButton)
      CocoaMessage(0, strGadgetID, "setAction:", sel_registerName_("performClick:"))
     
      CocoaMessage(0, NSAlert, "layout")
     
      CocoaMessage(0, strGadgetID, "becomeFirstResponder")
;     selectText = CocoaMessage(0, strGadgetID, "selectText:")
     
    EndIf
   
    CocoaMessage(0, NSAlert, "beginSheetModalForWindow:", WindowID(mainWindow), "completionHandler:@", @MyBlockWithPtr)
  EndIf
EndProcedure


Procedure mainWindowEvents(event)
 
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
     
    Case #PB_Event_Menu
      Select EventMenu()
         
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case button
          sheetAlert("My Alert", "Global warming", #YES, myIcon)
         
        Case strGadget
          If EventType() = #PB_EventType_Change
            Debug GetGadgetText(strGadget)
          EndIf
         
      EndSelect
  EndSelect
 
  ProcedureReturn #True
EndProcedure




mainWindow = OpenWindow(#PB_Any, 0, 0, 400, 120, "MAIN WINDOW", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
button = ButtonGadget(#PB_Any, 160, 30, 80, 25, "show")


  ;//just to rest the default value for alertSuppressionKey
  ;CocoaMessage(0, defaults, "setBool:", #NO, "forKey:$", @"alertSuppressionKey")
     


Repeat
  event = WaitWindowEvent()
 
Until mainWindowEvents(event) = #False


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye