event.bmx 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. Strict
  2. Rem
  3. bbdoc: Events/Events
  4. End Rem
  5. Module BRL.Event
  6. ModuleInfo "Version: 1.03"
  7. ModuleInfo "Author: Mark Sibly"
  8. ModuleInfo "License: zlib/libpng"
  9. ModuleInfo "Copyright: Blitz Research Ltd"
  10. ModuleInfo "Modserver: BRL"
  11. ModuleInfo "History: 1.03 Release"
  12. ModuleInfo "History: Added missing EVENT_HOTKEY ToString case"
  13. ModuleInfo "History: Added process events"
  14. ModuleInfo "History: 1.02 Release"
  15. ModuleInfo "History: Added EVENT_GADGETLOSTFOCUS"
  16. ModuleInfo "History: 1.01 Release"
  17. ModuleInfo "History: Added EVENT_KEYREPEAT"
  18. Import BRL.Hook
  19. Rem
  20. bbdoc: Hook id for emitted events
  21. about:
  22. The #EmitEventHook global variable contains a hook id for use with #AddHook.
  23. Each time #EmitEvent is called, the event is passed to all #EmitEventHook
  24. hook functions by means of the hook function @data parameter.
  25. End Rem
  26. Global EmitEventHook=AllocHookId()
  27. Rem
  28. bbdoc: Event object type
  29. EndRem
  30. Type TEvent
  31. Rem
  32. bbdoc: Event identifier
  33. End Rem
  34. Field id
  35. Rem
  36. bbdoc: Event source object
  37. End Rem
  38. Field source:Object
  39. Rem
  40. bbdoc: Event specific data
  41. End Rem
  42. Field data
  43. Rem
  44. bbdoc: Event specific modifiers
  45. End Rem
  46. Field mods
  47. Rem
  48. bbdoc: Event specific position data
  49. End Rem
  50. Field x
  51. Rem
  52. bbdoc: Event specific position data
  53. End Rem
  54. Field y
  55. Rem
  56. bbdoc: Event specific extra information
  57. End Rem
  58. Field extra:Object
  59. Rem
  60. bbdoc: Emit this event
  61. about:
  62. This method runs all #EmitEventHook hook function, passing @Self as
  63. the hook data.
  64. End Rem
  65. Method Emit()
  66. RunHooks EmitEventHook,Self
  67. End Method
  68. Rem
  69. bbdoc: Convert event to a string
  70. about:
  71. This method is mainly useful for debugging purposes.
  72. End Rem
  73. Method ToString$()
  74. Local t$=DescriptionForId( id )
  75. If Not t
  76. If id & EVENT_USEREVENTMASK
  77. t="UserEvent"+(id-EVENT_USEREVENTMASK)
  78. Else
  79. t="Unknown Event, id="+id
  80. EndIf
  81. EndIf
  82. Return t+": data="+data+", mods="+mods+", x="+x+", y="+y+", extra=~q"+String(extra)+"~q"
  83. End Method
  84. Rem
  85. bbdoc: Create an event object
  86. returns: A new event object
  87. End Rem
  88. Function Create:TEvent( id,source:Object=Null,data=0,mods=0,x=0,y=0,extra:Object=Null )
  89. Local t:TEvent=New TEvent
  90. t.id=id
  91. t.source=source
  92. t.data=data
  93. t.mods=mods
  94. t.x=x
  95. t.y=y
  96. t.extra=extra
  97. Return t
  98. End Function
  99. Rem
  100. bbdoc: Allocate a user event id
  101. returns: A new user event id
  102. End Rem
  103. Function AllocUserId()
  104. Global _id=EVENT_USEREVENTMASK
  105. _id:+1
  106. Return _id
  107. End Function
  108. Function RegisterId( id,description$ )
  109. _regids:+String(id)+"{"+description+"}"
  110. End Function
  111. Function DescriptionForId$( id )
  112. Local t$="}"+String(id)+"{"
  113. Local i=_regids.Find( t )
  114. If i=-1 Return
  115. i:+t.length
  116. Local i2=_regids.Find( "}",i )
  117. If i2=-1 Return
  118. Return _regids[i..i2]
  119. End Function
  120. Global _regids$="}"
  121. End Type
  122. Const EVENT_APPMASK=$100
  123. Const EVENT_APPSUSPEND=$101
  124. Const EVENT_APPRESUME=$102
  125. Const EVENT_APPTERMINATE=$103
  126. Const EVENT_APPOPENFILE=$104
  127. Const EVENT_APPIDLE=$105 'Reserved by Mark!
  128. Const EVENT_KEYMASK=$200
  129. Const EVENT_KEYDOWN=$201
  130. Const EVENT_KEYUP=$202
  131. Const EVENT_KEYCHAR=$203
  132. Const EVENT_KEYREPEAT=$204
  133. Const EVENT_MOUSEMASK=$400
  134. Const EVENT_MOUSEDOWN=$401
  135. Const EVENT_MOUSEUP=$402
  136. Const EVENT_MOUSEMOVE=$403
  137. Const EVENT_MOUSEWHEEL=$404
  138. Const EVENT_MOUSEENTER=$405
  139. Const EVENT_MOUSELEAVE=$406
  140. Const EVENT_TIMERMASK=$800
  141. Const EVENT_TIMERTICK=$801
  142. Const EVENT_HOTKEYMASK=$1000
  143. Const EVENT_HOTKEYHIT=$1001
  144. Const EVENT_GADGETMASK=$2000
  145. Const EVENT_GADGETACTION=$2001
  146. Const EVENT_GADGETPAINT=$2002
  147. Const EVENT_GADGETSELECT=$2003
  148. Const EVENT_GADGETMENU=$2004
  149. Const EVENT_GADGETOPEN=$2005
  150. Const EVENT_GADGETCLOSE=$2006
  151. Const EVENT_GADGETDONE=$2007
  152. Const EVENT_GADGETLOSTFOCUS=$2008
  153. Const EVENT_GADGETSHAPE=$2009 'reserved by Mark!
  154. Const EVENT_WINDOWMASK=$4000
  155. Const EVENT_WINDOWMOVE=$4001
  156. Const EVENT_WINDOWSIZE=$4002
  157. Const EVENT_WINDOWCLOSE=$4003
  158. Const EVENT_WINDOWACTIVATE=$4004
  159. Const EVENT_WINDOWACCEPT=$4005
  160. Const EVENT_MENUMASK=$8000
  161. Const EVENT_MENUACTION=$8001
  162. Const EVENT_STREAMMASK=$10000
  163. Const EVENT_STREAMEOF=$10001
  164. Const EVENT_STREAMAVAIL=$10002
  165. Const EVENT_PROCESSMASK=$20000
  166. Const EVENT_PROCESSEXIT=$20001
  167. Const EVENT_USEREVENTMASK=$80000000
  168. TEvent.RegisterId EVENT_APPSUSPEND,"AppSuspend"
  169. TEvent.RegisterId EVENT_APPRESUME,"AppResume"
  170. TEvent.RegisterId EVENT_APPTERMINATE,"AppTerminate"
  171. TEvent.RegisterId EVENT_APPOPENFILE,"AppOpenFile"
  172. TEvent.RegisterId EVENT_APPIDLE,"AppIdle"
  173. TEvent.RegisterId EVENT_KEYDOWN,"KeyDown"
  174. TEvent.RegisterId EVENT_KEYUP,"KeyUp"
  175. TEvent.RegisterId EVENT_KEYCHAR,"KeyChar"
  176. TEvent.RegisterId EVENT_KEYREPEAT,"KeyRepeat"
  177. TEvent.RegisterId EVENT_MOUSEDOWN,"MouseDown"
  178. TEvent.RegisterId EVENT_MOUSEUP,"MouseUp"
  179. TEvent.RegisterId EVENT_MOUSEMOVE,"MouseMove"
  180. TEvent.RegisterId EVENT_MOUSEWHEEL,"MouseWheel"
  181. TEvent.RegisterId EVENT_MOUSEENTER,"MouseEnter"
  182. TEvent.RegisterId EVENT_MOUSELEAVE,"MouseLeave"
  183. TEvent.RegisterId EVENT_TIMERTICK,"TimerTick"
  184. TEvent.RegisterId EVENT_HOTKEYHIT,"HotkeyHit"
  185. TEvent.RegisterId EVENT_GADGETACTION,"GadgetAction"
  186. TEvent.RegisterId EVENT_GADGETPAINT,"GadgetPaint"
  187. TEvent.RegisterId EVENT_GADGETSELECT,"GadgetSelect"
  188. TEvent.RegisterId EVENT_GADGETMENU,"GadgetMenu"
  189. TEvent.RegisterId EVENT_GADGETOPEN,"GadgetOpen"
  190. TEvent.RegisterId EVENT_GADGETCLOSE,"GadgetClose"
  191. TEvent.RegisterId EVENT_GADGETDONE,"GadgetDone"
  192. TEvent.RegisterId EVENT_GADGETLOSTFOCUS,"GadgetLostFocus"
  193. TEvent.RegisterId EVENT_GADGETSHAPE,"GadgetShape"
  194. TEvent.RegisterId EVENT_WINDOWMOVE,"WindowMove"
  195. TEvent.RegisterId EVENT_WINDOWSIZE,"WindowSize"
  196. TEvent.RegisterId EVENT_WINDOWCLOSE,"WindowClose"
  197. TEvent.RegisterId EVENT_WINDOWACTIVATE,"WindowActivate"
  198. TEvent.RegisterId EVENT_WINDOWACCEPT,"WindowAccept"
  199. TEvent.RegisterId EVENT_MENUACTION,"MenuAction"
  200. TEvent.RegisterId EVENT_STREAMEOF,"StreamEof"
  201. TEvent.RegisterId EVENT_STREAMAVAIL,"StreamAvail"
  202. TEvent.RegisterId EVENT_PROCESSEXIT,"ProcessExit"
  203. Rem
  204. bbdoc: Emit an event
  205. about:
  206. Runs all #EmitEventHook hooks, passing @event as the hook data.
  207. End Rem
  208. Function EmitEvent( event:TEvent )
  209. event.Emit
  210. End Function
  211. Rem
  212. bbdoc: Create an event object
  213. returns: A new event object
  214. End Rem
  215. Function CreateEvent:TEvent( id,source:Object=Null,data=0,mods=0,x=0,y=0,extra:Object=Null )
  216. Return TEvent.Create( id,source,data,mods,x,y,extra )
  217. End Function
  218. Rem
  219. bbdoc: Allocate a user event id
  220. returns: A new user event id
  221. End Rem
  222. Function AllocUserEventId( description$="" )
  223. Local id=TEvent.AllocUserId()
  224. If description TEvent.RegisterId id,description
  225. Return id
  226. End Function