From cf9d8b9797f61d53306c7627ab7d343cd7dbaf22 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Sun, 11 Jul 2004 16:22:35 +0000 Subject: [PATCH] GUI/scripting updates This was SVN commit r706. --- source/gui/CButton.cpp | 49 +------ source/gui/CCheckBox.cpp | 3 - source/gui/CGUI.cpp | 134 +++++++++++++----- source/gui/CGUI.h | 22 ++- source/gui/CRadioButton.cpp | 2 - source/gui/IGUIButtonBehavior.cpp | 1 + source/gui/IGUIObject.cpp | 4 + source/gui/scripting/JSInterface_GUITypes.cpp | 20 +-- source/gui/scripting/JSInterface_GUITypes.h | 4 +- .../gui/scripting/JSInterface_IGUIObject.cpp | 8 +- source/scripting/ScriptGlue.cpp | 7 + source/scripting/ScriptGlue.h | 3 + 12 files changed, 150 insertions(+), 107 deletions(-) diff --git a/source/gui/CButton.cpp b/source/gui/CButton.cpp index c21dfc27ca..ac023781e0 100755 --- a/source/gui/CButton.cpp +++ b/source/gui/CButton.cpp @@ -64,55 +64,8 @@ void CButton::HandleMessage(const SGUIMessage &Message) switch (Message.type) { - case GUIM_PREPROCESS: - break; - - case GUIM_POSTPROCESS: - break; - - case GUIM_MOUSE_OVER: - ScriptEvent("MouseOver"); - break; - - case GUIM_MOUSE_ENTER: - ScriptEvent("MouseEnter"); - break; - - case GUIM_MOUSE_LEAVE: - ScriptEvent("MouseLeave"); - break; - - case GUIM_MOUSE_PRESS_LEFT: - ScriptEvent("MouseLeftPress"); - break; - - case GUIM_MOUSE_RELEASE_LEFT: - ScriptEvent("MouseLeftRelease"); - break; - - case GUIM_MOUSE_DOWN_LEFT: - ScriptEvent("MouseLeftDown"); - break; - - case GUIM_MOUSE_PRESS_RIGHT: - ScriptEvent("MouseRightPress"); - break; - - case GUIM_MOUSE_RELEASE_RIGHT: - ScriptEvent("MouseRightRelease"); - break; - - case GUIM_MOUSE_DOWN_RIGHT: - ScriptEvent("MouseRightDown"); - break; - case GUIM_PRESSED: - GetGUI()->TEMPmessage = "Button " + string((const TCHAR*)m_Name) + " was pressed!"; - ScriptEvent("Press"); - break; - - case GUIM_LOAD: - ScriptEvent("Load"); +// GetGUI()->TEMPmessage = "Button " + string((const TCHAR*)m_Name) + " was pressed!"; break; default: diff --git a/source/gui/CCheckBox.cpp b/source/gui/CCheckBox.cpp index 86caa34532..e2db2643f9 100755 --- a/source/gui/CCheckBox.cpp +++ b/source/gui/CCheckBox.cpp @@ -92,9 +92,6 @@ void CCheckBox::HandleMessage(const SGUIMessage &Message) checked = !checked; GUI::SetSetting(this, "checked", checked); - //GetGUI()->TEMPmessage = "Check box " + string((const TCHAR*)m_Name) + " was " + (m_Settings.m_Checked?"checked":"unchecked"); - - ScriptEvent("Press"); } break; default: diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp index 36967aa431..eb84295860 100755 --- a/source/gui/CGUI.cpp +++ b/source/gui/CGUI.cpp @@ -67,7 +67,6 @@ int CGUI::HandleEvent(const SDL_Event* ev) { m_MousePos = CPos(ev->motion.x, ev->motion.y); - // pNearest will after this point at the hovered object, possibly NULL GUI::RecurseObject(GUIRR_HIDDEN | GUIRR_GHOST, m_BaseObject, &IGUIObject::HandleMessage, SGUIMessage(GUIM_MOUSE_MOTION)); @@ -100,7 +99,10 @@ int CGUI::HandleEvent(const SDL_Event* ev) GUI::RecurseObject(GUIRR_HIDDEN | GUIRR_GHOST, m_BaseObject, &IGUIObject::ChooseMouseOverAndClosest, pNearest); - + + if (ev->type == SDL_MOUSEMOTION && pNearest) + pNearest->ScriptEvent("mousemove"); + // Now we'll call UpdateMouseOver on *all* objects, // we'll input the one hovered, and they will each // update their own data and send messages accordingly @@ -116,26 +118,15 @@ int CGUI::HandleEvent(const SDL_Event* ev) if (pNearest) { pNearest->HandleMessage(SGUIMessage(GUIM_MOUSE_PRESS_LEFT)); + pNearest->ScriptEvent("mouseleftpress"); } - - { - // some temp -/* CClientArea ca; - bool hidden; - - GUI::GetSetting(*this, CStr("backdrop43"), CStr("size"), ca); - - //hidden = !hidden; - ca.pixel.right -= 3; - - GUI::SetSetting(*this, CStr("backdrop43"), CStr("size"), ca); -*/ } - break; + break; case SDL_BUTTON_WHEELDOWN: // wheel down if (pNearest) { pNearest->HandleMessage(SGUIMessage(GUIM_MOUSE_WHEEL_DOWN)); + pNearest->ScriptEvent("mousewheeldown"); } break; @@ -143,22 +134,10 @@ int CGUI::HandleEvent(const SDL_Event* ev) if (pNearest) { pNearest->HandleMessage(SGUIMessage(GUIM_MOUSE_WHEEL_UP)); + pNearest->ScriptEvent("mousewheelup"); } break; - // TODO Gee: Just temp - case SDL_BUTTON_RIGHT: - { - CClientArea ca; - GUI::GetSetting(*this, CStr("backdrop43"), CStr("size"), ca); - - //hidden = !hidden; - ca.pixel.right -= 3; - - GUI::SetSetting(*this, CStr("backdrop43"), CStr("size"), ca); - } - break; - default: break; } @@ -170,7 +149,10 @@ int CGUI::HandleEvent(const SDL_Event* ev) if (ev->button.button == SDL_BUTTON_LEFT) { if (pNearest) + { pNearest->HandleMessage(SGUIMessage(GUIM_MOUSE_RELEASE_LEFT)); + pNearest->ScriptEvent("mouseleftrelease"); + } } // Reset all states on all visible objects @@ -485,6 +467,7 @@ void CGUI::AddObject(IGUIObject* pObject) // Loaded GUI::RecurseObject(0, pObject, &IGUIObject::HandleMessage, SGUIMessage(GUIM_LOAD)); + GUI::RecurseObject(0, pObject, &IGUIObject::ScriptEvent, "load"); } catch (PS_RESULT e) { @@ -871,9 +854,14 @@ void CGUI::LoadXMLFile(const string &Filename) m_Errors = 0; CXeromyces XeroFile; - XeroFile.Load(Filename.c_str()); - - bool ParseFailed = false; + try + { + XeroFile.Load(Filename.c_str()); + } + catch (...) { + // Failed + return; + } XMBElement node = XeroFile.getRoot(); @@ -922,16 +910,22 @@ void CGUI::LoadXMLFile(const string &Filename) void CGUI::Xeromyces_ReadRootObjects(XMBElement Element, CXeromyces* pFile) { + int el_script = pFile->getElementID("script"); + // Iterate main children - // they should all be elements + // they should all be or