## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# 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
    00037 #include <limits.h>
    00038
    00039 struct iEventQueue;
    00040 struct iObjectRegistry;
    00041
    00042 // Max event type (in event type enumeration) that will be handled.
    00043 #define _CSBASEEVENT_MAXARRAYINDEX csevFrameStart
    00044
    00057 class CS_CRYSTALSPACE_EXPORT csBaseEventHandler
    00058 {
    00059 private:
    00060   csRef<iEventQueue> queue;
    00061
    00062 protected:
    00063   iObjectRegistry *object_registry;
    00064   csHandlerID self;
    00065   csEventID FrameEvent;
    00066   csEventID PreProcess;
    00067   csEventID Process;
    00068   csEventID PostProcess;
    00069   csEventID FinalProcess;
    00070
    00077   class CS_CRYSTALSPACE_EXPORT EventHandlerImpl : public
    00078     scfImplementation1<EventHandlerImpl, iEventHandler>
    00079   {
    00080     friend class csBaseEventHandler;
    00081     csBaseEventHandler* parent;
    00082   public:
    00083     EventHandlerImpl (csBaseEventHandler* parent);
    00084     virtual bool HandleEvent (iEvent &event)
    00085     {
    00086       if (!parent) return false;
    00087       return parent->HandleEvent (event);
    00088     }
    00089     CS_CONST_METHOD virtual const char *GenericName() const
    00090     {
    00091       if (!parent) return "application";
    00092       return parent->GenericName();
    00093     }
    00094     CS_CONST_METHOD virtual csHandlerID GenericID(
    00095       csRef<iEventHandlerRegistry>& reg) const
    00096     {
    00097       if (!parent) return CS_HANDLER_INVALID;
    00098       return parent->GenericID (reg);
    00099     }
    00100     CS_CONST_METHOD virtual const csHandlerID *GenericPrec (
    00101       csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg,
    00102       csEventID id) const
    00103     {
    00104       if (!parent) return 0;
    00105       return parent->GenericPrec (hreg, nreg, id);
    00106     }
    00107     CS_CONST_METHOD virtual const csHandlerID *GenericSucc (
    00108       csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg,
    00109       csEventID id) const
    00110     {
    00111       if (!parent) return 0;
    00112       return parent->GenericSucc (hreg, nreg, id);
    00113     }
    00114     CS_CONST_METHOD virtual const csHandlerID *InstancePrec (
    00115       csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg,
    00116       csEventID id) const
    00117     {
    00118       if (!parent) return 0;
    00119       return parent->InstancePrec (hreg, nreg, id);
    00120     }
    00121     CS_CONST_METHOD virtual const csHandlerID *InstanceSucc(
    00122       csRef<iEventHandlerRegistry>& hreg, csRef<iEventNameRegistry>& nreg,
    00123       csEventID id) const
    00124     {
    00125       if (!parent) return 0;
    00126       return parent->InstanceSucc (hreg, nreg, id);
    00127     }
    00128   };
    00129   csRef<EventHandlerImpl> eventh;
    00130
    00140   csBaseEventHandler ();
    00141
    00142 public:
    00144   virtual ~csBaseEventHandler ();
    00145
    00150   void Initialize (iObjectRegistry *registry);
    00151
    00160   bool RegisterQueue (iObjectRegistry* registry, csEventID name);
    00161
    00171   bool RegisterQueue (iObjectRegistry* registry, csEventID names[]);
    00172
    00180   bool RegisterQueue (iEventQueue* queue, csEventID name);
    00189   bool RegisterQueue (iEventQueue* queue, csEventID names[]);
    00194   void UnregisterQueue ();
    00195
    00196 protected:
    00217   virtual bool HandleEvent (iEvent &event);
    00218
    00224   CS_CONST_METHOD virtual const char *GenericName() const
    00225   { return "application"; }
    00226
    00227   CS_CONST_METHOD virtual csHandlerID GenericID (
    00228     csRef<iEventHandlerRegistry>& reg) const
    00229   {
    00230     return reg->GetGenericID (GenericName ());
    00231   }
    00232
    00237   CS_CONST_METHOD virtual const csHandlerID *GenericPrec (
    00238     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00239     csEventID) const
    00240   { return 0; }
    00241
    00246   CS_CONST_METHOD virtual const csHandlerID *GenericSucc (
    00247     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00248     csEventID) const
    00249   { return 0; }
    00250
    00255   CS_CONST_METHOD virtual const csHandlerID *InstancePrec (
    00256     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00257     csEventID) const
    00258   { return 0; }
    00259
    00264   CS_CONST_METHOD virtual const csHandlerID *InstanceSucc (
    00265     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00266     csEventID) const
    00267   { return 0; }
    00268
    00270   virtual bool OnJoystickMove (iEvent &event);
    00271
    00276   virtual bool OnJoystickDown (iEvent &event);
    00277
    00279   virtual bool OnJoystickUp (iEvent &event);
    00280
    00282   virtual bool OnKeyboard (iEvent &event);
    00283
    00285   virtual bool OnMouseMove (iEvent &event);
    00286
    00288   virtual bool OnMouseDown (iEvent &event);
    00289
    00291   virtual bool OnMouseUp (iEvent &event);
    00292
    00294   virtual bool OnMouseClick (iEvent &event);
    00295
    00300   virtual bool OnMouseDoubleClick (iEvent &event);
    00301
    00308   virtual bool OnUnhandledEvent (iEvent &event);
    00309
    00311   virtual void Frame ();
    00312
    00314   virtual void PreProcessFrame ();
    00315
    00317   virtual void ProcessFrame ();
    00318
    00320   virtual void PostProcessFrame ();
    00321
    00323   virtual void FinishFrame ();
    00324 };
    00325
    00328 #endif //__CS_CSBASEEVENTH_H__