Files
Leviathan/Client/Game/engine/Ui/Controls/KUITabControl.h
T
2026-06-01 12:46:52 +02:00

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);
};