236 lines
6.6 KiB
C++
236 lines
6.6 KiB
C++
#pragma once
|
|
|
|
//#include <vector>
|
|
|
|
#include "SUIWnd.h"
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 2010.04.02 bintitle
|
|
//
|
|
// class KUIControlPanel
|
|
//
|
|
// * 상태에따라 크기변동이 가능한 패널 컨트롤.
|
|
// 이름은 Control 이지만 실제로 Wnd 를 상속하는 윈도우이다.
|
|
/// 윈도우인 이유는 실제 nui 가 각각 따로 주어지기 때문이다.
|
|
//
|
|
// : 패널 컨트롤로 사용할 윈도우는 이 클래스를 상속해야 한다.
|
|
//
|
|
class KUIControlPanel : public SUIWnd
|
|
{
|
|
protected:
|
|
|
|
class KUIControlPanelManager * m_pPanelManager;
|
|
|
|
KRect m_RectOriginal; // 기본크기.
|
|
KRect m_RectExtention; // 확장된크기.
|
|
|
|
int m_nPanelID; // 패널의 아이디.
|
|
bool m_bExtend; // 확장여부. true(확장)
|
|
|
|
std::vector< KUIWnd * > m_arrChangeVisibleWnd; // 확장 여부에따라 숨김, 보임 처리가 바뀌는 Wnd.
|
|
|
|
public:
|
|
|
|
KUIControlPanel( SGameManager * pGameManager, KUIControlPanelManager * pPanelManager=NULL, int nPanelID=0 );
|
|
|
|
virtual ~KUIControlPanel(){
|
|
Release();
|
|
}
|
|
|
|
|
|
//-----------------------------
|
|
|
|
// 패널의 크기를 newSize 로 변경한다.
|
|
// 크기를 벗어난 내부 컨트롤들은 숨김처리.( 반대경우 보임 처리 )
|
|
virtual void ResizePanel( const KRect & newSize );
|
|
|
|
// 패널의 크기를 원본크기로 변경한다. 각 패널윈도우의 크기가 다르므로 재정의할것!!.
|
|
virtual void ResizeOriginal() = 0;
|
|
|
|
// 패널의 크기 변경( Open, Close ) 시에 필요기능 정의.
|
|
virtual void CustomOpen(){}
|
|
virtual void CustomClose(){}
|
|
|
|
// 활성처리.
|
|
void Enable();
|
|
|
|
// 비활성처리.
|
|
virtual void Disable();
|
|
|
|
|
|
// 메모리 해제.
|
|
void Release();
|
|
|
|
// 초기설정.
|
|
void Initialize( const KRect & original, const KRect & extension );
|
|
|
|
// 부모윈도우의 이동. 패널에도 이동적용.
|
|
void MovedParentWnd( int offsetX, int offsetY );
|
|
|
|
// 윈도우 영역내,외 의 컨트롤 가시성 판단.
|
|
void DecideVisibility();
|
|
|
|
// 확장 여부에따라 숨김, 보임 처리가 바뀌는 Wnd.
|
|
void AddChangeVisibleWnd( KUIWnd * pWnd );
|
|
void ChangeVisiblityWnd( bool bShow );
|
|
|
|
//-----------------------------
|
|
|
|
void SetPanelManager( KUIControlPanelManager * pPanelManager ){
|
|
m_pPanelManager = pPanelManager;
|
|
}
|
|
|
|
void OpenPanel(); // 패널 열기.
|
|
void ClosePanel();// 패널 닫기.
|
|
|
|
// 원본=>확장, 확장=>원본
|
|
void ToggleExtend();
|
|
|
|
bool GetIsExtend(){ // 확장여부 반환.
|
|
return m_bExtend;
|
|
}
|
|
|
|
const KRect & GetRectOriginal(){ // 기본크기.
|
|
return m_RectOriginal;
|
|
}
|
|
|
|
const KRect & GetRectExtension(){ // 확장된크기.
|
|
return m_RectExtention;
|
|
}
|
|
|
|
// 다양한 목적으로 사용되는 좌표.
|
|
const KPoint & GetMultipurposePos();
|
|
|
|
// 자신이 패널매니저에서 몇번째 인덱스인지 반환.
|
|
int GetPanelIndex();
|
|
|
|
int GetPanelID(){ // 패널의 아이디.
|
|
return m_nPanelID;
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
// KUIControlPanel 을 구현한 클래스의 데이터.
|
|
virtual int GetNumberData(){ return 0; }
|
|
virtual const char * GetStrData() { return NULL; }
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// class KUIControlPanelManager
|
|
//
|
|
// * KUIControlPanel 를 관리한다. ( 위치조절, 추가, 삭제 )
|
|
//
|
|
//
|
|
class KUIControlPanelManager
|
|
{
|
|
|
|
private:
|
|
|
|
KUIWnd * m_pParentWnd; // 패널을 사용하는 윈도우.
|
|
|
|
KUIControl * m_pPanelOutline; // 패널이 들어갈 윤곽 컨트롤. ( 크기, 위치 지정용 )
|
|
|
|
int m_Gap; // 패널들 사이의 간격.
|
|
|
|
std::vector< KUIControlPanel * > m_arrPanel; // 패널윈도우 배열.
|
|
|
|
KPoint m_MultipurposePos; // 다양한 목적으로 쓰일 수 있는 위치값.
|
|
// ex) 길드관리 wnd 에서는 각 패널들에서 띄우게 되는 시작좌표를 지정하였음.
|
|
|
|
KUIControlPanel * m_pCrrOpenPanel; // 현재 열려있는 패널.
|
|
|
|
bool m_bShow;
|
|
|
|
public:
|
|
|
|
KUIControlPanelManager( KUIWnd * pParentWnd, KUIControl * pPanelOutline, int gap=0 );
|
|
|
|
~KUIControlPanelManager();
|
|
|
|
|
|
//-----------------------------
|
|
|
|
// 메모리 해제.
|
|
void Release();
|
|
|
|
// 닫기 통지. 매니저에 속한 패널들에게 OnNotifyUIWindowOpen() 를 보낸다.
|
|
void CloseNotify();
|
|
|
|
// * AddPanel() or DeletePanel() 을 모두 완료한 뒤 반드시 호출할것.
|
|
// 패널들을 최초위치로 설정.
|
|
void Initialize();
|
|
|
|
// 부모윈도우 이동. 하위 패널들도 위치 이동.
|
|
void MovedParentWnd(int oX, int oY);
|
|
|
|
// 모든 패널윈도우 크기를 기본크기로 조절.
|
|
void ResizeOriginalAll();
|
|
|
|
// 해당 패널을 제외한 나머지 패널은 원본크기로 되돌림.
|
|
void ResizePanel( KUIControlPanel * pTarget );
|
|
|
|
// 패널들의 위치를 조절한다.
|
|
void AdjustPosition();
|
|
|
|
// 패널추가.
|
|
void AddPanel( KUIControlPanel * pPanel );
|
|
|
|
// 패널제거.
|
|
void DeletePanel( KUIControlPanel * pPanel );
|
|
|
|
// 해당 패널가 패널매니저에서 몇번째 인덱스인지 반환.
|
|
int GetPanelIndex( KUIControlPanel * pPanel );
|
|
|
|
const KRect & GetRectParentWnd(){
|
|
return m_pParentWnd->GetRect();
|
|
}
|
|
|
|
// 패널 컨트롤이 위치할 부모윈도우상의 윤곽컨트롤.
|
|
const KRect & GetRectPanelOutline();
|
|
|
|
// 패널윈도우 배열 반환.
|
|
const std::vector< KUIControlPanel * > & GetPanelControls(){ return m_arrPanel; }
|
|
|
|
// 해당 패널 반환.
|
|
// 해당 패널 반환.
|
|
bool FindPanelByIndex( KUIControlPanel *& OUT_pPanel, int index );
|
|
bool FindPanel( KUIControlPanel *& OUT_pPanel, int wndID );
|
|
KUIControlPanel * OpenPanel( int wndID ); // 해당 패널 Open.
|
|
void ClosePanel( int wndID ); // 해당 패널 Close.
|
|
|
|
|
|
// 다양한 목적으로 쓰일 수 있는 위치값.
|
|
void SetMultipurposePos( KPoint & kPos ){
|
|
m_MultipurposePos = kPos;
|
|
}
|
|
const KPoint & GetMultipurposePos(){
|
|
return m_MultipurposePos;
|
|
}
|
|
|
|
KUIControlPanel * GetCrrOpenPanel(){ // 현재 열려있는 패널.
|
|
return m_pCrrOpenPanel;
|
|
}
|
|
|
|
void SetShow( bool bFlag );
|
|
|
|
}; |