#VRML V2.0 utf8 #hoi ik ben een search box #als er op de knop nieuwe zoek actie gedrukt is, #laat ik een venster zien waarin de gebruiker zijn zoek opdracht kan in toetsen #als de gebruiker op enter drukt, voer ik de zoek actie uit #ik laat daarna de zoek resultaten zien #als de gebruiker op een zoek resultaat drukt stuur ik het ID van het geklikte #resultaat naar de concept graph EXTERNPROTO KeySensor [ eventIn SFBool eventsProcessed exposedField SFBool enabled eventOut SFInt32 keyPress eventOut SFInt32 keyRelease eventOut SFInt32 actionKeyPress eventOut SFInt32 actionKeyRelease eventOut SFBool shiftKey_changed eventOut SFBool controlKey_changed eventOut SFBool altKey_changed eventOut SFBool isActive ] [ "urn:inet:blaxxun.com:node:KeySensor", "http://www.blaxxun.com/vrml/protos/nodes.wrl#KeySensor" ] EXTERNPROTO ScrollPane [ eventIn SFString loadURL eventIn SFString setText eventIn SFInt32 scrollText eventOut SFString linkClicked field SFInt32 maxCharsOnALine ] "music-dossier-text.wrl#ScrollPane" EXTERNPROTO magnify [ eventIn SFFloat transparency ] "models/buttonBar/search/search_button.wrl#ModelSearchNode" PROTO SearchBox [ eventIn MFNode setNodes eventOut SFString clickedID eventOut SFBool ready eventIn SFFloat endTransparency ]{ DEF onOffSW Switch { whichChoice 0 choice [ Group { children [ Transform { translation -3 14 0 children [ DEF searchbutton magnify {} DEF activateSearchFieldTS TouchSensor {} ] } DEF searchSwitch Switch { whichChoice -1 choice [ Group { children [ Transform { translation -3 -3.4 5 children [ Shape { geometry Text { string "Search for:" # fontStyle FontStyle { # justify "LEFT" # } } } ] } Transform { # close button translation 4.4 -3 5 children [ DEF butclosebb TouchSensor { } Shape { geometry Box { size 1 1 0.01 } appearance Appearance { texture ImageTexture { url "images/close.jpg" } material DEF closebutton Material { } } } ] } DEF search_go_button Transform { translation 2.1 -4.8 0 scale 0.4 0.4 0.4 children [ DEF search_go_butTS TouchSensor {} DEF searchgobut magnify {} ] } DEF invoerTransform Transform # search input field { translation -0.35 -4.5 5 # -0.7 -6.5 5 children [ Transform { translation 0 0 -1 children [ DEF newSearchTS TouchSensor {} Shape { appearance Appearance { material DEF invoerBox Material { ambientIntensity 0 shininess 0 } } geometry Box { size 7 1.1 0 } } ] } Transform { translation -2.7 -0.1 0 scale 20 20 20 children [ Shape { appearance Appearance { material DEF zoektekst Material { ambientIntensity 0 shininess .08 diffuseColor 0 0 0 specularColor .29 .3 .29 } } geometry DEF invoerText Text { maxExtent 0.55 fontStyle FontStyle { justify "LEFT" size 0.05 } } } ] } ] } Transform { # output field translation 0.8 -9 5 scale 8 8 1 children [ DEF searchResultsField ScrollPane { maxCharsOnALine 25 linkClicked IS clickedID } ] } ] } ] } ] } DEF cursorAnimator TimeSensor { loop TRUE enabled FALSE cycleInterval .2 } DEF keySensor KeySensor {} DEF searchOperation Script { # als touch sensor: dan switchen # add route naar keypress eventIn SFBool newSearch eventIn SFBool activateSearchField eventIn SFInt32 keyPress eventIn SFBool search_go_button field SFNode cursorAnimator USE cursorAnimator field SFNode keySensor USE keySensor field SFNode invoerText USE invoerText field SFString nieuweNaam "" field SFBool cursor FALSE eventOut SFString searchString eventIn SFBool closeSearchField eventOut SFBool ready IS ready field MFString TEST "" eventIn SFTime cursorAnimatie eventOut SFInt32 whatSearchStatus url "javascript: function initialize() { ready = true; whatSearchStatus = -1;//do not show search box at the start } function activateSearchField(value) { if (value) { whatSearchStatus = 0; // show search box newSearch(true); // activates listening for keyboard input for search } } function closeSearchField(value) { if (value) { whatSearchStatus = -1; } } function newSearch(value) { //is called when clicked on the input field or when search box is shown if (value) registerNewKeyword(); } // starts listening for keyboard input, animates cursor function registerNewKeyword() { nieuweNaam=''; if (!cursorAnimator.enabled) { cursorAnimator.enabled=true; Browser.addRoute(cursorAnimator, 'cycleTime', Browser.getScript(), 'cursorAnimatie'); Browser.addRoute(keySensor, 'keyPress', Browser.getScript(), 'keyPress'); } } // makes cursor blink function cursorAnimatie() { cursor=!cursor; invoerText.string=new MFString(nieuweNaam+(cursor?'_':' ')); } // called after go button is pressed: stops listening to input and sends query to search script function search_go_button(value){ // if(value && nieuweNaam.length!=0){ searchString = nieuweNaam; eindeRegistratie(); return; } } function keyPress(key,nu) { // if(nu==startTijd) return; if(key==13 && nieuweNaam.length!=0) // newline { searchString = nieuweNaam; eindeRegistratie(); return; } else if(key==27) { //herstelTop10(); eindeRegistratie(); return; } else if(key==8) { nieuweNaam=nieuweNaam.substring(0,nieuweNaam.length-1); } else if(key>64 && key<91 && nieuweNaam.length<20) { if(!keySensor.shiftKey_changed) key+=32; nieuweNaam+=new SFString.fromCharCode(key); } else if(((key>47 && key<58) || key==32) && nieuweNaam.length<20) { nieuweNaam+=new SFString.fromCharCode(key); } invoerText.string=new MFString(nieuweNaam+(cursor?'_':' ')); } function gaZoeken(naam) { //print('ik ga ' + naam + ' Zoeken'); } function eindeRegistratie() { cursorAnimator.enabled=false; Browser.deleteRoute(cursorAnimator, 'cycleTime', Browser.getScript(), 'cursorAnimatie'); Browser.deleteRoute(keySensor, 'keyPress', Browser.getScript(), 'keyPress'); // invoerText.string=new MFString(''); } " } ] } ROUTE searchOperation.whatSearchStatus TO searchSwitch.whichChoice ROUTE newSearchTS.isActive TO searchOperation.newSearch ROUTE activateSearchFieldTS.isActive TO searchOperation.activateSearchField ROUTE butclosebb.isActive TO searchOperation.closeSearchField ROUTE search_go_butTS.isActive TO searchOperation.search_go_button DEF searchScript Script { eventIn MFNode nodes IS setNodes eventIn SFString searchString # eventIn SFString linkClicked eventOut SFString searchResultsOut url "javascript: // checks every node if shortName contains the search string, and puts results in text link format. // the C cedille in the short names of the info items are replaced by c's to make matches between c-accent and c's possible function searchString(value) { var searchResults = ''; for (i = 0; i < nodes.length; i ++) { if (isInString(value,replaceC_Cedille(nodes[i].infoObject.shortName))) { searchResults += ' [[' + nodes[i].ID + ' ' + nodes[i].infoObject.shortName + ']]\n\n'; } } if(searchResults == '') { searchResultsOut = 'No results found for: '+ searchString;} //print('zoek resultaten' + searchResults); else{ searchResultsOut = searchResults; } } // checks if item is contained in string function isInString(item,string) { var pos = string.toLowerCase().indexOf(item.toLowerCase()); if (pos >=0) return true; else return false; } // replaces every c cedille in string with a c function replaceC_Cedille (string) { var output = ''; for (i = 0; i < string.length; i ++) { if (string.charAt(i) == 'ç') { output += 'c'; } else { output += string.charAt(i); } } return output; } " } ROUTE searchOperation.searchString TO searchScript.searchString ROUTE searchScript.searchResultsOut TO searchResultsField.setText # ROUTE searchResultsField.linkClicked TO searchScript.linkClicked DEF timer TimeSensor { loop TRUE enabled TRUE } DEF modelScript Script { eventIn SFBool rollOver eventIn SFBool rollOverGoButton eventIn SFTime time eventIn SFFloat setTransparency IS endTransparency field SFFloat beginTransparency 0 eventOut SFFloat transparency field SFTime beginTimeTransparency 0 field SFBool transparencyEffectEnabled FALSE field SFFloat totalTimeTransparency 2 eventOut SFInt32 whichchoice eventOut MFString rollOverText eventOut MFString rollOverTextGoButton url "javascript: function initialize() { transparency = beginTransparency; } // transparency effect, see buttonbar.wrl for explanation function time(value) { if (transparencyEffectEnabled) { var factor = (value - beginTimeTransparency) / totalTimeTransparency; if (factor < 1) { transparency = factor * (setTransparency - beginTransparency) + beginTransparency; } else { transparency = setTransparency; transparencyEffectEnabled = false; if (setTransparency == 1) whichchoice = -1; } } } function setTransparency (value,time) { //print('transparantie is: '); whichchoice = 0; beginTimeTransparency = time; beginTransparency = transparency; transparencyEffectEnabled = true; } function rollOver(value){ if (value){ //print ('rollOver search is true'); rollOverText = 'search'; } else{ rollOverText = ''; } } function rollOverGoButton(value){ if (value){ //print ('rollOver search is true'); rollOverTextGoButton = 'search'; } else{ rollOverTextGoButton = ''; } } " } DEF rollOverSearchText Transform { # rollover text for the search button translation -1.5 14 0 children [ Shape { geometry DEF rolloverSearchText Text { string "" } } ] } DEF rollOverSearchGoText Transform { # rollover text for the search_go button translation 3 -5 0 children [ Shape { geometry DEF rolloverSearchGoText Text { string "" fontStyle FontStyle { } } } ] } ROUTE activateSearchFieldTS.isOver TO modelScript.rollOver ROUTE search_go_butTS.isOver TO modelScript.rollOverGoButton ROUTE modelScript.rollOverTextGoButton TO rolloverSearchGoText.string ROUTE modelScript.rollOverText TO rolloverSearchText.string ROUTE timer.time TO modelScript.time ROUTE modelScript.transparency TO closebutton.transparency ROUTE modelScript.transparency TO invoerBox.transparency ROUTE modelScript.transparency TO zoektekst.transparency ROUTE modelScript.transparency TO searchbutton.transparency ROUTE modelScript.whichchoice TO onOffSW.whichChoice } SearchBox {}