310 lines
8.4 KiB
C++
310 lines
8.4 KiB
C++
#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<KUITabItemControlBase *> 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<KUITabControlHeadBase *> 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);
|
|
};
|