//////////////////////////////////////// // New Event Mechanism #ifndef EVENT_T_ #define EVENT_T_ #pragma C+ Events: initialization preinit_phase = { local o; for (o = firstobj(); o != nil; o = nextobj(o)) if (defined(o, &isEventListener) and o.isEventListener == true) self.listeners += o; } register(o) = { self.listeners += o; o.isEventListener = true; } unregister(o) = { self.listeners -= o; o.isEventlistener = nil; } listeners = [] send(event, arg) = { local o, l = self.listeners; for (; (o = car(l)) != nil; l = cdr(l)) if (defined(o, event)) o.(event) (arg); } ; class EventListener: object isEventListener = true ; #endif