From ce8e0fd938ee9e4cca6c4a4abcea6ad879bdd6f5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 25 Jan 2015 18:48:32 -0600 Subject: [PATCH] New Progress Bar --- addons/common/ProgressScreen.hpp | 167 +++++++++---------- addons/common/XEH_preInit.sqf | 1 + addons/common/functions/fnc_progressBar2.sqf | 80 +++++++++ 3 files changed, 163 insertions(+), 85 deletions(-) create mode 100644 addons/common/functions/fnc_progressBar2.sqf diff --git a/addons/common/ProgressScreen.hpp b/addons/common/ProgressScreen.hpp index 95133bec0f..dd5108dfbf 100644 --- a/addons/common/ProgressScreen.hpp +++ b/addons/common/ProgressScreen.hpp @@ -1,94 +1,91 @@ +class ACE_gui_RscProgress; +class ACE_gui_staticBase; + class GVAR(ProgressBar_Dialog) { - idd = -1; - movingEnable = false; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 2)];); - objects[] = {}; + idd = -1; + movingEnable = false; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 2)];); + objects[] = {}; - class controlsBackground { - class Background { - idc = -1; - moving = 0; - font = "TahomaB"; - text = ""; - sizeEx = 0; - lineSpacing = 0; - access = 0; - type = 0; - style = 0; - size = 1; - colorBackground[] = {0, 0, 0, 0.1}; - colorText[] = {0, 0, 0, 0}; - x = "safezoneX"; - y = "safezoneY"; - w = "safezoneW"; - h = "safezoneH"; - }; + class controlsBackground { + class Background { + idc = -1; + moving = 0; + font = "TahomaB"; + text = ""; + sizeEx = 0; + lineSpacing = 0; + access = 0; + type = 0; + style = 0; + size = 1; + colorBackground[] = {0, 0, 0, 0.1}; + colorText[] = {0, 0, 0, 0}; + x = "safezoneX"; + y = "safezoneY"; + w = "safezoneW"; + h = "safezoneH"; + }; - class Progress_Bar { - idc = 1; - moving = 0; - text = ""; - font = "PuristaMedium"; - sizeEx = "1 / 40 / (getResolution select 5)";// * safezoneX / safezoneXAbs"; - lineSpacing = 0; - access = 0; - type = 0; - style = 2; - size = 1; - colorBackground[] = {1, 0.647, 0, 0.5}; - colorText[] = {1,1,1,1}; - x = "safezoneX + 0.1 * safezoneW"; - y = "safezoneY + 0.2 * safezoneH"; - w = "0.0 * safezoneW"; - h = "0.01 * safezoneH"; - }; + + class Progress: ACE_gui_RscProgress { + idc = 1; + x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + y = "5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; + w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorFrame[] = {0,0,0,0}; + colorBar[] = {0.27,0.5,0.31,0.6}; + // colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + texture = "#(argb,8,8,3)color(1,1,1,0.7)"; + }; - class Title_Bar : Progress_Bar { - idc = 2; - //type = 13; - //size = 1; - colorBackground[] = {0, 0, 0, 0}; - x = "safezoneX + 0.1 * safezoneW"; - y = "safezoneY + 0.1 * safezoneH"; - w = "0.8 * safezoneW"; - h = "0.05 * safezoneH"; - /*class Attributes { - font = "TahomaB"; - color = "#000000"; - align = "center"; - valign = "middle"; - shadow = false; - shadowColor = "#ff0000"; - size = "1"; - };*/ - }; - }; + class Title_Bar : ACE_gui_staticBase { + idc = 2; + //type = 13; + //size = 1; + colorBackground[] = {0, 0, 0, 0}; + x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + y = "4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; + w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + class Attributes { + font = "TahomaB"; + color = "#000000"; + align = "center"; + valign = "middle"; + shadow = false; + shadowColor = "#ff0000"; + size = "1"; + }; + }; + }; }; class GVAR(DisableMouse_Dialog) { - idd = -1; - movingEnable = false; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgDisableMouse)),_this select 0)];); - objects[] = {}; - class controlsBackground { - class Background { - idc = -1; - moving = 0; - font = "TahomaB"; - text = ""; - sizeEx = 0; - lineSpacing = 0; - access = 0; - type = 0; - style = 0; - size = 1; - colorBackground[] = {0, 0, 0, 0};//0.5 - colorText[] = {0, 0, 0, 0}; - x = "safezoneX"; - y = "safezoneY"; - w = "safezoneW"; - h = "safezoneH"; - }; - }; + idd = -1; + movingEnable = false; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgDisableMouse)),_this select 0)];); + objects[] = {}; + class controlsBackground { + class Background { + idc = -1; + moving = 0; + font = "TahomaB"; + text = ""; + sizeEx = 0; + lineSpacing = 0; + access = 0; + type = 0; + style = 0; + size = 1; + colorBackground[] = {0, 0, 0, 0};//0.5 + colorText[] = {0, 0, 0, 0}; + x = "safezoneX"; + y = "safezoneY"; + w = "safezoneW"; + h = "safezoneH"; + }; + }; }; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index ae6a343df9..bbf587f9a3 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -93,6 +93,7 @@ PREP(owned); PREP(player); PREP(playerSide); PREP(progressBar); +PREP(progressBar2); PREP(queueAnimation); PREP(readBooleanParameterFromModule); PREP(readNumericParameterFromModule); diff --git a/addons/common/functions/fnc_progressBar2.sqf b/addons/common/functions/fnc_progressBar2.sqf new file mode 100644 index 0000000000..d98ff11f37 --- /dev/null +++ b/addons/common/functions/fnc_progressBar2.sqf @@ -0,0 +1,80 @@ +/* +* Author: commy2, Glowbal, PabstMirror +* +* Draw progress bar and execute given function if succesful. +* +* Argument: +* 0: NUMBER - Total Time (in game "time" seconds) +* 1: ARRAY - Arguments, passed to condition, fail and finish +* 2: CODE or STRING - Finish: Code called or STRING raised as event. +* 3: CODE or STRING - Failure: Code called or STRING raised as event. +* 4: STRING - Localized Title +* 5: CODE - Code to check each frame +* +* Return value: +* Nothing +*/ + + #define DEBUG_MODE_FULL + +#include "script_component.hpp" + +PARAMS_4(_totalTime,_args,_onFinish,_onFail); +DEFAULT_PARAM(4,_localizedTitle,""); +DEFAULT_PARAM(5,_condition,{true}); +_player = ACE_player; + +closeDialog 0; +createDialog QGVAR(ProgressBar_Dialog); + +(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetText _localizedTitle; + +_perFrameFunction = { + PARAMS_2(_parameters,_pfhID); + EXPLODE_7_PVT(_parameters,_args,_onFinish,_onFail,_condition,_player,_startTime,_totalTime); + + _elapsedTime = time - _startTime; + + _errorCode = -1; + if (isNull (uiNamespace getVariable [QGVAR(ctrlProgressBar), controlNull])) then { + _errorCode = 1; + } else { + if (ACE_player != _player) then { + _errorCode = 2; + } else { + if (!([_args, _elapsedTime, _totalTime] call _condition)) then { + _errorCode = 3; + } else { + if (_elapsedTime >= _totalTime) then { + _errorCode = 0; + }; + }; + }; + }; + + if (_errorCode != -1) then { + closeDialog 0; + [_pfhID] call CBA_fnc_removePerFrameHandler; + if (_errorCode == 0) then { + if (typeName _onFinish == typeName "") then { + [_onFinish, [_args, _elapsedTime, _totalTime, _errorCode]] call EFUNC(common,localEvent); + } else { + [_args, _elapsedTime, _totalTime, _errorCode] call _onFinish; + }; + } else { + if (typeName _onFail == typeName "") then { + [_onFail, [_args, _elapsedTime, _totalTime, _errorCode]] call EFUNC(common,localEvent); + } else { + [_args, _elapsedTime, _totalTime, _errorCode] call _onFail; + }; + }; + } else { + //Update Progress Bar + _progress = _elapsedTime / _totalTime; + systemChat str _progress; + systemChat str (uiNamespace getVariable QGVAR(ctrlProgressBar)); + (uiNamespace getVariable QGVAR(ctrlProgressBar)) progressSetPosition _progress; + }; +}; + +[_perFrameFunction, 0, [_args, _onFinish, _onFail, _condition, _player, time, _totalTime]] call CBA_fnc_addPerFrameHandler;