00001 00015 #ifndef CUI_UI_H 00016 #define CUI_UI_H 00017 00018 #include "UI_Lib.h" 00019 #include "UI_types.h" 00020 #include "CUI_Registry.h" 00021 #include "CUI_Frame.h" 00022 #include "CUI_ErrorHandler.h" 00023 00024 #include <map> 00025 #include <string> 00026 #include <list> 00027 00029 #define UI_LBUTTONDOWN 0x0001 00030 00031 #define UI_RBUTTONDOWN 0x0002 00032 00033 #define UI_MBUTTONDOWN 0x0004 00034 00035 #define UI_KEY_ENTER 0x0100 00036 #define UI_KEY_ESCAPE 0x0101 00037 #define UI_KEY_PAGEUP 0x0102 00038 #define UI_KEY_PAGEDOWN 0x0103 00039 #define UI_KEY_SPACE 0x0104 00040 #define UI_KEY_LEFT 0x0105 00041 #define UI_KEY_UP 0x0106 00042 #define UI_KEY_RIGHT 0x0107 00043 #define UI_KEY_DOWN 0x0108 00044 #define UI_KEY_TAB 0x0109 00045 00046 00048 00059 class GLGUI_ENTRY CUI_UI 00060 { 00061 public: 00063 typedef bool (*callbackfunc)(int id, int numparam, void *param); 00064 00065 00067 CUI_UI( int xres = 0, int yres = 0, char *file = NULL ); 00068 00070 00071 virtual ~CUI_UI(); 00072 00074 00086 virtual bool UpdateCursor( float x, float y, unsigned short state ); 00087 00089 00092 virtual bool ProcessKey( unsigned long key ); 00093 00095 00099 virtual bool SetResolution( unsigned int x, unsigned int y ); 00100 00102 00105 virtual bool SaveUI( char *filename ); 00106 00107 #ifndef NO_XML 00108 00109 00111 virtual bool LoadUI( char *filename ); 00112 00114 00118 virtual bool LoadUI( char *docBytes, unsigned long byteCount, const char *bufferName ); 00119 #endif // NO_XML 00120 00122 00123 virtual bool Render( double dtime ); 00124 00126 00127 virtual bool UpdateStatus( ); 00128 00130 virtual bool SetRenderer( IUI_Renderer *renderer ); 00131 00133 virtual IUI_Renderer *GetRenderer(); 00134 00136 virtual const CUI_Registry *GetRegistry( void ); 00137 00139 virtual bool SetErrorHandler( CUI_ErrorHandler *errh ) 00140 { m_errorHandler = errh; return false; } 00141 00143 virtual const CUI_ErrorHandler *GetErrorHandler( void ) 00144 { return m_errorHandler; } 00145 00147 virtual void ReportError( CUI_ErrorHandler::errorType errtype, char *message ) 00148 { if( m_errorHandler ) m_errorHandler->ProcessError( errtype, message ); } 00149 00151 virtual bool Select( CUI_Frame *frame ); 00152 00154 virtual bool SelectNext( void ); 00155 00157 virtual bool SelectPrevious( void ); 00158 00160 virtual bool AddRootFrame( const char *name, CUI_Frame *frame, callbackfunc callback = NULL ); 00161 00163 00166 virtual bool SetActiveRootFrame( const char *name ); 00167 00169 virtual bool SetCallbackFunc( const char *rootname, callbackfunc callback = NULL ); 00170 00172 virtual bool ActivateFrame( CUI_Frame *frame, bool active ); 00173 00175 virtual bool EnableFrame( CUI_Frame *frame, bool enable ); 00176 00178 virtual CUI_Registry::FRAMEVECTOR *FlushRegistryFrames( CUI_Registry::FRAMEVECTOR *vec = NULL ) 00179 { return m_registry->FlushFrames( vec ); } 00180 00182 virtual CUI_Registry::SHADERVECTOR *FlushRegistryShaders( CUI_Registry::SHADERVECTOR *vec = NULL ) 00183 { return m_registry->FlushShaders( vec ); } 00184 00186 virtual CUI_Registry::FONTVECTOR *FlushRegistryFonts( CUI_Registry::FONTVECTOR *vec = NULL ) 00187 { return m_registry->FlushFonts( vec ); } 00188 00190 virtual CUI_Registry::COORDSYSVECTOR *FlushRegistryCoordSys( CUI_Registry::COORDSYSVECTOR *vec = NULL ) 00191 { return m_registry->FlushCoordSys( vec ); } 00192 00194 virtual CUI_Registry::BORDERVECTOR *FlushRegistryBorders( CUI_Registry::BORDERVECTOR *vec = NULL ) 00195 { return m_registry->FlushBorders( vec ); } 00196 00198 virtual bool AddFrame( CUI_Frame *frame ); 00199 00201 virtual CUI_Frame *GetFrame( unsigned long id ) 00202 { return m_registry->GetFrame( id ); } 00203 00205 virtual bool AddShader( const char *name, IUI_Shader *shader ) 00206 { return m_registry->AddShader( name, shader ); } 00207 00209 virtual IUI_Shader *GetShader( const char *name ) 00210 { return m_registry->GetShader( name ); } 00211 00213 virtual bool AddFont( const char *name, IUI_Font *font ) 00214 { return m_registry->AddFont( name, font ); } 00215 00217 virtual IUI_Font *GetFont( const char *name ) 00218 { return m_registry->GetFont( name ); } 00219 00221 virtual bool AddCoordSys( const char *name, CUI_CoordSys *coordsys ) 00222 { return m_registry->AddCoordSys( name, coordsys ); } 00223 00225 virtual CUI_CoordSys *GetCoordSys( const char *name ) 00226 { return m_registry->GetCoordSys( name ); } 00227 00229 virtual bool AddBorder( const char *name, IUI_Border *border ) 00230 { return m_registry->AddBorder( name, border); } 00231 00233 virtual IUI_Border *GetBorder( const char *name ) 00234 { return m_registry->GetBorder( name ); } 00235 00237 virtual bool CallbackFunc( int id, int numparam, void *param ); 00238 00240 virtual CUI_Frame *GetDefaultToolTipFrame() 00241 { return m_toolTipFrame; } 00242 00244 virtual bool SetDefaultToolTipFrame( CUI_Frame *frame ) 00245 { m_toolTipFrame = frame; return false; } 00246 00248 virtual bool SetFrameAnimation( bool anim ) 00249 { m_frameAnimation = anim; return false; } 00250 00252 virtual bool GetFrameAnimation( ) 00253 { return m_frameAnimation; } 00254 00256 virtual void Delete( unsigned char *ptr ) 00257 { delete []ptr; } 00258 00259 protected: 00260 typedef std::map<std::string, CUI_Frame*, std::less<std::string> > FRAMEMAP; 00261 typedef std::list<CUI_Frame*> FRAMELIST; 00262 00264 FRAMEMAP m_frames; 00265 00267 CUI_Frame* m_activeframe; 00268 00270 typedef std::list<callbackfunc> CALLBACKLIST; 00271 00273 CALLBACKLIST m_callbackList; 00274 00276 callbackfunc m_activecallback; 00277 00279 00280 FRAMELIST m_clickableFrames; 00281 00283 unsigned int m_selected; 00284 00286 CUI_Frame *m_selected_p; 00287 00289 CUI_Frame* m_hoverframe; 00291 CUI_Frame* m_clickframe; 00292 00294 float m_cursorx; 00296 float m_cursory; 00297 00299 float m_lastcursorx; 00301 float m_lastcursory; 00302 00304 unsigned int m_resolutionx; 00306 unsigned int m_resolutiony; 00307 00309 unsigned short m_cursorstate; 00310 00312 IUI_Renderer *m_renderer; 00313 00315 CUI_Registry *m_registry; 00316 00318 CUI_ErrorHandler *m_errorHandler; 00319 00321 IUI_Shader *m_defaultShader; 00322 00324 IUI_Border *m_defaultBorder; 00325 00327 CUI_CoordSys *m_defaultCoordSys; 00328 00330 IUI_Font *m_defaultFont; 00331 00333 CUI_Frame *m_toolTipFrame; 00334 00336 bool m_displayToolTip; 00337 00339 bool m_newToolTip; 00340 00342 bool m_frameAnimation; 00343 00344 }; 00345 00346 #endif