sbondo1234 6 Posted March 6, 2019 Hello, I have made a list box and added 4 different option in it. Like this: //sg_dialogs.hpp class sg_list_1{ type = 5; idc = 5545; onLoad = [] spawn sg_fnc_openHelp; x = safeZoneX + safeZoneW * 0.343125; y = safeZoneY + safeZoneH * 0.37555556; w = safeZoneW * 0.10375; h = safeZoneH * 0.24; style = 16; colorBackground[] = {0.302,0.302,0.302,0.4683}; colorDisabled[] = {0.302,0.302,0.302,0.4841}; colorSelect[] = {1,1,1,1}; colorText[] = {1,1,1,0.381}; font = "PuristaMedium"; maxHistoryDelay = 0; rowHeight = 0; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1); soundSelect[] = {"\A3\ui_f\data\sound\RscListbox\soundSelect",0.09,1.0}; class ListScrollBar{ color[] = {1,1,1,1}; thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; }; }; //sg_fnc_help.sqf sg_fnc_openHelp = { disableSerialization; lbClear 5545; {lbAdd[5545,_x]} forEach ["Spawn A Vehicle","Gun On Back","Jumping","Earplugs"]; }; //initPlayerLocal.sqf call compile preprocessFile "scripts\sg_dialogs\sg_fnc_help.sqf"; It works and successfully adds the 4 items into the list box. I am having a problem when I try to make it add text to the side of the list box depending on which list box item is selected. I have another function which I am trying to make change the structured text: //sg_fnc_help.sqf sg_fnc_helpInfo = { _selectedLb = lbCurSel 5545; //2001 = idd for dialog. 5545 is idc for structured text. _lbText = ((findDisplay 2001) displayCtrl (5545)); if (_selectedLb == 0) then{ _lbText ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; }; if (_selectedLb == 1) then{ _lbText ctrlSetStructuredText parseText "You have selected Gun On Back."; }; }; //structured text I am trying to change - sg_dialogs.hpp class sg_spawnVeh{ type = 0; idc = 5546; x = safeZoneX + safeZoneW * 0.52375; y = safeZoneY + safeZoneH * 0.39222223; w = safeZoneW * 0.048125; h = safeZoneH * 0.02444445; style = 0; text = ""; colorBackground[] = {0.302,0.302,0.302,0}; colorText[] = {1,1,1,1}; font = "PuristaMedium"; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1); }; I don't get an error, nothing happens when I double click on any list box item. I haven't really used list boxes before today. Some help would be great! Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Why not use: https://community.bistudio.com/wiki/lbSetTextRight ? Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 2 minutes ago, HazJ said: Why not use: https://community.bistudio.com/wiki/lbSetTextRight ? Didn't know this existed, but thanks. I will try it out now instead of all of these functions. Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 One question though. What would the index be? Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Use _forEachIndex so it gets the current iteration. https://community.bistudio.com/wiki/Magic_Variables#forEachIndex Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 5 minutes ago, HazJ said: Use _forEachIndex so it gets the current iteration. https://community.bistudio.com/wiki/Magic_Variables#forEachIndex Should it be something like this: _selectedLb = lbCurSel 5545; _selectedLb lbSetTextRight [_forEachIndex, "You have selected Spawn A Vehicle.", "You have selected Gun On Back."]; Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Quote _control lbSetTextRight [0, "iskoda"]; private _display = findDisplay 2001; private _lb = _display displayCtrl 5545; { _x params ["_leftText", "_rightText"]; _lb lbAdd _leftText; _lb lbSetTextRight [_forEachIndex, _rightText]; } forEach [ ["Item 1", "£200"], ["Item 2", "£400"], ["Item 3", "£600"] ]; Not tested. I use this syntax. Not sure which you should really use, technical details, etc... I know that lbSetTextRight only has the one syntax. Maybe @Larrow will know which to use? Usually one is for dialogs and the other not. However never seen LB use for non dialog. Doesn't make sense to do so? Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 4 minutes ago, HazJ said: private _lb = _display displayCtrl 5545; { _x params ["_leftText", "_rightText"]; _lb lbAdd _leftText; _lb lbSetTextRight [_forEachIndex, _rightText]; } forEach [ ["Item 1", "£200"], ["Item 2", "£400"], ["Item 3", "£600"] ]; Not tested. I use this syntax. Not sure which you should really use, technical details, etc... I know that lbSetTextRight only has the one syntax. Maybe @Larrow will know which to use? Usually one is for dialogs and the other not. However never seen LB use for non dialog. Doesn't make sense to do so? Error Undefined Variable in expression: _display. Not really sure what that means. Hopefully, larrow can help with this too. Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 I edited my post above. Forgot to add _display before. Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 3 minutes ago, HazJ said: I edited my post above. Forgot to add _display before. That works great, but I think I may have explained myself wrong. I wanted the text to appear in a different box, which I thought that this did. This screenshot might help show what I was trying to do: http://prntscr.com/mtto4b Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Oh, I guess I misunderstood too. Create another control type like you did before? Use RscText or RscStructuredText - Give it an IDC, adjust x/y/w/h values, etc... class whatever : RscStructuredText { // stuff... }; _text = _display displayCtrl <IDC>; // Replace <IDC> with actual number _text ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 20 minutes ago, HazJ said: Oh, I guess I misunderstood too. Create another control type like you did before? Use RscText or RscStructuredText - Give it an IDC, adjust x/y/w/h values, etc... class whatever : RscStructuredText { // stuff... }; _text = _display displayCtrl <IDC>; // Replace <IDC> with actual number _text ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; Sorry, I have just tried it and I still have no idea what is going on. There isn't an error that pops up just nothing happens. Might help if I show you the stuff I have rn: //sg_dialogs.hpp class sg_helpInfoText_1:RscStructuredText{ type = 0; idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.01; style = 0+2; text = ""; colorBackground[] = {0.9412,0.5843,0.8549,0}; colorText[] = {1,1,1,1}; font = "PuristaMedium"; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 35) * 1); moving = false; }; //sg_fnc_help.sqf sg_fnc_openHelp = { disableSerialization; lbClear 5545; {lbAdd[5545,_x]} forEach ["Spawn A Vehicle","Gun On Back","Jumping","Earplugs"]; }; sg_fnc_helpInfo = { private _display = findDisplay 2001; _text = _display displayCtrl 5546; // Replace <IDC> with actual number _text ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; }; Whenever I double click on the option in the list box, nothing happens. Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Add disableSerialization; in sg_fnc_helpInfo too. This should fix it but if that doesn't then: No errors when calling sg_fnc_helpInfo? Correct IDD and IDCs. Try using latest base defines here. Or share your RscStructuredText defines so I can check them. I notice you set style there, etc... class sg_helpInfoText_1 : RscStructuredText { idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.01; text = "Default text..."; // to see if issue is with SQF code setting new text }; Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 10 minutes ago, HazJ said: Add disableSerialization; in sg_fnc_helpInfo too. This should fix it but if that doesn't then: No errors when calling sg_fnc_helpInfo? Correct IDD and IDCs. Try using latest base defines here. Or share your RscStructuredText defines so I can check them. I notice you set style there, etc... class sg_helpInfoText_1 : RscStructuredText { idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.01; text = "Default text..."; // to see if issue is with SQF code setting new text }; I copied the RscStructuredText from the drop box and put it in my defines.hpp, and it still didn't work even with disableSerialization on/off. I changed the text to 'Default' and it did show. Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Do you not even the default initial text? I just had a thought, do you have a background or another control there? It might be overlapping since I can see it. I just had to adjust the height value as it was extremely hard to read. // description.ext #include "test.hpp" // in root // test.hpp class test { idd = 113175; movingEnable = 1; onLoad = ""; onUnload = ""; class controls { class sg_helpInfoText_1 : RscStructuredText { idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.04; // adjusted this text = "Default text..."; // to see if issue is with SQF code setting new text }; }; }; Confirm you can see it then we can look at the next thing. Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 15 minutes ago, HazJ said: Confirm you can see it then we can look at the next thing. I could see it when I changed it to default: class sg_helpInfoText_1:RscStructuredText{ type = 0; idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.01; style = 0+2; text = "Default Text"; colorBackground[] = {0.9412,0.5843,0.8549,0}; colorText[] = {1,1,1,1}; font = "PuristaMedium"; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 35) * 1); moving = false; }; http://prntscr.com/mtu9s1 Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Ah, ctrlCommit lol. DAMN IT ARMA!!!! https://community.bistudio.com/wiki/ctrlCommit You need this. Add after ctrlSetStructuredText line. Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 2 minutes ago, HazJ said: Ah, ctrlCommit lol. DAMN IT ARMA!!!! https://community.bistudio.com/wiki/ctrlCommit You need this. Add after ctrlSetStructuredText line. Tried this and it didn't work... What's wrong? Still no error. _text ctrlCommit 10; Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Works for me? 10 is 10 seconds. // description.ext #include "test.hpp" // test.hpp class test { idd = 2001; movingEnable = 1; onLoad = "[] spawn sg_fnc_helpInfo;"; onUnload = ""; class controls { class sg_helpInfoText_1 : RscStructuredText { idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.04; text = "Default text..."; // to see if issue is with SQF code setting new text }; }; }; // init.sqf sg_fnc_helpInfo = { disableSerialization; private _display = findDisplay 2001; _text = _display displayCtrl 5546; _text ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; // instantly shows... // even with: _text ctrlCommit 10; }; // It now seems that ctrlCommit isn't needed? Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 @HazJ I am really confused then... If it works for you then what could I possibly be doing wrong? I copied your .hpp test code to see if that was the problem and it still didn't work. In fact, I stopped seeing 'Default Text'. I even tried putting my functions in init.sqf instead of its own file but that didn't work either. Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 My files: //sg_dialogs.hpp class sg_list_1 { type = 5; idc = 5545; onLoad = [] spawn sg_fnc_openHelp; onLBDblClick = [] spawn sg_fnc_helpInfo; x = safeZoneX + safeZoneW * 0.343125; y = safeZoneY + safeZoneH * 0.37555556; w = safeZoneW * 0.10375; h = safeZoneH * 0.24; style = 16; colorBackground[] = {0.302,0.302,0.302,0.4683}; colorDisabled[] = {0.302,0.302,0.302,0.4841}; colorSelect[] = {1,1,1,1}; colorText[] = {1,1,1,0.381}; font = "PuristaMedium"; maxHistoryDelay = 0; rowHeight = 0; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1); soundSelect[] = {"\A3\ui_f\data\sound\RscListbox\soundSelect",0.09,1.0}; class ListScrollBar { color[] = {1,1,1,1}; thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; }; }; class sg_helpInfoText_1:RscStructuredText{ type = 0; idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.01; style = 0+2; text = "Default Text"; colorBackground[] = {0.9412,0.5843,0.8549,0}; colorText[] = {1,1,1,1}; font = "PuristaMedium"; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 35) * 1); }; }; //initPlayerLocal.sqf call compile preprocessFile "scripts\sg_dialogs\sg_fnc_help.sqf"; //sg_fnc_help.sqf sg_fnc_openHelp = { disableSerialization; lbClear 5545; {lbAdd[5545,_x]} forEach ["Spawn A Vehicle","Gun On Back","Jumping","Earplugs"]; }; sg_fnc_helpInfo = { disableSerialization; private _display = findDisplay 2001; _text = _display displayCtrl 5546; _text ctrlSetStructuredText parseText "You have selected Spawn A Vehicle."; }; Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 Here you go. Download example. https://www.dropbox.com/s/yj9pm2bh12jbhcs/Example.VR.zip?dl=0 init.sqf: // USE CfgFunctions // https://community.bistudio.com/wiki/Arma_3_CfgFunctions disableSerialization; sg_fnc_openHelp = { disableSerialization; private _display = findDisplay 2001; private _lb = _display displayCtrl 5545; [] spawn sg_fnc_helpInfo; lbClear _lb; { _lb lbAdd _x; } forEach [ "Spawn A Vehicle", "Gun On Back", "Jumping", "Earplugs" ]; _lb ctrlAddEventHandler ["LBSelChanged", { params ["_control", "_selectedIndex"]; private _display = findDisplay 2001; _text = _display displayCtrl 5546; _text ctrlSetStructuredText parseText format ["%1", _control lbText _selectedIndex]; }]; }; sg_fnc_helpInfo = { disableSerialization; private _display = findDisplay 2001; _text = _display displayCtrl 5546; _text ctrlSetStructuredText parseText "Default"; }; waitUntil {!isNull findDisplay 46}; createDialog "test"; hintSilent "Click on an item from the listbox."; description.ext: #include "defines.hpp" #include "test.hpp" test.hpp: class test { idd = 2001; movingEnable = 1; onLoad = "[] spawn sg_fnc_openHelp;"; onUnload = ""; class controls { class sg_list_1 : RscListbox { idc = 5545; x = safeZoneX + safeZoneW * 0.343125; y = safeZoneY + safeZoneH * 0.37555556; w = safeZoneW * 0.10375; h = safeZoneH * 0.24; sizeEx = (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1); rowHeight = 0; font = "PuristaMedium"; colorText[] = {1, 1, 1, 0.381}; colorSelect[] = {1, 1, 1, 1}; colorBackground[] = {0.302, 0.302, 0.302, 0.4683}; colorDisabled[] = {0.302, 0.302, 0.302, 0.4841}; }; class sg_helpInfoText_1 : RscStructuredText { idc = 5546; x = safeZoneX + safeZoneW * 0.4675; y = safeZoneY + safeZoneH * 0.38666667; w = safeZoneW * 0.126875; h = safeZoneH * 0.04; text = "Initial"; }; }; }; defines.hpp: https://www.dropbox.com/s/pgfk0n14fiq98m4/GUI_defines_1.88.hpp?dl=1 https://community.bistudio.com/wiki/Arma_3_CfgFunctions I recommend moving structure. Currently threw everything in init.sqf for quick example/testing. How I do it personally is for each UI, I have one function that has everything relevant. All code, UI EHs, etc... 1 Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 @HazJ Thanks for the mission download, I'm not sure what I did wrong but it seemed to fix whatever I did. I Understand this line is changing the structuredText to the name of the List Box Option selected? _text ctrlSetStructuredText parseText format ["%1", _control lbText _selectedIndex]; How would I make it so whenever you clicked on an option I could write in what they see instead of them seeing the name of the option they clicked? Share this post Link to post Share on other sites
HazJ 1288 Posted March 6, 2019 A few ways. First that springs to mind is a switch block. switch (_control lbText _selectedIndex) do { case "Spawn A Vehicle" : { _text ctrlSetStructuredText parseText "Some vehicle..."; }; case "Gun on Back" : { _text ctrlSetStructuredText parseText "..."; }; default { // default... _text ctrlSetStructuredText parseText "Test"; }; }; https://community.bistudio.com/wiki/switch_do Share this post Link to post Share on other sites
sbondo1234 6 Posted March 6, 2019 8 minutes ago, HazJ said: A few ways. First that springs to mind is a switch block. switch (_control lbText _selectedIndex) do { case "Spawn A Vehicle" : { _text ctrlSetStructuredText parseText "Some vehicle..."; }; case "Gun on Back" : { _text ctrlSetStructuredText parseText "..."; }; default { // default... _text ctrlSetStructuredText parseText "Test"; }; }; https://community.bistudio.com/wiki/switch_do Sorry, where would I add this? I tried replacing it with _lb ctrlAddEventHandler and it gave some error. Share this post Link to post Share on other sites