526 lines
12 KiB
C
526 lines
12 KiB
C
|
#pragma once
|
|||
|
|
|||
|
#include "../eterBase/Utils.h"
|
|||
|
|
|||
|
namespace UI
|
|||
|
{
|
|||
|
class CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
typedef std::list<CWindow *> TWindowContainer;
|
|||
|
|
|||
|
static DWORD Type();
|
|||
|
BOOL IsType(DWORD dwType);
|
|||
|
|
|||
|
enum EHorizontalAlign
|
|||
|
{
|
|||
|
HORIZONTAL_ALIGN_LEFT = 0,
|
|||
|
HORIZONTAL_ALIGN_CENTER = 1,
|
|||
|
HORIZONTAL_ALIGN_RIGHT = 2,
|
|||
|
};
|
|||
|
|
|||
|
enum EVerticalAlign
|
|||
|
{
|
|||
|
VERTICAL_ALIGN_TOP = 0,
|
|||
|
VERTICAL_ALIGN_CENTER = 1,
|
|||
|
VERTICAL_ALIGN_BOTTOM = 2,
|
|||
|
};
|
|||
|
|
|||
|
enum EFlags
|
|||
|
{
|
|||
|
FLAG_MOVABLE = (1 << 0), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> â
|
|||
|
FLAG_LIMIT = (1 << 1), // â<><C3A2> ȭ<><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD>
|
|||
|
FLAG_SNAP = (1 << 2), // <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD> â
|
|||
|
FLAG_DRAGABLE = (1 << 3),
|
|||
|
FLAG_ATTACH = (1 << 4), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD> <20>پ<EFBFBD> <20>ִ<EFBFBD> â (For Drag / ex. ScriptWindow)
|
|||
|
FLAG_RESTRICT_X = (1 << 5), // <20>¿<EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
FLAG_RESTRICT_Y = (1 << 6), // <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
FLAG_NOT_CAPTURE = (1 << 7),
|
|||
|
FLAG_FLOAT = (1 << 8), // <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20>Ǵ<EFBFBD> â
|
|||
|
FLAG_NOT_PICK = (1 << 9), // <20><><EFBFBD>콺<EFBFBD><ECBDBA> <20><><EFBFBD><EFBFBD> Pick<63><6B><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> â
|
|||
|
FLAG_IGNORE_SIZE = (1 << 10),
|
|||
|
FLAG_RTL = (1 << 11), // Right-to-left
|
|||
|
};
|
|||
|
|
|||
|
public:
|
|||
|
CWindow(PyObject * ppyObject);
|
|||
|
virtual ~CWindow();
|
|||
|
|
|||
|
void AddChild(CWindow * pWin);
|
|||
|
|
|||
|
void Clear();
|
|||
|
void DestroyHandle();
|
|||
|
void Update();
|
|||
|
void Render();
|
|||
|
|
|||
|
void SetName(const char * c_szName);
|
|||
|
const char * GetName() { return m_strName.c_str(); }
|
|||
|
void SetSize(long width, long height);
|
|||
|
long GetWidth() { return m_lWidth; }
|
|||
|
long GetHeight() { return m_lHeight; }
|
|||
|
|
|||
|
void SetHorizontalAlign(DWORD dwAlign);
|
|||
|
void SetVerticalAlign(DWORD dwAlign);
|
|||
|
void SetPosition(long x, long y);
|
|||
|
void GetPosition(long * plx, long * ply);
|
|||
|
long GetPositionX( void ) const { return m_x; }
|
|||
|
long GetPositionY( void ) const { return m_y; }
|
|||
|
RECT & GetRect() { return m_rect; }
|
|||
|
void GetLocalPosition(long & rlx, long & rly);
|
|||
|
void GetMouseLocalPosition(long & rlx, long & rly);
|
|||
|
long UpdateRect();
|
|||
|
|
|||
|
RECT & GetLimitBias() { return m_limitBiasRect; }
|
|||
|
void SetLimitBias(long l, long r, long t, long b) { m_limitBiasRect.left = l, m_limitBiasRect.right = r, m_limitBiasRect.top = t, m_limitBiasRect.bottom = b; }
|
|||
|
|
|||
|
void Show();
|
|||
|
void Hide();
|
|||
|
bool IsShow() { return m_bShow; }
|
|||
|
bool IsRendering();
|
|||
|
|
|||
|
bool HasParent() { return m_pParent ? true : false; }
|
|||
|
bool HasChild() { return m_pChildList.empty() ? false : true; }
|
|||
|
int GetChildCount() { return m_pChildList.size(); }
|
|||
|
|
|||
|
CWindow * GetRoot();
|
|||
|
CWindow * GetParent();
|
|||
|
bool IsChild(CWindow * pWin);
|
|||
|
void DeleteChild(CWindow * pWin);
|
|||
|
void SetTop(CWindow * pWin);
|
|||
|
|
|||
|
bool IsIn(long x, long y);
|
|||
|
bool IsIn();
|
|||
|
CWindow * PickWindow(long x, long y);
|
|||
|
CWindow * PickTopWindow(long x, long y); // NOTE : Children<65><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// üũ <20>ϴ<EFBFBD> Ưȭ<C6AF><C8AD> <20>Լ<EFBFBD>
|
|||
|
|
|||
|
void __RemoveReserveChildren();
|
|||
|
|
|||
|
void AddFlag(DWORD flag) { SET_BIT(m_dwFlag, flag); }
|
|||
|
void RemoveFlag(DWORD flag) { REMOVE_BIT(m_dwFlag, flag); }
|
|||
|
bool IsFlag(DWORD flag) { return (m_dwFlag & flag) ? true : false; }
|
|||
|
/////////////////////////////////////
|
|||
|
|
|||
|
virtual void OnRender();
|
|||
|
virtual void OnUpdate();
|
|||
|
virtual void OnChangePosition(){}
|
|||
|
|
|||
|
virtual void OnSetFocus();
|
|||
|
virtual void OnKillFocus();
|
|||
|
|
|||
|
virtual void OnMouseDrag(long lx, long ly);
|
|||
|
virtual void OnMouseOverIn();
|
|||
|
virtual void OnMouseOverOut();
|
|||
|
virtual void OnMouseOver();
|
|||
|
virtual void OnDrop();
|
|||
|
virtual void OnTop();
|
|||
|
virtual void OnIMEUpdate();
|
|||
|
|
|||
|
virtual void OnMoveWindow(long x, long y);
|
|||
|
|
|||
|
///////////////////////////////////////
|
|||
|
|
|||
|
BOOL RunIMETabEvent();
|
|||
|
BOOL RunIMEReturnEvent();
|
|||
|
BOOL RunIMEKeyDownEvent(int ikey);
|
|||
|
|
|||
|
CWindow * RunKeyDownEvent(int ikey);
|
|||
|
BOOL RunKeyUpEvent(int ikey);
|
|||
|
BOOL RunPressEscapeKeyEvent();
|
|||
|
BOOL RunPressExitKeyEvent();
|
|||
|
|
|||
|
virtual BOOL OnIMETabEvent();
|
|||
|
virtual BOOL OnIMEReturnEvent();
|
|||
|
virtual BOOL OnIMEKeyDownEvent(int ikey);
|
|||
|
|
|||
|
virtual BOOL OnIMEChangeCodePage();
|
|||
|
virtual BOOL OnIMEOpenCandidateListEvent();
|
|||
|
virtual BOOL OnIMECloseCandidateListEvent();
|
|||
|
virtual BOOL OnIMEOpenReadingWndEvent();
|
|||
|
virtual BOOL OnIMECloseReadingWndEvent();
|
|||
|
|
|||
|
virtual BOOL OnMouseLeftButtonDown();
|
|||
|
virtual BOOL OnMouseLeftButtonUp();
|
|||
|
virtual BOOL OnMouseLeftButtonDoubleClick();
|
|||
|
virtual BOOL OnMouseRightButtonDown();
|
|||
|
virtual BOOL OnMouseRightButtonUp();
|
|||
|
virtual BOOL OnMouseRightButtonDoubleClick();
|
|||
|
virtual BOOL OnMouseMiddleButtonDown();
|
|||
|
virtual BOOL OnMouseMiddleButtonUp();
|
|||
|
|
|||
|
virtual BOOL OnKeyDown(int ikey);
|
|||
|
virtual BOOL OnKeyUp(int ikey);
|
|||
|
virtual BOOL OnPressEscapeKey();
|
|||
|
virtual BOOL OnPressExitKey();
|
|||
|
///////////////////////////////////////
|
|||
|
|
|||
|
virtual void SetColor(DWORD dwColor){}
|
|||
|
virtual BOOL OnIsType(DWORD dwType);
|
|||
|
/////////////////////////////////////
|
|||
|
|
|||
|
virtual BOOL IsWindow() { return TRUE; }
|
|||
|
/////////////////////////////////////
|
|||
|
|
|||
|
protected:
|
|||
|
std::string m_strName;
|
|||
|
|
|||
|
EHorizontalAlign m_HorizontalAlign;
|
|||
|
EVerticalAlign m_VerticalAlign;
|
|||
|
long m_x, m_y; // X,Y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ
|
|||
|
long m_lWidth, m_lHeight; // ũ<><C5A9>
|
|||
|
RECT m_rect; // Global <20><>ǥ
|
|||
|
RECT m_limitBiasRect; // limit bias <20><>
|
|||
|
|
|||
|
bool m_bMovable;
|
|||
|
bool m_bShow;
|
|||
|
|
|||
|
DWORD m_dwFlag;
|
|||
|
|
|||
|
PyObject * m_poHandler;
|
|||
|
|
|||
|
CWindow * m_pParent;
|
|||
|
TWindowContainer m_pChildList;
|
|||
|
|
|||
|
BOOL m_isUpdatingChildren;
|
|||
|
TWindowContainer m_pReserveChildList;
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
public:
|
|||
|
DWORD DEBUG_dwCounter;
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
class CLayer : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CLayer(PyObject * ppyObject) : CWindow(ppyObject) {}
|
|||
|
virtual ~CLayer() {}
|
|||
|
|
|||
|
BOOL IsWindow() { return FALSE; }
|
|||
|
};
|
|||
|
|
|||
|
class CBox : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CBox(PyObject * ppyObject);
|
|||
|
virtual ~CBox();
|
|||
|
|
|||
|
void SetColor(DWORD dwColor);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnRender();
|
|||
|
|
|||
|
protected:
|
|||
|
DWORD m_dwColor;
|
|||
|
};
|
|||
|
|
|||
|
class CBar : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CBar(PyObject * ppyObject);
|
|||
|
virtual ~CBar();
|
|||
|
|
|||
|
void SetColor(DWORD dwColor);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnRender();
|
|||
|
|
|||
|
protected:
|
|||
|
DWORD m_dwColor;
|
|||
|
};
|
|||
|
|
|||
|
class CLine : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CLine(PyObject * ppyObject);
|
|||
|
virtual ~CLine();
|
|||
|
|
|||
|
void SetColor(DWORD dwColor);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnRender();
|
|||
|
|
|||
|
protected:
|
|||
|
DWORD m_dwColor;
|
|||
|
};
|
|||
|
|
|||
|
class CBar3D : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
static DWORD Type();
|
|||
|
|
|||
|
public:
|
|||
|
CBar3D(PyObject * ppyObject);
|
|||
|
virtual ~CBar3D();
|
|||
|
|
|||
|
void SetColor(DWORD dwLeft, DWORD dwRight, DWORD dwCenter);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnRender();
|
|||
|
|
|||
|
protected:
|
|||
|
DWORD m_dwLeftColor;
|
|||
|
DWORD m_dwRightColor;
|
|||
|
DWORD m_dwCenterColor;
|
|||
|
};
|
|||
|
|
|||
|
// Text
|
|||
|
class CTextLine : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CTextLine(PyObject * ppyObject);
|
|||
|
virtual ~CTextLine();
|
|||
|
|
|||
|
void SetMax(int iMax);
|
|||
|
void SetHorizontalAlign(int iType);
|
|||
|
void SetVerticalAlign(int iType);
|
|||
|
void SetSecret(BOOL bFlag);
|
|||
|
void SetOutline(BOOL bFlag);
|
|||
|
void SetFeather(BOOL bFlag);
|
|||
|
void SetMultiLine(BOOL bFlag);
|
|||
|
void SetFontName(const char * c_szFontName);
|
|||
|
void SetFontColor(DWORD dwColor);
|
|||
|
void SetLimitWidth(float fWidth);
|
|||
|
|
|||
|
void ShowCursor();
|
|||
|
void HideCursor();
|
|||
|
int GetCursorPosition();
|
|||
|
|
|||
|
void SetText(const char * c_szText);
|
|||
|
const char * GetText();
|
|||
|
|
|||
|
void GetTextSize(int* pnWidth, int* pnHeight);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnUpdate();
|
|||
|
void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
|
|||
|
virtual void OnSetText(const char * c_szText);
|
|||
|
|
|||
|
protected:
|
|||
|
CGraphicTextInstance m_TextInstance;
|
|||
|
};
|
|||
|
|
|||
|
class CNumberLine : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CNumberLine(PyObject * ppyObject);
|
|||
|
CNumberLine(CWindow * pParent);
|
|||
|
virtual ~CNumberLine();
|
|||
|
|
|||
|
void SetPath(const char * c_szPath);
|
|||
|
void SetHorizontalAlign(int iType);
|
|||
|
void SetNumber(const char * c_szNumber);
|
|||
|
|
|||
|
protected:
|
|||
|
void ClearNumber();
|
|||
|
void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
|
|||
|
protected:
|
|||
|
std::string m_strPath;
|
|||
|
std::string m_strNumber;
|
|||
|
std::vector<CGraphicImageInstance *> m_ImageInstanceVector;
|
|||
|
|
|||
|
int m_iHorizontalAlign;
|
|||
|
DWORD m_dwWidthSummary;
|
|||
|
};
|
|||
|
|
|||
|
// Image
|
|||
|
class CImageBox : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CImageBox(PyObject * ppyObject);
|
|||
|
virtual ~CImageBox();
|
|||
|
|
|||
|
BOOL LoadImage(const char * c_szFileName);
|
|||
|
void SetDiffuseColor(float fr, float fg, float fb, float fa);
|
|||
|
|
|||
|
int GetWidth();
|
|||
|
int GetHeight();
|
|||
|
|
|||
|
protected:
|
|||
|
virtual void OnCreateInstance();
|
|||
|
virtual void OnDestroyInstance();
|
|||
|
|
|||
|
virtual void OnUpdate();
|
|||
|
virtual void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
|
|||
|
protected:
|
|||
|
CGraphicImageInstance * m_pImageInstance;
|
|||
|
};
|
|||
|
class CMarkBox : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CMarkBox(PyObject * ppyObject);
|
|||
|
virtual ~CMarkBox();
|
|||
|
|
|||
|
void LoadImage(const char * c_szFilename);
|
|||
|
void SetDiffuseColor(float fr, float fg, float fb, float fa);
|
|||
|
void SetIndex(UINT uIndex);
|
|||
|
void SetScale(FLOAT fScale);
|
|||
|
|
|||
|
protected:
|
|||
|
virtual void OnCreateInstance();
|
|||
|
virtual void OnDestroyInstance();
|
|||
|
|
|||
|
virtual void OnUpdate();
|
|||
|
virtual void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
protected:
|
|||
|
CGraphicMarkInstance * m_pMarkInstance;
|
|||
|
};
|
|||
|
class CExpandedImageBox : public CImageBox
|
|||
|
{
|
|||
|
public:
|
|||
|
static DWORD Type();
|
|||
|
|
|||
|
public:
|
|||
|
CExpandedImageBox(PyObject * ppyObject);
|
|||
|
virtual ~CExpandedImageBox();
|
|||
|
|
|||
|
void SetScale(float fx, float fy);
|
|||
|
void SetOrigin(float fx, float fy);
|
|||
|
void SetRotation(float fRotation);
|
|||
|
void SetRenderingRect(float fLeft, float fTop, float fRight, float fBottom);
|
|||
|
void SetRenderingMode(int iMode);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnCreateInstance();
|
|||
|
void OnDestroyInstance();
|
|||
|
|
|||
|
virtual void OnUpdate();
|
|||
|
virtual void OnRender();
|
|||
|
|
|||
|
BOOL OnIsType(DWORD dwType);
|
|||
|
};
|
|||
|
class CAniImageBox : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
static DWORD Type();
|
|||
|
|
|||
|
public:
|
|||
|
CAniImageBox(PyObject * ppyObject);
|
|||
|
virtual ~CAniImageBox();
|
|||
|
|
|||
|
void SetDelay(int iDelay);
|
|||
|
void AppendImage(const char * c_szFileName);
|
|||
|
void SetRenderingRect(float fLeft, float fTop, float fRight, float fBottom);
|
|||
|
void SetRenderingMode(int iMode);
|
|||
|
|
|||
|
void ResetFrame();
|
|||
|
|
|||
|
protected:
|
|||
|
void OnUpdate();
|
|||
|
void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
virtual void OnEndFrame();
|
|||
|
|
|||
|
BOOL OnIsType(DWORD dwType);
|
|||
|
|
|||
|
protected:
|
|||
|
BYTE m_bycurDelay;
|
|||
|
BYTE m_byDelay;
|
|||
|
BYTE m_bycurIndex;
|
|||
|
std::vector<CGraphicExpandedImageInstance*> m_ImageVector;
|
|||
|
};
|
|||
|
|
|||
|
// Button
|
|||
|
class CButton : public CWindow
|
|||
|
{
|
|||
|
public:
|
|||
|
CButton(PyObject * ppyObject);
|
|||
|
virtual ~CButton();
|
|||
|
|
|||
|
BOOL SetUpVisual(const char * c_szFileName);
|
|||
|
BOOL SetOverVisual(const char * c_szFileName);
|
|||
|
BOOL SetDownVisual(const char * c_szFileName);
|
|||
|
BOOL SetDisableVisual(const char * c_szFileName);
|
|||
|
|
|||
|
const char * GetUpVisualFileName();
|
|||
|
const char * GetOverVisualFileName();
|
|||
|
const char * GetDownVisualFileName();
|
|||
|
|
|||
|
void Flash();
|
|||
|
void Enable();
|
|||
|
void Disable();
|
|||
|
|
|||
|
void SetUp();
|
|||
|
void Up();
|
|||
|
void Over();
|
|||
|
void Down();
|
|||
|
|
|||
|
BOOL IsDisable();
|
|||
|
BOOL IsPressed();
|
|||
|
|
|||
|
protected:
|
|||
|
void OnUpdate();
|
|||
|
void OnRender();
|
|||
|
void OnChangePosition();
|
|||
|
|
|||
|
BOOL OnMouseLeftButtonDown();
|
|||
|
BOOL OnMouseLeftButtonDoubleClick();
|
|||
|
BOOL OnMouseLeftButtonUp();
|
|||
|
void OnMouseOverIn();
|
|||
|
void OnMouseOverOut();
|
|||
|
|
|||
|
BOOL IsEnable();
|
|||
|
|
|||
|
void SetCurrentVisual(CGraphicImageInstance * pVisual);
|
|||
|
|
|||
|
protected:
|
|||
|
BOOL m_bEnable;
|
|||
|
BOOL m_isPressed;
|
|||
|
BOOL m_isFlash;
|
|||
|
CGraphicImageInstance * m_pcurVisual;
|
|||
|
CGraphicImageInstance m_upVisual;
|
|||
|
CGraphicImageInstance m_overVisual;
|
|||
|
CGraphicImageInstance m_downVisual;
|
|||
|
CGraphicImageInstance m_disableVisual;
|
|||
|
};
|
|||
|
class CRadioButton : public CButton
|
|||
|
{
|
|||
|
public:
|
|||
|
CRadioButton(PyObject * ppyObject);
|
|||
|
virtual ~CRadioButton();
|
|||
|
|
|||
|
protected:
|
|||
|
BOOL OnMouseLeftButtonDown();
|
|||
|
BOOL OnMouseLeftButtonUp();
|
|||
|
void OnMouseOverIn();
|
|||
|
void OnMouseOverOut();
|
|||
|
};
|
|||
|
class CToggleButton : public CButton
|
|||
|
{
|
|||
|
public:
|
|||
|
CToggleButton(PyObject * ppyObject);
|
|||
|
virtual ~CToggleButton();
|
|||
|
|
|||
|
protected:
|
|||
|
BOOL OnMouseLeftButtonDown();
|
|||
|
BOOL OnMouseLeftButtonUp();
|
|||
|
void OnMouseOverIn();
|
|||
|
void OnMouseOverOut();
|
|||
|
};
|
|||
|
class CDragButton : public CButton
|
|||
|
{
|
|||
|
public:
|
|||
|
CDragButton(PyObject * ppyObject);
|
|||
|
virtual ~CDragButton();
|
|||
|
|
|||
|
void SetRestrictMovementArea(int ix, int iy, int iwidth, int iheight);
|
|||
|
|
|||
|
protected:
|
|||
|
void OnChangePosition();
|
|||
|
void OnMouseOverIn();
|
|||
|
void OnMouseOverOut();
|
|||
|
|
|||
|
protected:
|
|||
|
RECT m_restrictArea;
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
extern BOOL g_bOutlineBoxEnable;
|