CrystalSpace

Public API Reference

iutil/event.h

Go to the documentation of this file.
00001 /*
00002     Event system related interfaces
00003     Written by Andrew Zabolotny <[email protected]>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 */
00019 
00020 #ifndef __CS_IUTIL_EVENT_H__
00021 #define __CS_IUTIL_EVENT_H__
00022 
00023 #include "cssysdef.h"
00024 
00025 #include "csutil/scf_interface.h"
00026 #include "csutil/csunicode.h"
00027 #include "csutil/ref.h"
00028 #include "iutil/eventnames.h"
00029 #include "iutil/evdefs.h"
00030 
00031 
00039 
00040 #define CS_MAX_MOUSE_COUNT      4
00042 #define CS_MAX_MOUSE_AXES       8
00044 #define CS_MAX_MOUSE_BUTTONS    10
00046 #define CS_MAX_JOYSTICK_COUNT   16
00048 #define CS_MAX_JOYSTICK_BUTTONS 10
00050 #define CS_MAX_JOYSTICK_AXES    8
00051 /* Architecturally, AXES can go as high as 32 (limited by the uint32 change mask). */
00052 
00053 struct iEventHandler;
00054 struct iEvent;
00055 
00060 struct iEventAttributeIterator : public virtual iBase
00061 {
00062   SCF_INTERFACE(iEventAttributeIterator, 3,0,0);
00064   virtual bool HasNext() = 0;
00066   virtual const char* Next() = 0;
00068   virtual void Reset() = 0;
00069 };
00070 
00071 
00072 // Event data structs. Defined outside of iEvent to allow SWIG to
00073 // handle the nested structs and union. Does not break any code.
00074 
00128 struct csKeyEventData
00129 {
00131   csKeyEventType eventType;
00133   utf32_char codeRaw;
00135   utf32_char codeCooked;
00137   csKeyModifiers modifiers;
00139   bool autoRepeat;
00141   csKeyCharType charType;
00142 };
00143 
00144 
00152 struct csMouseEventData
00153 {
00155   int x;
00157   int y;
00159   int32 axes[CS_MAX_MOUSE_AXES];
00161   uint numAxes;
00166   uint Button;
00168   uint32 Modifiers;
00169 };
00170 
00178 struct csJoystickEventData
00179 {
00181   uint number;
00183   int32 axes[CS_MAX_JOYSTICK_AXES];
00185   uint numAxes;
00187   uint32 axesChanged;
00189   uint Button;
00191   uint32 Modifiers;
00192 };
00193 
00201 struct csCommandEventData
00202 {
00204   uint Code;
00206   intptr_t Info;
00207 };
00208 
00212 enum csEventError
00213 {
00215   csEventErrNone,
00220   csEventErrLossy,
00222   csEventErrNotFound,
00224 
00228   csEventErrMismatchInt,
00229   csEventErrMismatchUInt,
00230   csEventErrMismatchFloat,
00231   csEventErrMismatchBuffer,
00232   csEventErrMismatchEvent,
00233   csEventErrMismatchIBase,
00235 
00238   csEventErrUhOhUnknown
00239 };
00240 
00242 enum csEventAttributeType
00243 {
00247   csEventAttrUnknown,
00249   csEventAttrInt,
00251   csEventAttrUInt,
00253   csEventAttrFloat,
00255   csEventAttrDatabuffer,
00257   csEventAttrEvent,
00259   csEventAttriBase
00260 };
00261 
00277 struct iEvent : public virtual iBase
00278 {
00279   SCF_INTERFACE(iEvent, 2,0,0);
00281   csEventID Name;
00283   virtual const csEventID GetName() = 0;
00285   csTicks Time;                 
00287   bool Broadcast;
00288 
00290 
00293   virtual bool Add (const char *name, int8 v) = 0;
00294   virtual bool Add (const char *name, uint8 v) = 0;
00295   virtual bool Add (const char *name, int16 v) = 0;
00296   virtual bool Add (const char *name, uint16 v) = 0;
00297   virtual bool Add (const char *name, int32 v) = 0;
00298   virtual bool Add (const char *name, uint32 v) = 0;
00299   virtual bool Add (const char *name, int64 v) = 0;
00300   virtual bool Add (const char *name, uint64 v) = 0;
00301   virtual bool Add (const char *name, float v) = 0;
00302   virtual bool Add (const char *name, double v) = 0;
00303   virtual bool Add (const char *name, const char *v) = 0;
00304   virtual bool Add (const char *name, const void *v, size_t size) = 0;
00305   virtual bool Add (const char *name, bool v) = 0;
00306   virtual bool Add (const char *name, iEvent* v) = 0;
00307   virtual bool Add (const char *name, iBase* v) = 0;
00309 
00311 
00314   virtual csEventError Retrieve (const char *name, int8 &v) const = 0;
00315   virtual csEventError Retrieve (const char *name, uint8 &v) const = 0;
00316   virtual csEventError Retrieve (const char *name, int16 &v) const = 0;
00317   virtual csEventError Retrieve (const char *name, uint16 &v) const = 0;
00318   virtual csEventError Retrieve (const char *name, int32 &v) const = 0;
00319   virtual csEventError Retrieve (const char *name, uint32 &v) const = 0;
00320   virtual csEventError Retrieve (const char *name, int64 &v) const = 0;
00321   virtual csEventError Retrieve (const char *name, uint64 &v) const = 0;
00322   virtual csEventError Retrieve (const char *name, float &v) const = 0;
00323   virtual csEventError Retrieve (const char *name, double &v) const = 0;
00324   virtual csEventError Retrieve (const char *name, const char *&v) const = 0;
00325   virtual csEventError Retrieve (const char *name, const void *&v, 
00326     size_t& size) const = 0;
00327   virtual csEventError Retrieve (const char *name, bool &v) const = 0;
00328   virtual csEventError Retrieve (const char *name, csRef<iEvent> &v) const = 0;
00329   virtual csEventError Retrieve (const char *name, csRef<iBase> &v) const = 0;
00331 
00333   virtual bool AttributeExists (const char* name) = 0;
00335   virtual csEventAttributeType GetAttributeType (const char* name) = 0;
00336 
00338   virtual bool Remove (const char *name) = 0;
00340   virtual bool RemoveAll() = 0;
00341 
00343   virtual csRef<iEventAttributeIterator> GetAttributeIterator() = 0;
00344 };
00345 
00392 struct iEventPlug : public virtual iBase
00393 {
00394   SCF_INTERFACE(iEventPlug, 2,0,0);
00403   virtual unsigned GetPotentiallyConflictingEvents () = 0;
00404 
00413   virtual unsigned QueryEventPriority (unsigned iType) = 0;
00414 
00422   virtual void EnableEvents (unsigned /*iType*/, bool /*iEnable*/) {}
00423 };
00424 
00439 struct iEventOutlet : public virtual iBase
00440 {
00441   SCF_INTERFACE(iEventOutlet, 2,0,0);
00450   virtual csPtr<iEvent> CreateEvent () = 0;
00451 
00463   virtual void Post (iEvent*) = 0;
00464 
00478   virtual void Key (utf32_char codeRaw, utf32_char codeCooked, bool iDown,
00479       bool autorep = false) = 0;
00480 
00488   virtual void Mouse (int iButton, bool iDown, int x, int y) = 0;
00489 
00498   virtual void Joystick(uint iNumber, int iButton, bool iDown, 
00499     const int32 *axes, uint numAxes) = 0;
00500 
00510   virtual void Broadcast (csEventID iName, intptr_t iInfo = 0) = 0;
00511 
00527   virtual void ImmediateBroadcast (csEventID iName, intptr_t iInfo) = 0;
00528 };
00529 
00530 
00538 struct iEventCord : public virtual iBase
00539 {
00540   SCF_INTERFACE(iEventCord, 2,0,0);
00548   virtual int Insert (iEventHandler*, int priority) = 0;
00549 
00553   virtual void Remove (iEventHandler*) = 0;
00554 
00559   virtual bool GetPass () const = 0;
00560 
00565   virtual void SetPass (bool) = 0;
00566 
00568   virtual csEventID GetName() const = 0;
00569 };
00570 
00573 #endif // __CS_IUTIL_EVENT_H__

Generated for Crystal Space by doxygen 1.4.7