##@ list ## #@extern @vr-extern-proto-object-box.wrl PROTO ClickableList [ eventIn SFString addItem eventIn SFString removeItem exposedField MFString items [] eventOut SFString itemSelected eventOut SFInt32 itemIdSelected field SFVec2f position 0 0 field SFVec2f size 1 1 field SFFloat fontSize 0.05 exposedField SFFloat transparency 0 ] { DEF TRANSFORM Transform { children [ DEF TOUCHSENSOR TouchSensor { enabled TRUE } DEF TEXTTRANSFORM Transform { children [ Shape { appearance Appearance { material Material { emissiveColor 0 0 0 diffuseColor 0 0 0 } } geometry DEF TEXT Text { fontStyle FontStyle { family "TYPEWRITER" style "BOLD" size IS fontSize } } } ] } DEF BOXTRANSFORM Transform { children [ Shape { appearance Appearance { material Material { transparency IS transparency emissiveColor 1 1 1 diffuseColor 0 0 0 } } geometry DEF BOX box {} } ] } ] } DEF SCRIPT Script { eventIn SFTime touchTime eventIn SFVec3f hitPoint_changed field SFVec3f hitPoint 0 0 0 field SFNode transformNode USE TRANSFORM ## field SFNode boxNode USE BOX eventOut SFVec3f boxNodeSize field SFNode boxTransform USE BOXTRANSFORM field SFNode textNode USE TEXT field SFNode textTransform USE TEXTTRANSFORM field SFVec2f position IS position field SFVec2f size IS size field SFFloat fontSize IS fontSize field SFInt32 maxLength 0 field SFInt32 maxLines 0 eventIn SFString addItem IS addItem eventIn SFString removeItem IS removeItem eventIn MFString set_items IS items field MFString items IS items eventOut MFString items_changed IS items eventOut SFString itemSelected IS itemSelected eventOut SFInt32 itemIdSelected IS itemIdSelected url "vrmlscript: function initialize() { transformNode.translation = new SFVec3f(position.x,position.y,0); boxNodeSize = new SFVec3f(size.x,size.y,0.01); boxTransform.translation = new SFVec3f(size.x/2,-size.y/2,0); textTransform.translation = new SFVec3f(0,-fontSize,0.015); // The maxLength is an approximation based upon experimentation in // getting the right size... maxLength = (size.x/fontSize)*1.9; maxLines = (size.y/fontSize); line = ''; } function hitPoint_changed(value,time) { hitPoint = value; } function touchTime(value,time) { y = (-hitPoint.y)/fontSize; //Browser.print('Touched at location : ' + hitPoint + // ' is line ' + y); nrLines = items.length; if(y>=0 && y