csutil/csbaseeventh.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2003 by Odes B. Boatwright. 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_CSBASEEVENTH_H__ 00020 #define __CS_CSBASEEVENTH_H__ 00021 00022 #include "csextern.h" 00023 00031 #include "csutil/eventhandlers.h" 00032 #include "csutil/ref.h" 00033 #include "csutil/scf_implementation.h" 00034 #include "iutil/event.h" 00035 #include "iutil/eventh.h" 00036 #include "iutil/eventq.h" 00037 00038 #include <limits.h> 00039 00040 struct iEventQueue; 00041 struct iObjectRegistry; 00042 00043 // Max event type (in event type enumeration) that will be handled. 00044 #define _CSBASEEVENT_MAXARRAYINDEX csevFrameStart 00045 00058 class CS_CRYSTALSPACE_EXPORT csBaseEventHandler 00059 { 00060 private: 00061 csRef<iEventQueue> queue; 00062 00063 protected: 00064 iObjectRegistry *object_registry; 00065 csHandlerID self; 00066 csEventID FrameEvent; 00067 00074 class CS_CRYSTALSPACE_EXPORT EventHandlerImpl : public 00075 scfImplementation1<EventHandlerImpl, iEventHandler> 00076 { 00077 friend class csBaseEventHandler; 00078 csBaseEventHandler* parent; 00079 public: 00080 EventHandlerImpl (csBaseEventHandler* parent); 00081 virtual bool HandleEvent (iEvent &event) 00082 { 00083 if (!parent) return false; 00084 return parent->HandleEvent (event); 00085 } 00086 virtual const char *GenericName() const 00087 { 00088 if (!parent) return "application"; 00089 return parent->GenericName(); 00090 } 00091 virtual csHandlerID GenericID( 00092 csRef<iEventHandlerRegistry>& reg) const 00093 { 00094 if (!parent) return CS_HANDLER_INVALID; 00095 return parent->GenericID (reg); 00096 } 00097 virtual const csHandlerID *GenericPrec ( 00098 csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg, 00099 csEventID id) const 00100 { 00101 if (!parent) return 0; 00102 return parent->GenericPrec (hreg, nreg, id); 00103 } 00104 virtual const csHandlerID *GenericSucc ( 00105 csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg, 00106 csEventID id) const 00107 { 00108 if (!parent) return 0; 00109 return parent->GenericSucc (hreg, nreg, id); 00110 } 00111 virtual const csHandlerID *InstancePrec ( 00112 csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg, 00113 csEventID id) const 00114 { 00115 if (!parent) return 0; 00116 return parent->InstancePrec (hreg, nreg, id); 00117 } 00118 virtual const csHandlerID *InstanceSucc( 00119 csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg, 00120 csEventID id) const 00121 { 00122 if (!parent) return 0; 00123 return parent->InstanceSucc (hreg, nreg, id); 00124 } 00125 }; 00126 csRef<EventHandlerImpl> eventh; 00127 00137 csBaseEventHandler (); 00138 00139 public: 00141 virtual ~csBaseEventHandler (); 00142 00147 void Initialize (iObjectRegistry *registry); 00148 00157 bool RegisterQueue (iObjectRegistry* registry, csEventID name); 00158 00168 bool RegisterQueue (iObjectRegistry* registry, csEventID names[]); 00169 00177 bool RegisterQueue (iEventQueue* queue, csEventID name); 00186 bool RegisterQueue (iEventQueue* queue, csEventID names[]); 00191 void UnregisterQueue (); 00192 00193 protected: 00214 virtual bool HandleEvent (iEvent &event); 00215 00221 virtual const char *GenericName() const 00222 { return "application"; } 00223 00224 virtual csHandlerID GenericID ( 00225 csRef<iEventHandlerRegistry>& reg) const 00226 { 00227 return reg->GetGenericID (GenericName ()); 00228 } 00229 00234 virtual const csHandlerID *GenericPrec ( 00235 csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&, 00236 csEventID) const 00237 { return 0; } 00238 00243 virtual const csHandlerID *GenericSucc ( 00244 csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&, 00245 csEventID) const 00246 { return 0; } 00247 00252 virtual const csHandlerID *InstancePrec ( 00253 csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&, 00254 csEventID) const 00255 { return 0; } 00256 00261 virtual const csHandlerID *InstanceSucc ( 00262 csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&, 00263 csEventID) const 00264 { return 0; } 00265 00267 virtual bool OnJoystickMove (iEvent &event); 00268 00273 virtual bool OnJoystickDown (iEvent &event); 00274 00276 virtual bool OnJoystickUp (iEvent &event); 00277 00279 virtual bool OnKeyboard (iEvent &event); 00280 00282 virtual bool OnMouseMove (iEvent &event); 00283 00285 virtual bool OnMouseDown (iEvent &event); 00286 00288 virtual bool OnMouseUp (iEvent &event); 00289 00291 virtual bool OnMouseClick (iEvent &event); 00292 00297 virtual bool OnMouseDoubleClick (iEvent &event); 00298 00305 virtual bool OnUnhandledEvent (iEvent &event); 00306 00308 virtual void Frame (); 00309 00310 // Compatibility methods 00311 CS_DEPRECATED_METHOD_MSG("Use signpost event handlers for frame preprocessing") 00312 virtual void PreProcessFrame () {} 00313 CS_DEPRECATED_METHOD_MSG("Use Frame() method for main frame processing") 00314 virtual void ProcessFrame () {} 00315 CS_DEPRECATED_METHOD_MSG("Use signpost event handlers for frame postprocessing") 00316 virtual void PostProcessFrame () {} 00317 CS_DEPRECATED_METHOD_MSG("Use FramePrinter for frame finishing or " 00318 "signpost event handlers for frame finalization") 00319 virtual void FinishFrame () {} 00320 }; 00321 00324 #endif //__CS_CSBASEEVENTH_H__
Generated for Crystal Space 2.1 by doxygen 1.6.1
