#include "script_component.hpp" /* * Author: commy2, based on BIS_fnc_errorMsg and BIS_fnc_guiMessage by Karel Moricky (BI) * Stops simulation and opens a textbox with error message. * * Arguments: * ? * * Return Value: * None * * Example: * call ace_common_fnc_errorMessage * * Public: No */ disableSerialization; endLoadingScreen; // no message without player possible if (!hasInterface) exitWith {}; // wait for display if (isNull (call BIS_fnc_displayMission)) exitWith { [{ if (isNull (call BIS_fnc_displayMission)) exitWith {}; (_this select 0) call FUNC(errorMessage); [_this select 1] call CBA_fnc_removePerFrameHandler; }, 1, _this] call CBA_fnc_addPerFrameHandler; }; params ["_textHeader", "_textMessage", ["_onOK", {}], ["_onCancel", {}]]; if (_textMessage isEqualType "") then { _textMessage = parseText _textMessage; }; ARR_SELECT(_this,4,call BIS_fnc_displayMission) createDisplay "RscDisplayCommonMessagePause"; private _display = uiNamespace getVariable "RscDisplayCommonMessage_display"; private _ctrlRscMessageBox = _display displayCtrl 2351; private _ctrlBcgCommonTop = _display displayCtrl 235100; private _ctrlBcgCommon = _display displayCtrl 235101; private _ctrlText = _display displayCtrl 235102; private _ctrlBackgroundButtonOK = _display displayCtrl 235103; private _ctrlBackgroundButtonMiddle = _display displayCtrl 235104; private _ctrlBackgroundButtonCancel = _display displayCtrl 235105; private _ctrlButtonOK = _display displayCtrl 235106; private _ctrlButtonCancel = _display displayCtrl 235107; _ctrlBcgCommonTop ctrlSetText _textHeader; private _ctrlButtonOKPos = ctrlPosition _ctrlButtonOK; private _ctrlBcgCommonPos = ctrlPosition _ctrlBcgCommon; private _bottomSpaceY = (_ctrlButtonOKPos select 1) - ((_ctrlBcgCommonPos select 1) + (_ctrlBcgCommonPos select 3)); private _ctrlTextPos = ctrlPosition _ctrlText; private _marginX = (_ctrlTextPos select 0) - (_ctrlBcgCommonPos select 0); private _marginY = (_ctrlTextPos select 1) - (_ctrlBcgCommonPos select 1); _ctrlText ctrlSetStructuredText _textMessage; private _ctrlTextPosH = ctrlTextHeight _ctrlText; _ctrlBcgCommon ctrlSetPosition [ _ctrlBcgCommonPos select 0, _ctrlBcgCommonPos select 1, _ctrlBcgCommonPos select 2, _ctrlTextPosH + _marginY * 2 ]; _ctrlBcgCommon ctrlCommit 0; _ctrlText ctrlSetPosition [ (_ctrlBcgCommonPos select 0) + _marginX, (_ctrlBcgCommonPos select 1) + _marginY, (_ctrlBcgCommonPos select 2) - _marginX * 2, _ctrlTextPosH ]; _ctrlText ctrlCommit 0; private _bottomPosY = (_ctrlBcgCommonPos select 1) + _ctrlTextPosH + (_marginY * 2) + _bottomSpaceY; { private _xPos = ctrlPosition _x; _xPos set [1, _bottomPosY]; _x ctrlSetPosition _xPos; _x ctrlCommit 0; } forEach [ _ctrlBackgroundButtonOK, _ctrlBackgroundButtonMiddle, _ctrlBackgroundButtonCancel, _ctrlButtonOK, _ctrlButtonCancel ]; private _ctrlRscMessageBoxPos = ctrlPosition _ctrlRscMessageBox; private _ctrlRscMessageBoxPosH = _bottomPosY + (_ctrlButtonOKPos select 3); _ctrlRscMessageBox ctrlSetPosition [ 0.5 - (_ctrlBcgCommonPos select 2) / 2, 0.5 - _ctrlRscMessageBoxPosH / 2, (_ctrlBcgCommonPos select 2) + 0.5, _ctrlRscMessageBoxPosH ]; _ctrlRscMessageBox ctrlEnable true; _ctrlRscMessageBox ctrlCommit 0; if (_onOK isEqualTo {}) then { _ctrlButtonOK ctrlEnable false; _ctrlButtonOK ctrlSetFade 0; _ctrlButtonOK ctrlSetText ""; _ctrlButtonOK ctrlCommit 0; } else { _ctrlButtonOK ctrlEnable true; _ctrlButtonOK ctrlSetFade 0; _ctrlButtonOK ctrlSetText localize "STR_DISP_OK"; _ctrlButtonOK ctrlCommit 0; ctrlSetFocus _ctrlButtonOK; }; if (_onCancel isEqualTo {}) then { _ctrlButtonCancel ctrlEnable false; _ctrlButtonCancel ctrlSetFade 0; _ctrlButtonCancel ctrlSetText ""; _ctrlButtonCancel ctrlCommit 0; } else { _ctrlButtonCancel ctrlEnable true; _ctrlButtonCancel ctrlSetFade 0; _ctrlButtonCancel ctrlSetText localize "STR_DISP_CANCEL"; _ctrlButtonCancel ctrlCommit 0; ctrlSetFocus _ctrlButtonCancel; }; _ctrlButtonOK ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 1; true}]; _ctrlButtonCancel ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 2; true}]; GVAR(errorOnOK) = _onOK; GVAR(errorOnCancel) = _onCancel; _display displayAddEventHandler ["unload", {call ([{}, GVAR(errorOnOK), GVAR(errorOnCancel)] select (_this select 1))}]; _display displayAddEventHandler ["keyDown", {_this select 1 == 1}];