User:Andrew Nikitin/wdselect
Jump to navigation
Jump to search
wdselect hack
allows initial values for multiple selection
for example: ((2 5);1;0) wdselect ":&.> i.10
wdselect=:3 : 0 0 wdselect y : if. 0=#y do. empty wd 'psel wdselect;pclose' return. end. 'n s e'=. 3{.x if. 2=L.y do. 'hdr sel'=. y else. hdr=. '' [ sel=. y end. 'r c'=. $,.>sel sel=. ;sel ,each LF 'c r'=. (12,5*6>r) + >. 4 8 * >. c,r c=. 205 <. 80 >. (4*#hdr) >. c r=. 128 <. r if. (<'wdselect') e. <;._2 wd 'qp' do. wd 'psel wdselect;pn '",hdr,'";' else. wd 'pc wdselect;pn *',hdr wd 'xywh 4 4 ',":c,r wd 'cc l0 listbox ws_vscroll rightmove bottommove',s#' lbs_multiplesel' wd 'setfont l0 ',PROFONT wd 'cc e0 editm; setshow e0 0' wd 'xywh ',(":14+c),' 6 36 12;cc ok button leftmove rightmove bottommove;cn "OK";' wd 'xywh ',(":14+c),' 21 36 12;cc cancel button leftmove rightmove bottommove;cn "Cancel";' wd 'pas 4 2;pcenter;' end. wd 'set e0 *',sel wd 'set l0 *',sel wd@('setselect l0 *',":)^:(_1 -.@-: n)"0 n wd 'setfocus l0' wd 'pshow' while. 1 do. wdq=. wd 'wait;q' ({."1 wdq)=. {:"1 wdq done=. (<'cancel') e. systype;syschild button=. systype -: 'button' ok=. button *. (<syschild) e. ;:'l0 ok enter' if. ok +. done do. wd (ok *: e)#'pclose' ok;".l0_select break. end. end. )
-- Andrew Nikitin <<DateTime(2010-07-28T15:45:09-0400)>>