#include "..\script_component.hpp" /* * File: fnc_initUIBridge.sqf * Author: IDSolutions * Date: 2026-03-28 * Public: No * * Description: * Initializes the CAD UI bridge for sidepanel browser state and CAD event routing. * * Arguments: * None * * Return Value: * CAD UI bridge object [HASHMAP OBJECT] * * Example: * call forge_client_cad_fnc_initUIBridge */ #pragma hemtt ignore_variables ["_self"] private _webUIDeclarations = call EFUNC(common,initWebUIBridge); private _webUIBridgeDeclaration = _webUIDeclarations get "bridgeDeclaration"; GVAR(CADUIBridgeBaseClass) = compileFinal createHashMapFromArray [ ["#base", _webUIBridgeDeclaration], ["#type", "CADUIBridgeBaseClass"], ["getActiveBrowserControl", compileFinal { private _display = uiNamespace getVariable [QGVAR(Display), displayNull]; if (isNull _display) exitWith { _self call ["setActiveBrowserControl", [controlNull]]; controlNull }; private _control = _display displayCtrl 1005; _self call ["setActiveBrowserControl", [_control]]; _control }], ["hasOpenScreen", compileFinal { private _screen = _self call ["getScreen", []]; private _control = _self call ["getActiveBrowserControl", []]; !(isNull _control) && { _screen call ["isReady", []] } }], ["handleReady", compileFinal { params [["_control", controlNull, [controlNull]], ["_data", createHashMap, [createHashMap]]]; private _screen = _self call ["getScreen", []]; _screen call ["setControl", [_control]]; _screen call ["markReady", [true]]; _self call ["flushPendingEvents", []]; _self call ["requestHydrate", []]; _self call ["refreshHydrate", []]; true }], ["requestHydrate", compileFinal { [SRPC(cad,requestHydrateCad), [getPlayerUID player]] call CFUNC(serverEvent); true }], ["requestAssignTask", compileFinal { params [["_taskID", "", [""]], ["_groupID", "", [""]], ["_note", "", [""]]]; if (_taskID isEqualTo "" || { _groupID isEqualTo "" }) exitWith { false }; [SRPC(cad,requestAssignCadTask), [getPlayerUID player, _taskID, _groupID, _note]] call CFUNC(serverEvent); true }], ["requestAcknowledgeTask", compileFinal { params [["_taskID", "", [""]]]; if (_taskID isEqualTo "") exitWith { false }; [SRPC(cad,requestAcknowledgeCadTask), [getPlayerUID player, _taskID]] call CFUNC(serverEvent); true }], ["requestDeclineTask", compileFinal { params [["_taskID", "", [""]]]; if (_taskID isEqualTo "") exitWith { false }; [SRPC(cad,requestDeclineCadTask), [getPlayerUID player, _taskID]] call CFUNC(serverEvent); true }], ["requestGroupStatus", compileFinal { params [["_groupID", "", [""]], ["_status", "", [""]]]; if (_groupID isEqualTo "" || { _status isEqualTo "" }) exitWith { false }; [SRPC(cad,requestUpdateCadGroupStatus), [getPlayerUID player, _groupID, _status]] call CFUNC(serverEvent); true }], ["refreshHydrate", compileFinal { if (isNil QGVAR(CADRepository)) exitWith { false }; GVAR(CADRepository) call ["pushHydratePayload", [_self]] }], ["handleHydrateResponse", compileFinal { params [["_payload", createHashMap, [createHashMap]]]; if (isNil QGVAR(CADRepository)) exitWith { false }; GVAR(CADRepository) call ["setHydratePayload", [_payload]]; _self call ["refreshHydrate", []] }], ["handleAssignmentResponse", compileFinal { params [["_result", createHashMap, [createHashMap]]]; _self call ["sendEvent", ["cad::assignment::response", createHashMapFromArray [ ["message", _result getOrDefault ["message", "Task request processed."]], ["success", _result getOrDefault ["success", false]] ]]] }], ["handleGroupUpdateResponse", compileFinal { params [["_result", createHashMap, [createHashMap]]]; _self call ["sendEvent", ["cad::group::response", createHashMapFromArray [ ["message", _result getOrDefault ["message", "Group update processed."]], ["success", _result getOrDefault ["success", false]] ]]] }] ]; GVAR(CADUIBridge) = createHashMapObject [GVAR(CADUIBridgeBaseClass)]; GVAR(CADUIBridge)