requesters.monkey2 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. Namespace mojox
  2. #if __TARGET__<>"emscripten"
  3. #rem monkeydoc Runs a simple 'alert' dialog.
  4. If this function is called from the main fiber, a new fiber is created to the alert on.
  5. #end
  6. Function Alert( message:String,title:String="Alert!" )
  7. Local alert:=Lambda()
  8. TextDialog.Run( title,message,New String[]( "Okay" ),0,0 )
  9. End
  10. If Fiber.Current()=Fiber.Main()
  11. New Fiber( alert )
  12. Else
  13. alert()
  14. End
  15. End
  16. #rem monkeydoc Runs a simple 'okay/cancel' dialog.
  17. Returns true if the user selects 'Okay', else false.
  18. This function must not be called from the main fiber.
  19. #end
  20. Function RequestOkay:Bool( message:String="Are you sure you want to do this?",title:String="Okay?" )
  21. Assert( Fiber.Current<>Fiber.Main,"RequestOkay cannot be used from the main fiber" )
  22. Return TextDialog.Run( title,message,New String[]( "Okay","Cancel" ),0,1 )=0
  23. End
  24. #rem monkeydoc Runs a simple string dialog.
  25. Returns the string typed by the user.
  26. This function must not be called from the main fiber.
  27. #end
  28. Function RequestString:String( message:String="Enter a string:",title:String="String requester" )
  29. Assert( Fiber.Current<>Fiber.Main,"RequestString cannot be used from the main fiber" )
  30. Local future:=New Future<String>
  31. Local textField:=New TextField
  32. Local label:=New Label( message )
  33. label.AddView( textField )
  34. Local dialog:=New Dialog( title )
  35. dialog.MaxSize=New Vec2i( 320,0 )
  36. dialog.ContentView=label
  37. Local okay:=dialog.AddAction( "Okay" )
  38. okay.Triggered=Lambda()
  39. future.Set( textField.Text )
  40. End
  41. Local cancel:=dialog.AddAction( "Cancel" )
  42. cancel.Triggered=Lambda()
  43. future.Set( "" )
  44. End
  45. textField.Entered=okay.Trigger
  46. textField.Escaped=cancel.Trigger
  47. dialog.Open()
  48. textField.MakeKeyView()
  49. App.BeginModal( dialog )
  50. Local str:=future.Get()
  51. App.EndModal()
  52. dialog.Close()
  53. Return str
  54. End
  55. #endif