00001
#include "StdAfx.h"
00002
#include "GUI.h"
00003
00004 CGUI::CGUI()
00005 {
00006
SetEntityType(Entity_GUI);
00007
Initialize();
00008 }
00009
00010 CGUI::~CGUI()
00011 {
00012
Destroy();
00013 }
00014
00015 void CGUI::Initialize()
00016 {
00017 m_dwFlags = 0;
00018
m_pActiveElement = NULL;
00019
SetType(GUI);
00020
m_bSelectInvisible =
true;
00021
00022
Unlock();
00023
00024 m_strElementType =
"GUI";
00025 }
00026
00027 int CGUI::PostMessage(
CGUIElement *pSender,
CGUIElement *pReceiver, eGUIMessage eMessage, DWORD lParam, DWORD wParam, UINT uiTimeoutMs)
00028 {
00029
return m_EventHandler.
PostMessage(pSender, pReceiver, eMessage, lParam, wParam, uiTimeoutMs);
00030 }
00031
00032 int CGUI::Create()
00033 {
00034
00035
return 1;
00036 }
00037
00038 int CGUI::LoadXML(
TiXmlNode *pDataNode, CString strFilename)
00039 {
00040
TiXmlElement* pXMLElement = NULL;
00041
const char *pcValue = NULL;
00042
00043
int iRetValue =
CGUIElement::LoadXML(pDataNode, strFilename);
00044
if(iRetValue !=1)
00045
return iRetValue;
00046
00047 pXMLElement = m_pXMLElement;
00048
00049
return 1;
00050 }
00051
00052 int CGUI::SaveXML(
TiXmlNode *pDataNode, CString strFilename)
00053 {
00054
00055
if(pDataNode == NULL && strFilename ==
"")
00056
return -1;
00057
00058
char Buf[128] =
"";
00059
TiXmlElement *pSaveXMLElement = NULL;
00060
00061
if(pDataNode != NULL)
00062 pSaveXMLElement = pDataNode->
ToElement();
00063
else
00064 pSaveXMLElement =
new TiXmlElement(
"GUI");
00065
00066
int iRetValue =
CGUIElement::SaveXML(pSaveXMLElement, strFilename);
00067
00068
if(pDataNode == NULL && strFilename !=
"")
00069 {
00070
TiXmlDocument SaveDoc;
00071 SaveDoc.
InsertEndChild(*pSaveXMLElement);
00072
int iRetValue = SaveDoc.
SaveFile(strFilename);
00073 SAFEDEL(pSaveXMLElement)
00074
00075
return iRetValue;
00076 }
00077
00078
if(pDataNode == NULL)
00079 SAFEDEL(pSaveXMLElement)
00080
00081
return iRetValue;
00082 }
00083
00084 void CGUI::Update()
00085 {
00086
bool LMouseButtonDown =
CInputEngine::GetSingleton().
GetMouse()->
IsButtonDown(VK_LBUTTON);
00087
bool LMouseButtonUp =
CInputEngine::GetSingleton().
GetMouse()->
IsButtonUp(VK_LBUTTON);
00088
00089
if(LMouseButtonDown && (
IsLocked() ==
false))
00090
OnLMouseDown( CInputEngine::GetSingleton().GetMouse()->GetCursorPos().x,
00091 CInputEngine::GetSingleton().GetMouse()->GetCursorPos().y);
00092
else if(LMouseButtonUp && (
IsLocked() ==
true))
00093 {
00094
OnLMouseUp( CInputEngine::GetSingleton().GetMouse()->GetCursorPos().x,
00095 CInputEngine::GetSingleton().GetMouse()->GetCursorPos().y);
00096
00097
Unlock();
00098 }
00099
00100
tVERTEX2d MousePos =
CInputEngine::GetSingleton().
GetMouse()->
GetCursorPos();
00101
tVERTEX2d PrevMousePos =
CInputEngine::GetSingleton().
GetMouse()->
GetPrevCursorPos();
00102
00103
if(((MousePos.
x - PrevMousePos.
x) !=0) || ((MousePos.
y - PrevMousePos.
y) !=0))
00104
OnMouseMove(MousePos.
x, MousePos.
y);
00105
00106
ProcessMessages();
00107
m_EventHandler.
Flush();
00108 }
00109
00110 void CGUI::Draw()
00111 {
00112
CGUIElement::Draw();
00113 }
00114
00115 void CGUI::SetActiveElement(
CGUIElement *pElement)
00116 {
00117
m_pActiveElement = pElement;
00118 }
00119
00120 CGUIElement *
CGUI::GetActiveElement()
00121 {
00122
return m_pActiveElement;
00123 }
00124
00125 tGUIMessage *
CGUI::GetMessage(UINT uiMessage)
00126 {
00127
return m_EventHandler.
GetMessage(uiMessage);
00128 }
00129
00130 UINT
CGUI::GetMessageCount()
00131 {
00132
return m_EventHandler.GetMessageCount();
00133 }
00134
00135 void CGUI::Destroy()
00136 {
00137
CGUIElement::Destroy();
00138
m_EventHandler.Destroy();
00139 }
00140
00141 void CGUI::ProcessMessage(
tGUIMessage& Message)
00142 {
00143
switch(Message.uiMessage)
00144 {
00145
case GUI_Message_AquireFocus:
00146
if(!Message.
pSender->
Visible())
00147 {
00148
if(
IsInvisibleSelectable())
00149
SetActiveElement(Message.
pSender);
00150 }
00151
else
00152
SetActiveElement(Message.
pSender);
00153
break;
00154 }
00155 }
00156
00157 void CGUI::ProcessMessages()
00158 {
00159
for (UINT i=0; i<
m_EventHandler.GetMessageCount(); i++)
00160
ProcessMessage(*
m_EventHandler.
GetMessage(i));
00161
00162
CGUIElement *pIterElement =
begin();
00163
set_ptr(pIterElement);
00164
00165
while(pIterElement !=NULL)
00166 {
00167 pIterElement->
ProcessMessages();
00168 pIterElement =
next();
00169 }
00170 }
00171
00172 bool CGUI::PropertyChanging(
const void* pvProperty ,
void* pvNewValue )
00173 {
00174
bool bChangeOK =
CGUIElement::PropertyChanging(pvProperty, pvNewValue);
00175
00176
return bChangeOK;
00177 }
00178
00179 void CGUI::GetProperties( EPropList& PropList )
00180 {
00181
CGUIElement::GetProperties(PropList);
00182
00183 PropList.AddTab(
"GUI");
00184 PropList.AddPropCheck(
this,
"Select Invis.", &
m_bSelectInvisible);
00185 }
00186
00187 void CGUI::SelectInvisible(
bool bShow)
00188 {
00189
m_bSelectInvisible = Show;
00190 }
00191
00192 bool CGUI::IsInvisibleSelectable()
00193 {
00194
return m_bSelectInvisible;
00195 }
00196
00197 int CGUI::OnLMouseDown(UINT x, UINT y)
00198 {
00199
int iRetValue =
CGUIElement::OnLMouseDown(x, y);
00200
if(iRetValue == 0)
00201
Lock();
00202
00203
return iRetValue;
00204 }
00205
00206 int CGUI::OnLMouseUp(UINT x, UINT y)
00207 {
00208
int iRetValue =
CGUIElement::OnLMouseUp(x, y);
00209
00210
if(iRetValue == 0)
00211
SetActiveElement(
this);
00212
00213
return iRetValue;
00214 }
00215
00216 bool CGUI::IsOfType(eEntityType eType)
00217 {
00218
if(eType == Entity_GUI)
00219
return true;
00220
00221
return CGUIElement::IsOfType(eType);
00222 }
00223
00224
bool PointInRect(tRect& Rect,
int X,
int Y)
00225 {
00226
bool GoodX = (X >= Rect.left) & (X <= Rect.right);
00227
bool GoodY = (Y >= Rect.bottom) & (Y <= Rect.top);
00228
00229
return GoodX & GoodY;
00230 }