#pragma once //#include "KUIControl.h" #include "KUIControlButton.h" #include "KPrimitiveSprite.h" namespace { enum TAB_STATE { KTS_INVALID = -1, KTS_NORMAL = 0, KTS_ON_MOUSE, KTS_SELECTED, KTS_TOTAL, }; } class KUITabItemControlBase : public KUIControl { public: KUITabItemControlBase() : m_dwState(KTS_INVALID) { } /// Called when tab's select value is changed. DWORD GetState() { return m_dwState; } virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); virtual void OnStateChange(DWORD dwState) { m_dwState = dwState; } virtual void OnChangeCaptionNotify(); protected: DWORD m_dwState; }; /// Tab Base class KUITabControlBase: public KUIControl { public: KUITabControlBase(); virtual ~KUITabControlBase(); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void OnChangeCaptionNotify(); void AddTabItem(LPCSTR lpszCaption, LPCSTR lpszTip, LPCSTR lpszAniName = NULL, float fSizeCorr = 1.0f, const char * pStrColor=NULL ); void ChangeTabItem(int nIndex, LPCSTR lpszCaption, LPCSTR lpszTip, float fSizeCorr = 1.0f); void RemoveTabItem(int nIndex); void RemoveTabAllItem(); DWORD GetSelectedItem(){ return m_dwSelectedItem; } virtual void SetSelectedItem(DWORD dwSelected, bool bUpdate = false ); /// 탭 비활성 void SetDisableTab( int nIndex ); void SetEnableTab( int nIndex ); /// 고정폭 탭 // MJ 2004/12/20 void SetTabProperty( int nGap, bool bDynamicTab = true, int nTabItemCount = -1 ); // 2010.06.14. bintitle. 탭컨트롤에 속한 버튼컨트롤의 AniName 변경. virtual void SetTabItemAniName( int nIndex, const char * szName ); protected: virtual KUITabItemControlBase* _createItem(LPCSTR lpszCaption, LPCSTR lpszTip, int nIndex, LPCSTR lpszAniName, float fCorrSize) = 0; virtual void _initControl(); /// TabItem 이 추가되거나, 삭제, 변경 되었을때 virtual void _onTabItemChange(){} KRect _getNextArea(int nIndex); void _reArrangItems(); protected: int m_nGap; ///< Default false bool m_bDynamicTab; ///< 고정폭 탭 // MJ 2003/12/20 int m_nTabItemCount; DWORD m_dwSelectedItem; ///< Current selected Tab Button's index std::vector m_vtTabItemList; }; class KUISimpleTabControl : public KUITabControlBase { public: KUISimpleTabControl(); virtual ~KUISimpleTabControl(); class KUISimpleTabItemControl : public KUITabItemControlBase { public: KUISimpleTabItemControl(); virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); virtual void OnStateChange(DWORD dwState, bool bUpdate = false ); virtual void UpdateBack(); // 2010.06.15. bintitle. 탭컨트롤 Sprite 변경. void ChangeTabName( const char* szName ); private: virtual void _initControl(); void _disableAllSprite(); private: KSpritePrimitive m_SelectSprite[KTS_TOTAL][3]; int m_nTop; }; public: bool ChangeTabName( int nIndex, const char* szName, const char* szTag = NULL ); virtual void SetSelectedItem(DWORD dwSelected, bool bUpdate = false ); protected: virtual void _initControl(); virtual KUITabItemControlBase* _createItem(LPCSTR lpszCaption, LPCSTR lpszTip, int nIndex, LPCSTR lpszAniName, float fCorrSize); virtual void _onTabItemChange(); void _setBackSpriteRect(const KRect& rcRect); protected: KSpritePrimitive m_TabBackSprite[3]; }; /// KUIDetatilTabControl class KUIDetailTabControl : public KUITabControlBase { public: KUIDetailTabControl(); virtual ~KUIDetailTabControl(); class KUIDetailTabItemControl : public KUITabItemControlBase { public: KUIDetailTabItemControl(); virtual void OnStateChange(DWORD dwState); private: virtual void _initControl(); void _disableAllSprite(); private: KSpritePrimitive m_SelectSprite[KTS_TOTAL]; }; protected: virtual KUITabItemControlBase* _createItem(LPCSTR lpszCaption, LPCSTR lpszTip, int nIndex, LPCSTR lpszAniName, float fCorrSize); }; ///* //// 2010. 10. 15 KUIControlTabSheet 는 한 개 이상의 KUIControlTabButton 을 갖는다. // KUIControlTabSheet 는 KUIControlTabButton의 리스트들만 가지고 있을뿐 아무 기능이 없다. ////////////////////// TabHead Class /////////////////////// class KUITabControlSheet; class KUITabControlHeadBase : public KUIControl { public: enum KBUTTON_STATE_EX { KTAB_NORMAL_S = 0, //_S 는 현재 선택된 상태의 HEAD KTAB_ACTIVATE_S, KTAB_DOWN_S, KTAB_DISABLE_S, KTAB_NORMAL_O, //_O 는 현재 선택되지 않은 상태의 HEAD KTAB_ACTIVATE_O, KTAB_DOWN_O, KTAB_DISABLE_O, KTAB_HEAD_MAX = 8, KTAB_SET_NUM = 4, }; KUITabControlHeadBase(){}; virtual ~KUITabControlHeadBase(){}; protected: bool m_bLeftButton; DWORD m_dwHeadState; bool m_bIsInit; public: DWORD GetState() { return m_dwState; } void OnStateChange(DWORD dwState) { m_dwState = dwState; } void RegisterSheet( KUITabControlSheet* sheet) { m_pSheet = sheet; } int GetButtonWidth(); void SetHeadState(DWORD dwState) { m_dwHeadState = dwState; } //2010. 11. 23 - marine => aniname 에서 tabsheet 이름을 분리, 초기화할때 해줘야함. void DivideSheetName(); void SetMyNum(DWORD dwMyNum) { m_dwMyNum = dwMyNum; } DWORD GetMyNum() { return m_dwMyNum; } void SetSheetID(std::string sheetID) { m_strSheet = sheetID; } std::string GetSheetID() { std::string strRet = ""; if(m_strSheet.empty()) strRet = ""; else strRet = m_strSheet; return strRet; } std::string GetFontColorSel() {return m_strFontColorSel;} std::string GetFontColorNoSel() {return m_strFontColorNoSel;} void SetInitFont(); void SetColorNoneSel( std::string strColor ) { m_strFontColorNoSel = strColor; } void SetColorSel( std::string strColor ) { m_strFontColorSel = strColor; } protected: DWORD OnMouseMessageEx(DWORD dwMessage, int x, int y, DWORD dwRet); DWORD m_dwState; DWORD m_dwMyNum; // 2010. 11. 21 - marine TabSheet에 몇번째로 등록 된건지 알기위함 KUITabControlSheet* m_pSheet; std::string m_strSheet; std::string m_strNUI; std::string m_strFontColorSel; std::string m_strFontColorNoSel; }; class KUITabControlHead : public KUITabControlHeadBase { // 원래 버튼에 있던 멤버 함수, 변수 public: KUITabControlHead(); virtual ~KUITabControlHead(){}; /// Called when tab's select value is changed. virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); virtual DWORD OnKeyMessage(DWORD dwMessage, DWORD dwKeyCode); virtual void Render(KViewportObject * pViewport, bool isFront = false ); virtual void OnChangeCaptionNotify(); virtual void UpdateBack(); protected: virtual void _initControl(); virtual void _destroyControl(); void _initHorizontal(); void _initVertical(); KSpritePrimitive m_HeadSprite[KTAB_HEAD_MAX][3]; }; class KUITabControlSimpleHead : public KUITabControlHeadBase { public: KUITabControlSimpleHead(); virtual ~KUITabControlSimpleHead(){}; virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); virtual DWORD OnKeyMessage(DWORD dwMessage, DWORD dwKeyCode); virtual void Render(KViewportObject * pViewport, bool isFront = false ); virtual void UpdateBack(); //virtual void Create(KUIWND_CREATE_ARG& CREATE_ARG); const bool GetLeftButton() { return m_bLeftButton; } protected: virtual void _destroyControl(); virtual void _initControl(); KSpritePrimitive m_HeadSprite[KTAB_HEAD_MAX]; }; ////////////////////// TabSheet Class /////////////////////// class KUITabControlSheet : public KUITabControlBase { public: KUITabControlSheet(); virtual ~KUITabControlSheet(); //void AddTabHead(LPCSTR lpszCaption, LPCSTR lpszTip, LPCSTR lpszAniName = NULL, float fSizeCorr = 1.0f, const char * pStrColor=NULL ); void RegistHead( KUITabControlHeadBase *pHead ) { if(pHead){ m_vtTabHeadList.push_back(pHead); }} int GetHeadNum() { return m_vtTabHeadList.size(); } virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); void SetFontColor( bool bSelected, int iHeadindex); void SetSelectHead(int nIndex); protected: virtual void _initControl(); virtual void _onTabItemChange(); void _setBackSpriteRect( const KRect& rcRect ); protected: KSpritePrimitive m_TabBackSprite[3]; std::vector m_vtTabHeadList; protected: virtual KUITabItemControlBase* _createItem(LPCSTR lpszCaption, LPCSTR lpszTip, int nIndex, LPCSTR lpszAniName, float fCorrSize); KUITabControlHead* CreateHead(LPCSTR lpszCaption, LPCSTR lpszTip, int nIndex, LPCSTR lpszAniName, float fCorrSize); };