TODO/User interface toolkit/Cloner proposal
A cloner is a panel containing nodes it can clone when we load a script.
rows | V_INT | Number of rows; number of clone generated |
rowHeight | V_INT | Y position variation between two rows |
The cloner only clone the first level of child (one deep); and a child is cloned if his name contain <num>.
cloner foo { { ... } button button_<num> { ... } checkbox checkbox_<num> { ... } button dont_clone_me { ... } }
"num" is an abstractnode property. The cloner update some clone properties. The "num" properties of a clone is updated using the number of the clone (first clone is 0, second clone is 1...) Name of a clone is updated with <num> substitution. Properties using cvar name with <num> are also substitut. All over properties dont change anymore. Events are shared by all clone from the same node, but with can use the runtime substitution using <num>.
Node position of clones are also updated, according to the cloner properties and the initial position of the cloned node.
cloner foo { { rows } checkbox checkbox_<num> { //< substitut at loadtime min *cvar foo<num> //< substitut at loadtime current 1 delta *cvar foo<num> //< substitut at loadtime max 10 } checkbox reset_<num> { //< substitut at loadtime click { *path:parent.checkbox_<num> 0 //< substitut at runtime } num 10 //< no effect, cloner will update the value } }
Example with messageoptions
This example will generate 12 x 3 checkbox into a panel, with the right positions. The same change event action is shared by 12 checkbox, but the <num> is used to generate the right command. This code should work like the old one.
menu messageoptions { ... cloner check { { pos ... size ... rows 12 rowHeight 25 } checkbox bt_pause<num> { tooltip "_enable or disable game stopping" pos "360 0" size "20 18" image "menu/checkbox_blue" current 0 invis true change { cmd "msgoptions_toggle <num> pause;" } } checkbox bt_notify<num> { tooltip "_enable or disable displaying a notification message" pos "30 0" size "20 18" image "menu/checkbox_blue" current 0 invis true change { cmd "msgoptions_toggle <num> notify;" } } checkbox bt_sound<num> { tooltip "_enable or disable playing sound" pos "60 0" size "20 18" image "menu/checkbox_blue" current 0 invis true change { cmd "msgoptions_toggle <num> sound;" } } } ... }