mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
It previously failed silently and just returned undefined which would often only cause errors later on. Printing an error as soon as that happens helps with debugging, by directly catching typos, for example. For cases where the queried object may not exist, a new Engine function called TryGetGUIObjectByName is introduced. It doesn't log any errors and behaves exactly as GetGUIObjectByName used to.
87 lines
2.9 KiB
C++
87 lines
2.9 KiB
C++
/* Copyright (C) 2025 Wildfire Games.
|
|
* This file is part of 0 A.D.
|
|
*
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "precompiled.h"
|
|
|
|
#include "JSInterface_GUIManager.h"
|
|
|
|
#include "gui/CGUI.h"
|
|
#include "gui/GUIManager.h"
|
|
#include "ps/VideoMode.h"
|
|
#include "scriptinterface/FunctionWrapper.h"
|
|
#include "scriptinterface/ScriptInterface.h"
|
|
#include "scriptinterface/StructuredClone.h"
|
|
#include "simulation2/system/ParamNode.h"
|
|
#include <js/PropertyAndElement.h>
|
|
#include <js/RootingAPI.h>
|
|
#include <js/TypeDecls.h>
|
|
#include <js/Value.h>
|
|
#include <string>
|
|
|
|
#include <stdexcept>
|
|
|
|
namespace JSI_GUIManager
|
|
{
|
|
// Note that the initData argument may only contain clonable data.
|
|
// Functions aren't supported for example!
|
|
// It returns a promise.
|
|
JS::Value OpenChildPage(const ScriptRequest& rq, const std::wstring& name, JS::HandleValue initData)
|
|
{
|
|
return g_GUI->OpenChildPage(name, Script::WriteStructuredClone(rq, initData));
|
|
}
|
|
|
|
void SwitchGuiPage(const ScriptInterface& scriptInterface, const std::wstring& name, JS::HandleValue initData)
|
|
{
|
|
g_GUI->SwitchPage(name, &scriptInterface, initData);
|
|
}
|
|
|
|
void SetCursor(const std::wstring& name)
|
|
{
|
|
g_VideoMode.SetCursor(name);
|
|
}
|
|
|
|
void ResetCursor()
|
|
{
|
|
g_VideoMode.ResetCursor();
|
|
}
|
|
|
|
bool TemplateExists(const std::string& templateName)
|
|
{
|
|
return g_GUI->TemplateExists(templateName);
|
|
}
|
|
|
|
CParamNode GetTemplate(const std::string& templateName)
|
|
{
|
|
return g_GUI->GetTemplate(templateName);
|
|
}
|
|
|
|
|
|
void RegisterScriptFunctions(const ScriptRequest& rq)
|
|
{
|
|
ScriptFunction::Register<&OpenChildPage>(rq, "OpenChildPage");
|
|
ScriptFunction::Register<&SwitchGuiPage>(rq, "SwitchGuiPage");
|
|
ScriptFunction::Register<&SetCursor>(rq, "SetCursor");
|
|
ScriptFunction::Register<&ResetCursor>(rq, "ResetCursor");
|
|
ScriptFunction::Register<&TemplateExists>(rq, "TemplateExists");
|
|
ScriptFunction::Register<&GetTemplate>(rq, "GetTemplate");
|
|
|
|
ScriptFunction::Register<&CGUI::TryFindObjectByName, &ScriptInterface::ObjectFromCBData<CGUI>>(rq, "TryGetGUIObjectByName");
|
|
ScriptFunction::Register<&CGUI::FindObjectByName, &ScriptInterface::ObjectFromCBData<CGUI>>(rq, "GetGUIObjectByName");
|
|
ScriptFunction::Register<&CGUI::SetGlobalHotkey, &ScriptInterface::ObjectFromCBData<CGUI>>(rq, "SetGlobalHotkey");
|
|
ScriptFunction::Register<&CGUI::UnsetGlobalHotkey, &ScriptInterface::ObjectFromCBData<CGUI>>(rq, "UnsetGlobalHotkey");
|
|
}
|
|
}
|