00001
00015 #ifndef CUI_MULTIPLESTATEBUTTON_H
00016 #define CUI_MULTIPLESTATEBUTTON_H
00017
00018 #include "UI_Lib.h"
00019 #include "UI_types.h"
00020 #include "CUI_Button.h"
00021
00023 typedef void (*actionfunc_state)( int );
00024
00026 typedef IUI_Shader *IUI_Shader_p;
00027
00029
00041 class GLGUI_ENTRY CUI_MultipleStateButton : public CUI_Button
00042 {
00043 public:
00045 CUI_MultipleStateButton( CUI_UI *ui = NULL, float x = 0, float y = 0, float x2 = 1, float y2 = 1,
00046 CUI_Frame *parent = NULL, IUI_Shader *shader = NULL,
00047 IUI_Shader *cursor = NULL, CUI_CoordSys *coordsys = NULL,
00048
00049 char *text = NULL, IUI_Font *font = NULL, float textscale = 0.8,
00050 IUI_Border *border = NULL,
00051
00052 IUI_Shader *hover = NULL, IUI_Shader *disable = NULL,
00053 IUI_Shader *click = NULL,
00054
00055 int numberofstates = 1, int initialstate = 0,
00056 actionfunc_state stateaction = NULL
00057 );
00059
00060 virtual ~CUI_MultipleStateButton();
00061
00063 virtual bool Render( double dtime, IUI_Renderer *renderer );
00064
00066
00071 virtual unsigned int AddState( IUI_Shader *shader = NULL, IUI_Shader *hover = NULL,
00072 IUI_Shader *disable = NULL, IUI_Shader *click = NULL );
00073
00075 virtual unsigned int GetState( void );
00076
00078
00083 virtual bool SetShader( IUI_Shader *shader, int state = 0 );
00084
00086
00087 virtual bool SetHoverShader( IUI_Shader *shader, int state = 0 );
00089
00090 virtual bool SetDisableShader( IUI_Shader *shader, int state =0 );
00092
00093 virtual bool SetClickShader( IUI_Shader *shader, int state = 0 );
00094
00096
00099 virtual bool Click( int &id, int &numparam, void **param );
00100
00102
00104 virtual void DeleteParam( void *param ) { delete [] (int*) param; };
00105
00107 virtual bool Reset( )
00108 { m_currentstate = 0; return false; }
00109
00111 virtual bool SetState( unsigned short state )
00112 { m_currentstate = state; return false; }
00113
00115 virtual unsigned short GetNumStates( )
00116 { return m_numstates; }
00117
00118 protected:
00119
00121 unsigned short m_numstates;
00123 unsigned int m_currentstate;
00124
00126 IUI_Shader **m_defaultShaders;
00128 IUI_Shader **m_hoverShaders;
00130 IUI_Shader **m_disableShaders;
00132 IUI_Shader **m_clickShaders;
00133
00134 };
00135
00136 #endif