## 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[]);
    00190
    00191 protected:
    00212   virtual bool HandleEvent (iEvent &event);
    00213
    00219   CS_CONST_METHOD virtual const char *GenericName() const
    00220   { return "application"; }
    00221
    00222   CS_CONST_METHOD virtual csHandlerID GenericID (
    00223     csRef<iEventHandlerRegistry>& reg) const
    00224   {
    00225     return reg->GetGenericID (GenericName ());
    00226   }
    00227
    00232   CS_CONST_METHOD virtual const csHandlerID *GenericPrec (
    00233     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00234     csEventID) const
    00235   { return 0; }
    00236
    00241   CS_CONST_METHOD virtual const csHandlerID *GenericSucc (
    00242     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00243     csEventID) const
    00244   { return 0; }
    00245
    00250   CS_CONST_METHOD virtual const csHandlerID *InstancePrec (
    00251     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00252     csEventID) const
    00253   { return 0; }
    00254
    00259   CS_CONST_METHOD virtual const csHandlerID *InstanceSucc (
    00260     csRef<iEventHandlerRegistry>&, csRef<iEventNameRegistry>&,
    00261     csEventID) const
    00262   { return 0; }
    00263
    00265   virtual bool OnJoystickMove (iEvent &event);
    00266
    00271   virtual bool OnJoystickDown (iEvent &event);
    00272
    00274   virtual bool OnJoystickUp (iEvent &event);
    00275
    00277   virtual bool OnKeyboard (iEvent &event);
    00278
    00280   virtual bool OnMouseMove (iEvent &event);
    00281
    00283   virtual bool OnMouseDown (iEvent &event);
    00284
    00286   virtual bool OnMouseUp (iEvent &event);
    00287
    00289   virtual bool OnMouseClick (iEvent &event);
    00290
    00295   virtual bool OnMouseDoubleClick (iEvent &event);
    00296
    00303   virtual bool OnUnhandledEvent (iEvent &event);
    00304
    00306   virtual void Frame ();
    00307
    00309   virtual void PreProcessFrame ();
    00310
    00312   virtual void ProcessFrame ();
    00313
    00315   virtual void PostProcessFrame ();
    00316
    00318   virtual void FinishFrame ();
    00319 };
    00320
    00323 #endif //__CS_CSBASEEVENTH_H__