CrystalSpace

Public API Reference

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__

Generated for Crystal Space 1.2.1 by doxygen 1.5.3