183 lines
13 KiB
C++
183 lines
13 KiB
C++
#pragma once
|
|
//#include "KUIControl.h"
|
|
#include "KUIControlListItem.h"
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------
|
|
// 아래 define은 뒤에 있는 내용을 모두 쓰기가 너무 길어서 그냥 정의한 것입니다.
|
|
// 각 아이템들을 new로 메모리에 할당하는 내용입니다.
|
|
//----------------------------------------------------------------------------------------------------------------------------------------
|
|
#define LPITEM KUIControlListItem::Item*
|
|
#define _STRITEM(caption) new KUIControlStringItem::StrItem(caption)
|
|
#define _ICONSTRITEM(ani, caption) new KUIControlIconNStringItem::IconStrItem(ani, caption)
|
|
#define _COMMUNITYITEM(OnLineIconRender, Online, JopID, LV, Name) new KUIControlCommunityItem::CommunityItem(OnLineIconRender, Online, JopID, LV, Name)
|
|
//----------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
/** 주석중에 (내부에서만 사용) 이 있는 내용들은 내부에서만 사용하기를 권장하는 것들입니다.
|
|
상황에 따라서 꼭 내부에서만 사용하지 않아도 무관합니다. */
|
|
class KUIControlList : public KUIControl
|
|
{
|
|
protected:
|
|
KUIControlList(void);
|
|
virtual ~KUIControlList(void);
|
|
|
|
public:
|
|
DWORD GetListSize() { return m_nListSize; } ///< 리스트에 들어있는 아이템의 수
|
|
int GetIndex() { return m_nCrrIndex; } ///< 현재 선택되있는 리스트의 인덱스
|
|
int GetStartIndex() { return m_nStartIndex; } ///< 현재 랜더링되는 시작 인덱스 (스크롤 되있으면 0번 인덱스가 시작인덱스가 아니기 때문에 알아보는 함수)
|
|
int GetListShowSize() { return m_nRenderCtrCnt; } ///< 지금 랜더링되고 있는 아이템의 수
|
|
bool IsHorizon() { return m_bHorizon; } ///< 리스트가 가로로 생성되는지 세로로 생성되는지
|
|
std::string GetListItemCtrName() { return m_strItemCtrID; } ///< 현재 리스트에 생성되있는 아이템의 종류를 스트링으로 리턴
|
|
LPITEM GetListItem(int index); ///< index에 해당하는 아이템에 대한 데이터를 리턴
|
|
void UpdateListControl(); ///< 리스트를 업데이트 하는 함수
|
|
|
|
KRect ResizeList( int nShowItemCnt, int nItemGap=0 ); ///< 리스트의 사이즈를 다시 설정하는 함수
|
|
void ChangeOutLine( const char* lpAniName, int nIndex=-1 ); ///< 각 아이템의 테두리에 랜더링해줄 컨트롤을 변경하는 함수
|
|
void SetMouseMsgHandling( bool bView ) { m_bMouseMsgHandling = bView; } ///< 리스트가 마우스 메시지를 받을 것인지를 설정하는 함수
|
|
void SetAbleItem( int nRealindex, bool bAble=true ); ///< 해당 아이템을 활성화 할 것인지 비활성화 할 것인지 세팅하는 함수 ? 비활성화 하면 반투명된다
|
|
|
|
virtual void ShowOutLine( bool bShow ); ///< 아이템의 테두리를 나타내는 컨트롤을 보여줄 것인지 옵션
|
|
|
|
protected:
|
|
virtual void PumpUpMessage(LPCSTR lpszControlID, DWORD dwMessage, DWORD lParam, DWORD wParam);
|
|
virtual DWORD OnKeyMessage(DWORD dwMessage, DWORD dwKeyCode);
|
|
virtual DWORD OnMouseMessage( DWORD dwMessage, int x, int y );
|
|
|
|
virtual void _initControl();
|
|
|
|
virtual int SetCrrIndex(int nIndex); ///< 해당 인덱스를 클릭한 것으로 표시한다
|
|
virtual bool ResetItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ); ///< 해당 인덱스의 데이터를 change
|
|
virtual int AddItem( LPITEM pItem, const char* lpOutLine=NULL ); ///< 아이템을 추가 - PushBack
|
|
virtual int InsertItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ); ///< 해당 인덱스로 아이템 추가
|
|
virtual bool DeleteItem( int nIndex ); ///< vector에서 완벽하게 삭제하는 것 (메모리도 delete한다) 해당 인덱스의 아이템을 완전히 삭제
|
|
virtual void ClearItem(); ///< 리스트의 모든 아이템 삭제
|
|
virtual void SetItemGap( int nGap=0 ); ///< 각 아이템들의 간격 값 세팅
|
|
virtual void SetItemShowCnt( int nCnt=1 ); ///< 리스트에 몇 개의 아이템을 보여줄 것인지 세팅
|
|
virtual void AbleResizeItem( bool bAble ); ///< 리스트를 리사이즈 할 것인지 옵션
|
|
virtual void SetScroll( bool bHas ); ///< 스크롤을 사용할 것인지 옵션
|
|
|
|
bool IsRenderCtrIndex( int nIndex ); ///< 인덱스에 위치한 아이템 컨트롤들이 랜더링 걸리고 있는지 체크하는 함수
|
|
|
|
|
|
private:
|
|
virtual void CreateBaseCtr();
|
|
/** ★주의★ vector에서 완벽하게 제거하는 것이 아니다. 메모리는 delete하지만 vector에 NULL을 넣는다.
|
|
내부에서만 사용하는 것을 권장하나 리스트 중간에 빈데이터도 넣어야 한다면 사용해도 무관 */
|
|
virtual bool RemoveItem( int nIndex );
|
|
|
|
void CreateItemControl(); ///< 아이템에 필요한 컨트롤을 생성하는 함수 ? 아이템을 생성하는 것은 아니다 (내부에서만 사용)
|
|
void CreateScrollcontrol(); ///< 리스트의 스크롤을 생성하는 함수 (내부에서만 사용)
|
|
void CreateSelectcontrol(); ///< 리스트에 마우스 클릭으로 선택했을 때 보여줄 컨트롤을 생성하는 함수 (내부에서만 사용)
|
|
void CreateOvercontrol(); ///< 리스트에 마우스가 오버되었을 때 보여줄 컨트롤을 생성하는 함수 (내부에서만 사용)
|
|
void CreateOutLinecontrol( const char* lpID, KRect rt ); ///< 아이템의 테두리에 보여줄 컨트롤을 생성하는 함수 (내부에서만 사용)
|
|
void CreateDisableControl( const char* lpID, KRect rt ); ///< 아이템을 비활성화 했을 때 위에 반투명으로 보여줄 컨트롤 생성 (내부에서만 사용)
|
|
void RemoveItemCtr( int nCnt ); ///< 아이템에 해당하는 모든 컨트롤을 삭제하는 함수 ? 리스트에서 관리하는 컨트롤만 삭제 (내부에서만 사용)
|
|
void AddItemCtr( int nCnt ); ///< 아이템에 대항하는 컨트롤을 생성하는 함수 ? 리스트에서 관리하는 컨트롤만 추가 (내부에서만 사용)
|
|
void ClearItemControl( int nRenderIndex=-1 ); ///< 리스트의 아이템을 이루는 컨트롤을 삭제하는 함수 ? 리스트에서 관리하는 컨트롤만 삭제 (내부에서만 사용)
|
|
|
|
int GetMouseOverIndex( int x, int y ); ///< x, y 좌표로 마우스가 오버되있는 인덱스를 얻어오는 함수 (내부에서만 사용)
|
|
void ClickControlUpdate(); ///< 클릭했을 때 보여주는 컨트롤의 업데이트 (내부에서만 사용)
|
|
void OverControlUpdate( int nRenderIndex ); ///< 마우스가 오버됐을 때 보여줄 컨트롤의 업데이트 (내부에서만 사용)
|
|
int GetRenderIndex( int nIndex ); ///< 리스트에서의 인덱스를 넣으면 현재 랜더링되는 리스트 상의 가상 인덱스를 얻어주는 함수 (내부에서만 사용)
|
|
KRect ZoomInOutRect( KRect& rRt, int x, int y ); ///< 현재 리스트 컨트롤의 위치에서 x, y 값으로 오프셋된 컨트롤의 사이즈를 얻어주는 함수
|
|
void SetScrollRange(); ///< 스크롤 정보 세팅 (내부에서만 사용)
|
|
void ResizeInItemctrset( KRect& rRc, int nIndex );///< 해당 인덱스 위치의 아이템 크기를 변경하는 함수 (내부에서만 사용)
|
|
//void ClearItemControl( int nRenderIndex=-1 );
|
|
|
|
protected:
|
|
int m_nStartIndex; ///< 랜더링이 걸리는 아이템중 제일 앞에 것의 인덱스
|
|
int m_nCrrIndex; ///< 현재 활성화 되있는 인덱스(아이템 사이즈 기준)
|
|
int m_nListSize; ///< 리스트에 있는 아이템의 수
|
|
|
|
int m_nRenderCtrCnt; ///< 보여줄 아이템의 갯수(초과시 스크롤 생성)
|
|
int m_nItemGap; ///< 아이템 하나의 사이즈
|
|
bool m_bHorizon; ///< 일반적인 모습의 가로 형태인지
|
|
|
|
bool m_bHasScroll; ///< 스크롤을 넣을 것인지 옵션
|
|
bool m_bMouseMsgHandling; ///< 마우스가 오버되던가 클릭되었을때의 메세지들을 처리해서 오버,클릭 컨트롤을 보여줄 것인지 옵션
|
|
// bool m_bAllShowList; //등록되있는 아이템을 리스트의 사이즈를 넘어도 항상 출력해줄 것인지 옵션(당연 리스트의 사이즈도 변경되야함)
|
|
bool m_bMouseDrag; ///< 아이템을 드래그로 교환 가능하게 할 것인지 옵션
|
|
int m_nOldClickIndex; ///< 드래그를 하기 위해 이전에 클릭한 아이템의 인덱스
|
|
bool m_bResizeItem; ///< 아이템의 요소들이 서로 다른 사이즈로 설정되있는지 옵션
|
|
bool m_bShowOutLine; ///< 각 아이템들의 테두리를 렌더링 걸것인지 옵션
|
|
|
|
std::string m_strItemCtrID;
|
|
std::vector<LPITEM> m_ItemPtList; ///< 리스트의 데이터 모음
|
|
std::vector<const char*> m_ItemOutLineList; ///< 각 아이템의 테두리에 대한 애니메이션 리소스
|
|
|
|
KUIControl* m_pSelect; ///< 클릭했을때 현재 인덱스 표시하는 컨트롤
|
|
KUIControl* m_pOver; ///< 마우스 오버시 표시하는 컨트롤
|
|
class KUIControlScrollBase* m_pScrollCtr; ///< 리스트 조절 스크롤
|
|
class KUIControlListItem* m_pItemCtrBase; ///< 리스트의 아이템을 랜더링할 컨트롤(기본 디폴트)
|
|
};
|
|
|
|
|
|
|
|
//아래는 실질적으로 각 아이템에 특화된 리스트를 생성하는 클래스입니다.
|
|
//아래와 같이 모두 그저 상위 클래스의 함수들만 호출하는 방식으로 동일한 코드만 있는데 이렇게 한 이유는
|
|
//nui에서 파싱을 하고 컨트롤을 생성할 때
|
|
//namespace
|
|
//{
|
|
// KUIWnd* StringListCreator()
|
|
// {
|
|
// return new KUIControIStringList;
|
|
// }
|
|
// bool bStringListRegister = KUIFactory::GetInstance()->RegisterCreator( StringListCreator, "list^item_string^h");
|
|
//}
|
|
//이와 같은 형식으로 "list^item_string^h" 을 지정해줘야 하기 때문에 이렇게 하였습니다. 그다지 좋은 코드는 아닙니다.. 죄송 --;;
|
|
//nui 에 begin 다음에 "list^item_string^h"을 지정하면 위에 메칭시킨 생성자가 호출되어 아래 특화된 리스트들이 생성되기 때문입니다.
|
|
|
|
class KUIControIStringList : public KUIControlList
|
|
{
|
|
public:
|
|
KUIControIStringList() {};
|
|
virtual ~KUIControIStringList() {};
|
|
|
|
public:
|
|
virtual int SetCrrIndex(int nIndex) { return KUIControlList::SetCrrIndex( nIndex ); };
|
|
virtual bool ResetItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::ResetItem( pItem, nIndex, lpOutLine ); };
|
|
virtual int AddItem( LPITEM pItem, const char* lpOutLine=NULL ) { return KUIControlList::AddItem( pItem, lpOutLine ); };
|
|
virtual int InsertItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::InsertItem( pItem, nIndex, lpOutLine ); };
|
|
virtual bool DeleteItem( int nIndex ) { return KUIControlList::DeleteItem( nIndex ); };
|
|
virtual void ClearItem() { KUIControlList::ClearItem(); };
|
|
virtual void SetItemGap( int nGap=0 ) { KUIControlList::SetItemGap( nGap ); };
|
|
virtual void SetItemShowCnt( int nCnt/*=1*/ ) { KUIControlList::SetItemShowCnt( nCnt ); };
|
|
virtual void SetScroll( bool bHas ) { KUIControlList::SetScroll( bHas ); };
|
|
};
|
|
|
|
class KUIControIIconStringList : public KUIControlList
|
|
{
|
|
public:
|
|
KUIControIIconStringList() {};
|
|
virtual ~KUIControIIconStringList() {};
|
|
|
|
public:
|
|
virtual int SetCrrIndex(int nIndex) { return KUIControlList::SetCrrIndex( nIndex ); };
|
|
virtual bool ResetItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::ResetItem( pItem, nIndex, lpOutLine ); };
|
|
virtual int AddItem( LPITEM pItem, const char* lpOutLine=NULL ) { return KUIControlList::AddItem( pItem, lpOutLine ); };
|
|
virtual int InsertItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::InsertItem( pItem, nIndex, lpOutLine ); };
|
|
virtual bool DeleteItem( int nIndex ) { return KUIControlList::DeleteItem( nIndex ); };
|
|
virtual void ClearItem() { KUIControlList::ClearItem(); };
|
|
virtual void SetItemGap( int nGap=0 ) { KUIControlList::SetItemGap( nGap ); };
|
|
virtual void SetItemShowCnt( int nCnt=1 ) { KUIControlList::SetItemShowCnt( nCnt ); };
|
|
virtual void SetScroll( bool bHas ) { KUIControlList::SetScroll( bHas ); };
|
|
};
|
|
|
|
class KUIControICommunityList : public KUIControlList
|
|
{
|
|
public:
|
|
KUIControICommunityList() {};
|
|
virtual ~KUIControICommunityList() {};
|
|
|
|
public:
|
|
virtual int SetCrrIndex(int nIndex) { return KUIControlList::SetCrrIndex( nIndex ); };
|
|
virtual bool ResetItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::ResetItem( pItem, nIndex, lpOutLine ); };
|
|
virtual int AddItem( LPITEM pItem, const char* lpOutLine=NULL ) { return KUIControlList::AddItem( pItem, lpOutLine ); };
|
|
virtual int InsertItem( LPITEM pItem, int nIndex, const char* lpOutLine=NULL ) { return KUIControlList::InsertItem( pItem, nIndex, lpOutLine ); };
|
|
virtual bool DeleteItem( int nIndex ) { return KUIControlList::DeleteItem( nIndex ); };
|
|
virtual void ClearItem() { KUIControlList::ClearItem(); };
|
|
virtual void SetItemGap( int nGap=0 ) { KUIControlList::SetItemGap( nGap ); };
|
|
virtual void SetItemShowCnt( int nCnt=1 ) { KUIControlList::SetItemShowCnt( nCnt ); };
|
|
virtual void SetScroll( bool bHas ) { KUIControlList::SetScroll( bHas ); };
|
|
};
|