Code: Select all
Global Window_0, strGadget, strGadget2
Enumeration CustomEventType #PB_EventType_FirstCustomValue
#My_EventType_Return
EndEnumeration
Procedure ChangeState(StringGadget, Editable)
Protected StringGadgetID = GadgetID(StringGadget)
CocoaMessage(0, StringGadgetID, "setEditable:", Editable)
CocoaMessage(0, StringGadgetID, "setBezeled:", Editable)
CocoaMessage(0, StringGadgetID, "setDrawsBackground:", Editable)
SetActiveGadget(StringGadget)
EndProcedure
Procedure EventReturnKey()
Debug "RetunKey"
PostEvent(#PB_Event_Gadget, GetActiveWindow(), GetActiveGadget(), #My_EventType_Return)
EndProcedure
Procedure getGadget()
windowID = WindowID(Window_0)
NSPoint.NSPoint
CocoaMessage(@NSPoint, windowID, "mouseLocationOutsideOfEventStream")
object = CocoaMessage(0, CocoaMessage(0, windowID, "contentView"), "hitTest:@", @NSPoint)
ProcedureReturn CocoaMessage(0, object, "tag")
EndProcedure
Procedure exitEdit(gadget)
ChangeState(gadget, #False)
UnbindMenuEvent(0, 1000, @EventReturnKey())
RemoveKeyboardShortcut(Window_0, #PB_Shortcut_Return)
EndProcedure
ProcedureC DoubleClickCallback(Obj, Sel, GestureRecognizer)
Static gadget = -1
If gadget <> -1
exitEdit(gadget)
EndIf
gadget = getGadget()
If gadget <> -1
SetActiveGadget(gadget)
ChangeState(gadget, #True)
BindMenuEvent(0, 1000, @EventReturnKey())
AddKeyboardShortcut(Window_0, #PB_Shortcut_Return, 1000)
EndIf
EndProcedure
Procedure initDoubleClickGesture()
DoubleClick = CocoaMessage(0, 0, "NSClickGestureRecognizer alloc")
DoubleClick = CocoaMessage(0, DoubleClick, "initWithTarget:", AppDelegate, "action:", sel_registerName_("doubleClick:"))
CocoaMessage(0, DoubleClick, "setNumberOfClicksRequired:", 2)
ProcedureReturn DoubleClick
EndProcedure
Global AppDelegate = CocoaMessage(0, CocoaMessage(0, 0, "NSApplication sharedApplication"), "delegate")
DelegateClass = CocoaMessage(0, AppDelegate, "class")
class_addMethod_(DelegateClass, sel_registerName_("doubleClick:"), @DoubleClickCallback(),"v@:@")
Procedure OpenWindow_0(x = 0, y = 0, width = 450, height = 160)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
strGadget = StringGadget(#PB_Any, 8, 8, 306, 20, "DoubleClick me")
strGadget2 = StringGadget(#PB_Any, 8, 50, 306, 20, "DoubleClick me2")
CocoaMessage(0, GadgetID(strGadget), "setDelegate:", AppDelegate)
CocoaMessage(0, GadgetID(strGadget2), "setDelegate:", AppDelegate)
ChangeState(strGadget, #False)
ChangeState(strGadget2, #False)
CocoaMessage(0, GadgetID(strGadget), "addGestureRecognizer:", initDoubleClickGesture() )
CocoaMessage(0, GadgetID(strGadget2), "addGestureRecognizer:", initDoubleClickGesture() )
CreateMenu(0, WindowID(Window_0))
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
Case #PB_Menu_Quit
ProcedureReturn #False
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case strGadget
If EventType() = #My_EventType_Return
exitEdit(strGadget)
EndIf
Case strGadget2
If EventType() = #My_EventType_Return
exitEdit(strGadget2)
EndIf
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
event = WaitWindowEvent()
Until Window_0_Events(event) = #False