169 lines
4.0 KiB
C++
169 lines
4.0 KiB
C++
#pragma once
|
|
#include "LGUIElement.h"
|
|
|
|
#define ISW_CLOSE 1
|
|
#define ISW_MINIMIZE 2
|
|
//#define ISW_TITLEBAR 4
|
|
#define ISW_RESIZEWIDTH 8
|
|
#define ISW_RESIZEHEIGHT 16
|
|
#define ISW_RESIZE (ISW_RESIZEWIDTH|ISW_RESIZEHEIGHT)
|
|
#define ISW_OFFSETTITLEBARWIDTH 32
|
|
#define ISW_OFFSETTITLEBARHEIGHT 64
|
|
|
|
#define SIZING_LEFT 1
|
|
#define SIZING_RIGHT 2
|
|
#define SIZING_TOP 4
|
|
#define SIZING_BOTTOM 8
|
|
|
|
struct _CreateWindow : public _CreateFrame
|
|
{
|
|
unsigned int Flags;
|
|
char *Title;
|
|
char *ClickFocus;
|
|
};
|
|
|
|
class CWindowContextMenu : public CContextMenuHandler
|
|
{
|
|
public:
|
|
LGUI_API CWindowContextMenu();
|
|
LGUI_API ~CWindowContextMenu();
|
|
|
|
LGUI_API virtual void OnCreate(unsigned int ParentItemID);
|
|
LGUI_API virtual void OnClick(unsigned int ItemID);
|
|
|
|
class LGUIWindow *pWindow;
|
|
};
|
|
|
|
class LGUIWindow : public LGUIFrame
|
|
{
|
|
public:
|
|
LGUI_API LGUIWindow(const char *p_Factory, LGUIElement *p_pParent, const char *p_Name);
|
|
LGUI_API ~LGUIWindow(void);
|
|
LGUI_API class LSTypeDefinition *GetLSType();
|
|
|
|
LGUI_API void Create(_CreateWindow &CreateInfo, class XMLNode *pTemplate=0);
|
|
|
|
LGUI_API bool IsTypeOf(char *TestFactory);
|
|
LGUI_API void Render();
|
|
LGUI_API void RenderChildren();
|
|
LGUI_API void OnCreate();
|
|
LGUI_API bool FromXML(class XMLNode *pXML, class XMLNode *pTemplate=0);
|
|
LGUI_API void RecalculateSize(bool RecalculateChildren);
|
|
LGUI_API bool OnLMouseUp(POINT2I &pt);
|
|
LGUI_API bool OnLMouseDown(POINT2I &pt);
|
|
LGUI_API bool OnLMouseDoubleClick(POINT2I &pt);
|
|
LGUI_API bool OnRMouseUp(POINT2I &pt);
|
|
LGUI_API bool OnRMouseDown(POINT2I &pt);
|
|
LGUI_API bool OnMouseMove(POINT2I &pt);
|
|
LGUI_API bool OnMouseWheel(int Offset);
|
|
LGUI_API void Show(bool bShow);
|
|
LGUI_API void OnNotify(LGUIElement *pElement, unsigned int Notification, UINT_PTR Value);
|
|
|
|
LGUI_API virtual void OnResize();
|
|
|
|
LGUI_API LGUIElement *FindChild(const char *Name);
|
|
|
|
LGUI_API void Minimize(bool bMinimize);
|
|
|
|
|
|
LGUI_API void ResetWindowPosition();
|
|
|
|
LGUI_API bool GetStoragePosition(int &StoreX, int &StoreY, unsigned int &StoreWidth, unsigned int &StoreHeight);
|
|
|
|
LGUI_API void SetTitle(const char *title);
|
|
|
|
// -- XML Properties --
|
|
|
|
unsigned int Flags;
|
|
|
|
char *Title;
|
|
char *ClickFocus;
|
|
unsigned int MinHeight;
|
|
unsigned int MinWidth;
|
|
|
|
LGUIEmbeddedScript *pOnMove;
|
|
LGUIEmbeddedScript *pOnSize;
|
|
LGUIEmbeddedScript *pOnReset;
|
|
// ---
|
|
|
|
unsigned int PreMinimizeHeight;
|
|
unsigned int PreMinimizeWidth;
|
|
int PreMinimizeTitleBarX;
|
|
int PreMinimizeTitleBarY;
|
|
bool bMinimized;
|
|
bool bMoving;
|
|
bool bLocked;
|
|
unsigned int Sizing;
|
|
POINT2I SizingOffset;
|
|
POINT2I MovingOffset;
|
|
|
|
class LGUIWindowClient *pClient;
|
|
class LGUIFrame *pTitleBar;
|
|
class LGUIText *pTitle;
|
|
class LGUIButton *pMinimize;
|
|
class LGUIButton *pMaximize;
|
|
class LGUIButton *pClose;
|
|
|
|
CWindowContextMenu ContextMenu;
|
|
// CWindowSubmenu SubMenu;
|
|
};
|
|
|
|
class LGUIWindowClient : public LGUIFrame
|
|
{
|
|
public:
|
|
LGUIWindowClient(const char *p_Factory, LGUIElement *p_pParent, const char *p_Name);
|
|
~LGUIWindowClient(void);
|
|
|
|
bool IsTypeOf(char *TestFactory);
|
|
void OnCreate()
|
|
{
|
|
pWindow->OnCreate();
|
|
}
|
|
void OnNotify(LGUIElement *pElement, unsigned int Notification, unsigned int Value)
|
|
{
|
|
pWindow->OnNotify(pElement,Notification,Value);
|
|
}
|
|
|
|
class LGUIWindow *pWindow;
|
|
};
|
|
|
|
template<class T,LSTypeDefinition **Q=0>
|
|
class LGUIWindowFactory : public LGUIElementFactory
|
|
{
|
|
public:
|
|
LGUIWindowFactory(const char *p_Type):LGUIElementFactory(p_Type,LGUI_VERSION)
|
|
{
|
|
}
|
|
|
|
~LGUIWindowFactory()
|
|
{
|
|
}
|
|
|
|
virtual LGUIElement *CreateUIElement(LGUIElement *pParent, const char *Name, class XMLNode *pXML, const char *Template = 0)
|
|
{
|
|
T *pElement = new T(Type,pParent,Name);
|
|
|
|
if (!pElement->FromXML(pXML,g_UIManager.FindTemplate(Template)))
|
|
{
|
|
if (pParent)
|
|
pParent->DeleteChild(pElement);
|
|
else
|
|
delete pElement;
|
|
return 0;
|
|
}
|
|
Elements[pElement]=1;
|
|
pElement->OnCreate();
|
|
pElement->ExecuteOnLoad();
|
|
return pElement->pClient;
|
|
}
|
|
virtual LGUIElement *CreateUIElement(LGUIElement *pParent, const char *Name)
|
|
{
|
|
T *pElement = new T(Type,pParent,Name);
|
|
Elements[pElement]=1;
|
|
return pElement;
|
|
}
|
|
|
|
virtual LSTypeDefinition *GetLSType() {if (!Q) return 0; return *Q;}
|
|
};
|
|
/**/
|