media @ VU
music-dossier-searchBox.vr
music-dossier-searchBox.vr
(wrl
)
[ flux /
bitmanagement /
cortona /
octaga
]
#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 <enter>
{
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 {}
(C) A. Eliëns
21/5/2007
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.