## Public API Reference

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

- File List
- File Members

# csutil/eventnames.h

Go to the documentation of this file.

    00001 /*
    00002   Crystal Space 3D engine: Event and module naming interface
    00003   (C) 2005 by Adam D. Bradley <artdodge@cs.bu.edu>
    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_CSUTIL_EVENTNAMES_H__
    00021 #define __CS_CSUTIL_EVENTNAMES_H__
    00022
    00023 #include "cssysdef.h"
    00024 #include "csextern.h"
    00025 #include "csutil/scf_implementation.h"
    00026 #include "iutil/eventnames.h"
    00027 #include "iutil/objreg.h"
    00028 #include "csutil/hash.h"
    00029 #include "csutil/strset.h"
    00030 #include "csutil/csstring.h"
    00031
    00039 #ifndef CSHASHCOMPUTER_EVENTENGINE_IDS
    00040 #define CSHASHCOMPUTER_EVENTENGINE_IDS
    00041 template<>
    00042 class csHashComputer<const csEventID>
    00043 {
    00044 public:
    00045   static uint ComputeHash (const csEventID eid)
    00046   {
    00047     return (uint) eid;
    00048   }
    00049 };
    00050 #endif // CSHASHCOMPUTER_EVENTENGINE_IDS
    00051
    00052
    00063 class CS_CRYSTALSPACE_EXPORT csEventNameRegistry :
    00064   public scfImplementation1<csEventNameRegistry, iEventNameRegistry>
    00065 {
    00066  private:
    00072   csEventNameRegistry (iObjectRegistry *);
    00073  public:
    00074   ~csEventNameRegistry ();
    00075
    00078   CS_CONST_METHOD csEventID GetID (const char* name);
    00079
    00080   CS_CONST_METHOD const char * GetString (const csEventID id);
    00081   static CS_CONST_METHOD const char * GetString (iObjectRegistry *object_reg,
    00082                                                  csEventID id);
    00083   CS_CONST_METHOD csEventID GetParentID (const csEventID id);
    00084   CS_CONST_METHOD bool IsImmediateChildOf (const csEventID child,
    00085                                            const csEventID parent);
    00086   CS_CONST_METHOD bool IsKindOf (const csEventID child,
    00087                                  const csEventID parent);
    00094   static csRef<iEventNameRegistry> GetRegistry(iObjectRegistry *object_reg);
    00095
    00096   static inline csEventID GetID (iEventNameRegistry *name_reg,
    00097                                  const char* name)
    00098   {
    00099     if (name_reg != 0)
    00100       return name_reg->GetID (name);
    00101     else
    00102       return CS_EVENT_INVALID;
    00103   }
    00104   static inline csEventID GetID (iObjectRegistry *object_reg,
    00105                                  const char* name)
    00106   {
    00107     csRef<iEventNameRegistry> nameRegistry =
    00108       csQueryRegistry<iEventNameRegistry> (object_reg);
    00109     CS_ASSERT (nameRegistry);
    00110     return nameRegistry->GetID (name);
    00111   };
    00112
    00113   static inline bool IsKindOf (iEventNameRegistry *name_reg,
    00114                                csEventID name1, csEventID name2)
    00115   {
    00116     if (name_reg != 0)
    00117       return name_reg->IsKindOf(name1, name2);
    00118     else
    00119       return false;
    00120   }
    00121   static inline bool IsKindOf (iObjectRegistry *object_reg,
    00122                                csEventID name1, csEventID name2)
    00123   {
    00124     csRef<iEventNameRegistry> nameRegistry =
    00125       csQueryRegistry<iEventNameRegistry> (object_reg);
    00126     CS_ASSERT(nameRegistry);
    00127     return nameRegistry->IsKindOf (name1, name2);
    00128   };
    00129
    00130  private:
    00131   iObjectRegistry *object_reg;
    00132   csHash<csEventID,csEventID> parentage;
    00133   csStringSet names;
    00134 };
    00135
    00136
    00153 #define csevAllEvents(reg)            \
    00154   (csEventNameRegistry::GetID((reg), ""))
    00155
    00161 #define csevFrame(reg)                \
    00162   (csEventNameRegistry::GetID((reg), "crystalspace.frame"))
    00163
    00167 #define csevInput(reg)                \
    00168   (csEventNameRegistry::GetID((reg), "crystalspace.input"))
    00169
    00174 #define csevKeyboardEvent(reg)        \
    00175   (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard"))
    00176
    00178 #define csevKeyboardDown(reg)         \
    00179   (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard.down"))
    00180
    00182 #define csevKeyboardUp(reg)           \
    00183   (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard.up"))
    00184
    00186 #define csevMouseEvent(reg)           \
    00187   (csEventNameRegistry::GetID((reg), "crystalspace.input.mouse"))
    00188
    00189 static inline CS_CONST_METHOD csEventID csevMouse (
    00190   iEventNameRegistry *name_reg, uint x)
    00191 {
    00192   csString name ("crystalspace.input.mouse.");
    00193   name.Append (x);
    00194   return name_reg->GetID(name);
    00195 }
    00196
    00197 static inline CS_CONST_METHOD csEventID csevMouse(
    00198   iObjectRegistry *object_reg, uint x)
    00199 {
    00200   return csevMouse(csEventNameRegistry::GetRegistry(object_reg), x);
    00201 }
    00202
    00203 static inline CS_CONST_METHOD csEventID csevMouseOp(
    00204   iEventNameRegistry *name_reg, uint x, const csString &y)
    00205 {
    00206   csString name ("crystalspace.input.mouse.");
    00207   name.Append (x);
    00208   name.Append (".");
    00209   name.Append (y);
    00210   return name_reg->GetID(name);
    00211 }
    00212
    00213 static inline CS_CONST_METHOD csEventID csevMouseOp(
    00214   iObjectRegistry *object_reg, uint x, const csString &y)
    00215 {
    00216   return csevMouseOp(csEventNameRegistry::GetRegistry(object_reg), x, y);
    00217 }
    00218
    00223 #define csevMouseButton(reg,x)        \
    00224   csevMouseOp ((reg), (x), "button")
    00225
    00229 #define csevMouseDown(reg,x)          \
    00230   csevMouseOp ((reg), (x), "button.down")
    00231
    00235 #define csevMouseUp(reg,x)            \
    00236   csevMouseOp ((reg), (x), "button.up")
    00237
    00241 #define csevMouseClick(reg,x)         \
    00242   csevMouseOp ((reg), (x), "button.click")
    00243
    00247 #define csevMouseDoubleClick(reg,x)   \
    00248   csevMouseOp((reg), (x), "button.doubleclick")
    00249
    00253 #define csevMouseMove(reg,x)          \
    00254   csevMouseOp((reg), (x), "move")
    00255
    00260 #define csevJoystickEvent(reg)        \
    00261   (csEventNameRegistry::GetID((reg), "crystalspace.input.joystick"))
    00262
    00263 static inline CS_CONST_METHOD csEventID csevJoystick (
    00264   iEventNameRegistry *name_reg, uint x)
    00265 {
    00266   char buffer[64];
    00267   cs_snprintf(buffer, sizeof (buffer) - 1, "crystalspace.input.joystick.%d",
    00268     x);
    00269   return name_reg->GetID(buffer);
    00270 }
    00271
    00272 static inline CS_CONST_METHOD csEventID csevJoystick (
    00273   iObjectRegistry *object_reg, uint x)
    00274 {
    00275   return csevJoystick(csEventNameRegistry::GetRegistry(object_reg), x);
    00276 }
    00277
    00278 static inline CS_CONST_METHOD csEventID csevJoystickOp (
    00279   iEventNameRegistry *name_reg, uint x, const csString &y)
    00280 {
    00281   csString name ("crystalspace.input.joystick.");
    00282   name.Append (x);
    00283   name.Append (".");
    00284   name.Append (y);
    00285   return name_reg->GetID(name);
    00286 }
    00287
    00288 static inline CS_CONST_METHOD csEventID csevJoystickOp (
    00289   iObjectRegistry *object_reg, uint x, const csString &y)
    00290 {
    00291   return csevJoystickOp (csEventNameRegistry::GetRegistry(object_reg), x, y);
    00292 }
    00293
    00299 #define csevJoystickButton(reg,x)     \
    00300   csevJoystickOp((reg),(x),"button")
    00301
    00303 #define csevJoystickDown(reg,x)       \
    00304   csevJoystickOp((reg),(x),"button.down")
    00305
    00307 #define csevJoystickUp(reg,x)         \
    00308   csevJoystickOp((reg),(x),"button.up")
    00309
    00311 #define csevJoystickMove(reg,x)       \
    00312   csevJoystickOp((reg),(x),"move")
    00313
    00315 #define CS_IS_KEYBOARD_EVENT(reg,e)   \
    00316   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevKeyboardEvent(reg))
    00317
    00319 #define CS_IS_MOUSE_EVENT(reg,e)      \
    00320   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseEvent(reg))
    00321
    00323 #define CS_IS_MOUSE_BUTTON_EVENT(reg,e,n) \
    00324   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseButton((reg),n))
    00325
    00327 #define CS_IS_MOUSE_MOVE_EVENT(reg,e,n) \
    00328   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseMove((reg),n))
    00329
    00331 #define CS_IS_JOYSTICK_EVENT(reg,e)   \
    00332   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickEvent(reg))
    00333
    00335 #define CS_IS_JOYSTICK_BUTTON_EVENT(reg,e,n) \
    00336   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickButton((reg),n))
    00337
    00339 #define CS_IS_JOYSTICK_MOVE_EVENT(reg,e,n) \
    00340   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickMove((reg),n))
    00341
    00343 #define CS_IS_INPUT_EVENT(reg,e)      \
    00344   csEventNameRegistry::IsKindOf((reg), ((e).Name), csevInput(reg))
    00345
    00354 #define csevQuit(reg)                 \
    00355   (csEventNameRegistry::GetID((reg), "crystalspace.application.quit"))
    00356
    00361 #define csevFocusChanged(reg)         \
    00362   (csEventNameRegistry::GetID((reg), "crystalspace.application.focus"))
    00363
    00369 #define csevFocusGained(reg)          \
    00370   (csEventNameRegistry::GetID((reg), "crystalspace.application.focus.gained"))
    00371
    00377 #define csevFocusLost(reg)            \
    00378   (csEventNameRegistry::GetID((reg), "crystalspace.application.focus.lost"))
    00379
    00390 #define csevSystemOpen(reg)           \
    00391   (csEventNameRegistry::GetID((reg), "crystalspace.application.open"))
    00392
    00397 #define csevSystemClose(reg)          \
    00398   (csEventNameRegistry::GetID((reg), "crystalspace.application.close"))
    00399
    00400 struct iGraphics2D;
    00401
    00402 CS_CRYSTALSPACE_EXPORT
    00403 CS_CONST_METHOD csEventID csevCanvasOp (csRef<iEventNameRegistry>& reg,
    00404                                         const iGraphics2D* g2d,
    00405                                         const csString &y);
    00406 static inline CS_CONST_METHOD csEventID csevCanvasOp (
    00407   iObjectRegistry *object_reg, const iGraphics2D* g2d, const csString &y)
    00408 {
    00409   csRef<iEventNameRegistry> name_reg = csEventNameRegistry::GetRegistry (object_reg);
    00410   return csevCanvasOp(name_reg, g2d, y);
    00411 }
    00412
    00413
    00421 #define csevCanvasResize(reg, g2d)      \
    00422   csevCanvasOp((reg), (g2d), "resize")
    00423
    00434 #define csevCanvasClose(reg, g2d)             \
    00435   csevCanvasOp((reg), (g2d), "close")
    00436
    00442 #define csevCanvasHidden(reg, g2d)      \
    00443   csevCanvasOp((reg), (g2d), "hidden")
    00444
    00449 #define csevCanvasExposed(reg, g2d)     \
    00450   csevCanvasOp((reg), (g2d), "exposed")
    00451
    00461 #define csevCommandLineHelp(reg)      \
    00462   (csEventNameRegistry::GetID((reg), "crystalspace.application.commandlinehelp"))
    00463
    00471 CS_CRYSTALSPACE_EXPORT csEventID csevPreProcess(iObjectRegistry *reg);
    00472 CS_CRYSTALSPACE_EXPORT csEventID csevPreProcess(iEventNameRegistry *reg);
    00473
    00478 CS_CRYSTALSPACE_EXPORT csEventID csevProcess(iObjectRegistry *reg);
    00479 CS_CRYSTALSPACE_EXPORT csEventID csevProcess(iEventNameRegistry *reg);
    00480
    00488 CS_CRYSTALSPACE_EXPORT csEventID csevPostProcess(iObjectRegistry *reg);
    00489 CS_CRYSTALSPACE_EXPORT csEventID csevPostProcess(iEventNameRegistry *reg);
    00490
    00498 CS_CRYSTALSPACE_EXPORT csEventID csevFinalProcess(iObjectRegistry *reg);
    00499 CS_CRYSTALSPACE_EXPORT csEventID csevFinalProcess(iEventNameRegistry *reg);
    00500
    00503 #define CS_DECLARE_SYSTEM_EVENT_SHORTCUTS                       \
    00504   csEventID SystemOpen;                                         \
    00505   csEventID SystemClose
    00506
    00507 #define CS_DECLARE_FRAME_EVENT_SHORTCUTS                        \
    00508   csEventID Frame;                                              \
    00509   csEventID PreProcess;                                         \
    00510   csEventID Process;                                            \
    00511   csEventID PostProcess;                                        \
    00512   csEventID FinalProcess
    00513
    00514 #define CS_DECLARE_INPUT_EVENT_SHORTCUTS                        \
    00515   csEventID KeyboardEvent;                                      \
    00516   csEventID MouseEvent;                                         \
    00517   csEventID JoystickEvent
    00518
    00524 #define CS_DECLARE_EVENT_SHORTCUTS                              \
    00525   CS_DECLARE_SYSTEM_EVENT_SHORTCUTS;                            \
    00526   CS_DECLARE_FRAME_EVENT_SHORTCUTS;                             \
    00527   CS_DECLARE_INPUT_EVENT_SHORTCUTS
    00528
    00529 #define CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS(object_reg) do {   \
    00530     SystemOpen = csevSystemOpen ((object_reg));                 \
    00531     SystemClose = csevSystemClose ((object_reg));               \
    00532   } while (0)
    00533
    00534 #define CS_INITIALIZE_FRAME_EVENT_SHORTCUTS(object_reg) do {    \
    00535     Frame = csevFrame ((object_reg));                           \
    00536     PreProcess = csevPreProcess ((object_reg));                 \
    00537     Process = csevProcess ((object_reg));                       \
    00538     PostProcess = csevPostProcess ((object_reg));               \
    00539     FinalProcess = csevFinalProcess ((object_reg));             \
    00540   } while (0)
    00541
    00542 #define CS_INITIALIZE_INPUT_EVENT_SHORTCUTS(object_reg) do {    \
    00543     KeyboardEvent = csevKeyboardEvent ((object_reg));           \
    00544     MouseEvent = csevMouseEvent ((object_reg));                 \
    00545     JoystickEvent = csevJoystickEvent ((object_reg));           \
    00546   } while (0)
    00547
    00553 #define CS_INITIALIZE_EVENT_SHORTCUTS(object_reg) do {  \
    00554     CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS (object_reg);  \
    00555     CS_INITIALIZE_FRAME_EVENT_SHORTCUTS (object_reg);   \
    00556     CS_INITIALIZE_INPUT_EVENT_SHORTCUTS (object_reg);   \
    00557   } while (0)
    00558
    00561 #endif // __CS_CSUTIL_EVENTNAMES_H__