| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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
|