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