iutil/event.h
Go to the documentation of this file.00001 /* 00002 Event system related interfaces 00003 Written by Andrew Zabolotny <bit@eltech.ru> 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 32 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, 00261 csEventAttrRawPtr 00262 }; 00263 00279 struct iEvent : public virtual iBase 00280 { 00281 SCF_INTERFACE(iEvent, 2,1,0); 00283 csEventID Name; 00285 virtual const csEventID GetName() = 0; 00287 csTicks Time; 00289 bool Broadcast; 00290 00292 00295 virtual bool Add (const char *name, int8 v) = 0; 00296 virtual bool Add (const char *name, uint8 v) = 0; 00297 virtual bool Add (const char *name, int16 v) = 0; 00298 virtual bool Add (const char *name, uint16 v) = 0; 00299 virtual bool Add (const char *name, int32 v) = 0; 00300 virtual bool Add (const char *name, uint32 v) = 0; 00301 virtual bool Add (const char *name, int64 v) = 0; 00302 virtual bool Add (const char *name, uint64 v) = 0; 00303 virtual bool Add (const char *name, float v) = 0; 00304 virtual bool Add (const char *name, double v) = 0; 00305 virtual bool Add (const char *name, const char *v) = 0; 00306 virtual bool Add (const char *name, const void *v, size_t size) = 0; 00307 virtual bool Add (const char *name, bool v) = 0; 00308 virtual bool Add (const char *name, iEvent* v) = 0; 00309 virtual bool Add (const char *name, iBase* v) = 0; 00310 virtual bool Add (const char *name, void* v) = 0; 00312 00314 00317 virtual csEventError Retrieve (const char *name, int8 &v) const = 0; 00318 virtual csEventError Retrieve (const char *name, uint8 &v) const = 0; 00319 virtual csEventError Retrieve (const char *name, int16 &v) const = 0; 00320 virtual csEventError Retrieve (const char *name, uint16 &v) const = 0; 00321 virtual csEventError Retrieve (const char *name, int32 &v) const = 0; 00322 virtual csEventError Retrieve (const char *name, uint32 &v) const = 0; 00323 virtual csEventError Retrieve (const char *name, int64 &v) const = 0; 00324 virtual csEventError Retrieve (const char *name, uint64 &v) const = 0; 00325 virtual csEventError Retrieve (const char *name, float &v) const = 0; 00326 virtual csEventError Retrieve (const char *name, double &v) const = 0; 00327 virtual csEventError Retrieve (const char *name, const char *&v) const = 0; 00328 virtual csEventError Retrieve (const char *name, const void *&v, 00329 size_t& size) const = 0; 00330 virtual csEventError Retrieve (const char *name, bool &v) const = 0; 00331 virtual csEventError Retrieve (const char *name, csRef<iEvent> &v) const = 0; 00332 virtual csEventError Retrieve (const char *name, csRef<iBase> &v) const = 0; 00333 virtual csEventError Retrieve (const char *name, void* &v) const = 0; 00335 00337 virtual bool AttributeExists (const char* name) = 0; 00339 virtual csEventAttributeType GetAttributeType (const char* name) = 0; 00340 00342 virtual bool Remove (const char *name) = 0; 00344 virtual bool RemoveAll() = 0; 00345 00347 virtual csRef<iEventAttributeIterator> GetAttributeIterator() = 0; 00348 }; 00349 00396 struct iEventPlug : public virtual iBase 00397 { 00398 SCF_INTERFACE(iEventPlug, 2,0,0); 00407 virtual unsigned GetPotentiallyConflictingEvents () = 0; 00408 00417 virtual unsigned QueryEventPriority (unsigned iType) = 0; 00418 00426 virtual void EnableEvents (unsigned /*iType*/, bool /*iEnable*/) {} 00427 }; 00428 00443 struct iEventOutlet : public virtual iBase 00444 { 00445 SCF_INTERFACE(iEventOutlet, 2,0,0); 00454 virtual csPtr<iEvent> CreateEvent () = 0; 00455 00467 virtual void Post (iEvent*) = 0; 00468 00482 virtual void Key (utf32_char codeRaw, utf32_char codeCooked, bool iDown, 00483 bool autorep = false) = 0; 00484 00492 virtual void Mouse (int iButton, bool iDown, int x, int y) = 0; 00493 00502 virtual void Joystick(uint iNumber, int iButton, bool iDown, 00503 const int32 *axes, uint numAxes) = 0; 00504 00514 virtual void Broadcast (csEventID iName, intptr_t iInfo = 0) = 0; 00515 00531 virtual void ImmediateBroadcast (csEventID iName, intptr_t iInfo) = 0; 00532 }; 00533 00534 00542 struct iEventCord : public virtual iBase 00543 { 00544 SCF_INTERFACE(iEventCord, 2,0,0); 00552 virtual int Insert (iEventHandler*, int priority) = 0; 00553 00557 virtual void Remove (iEventHandler*) = 0; 00558 00563 virtual bool GetPass () const = 0; 00564 00569 virtual void SetPass (bool) = 0; 00570 00572 virtual csEventID GetName() const = 0; 00573 }; 00574 00577 #endif // __CS_IUTIL_EVENT_H__
Generated for Crystal Space 2.0 by doxygen 1.6.1
