#pragma once namespace UI { class CWindow; class CWindowManager : public CSingleton { public: typedef std::map TLayerContainer; typedef std::list TWindowContainer; typedef std::map TKeyCaptureWindowMap; public: CWindowManager(); virtual ~CWindowManager(); void Destroy(); float GetAspect(); void SetScreenSize(long lWidth, long lHeight); void SetResolution(int hres, int vres); void GetResolution(long & rx, long & ry) { rx=m_iHres; ry=m_iVres; } void SetMouseHandler(PyObject * poMouseHandler); long GetScreenWidth() { return m_lWidth; } long GetScreenHeight() { return m_lHeight; } void GetMousePosition(long & rx, long & ry); BOOL IsDragging(); CWindow * GetLockWindow() { return m_pLockWindow; } CWindow * GetPointWindow() { return m_pPointWindow; } bool IsFocus() { return (m_pActiveWindow || m_pLockWindow); } bool IsFocusWindow(CWindow * pWindow) { return pWindow == m_pActiveWindow; } void SetParent(CWindow * pWindow, CWindow * pParentWindow); void SetPickAlways(CWindow * pWindow); enum { WT_NORMAL, WT_SLOT, WT_GRIDSLOT, WT_TEXTLINE, WT_MARKBOX, WT_IMAGEBOX, WT_EXP_IMAGEBOX, WT_ANI_IMAGEBOX, WT_BUTTON, WT_RATIOBUTTON, WT_TOGGLEBUTTON, WT_DRAGBUTTON, WT_BOX, WT_BAR, WT_LINE, WT_BAR3D, WT_NUMLINE, }; CWindow * RegisterWindow(PyObject * po, const char * c_szLayer); CWindow * RegisterTypeWindow(PyObject * po, DWORD dwWndType, const char * c_szLayer); CWindow * RegisterSlotWindow(PyObject * po, const char * c_szLayer); CWindow * RegisterGridSlotWindow(PyObject * po, const char * c_szLayer); CWindow * RegisterTextLine(PyObject * po, const char * c_szLayer); CWindow * RegisterMarkBox(PyObject * po, const char * c_szLayer); CWindow * RegisterImageBox(PyObject * po, const char * c_szLayer); CWindow * RegisterExpandedImageBox(PyObject * po, const char * c_szLayer); CWindow * RegisterAniImageBox(PyObject * po, const char * c_szLayer); CWindow * RegisterButton(PyObject * po, const char * c_szLayer); CWindow * RegisterRadioButton(PyObject * po, const char * c_szLayer); CWindow * RegisterToggleButton(PyObject * po, const char * c_szLayer); CWindow * RegisterDragButton(PyObject * po, const char * c_szLayer); CWindow * RegisterBox(PyObject * po, const char * c_szLayer); CWindow * RegisterBar(PyObject * po, const char * c_szLayer); CWindow * RegisterLine(PyObject * po, const char * c_szLayer); CWindow * RegisterBar3D(PyObject * po, const char * c_szLayer); CWindow * RegisterNumberLine(PyObject * po, const char * c_szLayer); void DestroyWindow(CWindow * pWin); void NotifyDestroyWindow(CWindow * pWindow); // Attaching Icon BOOL IsAttaching(); DWORD GetAttachingType(); DWORD GetAttachingIndex(); DWORD GetAttachingSlotNumber(); void GetAttachingIconSize(BYTE * pbyWidth, BYTE * pbyHeight); void AttachIcon(DWORD dwType, DWORD dwIndex, DWORD dwSlotNumber, BYTE byWidth, BYTE byHeight); void DeattachIcon(); void SetAttachingFlag(BOOL bFlag); // Attaching Icon void OnceIgnoreMouseLeftButtonUpEvent(); void LockWindow(CWindow * pWin); void UnlockWindow(); void ActivateWindow(CWindow * pWin); void DeactivateWindow(); CWindow * GetActivateWindow(); void SetTop(CWindow * pWin); void SetTopUIWindow(); void ResetCapture(); void Update(); void Render(); void RunMouseMove(long x, long y); void RunMouseLeftButtonDown(long x, long y); void RunMouseLeftButtonUp(long x, long y); void RunMouseLeftButtonDoubleClick(long x, long y); void RunMouseRightButtonDown(long x, long y); void RunMouseRightButtonUp(long x, long y); void RunMouseRightButtonDoubleClick(long x, long y); void RunMouseMiddleButtonDown(long x, long y); void RunMouseMiddleButtonUp(long x, long y); void RunIMEUpdate(); void RunIMETabEvent(); void RunIMEReturnEvent(); void RunIMEKeyDown(int vkey); void RunChangeCodePage(); void RunOpenCandidate(); void RunCloseCandidate(); void RunOpenReading(); void RunCloseReading(); void RunKeyDown(int vkey); void RunKeyUp(int vkey); void RunPressEscapeKey(); void RunPressExitKey(); private: void SetMousePosition(long x, long y); CWindow * __PickWindow(long x, long y); CWindow * __NewWindow(PyObject * po, DWORD dwWndType); void __ClearReserveDeleteWindowList(); private: long m_lWidth; long m_lHeight; int m_iVres; int m_iHres; long m_lMouseX, m_lMouseY; long m_lDragX, m_lDragY; long m_lPickedX, m_lPickedY; BOOL m_bOnceIgnoreMouseLeftButtonUpEventFlag; int m_iIgnoreEndTime; // Attaching Icon PyObject * m_poMouseHandler; BOOL m_bAttachingFlag; DWORD m_dwAttachingType; DWORD m_dwAttachingIndex; DWORD m_dwAttachingSlotNumber; BYTE m_byAttachingIconWidth; BYTE m_byAttachingIconHeight; // Attaching Icon CWindow * m_pActiveWindow; TWindowContainer m_ActiveWindowList; CWindow * m_pLockWindow; TWindowContainer m_LockWindowList; CWindow * m_pPointWindow; CWindow * m_pLeftCaptureWindow; CWindow * m_pRightCaptureWindow; CWindow * m_pMiddleCaptureWindow; TKeyCaptureWindowMap m_KeyCaptureWindowMap; TWindowContainer m_ReserveDeleteWindowList; TWindowContainer m_PickAlwaysWindowList; CWindow * m_pRootWindow; TWindowContainer m_LayerWindowList; TLayerContainer m_LayerWindowMap; }; PyObject * BuildEmptyTuple(); };