IDEA: nullable button radio groups
-
This is just an idea.
️ It may be useless
It may already exist
It's definitely already solved by a simple script.
However...I wanted some buttons to show/hide some panels in my plugin, but I also needed to be able to turn all panels off. Something that comes up often for a lot of devs, I'm sure.
The button radioGroup feature is almost right for it, but just needs that one last part.
Since all the code for radio group buttons is already there, I just added a way to set specific radio groups as nullable.
PR here: https://github.com/christophhart/HISE/pull/823
Usage (snippet below):
// Set Nullable Radio Group by ID Content.setRadioGroupNullable(2, true); // Set Nullable then back to regular Radio Group Content.setRadioGroupNullable(3, true); Content.setRadioGroupNullable(3, false); // Test invalid radio group ID, console shows: // Interface:! No buttons with radio group 99 found Content.setRadioGroupNullable(99, true); // Test wrong number of arguements, console shows: // Interface:! Too few arguments: 1, (Expected: 2) Content.setRadioGroupNullable(1);Here's a demo video: https://share.cleanshot.com/v6tfjFN6
In the video:
- First row is regular radio buttons. When one is active, then one always has to remain active
- Second row is nullable radio buttons. Even after activating, they can all be turned off
- Third row is a test of making a radio group nullable then back to regular
- Fourth row is regular buttons, not in radio group - just to show normal button behaviour is still intact
Screenshot of the demo:

Here's a snippet (the nullable calls won't work unless you have the PR merged, of course):
HiseSnippet 1535.3oc0Y0saaaCElJIZq1YsnEnC6pAvkap8PVq+owsNaCyM+0YrlTi5rh0qZoknrIpLofDUR8JJPeT1iReSVeD1aP1gTx1Rqxxo1IEq9hfvCO+7cN7vCOjpiuvhFDH7QFEOdjGEY7UlcGwkC1c.gwQs2CYbMyCIARpONhzNi7HAATajgwpOTQvnvZH8u+4W1g3R3VzojPnmJXVzGwFxjSo1o0uwbcOfXSOlMLA22sUaKAeWgqHDvyplUPdDqWR5SOhnXaESzuRBFfL9dy6a0ytQSax850nQu6U0xtoSkpMITZu5ac+5zsrZXU0oAoBx3K12lIE9ckDIM.Yr1NB6QcGHNkGYfmxBX8bopAUQcAKGQ9.gqsxEUTQ6Nf4Z2YbfJ.AZoyzv1pQgsaZdHylMg9zv200SfmJQx.nwJog2pofW0jvqRB3kAjLR.o0hfzML6Z4y7jSmQgm0MaygUSGBrNkDJQ7hV4uW0bWAvAWd6gjWROvGFLQhRMpTYSL7mx+Xwh24N3tTI9nPWWB.R7SH1LA9g9hPuhiUQ.UpIqoNlyR01DK8CoYoD4.JGejf+CKfZqOQsykOGhavX6eLMPhY7SHtLaru1Z8U7iau2lXHgLP.nH.VTB1Vw9jfw1eG.TbuPoD3AeJSNHkzMahcDgbaPl7gSyloBGZ3bJD16i4gC6Aa7DNXhe+P5PPGAyCRGKDXG5oZIzBrMt5l3R6+JOpkjZuMtV44hnpJn3H7wk7f.CdLy8oxG35tqXnmfqzboM73taTtL161JrnXyW3VZRrUqgd4qgdRtRCutXgdJv7ThaHsjJ8JZbrN2k351CpETBXOlDvxaJVjwcYbJ1IjaIYBNd57krFakMwmnzp1HtBKhKFfM9mwSXPAqRaHouRtQ4a6S8bUY5ZjsINxEA3jvElf+RvjkS46QVBf1DDI3GIjzGyKUtHXe.y3+6TNNYNWrJco9YNspzoedBVJJ6Yr2OlQn7P5ZNlytlSxRhVQ9eBFE71bl7wdT9rJThhCZv+86s2iHIpBUwz.97n9RlBBF6QOANlHprUAy8nAuTJ7PFe6jHMTHWpm8ZwE01QusCwrUB.KUU8gxXuZ5YIOq0nICdKok+jj7jmWEPNg1l2wmBYZpZfnyk8VWau99TvwSXQ9kmEKpsXOXYLgAe2oWdFTGRqkSHE71rrGp0RDRqkaH8B1h5PZs7BoWFFrddFrUXlF7JKSLsdtwzKXKpyZpmSVyBYOy7sWk713+5ETy5XWk72hun5VmHTI2Myu97r.b0XU+HROpqVyWwT++Um4l1m0RcHGx3aLeBsenKwOYyU3pHnCn97gQFwzk5HQIs6WNG6Val1kEa2xlY0UGtFtDbRjjAc7bKUiP2pbFH4TlsbvDU9WiZ8w.s5yBZuyOFZ+j44qETb8DfU2oy4AsxVeLKf2clAxQwn8qMgNGvjT.qxbV9JLGqt0LsZ6IoMYEQBxvtNvY7cY+Yh61UqU5Px6CaMfx5OPl75eIgawzvsCgGC2BlPWW4cbeKZqdBeapeZDfPQTUPOLHIcljNb7sNK7EHzYmklZsjjGiZSiaBiR6TnWjxEVeVtv5ZWH+RyKoSbFJSmHlblNgowagAmLt8uzEclouTT6K4dt1x4J.fyxUFSdNqGKj6jaeAu26yH2QmokeiUKo+7oKSSuwOulRWVOYo13uPdSdMKgO8+edSwbyyxuYyk0eV37ry+99baOeIw+m1885rq7ZM9Eu4yn8J5rq7aGeY8mOsmWla6+Koqbwkn8gOo70MOTXCWbPl9EtUeGf3IXhzeh.0SSxCXxQIeThKrm897BwaX1gIsFjMFWICLhPWJXL9iEbUy8cbnVxo.bMyC9iKmuL.5IhP0sUNjH8YPFGzC+vtPRgEErNGxJUOAnwJpxjQiqnFqh.coba8fyfewSVUM1HdxpimDMjX4KdtUzCOp9bDWQSAvDW+oaJXdnZLbES8iQlLNOjYydtkUZU8ABVaQEr9hJ3cWTA2ZQErwhJ38VTAu+7ET8wqdPnTLLZaCBcXm80ujqgw9b0UA0Yqn+EXWJL4H -
@dannytaurus Seems like a useful addition to me, this is behaviour that I often have to script.
-
@David-Healey Do you think the
Content.setRadioGroupNullable()call is the right way to go about it?Since the radio group itself isn't exposed in any other way, I thought a high-level setting would be best.
-
@dannytaurus Yeah it makes sense, rather than having to apply it to individual buttons. I don't know if nullable is the most intuitive word for the behaviour.
-
@David-Healey Good point. Any suggestions?
-
@dannytaurus toggleable... lol don't use that. I can't think of anything better at the moment. Maybe someone else will chime in a with an idea.
-
@dannytaurus That's usually made on the scripting level so having this at a C++ level seems a good idea

setExclusive
allowDeselect(my preferred one)
setDeselectable
setExclusiveZeroAllowed -
-
@ustk @David-Healey Yep,
allowDeselectis good, but not for the whole function name surely?Content.allowDeselect()?I should refer to radio group, radio button, or similar, right?
-
@dannytaurus
setAllowRadioGroupDeselect()? -
@David-Healey said in IDEA: nullable button radio groups:
@dannytaurus
setAllowRadioGroupDeselect()?yep much more better
-
@ustk said in IDEA: nullable button radio groups:
@David-Healey said in IDEA: nullable button radio groups:
@dannytaurus
setAllowRadioGroupDeselect()?yep much more better


-
@ustk @David-Healey Actually, maybe the 'Allow' is redundant, since we call it with true or false.
Maybe just
setRadioGroupDeselect, like this:Content.setRadioGroupDeselect(1, true); // turn it on Content.setRadioGroupDeselect(1, false); // turn it offThoughts?
-
@dannytaurus I think the allow is good because we are saying "allow buttons in this group to be deselected"
Whereas without it we are saying "set buttons in this group to be deselected" which has a different meaning.
Also there are other similarly named functions

-
@David-Healey Nice. I'll update the name now

-
@David-Healey @ustk Function name changed in PR.