CrystalSpace

Public API Reference

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.0 by doxygen 1.7.6.1