#pragma once //#include #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 ); };