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 00038 #ifndef CSHASHCOMPUTER_EVENTENGINE_IDS 00039 #define CSHASHCOMPUTER_EVENTENGINE_IDS 00040 CS_SPECIALIZE_TEMPLATE 00041 class csHashComputer<const csEventID> 00042 { 00043 public: 00044 static uint ComputeHash (const csEventID eid) 00045 { 00046 return (uint) eid; 00047 } 00048 }; 00049 #endif // CSHASHCOMPUTER_EVENTENGINE_IDS 00050 00051 00062 class CS_CRYSTALSPACE_EXPORT csEventNameRegistry : 00063 public scfImplementation1<csEventNameRegistry, iEventNameRegistry> 00064 { 00065 private: 00071 csEventNameRegistry (iObjectRegistry *); 00072 public: 00073 ~csEventNameRegistry (); 00074 00077 CS_CONST_METHOD csEventID GetID (const csString &name); 00078 CS_CONST_METHOD const char * GetString (const csEventID id); 00079 static CS_CONST_METHOD const char * GetString (iObjectRegistry *object_reg, 00080 csEventID id); 00081 CS_CONST_METHOD csEventID GetParentID (const csEventID id); 00082 CS_CONST_METHOD bool IsImmediateChildOf (const csEventID child, 00083 const csEventID parent); 00084 CS_CONST_METHOD bool IsKindOf (const csEventID child, 00085 const csEventID parent); 00092 static csRef<iEventNameRegistry> GetRegistry(iObjectRegistry *object_reg); 00093 00094 static inline csEventID GetID (iEventNameRegistry *name_reg, 00095 const csString & name) 00096 { 00097 if (name_reg != 0) 00098 return name_reg->GetID (name); 00099 else 00100 return CS_EVENT_INVALID; 00101 } 00102 static inline csEventID GetID (iObjectRegistry *object_reg, 00103 const csString & name) 00104 { 00105 csRef<iEventNameRegistry> nameRegistry = 00106 csQueryRegistry<iEventNameRegistry> (object_reg); 00107 CS_ASSERT (nameRegistry); 00108 return nameRegistry->GetID (name); 00109 }; 00110 00111 static inline bool IsKindOf (iEventNameRegistry *name_reg, 00112 csEventID name1, csEventID name2) 00113 { 00114 if (name_reg != 0) 00115 return name_reg->IsKindOf(name1, name2); 00116 else 00117 return false; 00118 } 00119 static inline bool IsKindOf (iObjectRegistry *object_reg, 00120 csEventID name1, csEventID name2) 00121 { 00122 csRef<iEventNameRegistry> nameRegistry = 00123 csQueryRegistry<iEventNameRegistry> (object_reg); 00124 CS_ASSERT(nameRegistry); 00125 return nameRegistry->IsKindOf (name1, name2); 00126 }; 00127 00128 private: 00129 iObjectRegistry *object_reg; 00130 csHash<csEventID,csEventID> parentage; 00131 csStringSet names; 00132 }; 00133 00134 00151 #define csevAllEvents(reg) \ 00152 (csEventNameRegistry::GetID((reg), "")) 00153 00159 #define csevFrame(reg) \ 00160 (csEventNameRegistry::GetID((reg), "crystalspace.frame")) 00161 00165 #define csevInput(reg) \ 00166 (csEventNameRegistry::GetID((reg), "crystalspace.input")) 00167 00172 #define csevKeyboardEvent(reg) \ 00173 (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard")) 00174 00176 #define csevKeyboardDown(reg) \ 00177 (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard.down")) 00178 00180 #define csevKeyboardUp(reg) \ 00181 (csEventNameRegistry::GetID((reg), "crystalspace.input.keyboard.up")) 00182 00184 #define csevMouseEvent(reg) \ 00185 (csEventNameRegistry::GetID((reg), "crystalspace.input.mouse")) 00186 00187 static inline CS_CONST_METHOD csEventID csevMouse ( 00188 iEventNameRegistry *name_reg, uint x) 00189 { 00190 csString name ("crystalspace.input.mouse."); 00191 name.Append (x); 00192 return name_reg->GetID(name); 00193 } 00194 00195 static inline CS_CONST_METHOD csEventID csevMouse( 00196 iObjectRegistry *object_reg, uint x) 00197 { 00198 return csevMouse(csEventNameRegistry::GetRegistry(object_reg), x); 00199 } 00200 00201 static inline CS_CONST_METHOD csEventID csevMouseOp( 00202 iEventNameRegistry *name_reg, uint x, const csString &y) 00203 { 00204 csString name ("crystalspace.input.mouse."); 00205 name.Append (x); 00206 name.Append ("."); 00207 name.Append (y); 00208 return name_reg->GetID(name); 00209 } 00210 00211 static inline CS_CONST_METHOD csEventID csevMouseOp( 00212 iObjectRegistry *object_reg, uint x, const csString &y) 00213 { 00214 return csevMouseOp(csEventNameRegistry::GetRegistry(object_reg), x, y); 00215 } 00216 00221 #define csevMouseButton(reg,x) \ 00222 csevMouseOp ((reg), (x), "button") 00223 00227 #define csevMouseDown(reg,x) \ 00228 csevMouseOp ((reg), (x), "button.down") 00229 00233 #define csevMouseUp(reg,x) \ 00234 csevMouseOp ((reg), (x), "button.up") 00235 00239 #define csevMouseClick(reg,x) \ 00240 csevMouseOp ((reg), (x), "button.click") 00241 00245 #define csevMouseDoubleClick(reg,x) \ 00246 csevMouseOp((reg), (x), "button.doubleclick") 00247 00251 #define csevMouseMove(reg,x) \ 00252 csevMouseOp((reg), (x), "move") 00253 00258 #define csevJoystickEvent(reg) \ 00259 (csEventNameRegistry::GetID((reg), "crystalspace.input.joystick")) 00260 00261 static inline CS_CONST_METHOD csEventID csevJoystick ( 00262 iEventNameRegistry *name_reg, uint x) 00263 { 00264 char buffer[64]; 00265 cs_snprintf(buffer, sizeof (buffer) - 1, "crystalspace.input.joystick.%d", 00266 x); 00267 return name_reg->GetID(buffer); 00268 } 00269 00270 static inline CS_CONST_METHOD csEventID csevJoystick ( 00271 iObjectRegistry *object_reg, uint x) 00272 { 00273 return csevJoystick(csEventNameRegistry::GetRegistry(object_reg), x); 00274 } 00275 00276 static inline CS_CONST_METHOD csEventID csevJoystickOp ( 00277 iEventNameRegistry *name_reg, uint x, const csString &y) 00278 { 00279 csString name ("crystalspace.input.joystick."); 00280 name.Append (x); 00281 name.Append ("."); 00282 name.Append (y); 00283 return name_reg->GetID(name); 00284 } 00285 00286 static inline CS_CONST_METHOD csEventID csevJoystickOp ( 00287 iObjectRegistry *object_reg, uint x, const csString &y) 00288 { 00289 return csevJoystickOp (csEventNameRegistry::GetRegistry(object_reg), x, y); 00290 } 00291 00297 #define csevJoystickButton(reg,x) \ 00298 csevJoystickOp((reg),(x),"button") 00299 00301 #define csevJoystickDown(reg,x) \ 00302 csevJoystickOp((reg),(x),"button.down") 00303 00305 #define csevJoystickUp(reg,x) \ 00306 csevJoystickOp((reg),(x),"button.up") 00307 00309 #define csevJoystickMove(reg,x) \ 00310 csevJoystickOp((reg),(x),"move") 00311 00313 #define CS_IS_KEYBOARD_EVENT(reg,e) \ 00314 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevKeyboardEvent(reg)) 00315 00317 #define CS_IS_MOUSE_EVENT(reg,e) \ 00318 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseEvent(reg)) 00319 00321 #define CS_IS_MOUSE_BUTTON_EVENT(reg,e,n) \ 00322 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseButton((reg),n)) 00323 00325 #define CS_IS_MOUSE_MOVE_EVENT(reg,e,n) \ 00326 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevMouseMove((reg),n)) 00327 00329 #define CS_IS_JOYSTICK_EVENT(reg,e) \ 00330 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickEvent(reg)) 00331 00333 #define CS_IS_JOYSTICK_BUTTON_EVENT(reg,e,n) \ 00334 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickButton((reg),n)) 00335 00337 #define CS_IS_JOYSTICK_MOVE_EVENT(reg,e,n) \ 00338 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevJoystickMove((reg),n)) 00339 00341 #define CS_IS_INPUT_EVENT(reg,e) \ 00342 csEventNameRegistry::IsKindOf((reg), ((e).Name), csevInput(reg)) 00343 00352 #define csevQuit(reg) \ 00353 (csEventNameRegistry::GetID((reg), "crystalspace.application.quit")) 00354 00359 #define csevFocusChanged(reg) \ 00360 (csEventNameRegistry::GetID((reg), "crystalspace.application.focus")) 00361 00367 #define csevFocusGained(reg) \ 00368 (csEventNameRegistry::GetID((reg), "crystalspace.application.focus.gained")) 00369 00375 #define csevFocusLost(reg) \ 00376 (csEventNameRegistry::GetID((reg), "crystalspace.application.focus.lost")) 00377 00388 #define csevSystemOpen(reg) \ 00389 (csEventNameRegistry::GetID((reg), "crystalspace.application.open")) 00390 00395 #define csevSystemClose(reg) \ 00396 (csEventNameRegistry::GetID((reg), "crystalspace.application.close")) 00397 00398 struct iGraphics2D; 00399 00400 CS_CONST_METHOD csEventID csevCanvasOp (csRef<iEventNameRegistry>& reg, 00401 const iGraphics2D* g2d, 00402 const csString &y); 00403 static inline CS_CONST_METHOD csEventID csevCanvasOp ( 00404 iObjectRegistry *object_reg, const iGraphics2D* g2d, const csString &y) 00405 { 00406 csRef<iEventNameRegistry> name_reg = csEventNameRegistry::GetRegistry (object_reg); 00407 return csevCanvasOp(name_reg, g2d, y); 00408 } 00409 00410 00418 #define csevCanvasResize(reg, g2d) \ 00419 csevCanvasOp((reg), (g2d), "resize") 00420 00431 #define csevCanvasClose(reg, g2d) \ 00432 csevCanvasOp((reg), (g2d), "close") 00433 00439 #define csevCanvasHidden(reg, g2d) \ 00440 csevCanvasOp((reg), (g2d), "hidden") 00441 00446 #define csevCanvasExposed(reg, g2d) \ 00447 csevCanvasOp((reg), (g2d), "exposed") 00448 00458 #define csevCommandLineHelp(reg) \ 00459 (csEventNameRegistry::GetID((reg), "crystalspace.application.commandlinehelp")) 00460 00468 csEventID csevPreProcess(iObjectRegistry *reg); 00469 csEventID csevPreProcess(iEventNameRegistry *reg); 00470 00475 csEventID csevProcess(iObjectRegistry *reg); 00476 csEventID csevProcess(iEventNameRegistry *reg); 00477 00485 csEventID csevPostProcess(iObjectRegistry *reg); 00486 csEventID csevPostProcess(iEventNameRegistry *reg); 00487 00495 csEventID csevFinalProcess(iObjectRegistry *reg); 00496 csEventID csevFinalProcess(iEventNameRegistry *reg); 00497 00500 #define CS_DECLARE_SYSTEM_EVENT_SHORTCUTS \ 00501 csEventID SystemOpen; \ 00502 csEventID SystemClose 00503 00504 #define CS_DECLARE_FRAME_EVENT_SHORTCUTS \ 00505 csEventID Frame; \ 00506 csEventID PreProcess; \ 00507 csEventID Process; \ 00508 csEventID PostProcess; \ 00509 csEventID FinalProcess 00510 00511 #define CS_DECLARE_INPUT_EVENT_SHORTCUTS \ 00512 csEventID KeyboardEvent; \ 00513 csEventID MouseEvent; \ 00514 csEventID JoystickEvent 00515 00521 #define CS_DECLARE_EVENT_SHORTCUTS \ 00522 CS_DECLARE_SYSTEM_EVENT_SHORTCUTS; \ 00523 CS_DECLARE_FRAME_EVENT_SHORTCUTS; \ 00524 CS_DECLARE_INPUT_EVENT_SHORTCUTS 00525 00526 #define CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS(object_reg) do { \ 00527 SystemOpen = csevSystemOpen ((object_reg)); \ 00528 SystemClose = csevSystemClose ((object_reg)); \ 00529 } while (0) 00530 00531 #define CS_INITIALIZE_FRAME_EVENT_SHORTCUTS(object_reg) do { \ 00532 Frame = csevFrame ((object_reg)); \ 00533 PreProcess = csevPreProcess ((object_reg)); \ 00534 Process = csevProcess ((object_reg)); \ 00535 PostProcess = csevPostProcess ((object_reg)); \ 00536 FinalProcess = csevFinalProcess ((object_reg)); \ 00537 } while (0) 00538 00539 #define CS_INITIALIZE_INPUT_EVENT_SHORTCUTS(object_reg) do { \ 00540 KeyboardEvent = csevKeyboardEvent ((object_reg)); \ 00541 MouseEvent = csevMouseEvent ((object_reg)); \ 00542 JoystickEvent = csevJoystickEvent ((object_reg)); \ 00543 } while (0) 00544 00550 #define CS_INITIALIZE_EVENT_SHORTCUTS(object_reg) do { \ 00551 CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS (object_reg); \ 00552 CS_INITIALIZE_FRAME_EVENT_SHORTCUTS (object_reg); \ 00553 CS_INITIALIZE_INPUT_EVENT_SHORTCUTS (object_reg); \ 00554 } while (0) 00555 00558 #endif // __CS_CSUTIL_EVENTNAMES_H__
Generated for Crystal Space by doxygen 1.4.6