278 lines
7.5 KiB
C++
278 lines
7.5 KiB
C++
#pragma once
|
|
#include <list>
|
|
//#include <vector>
|
|
#include "KObject.h"
|
|
#include "K3DTypes.h"
|
|
|
|
namespace
|
|
{
|
|
enum KMSGBOXTIMER
|
|
{
|
|
KMB_DEFAULT_TIMER = 15000,
|
|
};
|
|
enum KMSGBOXTYPE
|
|
{
|
|
KMB_OK = MB_OK,
|
|
KMB_OKCANCEL = MB_OKCANCEL,
|
|
KMB_YESNO = MB_YESNO,
|
|
KMB_YESNOCANCEL = MB_YESNOCANCEL,
|
|
KMB_ABORTRETRYIGNORE = MB_ABORTRETRYIGNORE,
|
|
KMB_RETRYCANCEL = MB_RETRYCANCEL,
|
|
KMB_NO,
|
|
};
|
|
|
|
enum KMSGBOXMSG
|
|
{
|
|
KMB_OK_MSG = 0,
|
|
KMB_CANCEL_MSG = 1,
|
|
KMB_YES_MSG = 2,
|
|
KMB_NO_MSG = 3,
|
|
KMB_ABORT_MSG = 4,
|
|
KMB_RETRY_MSG = 5,
|
|
KMB_IGNORE_MSG = 6,
|
|
KMB_MAX_MSG_NUMBER,
|
|
};
|
|
|
|
}
|
|
|
|
struct MSGBOX_BTN_INFO_ITEM
|
|
{
|
|
MSGBOX_BTN_INFO_ITEM(bool _bUseSprCaption, LPCSTR _lpszID, LPCSTR _lpszCaption, DWORD _dwWidth )
|
|
: bUseSprCaption( _bUseSprCaption), sID(_lpszID),sCaption(_lpszCaption), dwWidth( _dwWidth )
|
|
{
|
|
}
|
|
|
|
std::string sID;
|
|
bool bUseSprCaption;
|
|
std::string sCaption;
|
|
DWORD dwWidth;
|
|
};
|
|
|
|
class KMsgBoxBtnInfo
|
|
{
|
|
public:
|
|
void SetDefaultItemIndex( int nIndex)
|
|
{
|
|
m_nDefaultItemIndex = nIndex;
|
|
}
|
|
int GetDefaultItemIndex() const
|
|
{
|
|
return m_nDefaultItemIndex;
|
|
}
|
|
void AddBtn(bool bUseSprCaption, LPCSTR lpszID, LPCSTR lpszCaption, DWORD dwWidth = 0)
|
|
{
|
|
AddBtn( MSGBOX_BTN_INFO_ITEM( bUseSprCaption, lpszID, lpszCaption, dwWidth ) );
|
|
}
|
|
void AddBtn(const MSGBOX_BTN_INFO_ITEM& info)
|
|
{
|
|
m_vtBtnItem.push_back( info );
|
|
}
|
|
DWORD GetBtnItemSize() const
|
|
{
|
|
return static_cast<DWORD>( m_vtBtnItem.size() );
|
|
}
|
|
const MSGBOX_BTN_INFO_ITEM& GetBtnItemByIndex(int nIndex) const
|
|
{
|
|
return m_vtBtnItem.at( nIndex );
|
|
}
|
|
|
|
protected:
|
|
std::vector<MSGBOX_BTN_INFO_ITEM> m_vtBtnItem;
|
|
int m_nDefaultItemIndex;
|
|
};
|
|
|
|
class KUIMsgControl;
|
|
|
|
class KViewportObject;
|
|
class KUIWnd;
|
|
|
|
class KUIIMEObject;
|
|
|
|
struct KUIWND_CREATE_ARG;
|
|
|
|
class KUIDragAndDropObject;
|
|
class KUIDragAndDropRenderer;
|
|
|
|
#ifdef _KUI_INVALIDATION
|
|
class KSpritePrimitive;
|
|
namespace {
|
|
struct SmartInvalidator;
|
|
}
|
|
#endif
|
|
|
|
class KUIWndManager : public KObject
|
|
{
|
|
public:
|
|
KUIWndManager();
|
|
virtual ~KUIWndManager();
|
|
void Clear();
|
|
|
|
void AddWnd( KUIWnd *pWnd, bool bSetFocus = true,bool bBack = false );
|
|
/// 2012.06.22 AddWnd함수는 엔터채팅일 경우에 제대로 front가 되지 않아서 AddWnd를 참고로 해서 새로 만듬 - prodongi
|
|
void addWndForceBack(KUIWnd* wnd);
|
|
void RemoveWnd( KUIWnd *pWnd );
|
|
|
|
/// Dynamic Wnd 때문에 필요
|
|
void MouseFocusWndRemoveCheck( KUIWnd *pWnd );
|
|
|
|
|
|
void AddModalWnd(KUIWnd* pWnd);
|
|
void RemoveModalWnd(KUIWnd* pWnd);
|
|
|
|
void onChangeSortValue( KUIWnd* pWnd, int nOldValue );
|
|
|
|
void SetFocus( KUIWnd *pWnd );
|
|
KUIWnd* GetFocusWnd();
|
|
|
|
void SetCapture( KUIWnd *pWnd )
|
|
{
|
|
m_pCaptureWnd = pWnd;
|
|
}
|
|
void ReleaseCapture( KUIWnd *pWnd )
|
|
{
|
|
if ( m_pCaptureWnd == pWnd )
|
|
m_pCaptureWnd = NULL;
|
|
}
|
|
KUIMsgControl* MessageBox( LPCSTR lpszID, LPCSTR lpszTitle, LPCSTR lpszMessage, const KMsgBoxBtnInfo& info,
|
|
KObject* pCallback = NULL, DWORD dwTimer = KMB_DEFAULT_TIMER, bool bModal = true, LPCSTR lpszReqValue=NULL, int nX=0, int nY=0 );
|
|
|
|
void FocusWindowOff();
|
|
|
|
bool IsExistMessageBox(LPCSTR lpszboxID) ;
|
|
bool IsOpenModalWnd();
|
|
|
|
KUIWnd* GetModalWnd(LPCSTR lpszboxID);
|
|
KUIWnd* GetModalessWnd(LPCSTR lpszboxID);
|
|
bool CloseMessageBox(KUIWnd* pWnd);
|
|
bool CloseMessageBox(LPCSTR lpszboxID);
|
|
bool CloseAllMessageBox();
|
|
bool CloseRebirthMessageBox();
|
|
bool CloseRebirth_PVP_MessageBox();
|
|
|
|
void SetRenderFlag( bool bFlag ) { m_bRenderFlag = bFlag; }
|
|
|
|
KUIWnd *CreateControl(KUIWND_CREATE_ARG& CREATE_ARG);
|
|
|
|
// find wnd
|
|
KUIWnd *FindWnd( const char *szWndID);
|
|
KUIWnd *FindWnd( const char *szWndID, const char *szControlID );
|
|
|
|
KUIWnd *FindWndWithChild( const char *szWndID);
|
|
|
|
// Setting Drag Object
|
|
void SetDragObject( KUIDragAndDropObject *pDragObject, const KPoint& ptOffset);
|
|
KUIDragAndDropObject* GetDragObject() { return m_pDragObject; }
|
|
|
|
void SetDragIconRenderer(KUIDragAndDropRenderer* pDragRenderer )
|
|
{
|
|
m_pDragIconRenderer = pDragRenderer;
|
|
}
|
|
KUIDragAndDropRenderer* GetDragIconRenderer() { return m_pDragIconRenderer; }
|
|
//
|
|
virtual void *Perform( KID _id, KArg& msg );
|
|
void Render( KViewportObject *viewport,bool isFront = false );
|
|
void Process( DWORD time );
|
|
// 2010.06.11 백그라운드 이미지 이후에 그려져야될 윈도우들 출력 - prodongi
|
|
void renderPostWnd(KViewportObject *viewport,bool isFront = false );
|
|
// 2010.06.11 현재 모달/모달리스 다이알로그가 있는지/없는지 - prodongi
|
|
bool isExistPostWnd() const;
|
|
|
|
void KillFocus();
|
|
|
|
static void SetResolution(const KSize& size)
|
|
{
|
|
m_sizeResolution = size;
|
|
}
|
|
static const KSize& GetResolution()
|
|
{
|
|
return m_sizeResolution;
|
|
}
|
|
|
|
KUIIMEObject *GetIME()
|
|
{
|
|
return m_pImeObject;
|
|
}
|
|
|
|
// MJ 2004/12/01 // alpha
|
|
void DestroyWnd( KUIWnd* pWnd );
|
|
KUIWnd* GetMouseFocusWnd() { return m_pMouseFocusWnd; };
|
|
|
|
KUIWnd* GetMouseClickWnd() { return m_pMouseClickWnd; };
|
|
void SetMouseClickWnd(KUIWnd* pWnd); //servantes 2010.12.06 수입력기를 ESC를 눌렀을 때, 맨위의 포커스 창이 닫히도록 수정
|
|
|
|
/// 201.09.30 srcId가 destId보다 위에 출력되는지 - prodongi
|
|
bool isTop(char const* srcId, char const* destId) const;
|
|
|
|
// { [sonador]
|
|
#ifdef _KUI_INVALIDATION
|
|
void SetViewportObject( KViewportObject* viewport );
|
|
KViewportObject* GetViewportObject() { return m_pUIViewport; }
|
|
//K3DRenderTarget* GetRenderTarget();
|
|
//void InitRenderTarget();
|
|
void InvalidateAllWnd();
|
|
void ValidateAllWnd();
|
|
//void InvalidateWnd( KUIWnd* pWnd );
|
|
//bool IsLockedToInvalidate() const { return m_bLockedToInvalidate; }
|
|
#endif
|
|
// }
|
|
|
|
private:
|
|
void _ProcMouseMessage( KUIWnd *pWnd, DWORD & dwMessage, KUIWnd * & pMouseWnd, bool & bFindFocusPanel, bool & bGetMouseMessage, DWORD &dwRet, int x, int y );
|
|
DWORD _SendMessage(DWORD dwMessage, DWORD dwWParam, DWORD dwlParam);
|
|
DWORD _SendMouseMessage(DWORD dwMessageType, int x, int y);
|
|
DWORD _SendKeyMessage(DWORD dwMessageType, DWORD dwKeyCode);
|
|
DWORD _SendKeyModalMessage(DWORD dwMessage, DWORD dwKeyCode);
|
|
|
|
KUIWnd* _procWndList( std::list< KUIWnd* >& Origin_List, DWORD dwMessage, int x, int y, bool bFindFocusPanel, bool bGetMouseMessage, DWORD& dwRet );
|
|
|
|
// static functions
|
|
public:
|
|
static void SetHandle( HWND hWnd, HINSTANCE hInst ) { m_sHWnd = hWnd; m_sInstance = hInst; }
|
|
static HWND GetHWnd() { return m_sHWnd; }
|
|
static HINSTANCE GetInstance() { return m_sInstance; }
|
|
static void SetEnterChatMode( bool bValue ) { s_bIsEnterChatMode = bValue; }
|
|
static bool IsEnterChatMode() { return s_bIsEnterChatMode; }
|
|
|
|
private:
|
|
static KSize m_sizeResolution;
|
|
static HWND m_sHWnd;
|
|
static HINSTANCE m_sInstance;
|
|
static bool s_bIsEnterChatMode;
|
|
|
|
private:
|
|
DWORD m_dwTime;
|
|
std::list< KUIWnd* > m_listDeletedWnd;
|
|
std::list< KUIWnd* > m_listSortedWnd; ///< KUIWnd::GetSortValue() 가 0이 아닌 녀석들에 대한 정보. (소트해서 따로 그리기 위함)
|
|
std::list< KUIWnd* > m_listWnd;
|
|
|
|
std::list< KUIWnd* > m_listModal;
|
|
std::list< KUIWnd* > m_listModaless;
|
|
/// 2011.06.14 mantis 13132 - prodongi
|
|
std::list< KUIWnd*> m_listWebWnd;
|
|
|
|
bool m_bInputDisable;
|
|
KUIWnd* m_pCaptureWnd;
|
|
// 포커스 윈도우
|
|
KUIWnd* m_pMouseFocusWnd;
|
|
KUIWnd* m_pMouseClickWnd; ///< 클릭한 윈도우를 항상 가장 위로 랜더링하기 위해 추가한 맴버
|
|
|
|
// Drag And Drop
|
|
KUIDragAndDropObject* m_pDragObject;
|
|
KUIDragAndDropRenderer* m_pDragIconRenderer;
|
|
KPoint m_ptDragRendererOffset;
|
|
|
|
bool m_bRenderFlag;
|
|
|
|
KUIIMEObject* m_pImeObject;
|
|
|
|
// { [sonador]
|
|
#ifdef _KUI_INVALIDATION
|
|
KViewportObject* m_pUIViewport;
|
|
//KSpritePrimitive* m_pUISpritePrimitive;
|
|
//K3DRenderTargetSPtr m_spRenderTarget;
|
|
//SmartInvalidator* m_pSmartInvalidator;
|
|
//bool m_bValidation;
|
|
//bool m_bLockedToInvalidate;
|
|
#endif
|
|
// }
|
|
}; |