rollout rltSub1 "Sub1" width:190 height:32 category:1 ( local resizeCallback checkbox chkOpt "Option" pos:[8,8] width:152 height:16 on rltSub1 rolledUp isOpen do ( if resizeCallback != undefined do resizeCallback() ) ) rollout rltSub2 "Sub2" width:192 height:80 category:2 ( local resizeCallback radiobuttons rdoItems "Items" pos:[8,8] width:96 height:36 labels:#("Item1", "Item2", "Item3") on rltSub2 rolledUp isOpen do ( if resizeCallback != undefined do resizeCallback() ) ) rollout rltSub3 "Sub3" width:192 height:112 category:3 ( local resizeCallback editText edtMsg "" pos:[4,8] width:180 height:96 on rltSub3 rolledUp isOpen do ( if resizeCallback != undefined do resizeCallback() ) ) rollout rltMain "Main Rollout" width:200 height:180 ( local self local subRollouts local btmControls subRollout srFloater "" pos:[-1,40] width:206 height:102 checkbutton ckbSub1 "Sub1" pos:[10,10] width:60 height:20 checkbutton ckbSub2 "Sub2" pos:[70,10] width:60 height:20 checkbutton ckbSub3 "Sub3" pos:[130,10] width:60 height:20 button btnGet "Get" pos:[10,150] width:90 height:20 button btnClose "Close" pos:[100,150] width:90 height:20 fn resize = ( local lastHeight = srFloater.height local maxHeight = 1000 local subsHeight = 4 for rlt in srFloater.rollouts do ( if rlt.open then subsHeight += (rlt.height + 25) else subsHeight += 21 ) subsHeight = amin subsHeight maxHeight srFloater.height = subsHeight local offsetY = subsHeight - lastHeight self.height += offsetY for c in btmControls do c.pos.y += offsetY ) fn addSub rlt = ( addSubRollout srFloater rlt rlt.resizeCallback = resize ) fn removeSub rlt = ( removeSubRollout srFloater rlt ) on rltMain open do ( local btmY = srFloater.pos.y + srFloater.height self = rltMain subRollouts = #(rltSub1, rltSub2, rltSub3) btmControls = (for c in self.controls where c.pos.y > btmY collect c) resize() ) on ckbSub1 changed state do ( if state then addSub subRollouts[1] else removeSub subRollouts[1] resize() ) on ckbSub2 changed state do ( if state then addSub subRollouts[2] else removeSub subRollouts[2] resize() ) on ckbSub3 changed state do ( if state then addSub subRollouts[3] else removeSub subRollouts[3] resize() ) on btnGet pressed do ( local opt = subRollouts[1].chkOpt.checked local items = subRollouts[2].rdoItems.state local msg = try subRollouts[3].edtMsg.text catch "" ss = StringStream "" format "Option: %\n\n" opt to:ss format "Items: %\n\n" items to:ss format "Text: \"%\"" msg to:ss messageBox (ss as string) title:"Result" beep:false ) on btnClose pressed do ( destroyDialog self ) ) createDialog rltMain