|
|
@@ -0,0 +1,78 @@
|
|
|
+
|
|
|
+class "EventDispatcher"
|
|
|
+
|
|
|
+function EventDispatcher:EventDispatcher()
|
|
|
+ self.listenerEntries = {}
|
|
|
+end
|
|
|
+
|
|
|
+function EventDispatcher:addEventListener(listener, callback, eventCode)
|
|
|
+ if self.listenerEntries == nil then
|
|
|
+ self.listenerEntries = {}
|
|
|
+ end
|
|
|
+ local newEntry = {}
|
|
|
+ if self.__ptr ~= nil then
|
|
|
+ newEntry.handler = Polycore.EventHandler(newEntry)
|
|
|
+ Polycore.EventDispatcher_addEventListener(self.__ptr, newEntry.handler, eventCode)
|
|
|
+ end
|
|
|
+ newEntry.listener = listener
|
|
|
+ newEntry.callback = callback
|
|
|
+ newEntry.eventCode = eventCode
|
|
|
+ self.listenerEntries[#self.listenerEntries+1] = newEntry
|
|
|
+end
|
|
|
+
|
|
|
+function EventDispatcher:removeAllHandlers()
|
|
|
+ if self.listenerEntries == nil then
|
|
|
+ self.listenerEntries = {}
|
|
|
+ end
|
|
|
+ if self.__ptr ~= nil then
|
|
|
+ Polycore.EventDispatcher_removeAllHandlers(self.__ptr)
|
|
|
+ end
|
|
|
+ self.listenerEntries = {}
|
|
|
+end
|
|
|
+
|
|
|
+function EventDispatcher:removeAllHandlersForListener(listener)
|
|
|
+ if self.listenerEntries == nil then
|
|
|
+ self.listenerEntries = {}
|
|
|
+ end
|
|
|
+ local i=1
|
|
|
+ while i <= #self.listenerEntries do
|
|
|
+ if self.listenerEntries[i].listener == listener then
|
|
|
+ if self.__ptr ~= nil and self.listenerEntries[i].handler ~= nil then
|
|
|
+ Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, self.listenerEntries[i].handler)
|
|
|
+ Polycore.delete_EventHandler(self.listenerEntries[i].handler)
|
|
|
+ end
|
|
|
+ table.remove(self.listenerEntries, i)
|
|
|
+ else
|
|
|
+ i = i + 1
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function EventDispatcher:removeEventListener(listener, eventCode)
|
|
|
+ if self.listenerEntries == nil then
|
|
|
+ self.listenerEntries = {}
|
|
|
+ end
|
|
|
+ local i=1
|
|
|
+ while i <= #self.listenerEntries do
|
|
|
+ if self.listenerEntries[i].listener == listener and self.listenerEntries[i].eventCode == eventCode then
|
|
|
+ if self.__ptr ~= nil and self.listenerEntries[i].handler ~= nil then
|
|
|
+ Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, self.listenerEntries[i].handler)
|
|
|
+ Polycore.delete_EventHandler(self.listenerEntries[i].handler)
|
|
|
+ end
|
|
|
+ table.remove(self.listenerEntries, i)
|
|
|
+ else
|
|
|
+ i = i + 1
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function EventDispatcher:dispatchEvent(event, eventCode)
|
|
|
+ if self.listenerEntries == nil then
|
|
|
+ self.listenerEntries = {}
|
|
|
+ end
|
|
|
+ for i=1,#self.listenerEntries do
|
|
|
+ if self.listenerEntries[i].eventCode == eventCode then
|
|
|
+ self.listenerEntries[i].callback(self.listenerEntries[i].listener, event)
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|