-
Notifications
You must be signed in to change notification settings - Fork 735
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Initial commit * Add/remove items and switching between categories * Add ability to change mode * Save attribute and clear button * Search bar and double click to toggle * Add export button * Add attribute init function * Fix multiple selection with different items * Correct bad code and remove unneeded include * Update stringtable.xml From common pbo whitelist (modified) and a3 stringtables * Disable attribute on humans * Move includes to top ref #6407
- Loading branch information
1 parent
7735c71
commit 78e21fa
Showing
12 changed files
with
606 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
class Cfg3DEN { | ||
class Mission { | ||
class GVAR(DummyCategory) { | ||
displayName = "Dummy attribute, should never show up"; | ||
class AttributeCategories { | ||
class ACE3_Arsenal { | ||
class Attributes { | ||
class GVAR(DefaultLoadoutsListAttribute) { | ||
property = QGVAR(DefaultLoadoutsListAttribute); | ||
value = 0; | ||
expression = "if !(is3DEN) then {ace_arsenal_defaultLoadoutsList = _value};"; | ||
defaultValue = "[]"; | ||
validate = "none"; | ||
wikiType = "[[Array]]"; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
class Attributes { | ||
class GVAR(attribute): ctrlControlsGroupNoScrollbars { | ||
idc = -1; | ||
// onLoad fixes attributeLoad not happening on multiple selection with different attribute | ||
onLoad = QUOTE(private _objects = get3DENSelected 'object'; if (count _objects > 1) then {[ARR_2(_this select 0,((_objects select 0) get3DENAttribute QQGVAR(attribute)) select 0)] call FUNC(attributeLoad)}); | ||
x = QUOTE(0); | ||
y = QUOTE(0); | ||
w = QUOTE(130 * ATTRIBUTE_W); | ||
h = QUOTE(106.83 * ATTRIBUTE_H); | ||
attributeLoad = QUOTE([ARR_2(_this,+_value)] call FUNC(attributeLoad)); | ||
attributeSave = QUOTE(uiNamespace getVariable [ARR_2(QQGVAR(attributeValue),[ARR_2([], 0)])]); | ||
class controls { | ||
class ModeTitle: ctrlStatic { | ||
idc = -1; | ||
text = CSTRING(Mode); | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(0); | ||
w = QUOTE(125 * ATTRIBUTE_W); | ||
h = QUOTE(5 * ATTRIBUTE_H); | ||
}; | ||
class Mode: ctrlToolbox { | ||
idc = IDC_ATTRIBUTE_MODE; | ||
onToolBoxSelChanged = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0), _this select 1)] call FUNC(attributeMode)); | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(5 * ATTRIBUTE_H); | ||
w = QUOTE(125 * ATTRIBUTE_W); | ||
h = QUOTE(5 * ATTRIBUTE_H); | ||
rows = 1; | ||
columns = 2; | ||
strings[] = {CSTRING(Whitelist), CSTRING(Blacklist)}; | ||
}; | ||
class ItemsTitle: ModeTitle { | ||
text = CSTRING(Items); | ||
y = QUOTE(10 * ATTRIBUTE_H); | ||
}; | ||
class Category: ctrlToolboxPictureKeepAspect { | ||
idc = IDC_ATTRIBUTE_CATEGORY; | ||
onToolBoxSelChanged = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(15 * ATTRIBUTE_H); | ||
w = QUOTE(125 * ATTRIBUTE_W); | ||
h = QUOTE(20.83 * ATTRIBUTE_H); | ||
rows = 2; | ||
columns = 12; | ||
strings[] = { | ||
"\a3\Ui_F_Curator\Data\RscCommon\RscAttributeInventory\filter_0_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\PrimaryWeapon_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\SecondaryWeapon_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Handgun_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemOptic_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemAcc_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemMuzzle_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemBipod_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMagAll_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Headgear_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Uniform_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Vest_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Backpack_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Goggles_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\NVGs_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Binoculars_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Map_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Compass_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Radio_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Watch_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\GPS_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoThrow_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoPut_ca.paa", | ||
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMisc_ca.paa" | ||
}; | ||
}; | ||
class ListBackground: ctrlStatic { | ||
idc = -1; | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(35.83 * ATTRIBUTE_H); | ||
w = QUOTE(125 * ATTRIBUTE_W); | ||
h = QUOTE(65 * ATTRIBUTE_H); | ||
colorBackground[] = {1, 1, 1, 0.1}; | ||
}; | ||
class List: ctrlListNBox { | ||
idc = IDC_ATTRIBUTE_LIST; | ||
idcLeft = IDC_ATTRIBUTE_LIST_LEFT; | ||
idcRight = IDC_ATTRIBUTE_LIST_RIGHT; | ||
onLBDblClick = QUOTE(_this call FUNC(attributeDblClick)); | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(35.83 * ATTRIBUTE_H); | ||
w = QUOTE(125 * ATTRIBUTE_W); | ||
h = QUOTE(65 * ATTRIBUTE_H); | ||
drawSideArrows = 1; | ||
disableOverflow = 1; | ||
columns[] = {0.05, 0.15, 0.85}; | ||
}; | ||
class ArrowLeft: ctrlButton { | ||
idc = IDC_ATTRIBUTE_LIST_LEFT; | ||
onButtonClick = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0),false)] call FUNC(attributeSelect)); | ||
text = SYMBOL_ITEM_NONE; | ||
font = "RobotoCondensedBold"; | ||
x = QUOTE(-1); | ||
y = QUOTE(-1); | ||
w = QUOTE(5 * ATTRIBUTE_W); | ||
H = QUOTE(5 * ATTRIBUTE_H); | ||
}; | ||
class ArrowRight: ArrowLeft { | ||
idc = IDC_ATTRIBUTE_LIST_RIGHT; | ||
onButtonClick = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0),true)] call FUNC(attributeSelect)); | ||
text = SYMBOL_ITEM_VIRTUAL; | ||
}; | ||
class SearchButton: ctrlButtonPicture { | ||
idc = IDC_ATTRIBUTE_SEARCH_BUTTON; | ||
onButtonClick = QUOTE(((ctrlParentControlsGroup (_this select 0)) controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR) ctrlSetText ''; [ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); | ||
text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa"; | ||
x = QUOTE(5 * ATTRIBUTE_W); | ||
y = QUOTE(101.83 * ATTRIBUTE_H); | ||
w = QUOTE(5 * ATTRIBUTE_W); | ||
h = QUOTE(5 * ATTRIBUTE_H); | ||
colorBackground[] = {0, 0, 0, 0.5}; | ||
}; | ||
class SearchBar: ctrlEdit { | ||
idc = IDC_ATTRIBUTE_SEARCHBAR; | ||
onKeyUp = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); | ||
x = QUOTE(11 * ATTRIBUTE_W); | ||
y = QUOTE(101.83 * ATTRIBUTE_H); | ||
w = QUOTE(55 * ATTRIBUTE_W); | ||
h = QUOTE(5 * ATTRIBUTE_H); | ||
}; | ||
class ClearButton: ctrlButton { | ||
idc = IDC_ATTRIBUTE_CLEAR_BUTTON; | ||
onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeClear)); | ||
text = "$STR_disp_arcmap_clear"; | ||
x = QUOTE(105 * ATTRIBUTE_W); | ||
y = QUOTE(101.83 * ATTRIBUTE_H); | ||
w = QUOTE(25 * ATTRIBUTE_W); | ||
h = QUOTE(5 * ATTRIBUTE_H); | ||
colorBackground[] = {0, 0, 0, 0.6}; | ||
}; | ||
class ExportButton: ClearButton { | ||
idc = IDC_ATTRIBUTE_EXPORT_BUTTON; | ||
onButtonClick = QUOTE(copyToClipboard str ((uiNamespace getVariable [ARR_2(QQGVAR(attributeValue),[ARR_2([],0)])]) select 0)); | ||
text = CSTRING(buttonExportText); | ||
tooltip = CSTRING(AttributeExport_Tooltip); | ||
x = QUOTE(79 * ATTRIBUTE_W); | ||
}; | ||
}; | ||
}; | ||
}; | ||
class Object { | ||
class AttributeCategories { | ||
class ADDON { | ||
displayName = CSTRING(Mission); | ||
collapsed = 1; | ||
class Attributes { | ||
class ADDON { | ||
property = QGVAR(attribute); | ||
control = QGVAR(attribute); | ||
displayName = CSTRING(Mission); | ||
tooltip = ""; | ||
expression = QUOTE(if (!is3DEN) then {[ARR_2(_this,+_value)] call FUNC(attributeInit)}); | ||
defaultValue = "[[], 0]"; | ||
condition = "1 - objectControllable"; | ||
wikiType = "[[Array]]"; | ||
validate = "none"; | ||
value = 0; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
#include "script_component.hpp" | ||
#include "..\defines.hpp" | ||
/* | ||
* Author: mharis001 | ||
* Populates 3DEN attribute listbox with items of given category. | ||
* | ||
* Arguments: | ||
* 0: Attribute controls group <CONTROL> | ||
* | ||
* Return Value: | ||
* None | ||
* | ||
* Example: | ||
* [CONTROL, 0] call ace_arsenal_fnc_attributeAddItems | ||
* | ||
* Public: No | ||
*/ | ||
|
||
params ["_controlsGroup"]; | ||
|
||
private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY) - 1; | ||
private _filter = toLower ctrlText (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR); | ||
private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]); | ||
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]]; | ||
TRACE_3("Populating list",_category,_filter,_attributeValue); | ||
|
||
_attributeValue params ["_attributeItems", "_attributeMode"]; | ||
private _modeSymbol = [SYMBOL_ITEM_VIRTUAL, SYMBOL_ITEM_REMOVE] select _attributeMode; | ||
|
||
// Clear listbox | ||
private _listbox = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST; | ||
lnbClear _listbox; | ||
|
||
// Exit with current items (no specific category) | ||
if (_category == -1) exitWith { | ||
{ | ||
// Get appropriate config for each item (different since items can be from any category) | ||
private _config = switch (true) do { | ||
case (_x in (_configItems select 2)); | ||
case (_x in (_configItems select 15)); | ||
case (_x in (_configItems select 16)): { | ||
configFile >> "CfgMagazines" >> _x; | ||
}; | ||
case (_x in (_configItems select 6)): { | ||
configFile >> "CfgVehicles" >> _x; | ||
}; | ||
case (_x in (_configItems select 7)): { | ||
configFile >> "CfgGlasses" >> _x; | ||
}; | ||
default { | ||
configFile >> "CfgWeapons" >> _x; | ||
}; | ||
}; | ||
|
||
// Add item if not filtered | ||
private _displayName = getText (_config >> "displayName"); | ||
if (toLower _displayName find _filter > -1) then { | ||
private _picture = getText (_config >> "picture"); | ||
private _index = _listbox lnbAddRow ["", _displayName, _modeSymbol]; | ||
_listbox lnbSetData [[_index, 1], _x]; | ||
_listbox lnbSetPicture [[_index, 0], _picture]; | ||
_listbox lbSetTooltip [_index * (count lnbGetColumnsPosition _listbox), _x]; | ||
}; | ||
} forEach _attributeItems; | ||
|
||
_listbox lnbSort [1]; | ||
}; | ||
|
||
// Get list of category items | ||
private _categoryItems = switch (true) do { | ||
case (_category < 3): { | ||
_configItems select 0 select _category; | ||
}; | ||
case (_category < 7): { | ||
_configItems select 1 select (_category - 3); | ||
}; | ||
default { | ||
_configItems select (_category - 5); | ||
}; | ||
}; | ||
|
||
// Get config for current category | ||
private _config = switch (true) do { | ||
case (_category in [7, 20, 21]): { | ||
configFile >> "CfgMagazines"; | ||
}; | ||
case (_category == 11): { | ||
configFile >> "CfgVehicles"; | ||
}; | ||
case (_category == 12): { | ||
configFile >> "CfgGlasses"; | ||
}; | ||
default { | ||
configFile >> "CfgWeapons"; | ||
}; | ||
}; | ||
|
||
// Populate listbox with category items | ||
{ | ||
// Add item if not filtered | ||
private _displayName = getText (_config >> _x >> "displayName"); | ||
if (toLower _displayName find _filter > -1) then { | ||
private _picture = getText (_config >> _x >> "picture"); | ||
private _symbol = SYMBOL_ITEM_NONE; | ||
private _alpha = 0.5; | ||
|
||
// Change symbol and alpha if item already selected | ||
if (_x in _attributeItems) then { | ||
_symbol = _modeSymbol; | ||
_alpha = 1; | ||
}; | ||
|
||
private _index = _listbox lnbAddRow ["", _displayName, _symbol]; | ||
_listbox lnbSetData [[_index, 1], _x]; | ||
_listbox lnbSetPicture [[_index, 0], _picture]; | ||
_listbox lbSetTooltip [_index * (count lnbGetColumnsPosition _listbox), _x]; | ||
_listbox lnbSetColor [[_index, 1], [1, 1, 1, _alpha]]; | ||
_listbox lnbSetColor [[_index, 2], [1, 1, 1, _alpha]]; | ||
}; | ||
} forEach _categoryItems; | ||
|
||
_listbox lnbSort [1]; |
Oops, something went wrong.