media @ VU
[] readme course preface I 1 2 II 3 4 III 5 6 7 IV 8 9 10 V 11 12 afterthoughts appendix references examples resources _

talk show tell print

music-dossier-text.vr

music-dossier-text.vr (wrl ) [ flux / bitmanagement / cortona / octaga ]


  
  
  PROTO TextElement[
          exposedField SFString text ""
          exposedField SFString uri ""
          exposedField SFString email ""
          exposedField SFString webpage ""
          exposedField SFString style "PLAIN"
          exposedField SFString color "black"
   
  ]{}
  
  PROTO LineElement[
          exposedField MFNode line []
  ]{}
  
  PROTO TextLineElement[
          exposedField MFString text []
          exposedField SFVec3f translation 0 0 0
          field SFString textFont "fonts/aerial.bmp"
          field SFString style "PLAIN"
          field MFString family ["TEXTURE 0 255 16 16 0.625 0 0"] 
          field SFFloat fontSize 1
          eventIn SFString uri
          eventIn SFString email
          eventIn SFString webpage
          eventIn SFNode addURLHandler
          eventIn        SFFloat setYPos
  ]
  {
  DEF textTransform Transform {
                  translation IS        translation                
                  children [
                          Shape { 
                                  appearance DEF fontAppearance Appearance { 
                                      texture ImageTexture {} 
                                  } 
                                  geometry DEF textNode Text 
                                  { 
                                          string IS text
                                  fontStyle FontStyle { 
                                                  family IS family
                                                  style IS style
                                                  size IS        fontSize
                                          }
                                  } 
                          }
                  ]
          }
          Script {
                  directOutput TRUE
                  field SFNode textTransform USE textTransform
                  eventIn SFString uri IS uri
                  eventIn        SFString email IS email
                  eventIn        SFString webpage IS webpage
                  eventIn        SFNode addUrlHandler IS addURLHandler
                  eventIn        SFTime wordClicked
                  eventIn        SFBool wordButtonDown
                                  
                  eventOut SFString sendURI
                  eventOut SFString sendURIemail
                  eventOut SFString sendURIwebpage
                  eventOut SFString sendActiveURI
                  eventIn        SFFloat        setYPos IS setYPos
                  field SFString textFont IS textFont
                  field SFBool linked FALSE
                  field SFBool is_email FALSE
                  field SFNode fontAppearance USE fontAppearance
                  
                  url "javascript:
                  function initialize()
                  {                        
                          //var fontTexture;
                          //if(linked) fontTexture=linkFont;
                          //else fontTexture=textFont;
                          fontAppearance.texture = new SFNode('ImageTexture { url \"'+textFont+'\" } ');        // standaard font                
                  }
  
                  function setYPos(pos)
                  {                        
                          textTransform.translation.y=pos;                        
                  }
  
                  function wordClicked()
                  {
                             if (uri !=''){ 
                                  sendURI = uri;
                                  
                          }
                          
                          else if (email !=''){
                          sendURIemail = email;
                          
  
                          }
  
                          else if (webpage !=''){
                          sendURIwebpage = webpage;
  
                          }
                  }
  
                  function wordButtonDown(down)
                  {
                          if(!down) return;
                          sendActiveURI=uri; 
                  }
  
                  function addUrlHandler(value)
                  {                        
                          if(uri !=''|| email !='' || webpage !='')
                          {
                                   var sensor = Browser.createVrmlFromString('TouchSensor{}');
                                   textTransform.addChildren = sensor;
                                   Browser.addRoute(sensor[0],'touchTime',Browser.getScript(),'wordClicked');
                                   Browser.addRoute(sensor[0],'isActive',Browser.getScript(),'wordButtonDown');
                                   Browser.addRoute(Browser.getScript(),'sendURI',value,'uriClicked');
                                   Browser.addRoute(Browser.getScript(),'sendURIemail',value,'emailClicked');
                                   Browser.addRoute(Browser.getScript(),'sendURIwebpage',value,'webpageClicked');
                                   Browser.addRoute(Browser.getScript(),'sendActiveURI',value,'uriActive');
                                   linked=true;
                          }
                          
          
                  }
          
                  "
          }
  }
  
  PROTO ScrollPane [
          field SFInt32 maxCharsOnALine 55
          field SFFloat charAspect 0.5
          field SFFloat minMargin 0.03
          field SFFloat lineSpacing 1
          field SFFloat charSpacing 1
          field SFString textFont "fonts/aerial.bmp"
          field SFString blueFont "fonts/aerial_blue.bmp"
          field SFString redFont "fonts/aerial_red.bmp"
          field SFString greenFont "fonts/aerial_green.bmp"
          field SFString linkFont "fonts/aerial_link.bmp"
          field SFString boldFont "fonts/aerial_bold.bmp"
          eventIn        SFString loadURL
          eventIn        SFString setText
          eventIn SFInt32 scrollText
          eventOut SFString linkClicked
          eventOut SFString activeLink
  #        eventOut SFString emailClicked
          
  
  ]
  {
          
          DEF BoxTransform Transform {                                
                  children [
                          
                          Transform {
                                  translation        -0.015 0 0
                                  children Shape {
                                          geometry Box {
                                                  size 0.97 1 0
                                          }
                                          appearance Appearance {
                                                  material DEF backgroundColor Material {
                                                          diffuseColor 1 1 1
                                                  }
                                          }
                                  }
                          }
  
                          
                          Transform {
                                  translation        0.485 0 0
                                  children [
  
                                          Transform {
                                                  translation        0 0.485 0
                                                  children [
                                                          DEF UP TouchSensor        {}
                                                          DEF boxShape Shape {
                                                                  geometry Box {
                                                                          size .03 .03 0
                                                                  }
                                                                  appearance Appearance {
                                                                          material Material {
                                                                                  diffuseColor 0 0 0
                                                                                  emissiveColor 0 .0353 0
                                                                                  specularColor 0 0 1
                                                                                  ambientIntensity 0
                                                                                  shininess 0
                                                                          }
                                                                  }
                                                          }
                                                          Transform
                                                          {
                                                                  scale .028 .028 0.028
                                                                  children DEF arrowShape Shape
                                                                  {
                                                                          geometry Extrusion
                                                                          {
                                                                                  crossSection [-0.5 0.5, 0.5 0.5, 0 -0.5,-0.5 0.5]
                                                                                  spine [0 0 -0.03, 0 0 0.03]
                                                                          }
                                                                          appearance DEF arrowAppearance Appearance
                                                                          {
                                                                                  material Material {
                                                                                          diffuseColor .169 .31 .329
                                                                                          specularColor .04 .06 .83
                                                                                          ambientIntensity 0
                                                                                          shininess 0
                                                                                  }
  
                                                                          }
                                                                  }
                                                          }
                                                  ]
                                          }
                                          Transform {
                                                  translation        0 -0.485 0
                                                  children [
                                                          DEF DOWN TouchSensor {}
                                                          USE        boxShape
                                                          Transform
                                                          {
                                                                  rotation 0 0 1 3.14159265358979
                                                                  scale .028 .028 0.028
                                                                  children USE arrowShape
                                                          }
                                                  ]
                                          }
                                          
                                          Group
                                          {
                                                  children
                                                  [
                                                          DEF        scrollbarSensor TouchSensor        {}
                                                          DEF        scrollSensor PlaneSensor
                                                          {
                                                                  maxPosition        0  0.455
                                                                  minPosition        0 -0.455
                                                                  offset 0 0.455 0
                                                          }
                                                          Shape {
                                                                  geometry Box {
                                                                          size .03 0.94 0
                                                                  }
                                                                  appearance Appearance {
                                                                          material Material {
                                                                                  diffuseColor 0 0 0
                                                                                  specularColor .04 .06 .83
                                                                                  ambientIntensity .039
                                                                                  shininess 0
                                                                          }
                                                                  }
                                                          }
  
                                                          DEF scrollTransform Transform {
                  
                                                                  translation        0 0.455 0                                                
                                                                  children [
                                                                          DEF scrollSwitch Switch
                                                                          {
                                                                                  whichChoice        0
                                                                                  choice Shape
                                                                                  {
                                                                                          geometry Sphere        {
                                                                                                  radius 0.015
                                                                                          }
                                                                                          appearance USE arrowAppearance
                                                                                  }
                                                                          }
                                                                  ]
                                                                  ROUTE scrollSensor.translation_changed TO scrollTransform.translation                                                
                                                          }                                                         
                                                  ]
  
                                          }
                            
                                  ]
                          }
  
                          
  
                  ]
          }                                                                        
                  
          DEF        group Transform{}
  
          DEF TIMER TimeSensor {loop TRUE enabled FALSE cycleInterval 0.15}
          
  
          DEF S1 Script {
                  directOutput TRUE
                  field SFNode world USE BoxTransform
                  field SFNode scrollTransform USE scrollTransform
                  field SFNode scrollSensor USE scrollSensor
                  field SFNode scrollbarSensor USE scrollbarSensor                
                  field SFNode group USE group
                  field SFNode scrollSwitch USE scrollSwitch
                  
                  field SFString textFont IS textFont
                  field SFString linkFont IS linkFont
                  field SFString blueFont IS blueFont                
                  field SFString greenFont IS greenFont        
                  field SFString redFont IS redFont
                  field SFString boldFont IS boldFont        
                  field SFInt32 maxCharsOnALine IS maxCharsOnALine
                  field SFFloat charAspect IS        charAspect
                  field SFFloat lineSpacing IS lineSpacing
                  field SFFloat charSpacing IS charSpacing
                  field SFFloat minMargin IS minMargin
                  field SFFloat charHeight 0
                  field SFFloat charWidth 0
                  field SFFloat marginX 0
                  field SFFloat marginY 0
                  
                  field SFInt32 pageLength 0
                  field SFInt32 lastPosition 0
                  field SFFloat maxScrollY 0.455
                  field SFFloat scrollBarWidth 0.03                
  
                  eventIn SFString loadURL IS        loadURL
                  eventIn SFString setText IS        setText
                  
                  eventOut SFString linkClicked IS linkClicked
                  eventOut SFString activeLink IS        activeLink
  #                eventOut SFString emailClicked IS emailClicked
                  field MFNode inputText []
                  eventIn        SFTime time
                  eventOut SFBool        timerEnabled
                  eventOut SFTime        timerStartTime
                  eventOut SFColor backgroundColor
                  field MFNode lines []
                  field MFNode currentLines []
                  field SFBool direction TRUE
  
                  
                  eventIn        SFString uriClicked        
                  eventIn        SFString uriActive
                  eventIn        SFString emailClicked
                  eventIn        SFString webpageClicked
                  eventIn        SFBool up
                  eventIn        SFBool down
                  eventIn        SFVec3f        scrollChanged
                  eventIn SFBool scrollbarClicked
                  eventIn        SFInt32 scrollText IS scrollText
  
                  field SFInt32 position 0
                  url "javascript:
                   function initialize()
                   {
                           // maxCharsOnALine*charWidth+ <-- room needed for letters
                           // (maxCharsOnALine-1)*(charSpacing-1)*charWidth <-- room needed for spacing
                           // =1-(2*minMargin)-scrollBarWidth <-- total room available                         
                           charWidth=(1-(2*minMargin)-scrollBarWidth)/(maxCharsOnALine+(maxCharsOnALine-1)*(charSpacing-1));
                           charHeight=charWidth/charAspect;
                           
                           //pageLength*charHeight+(pageLength-1)*(lineSpacing-1)*charHeight<=1-(2*minMargin)
                           pageLength=(((1-(2*minMargin))/charHeight)+lineSpacing-1)/lineSpacing;
  
                           if(pageLength<1)
                           {
                                   pageLength=1;
                                   if(1-(2*minMargin)-charHeight<0)
                                   {
                                          charHeight=1-(2*minMargin);
                                          charWidth=charHeight*charAspect;
                                   }
                           }                 
  
                           marginX=((1-scrollBarWidth)-(maxCharsOnALine*charSpacing*charWidth)+((charSpacing-1)*charWidth))/2;
                           marginY=(1-(pageLength*lineSpacing*charHeight)+((lineSpacing-1)*charHeight))/2;
                           if(marginX<0) marginX=0;
                           if(marginY<0) marginY=0; 
                           if(linkFont=='fonts/aerial_link_black.bmp')backgroundColor= new SFColor(0,0,0);
                           else backgroundColor= new SFColor(1,1,1);
                   }
  
                   function loadURL(url)
                   {
                           //print('loading url' +url);
                          // Browser.loadURL('javascript:loadNewURL(\"'+url+'\");');
                   }
  
                   function setText(text)
                   {                        
                          createTextNodes(text);                        
                          setTextNodes();                        
                          position=0;
                          if(lines.length<=pageLength)
                          {
                                  scrollSwitch.whichChoice=-1;
                          } else
                          {
                                  scrollSwitch.whichChoice=0;
                                  resetScrollerTranslation();
                          }                
                   }
  
                   function setTextNodes()
                   {
                          //print(maxCharsOnALine);                
  
                          createTextLines();                        
                          group.children = new MFNode();
                          for(i=0;i< pageLength;i++)
                          {
                                  if(i>=lines.length) break;
                                  group.addChildren = lines[i].line;
                                  //position++;
                          }
  
                          lastPosition=lines.length-pageLength;
  
                   }
  
                   function createTextNodes(text)
                   {                         
                           //var text = 'bla g    [[interview het interview]] bla';
                           text=text+'\n';
                           //print (text);
                           var textElement;
                           var currentText = '';
                           var paragraphLength=0;
                           var lineLength=0;
                           inputText = new MFNode();
                           inputText[0]  =  Browser.createVrmlFromString( 'LineElement {}')[0];
                            //setText = new MFNode();
                           for(i=0;i< text.length;i++)
                           {                                 
                                  var character = text.charAt(i);
                                  //print(character);
                                  if(character=='\n')
                                  {
                                          style='';
                                          //print(paragraphLength);
                                          //print(lineLength);
                                          textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                          textElement.text=currentText;
                                          textElement.style=style;
                                          inputText[paragraphLength].line[lineLength] = textElement;
                                          paragraphLength++;
                                          
                                          if(i!=text.length-1) { //start the next LineElement
                                                  lineLength=0;
                                                  currentText = '';
                                                  inputText[paragraphLength]  =  Browser.createVrmlFromString( 'LineElement {}')[0];
                                          }
                                  }
                                  else if(character=='[')
                                  {
                                          if(text.charAt(i+1) =='[')
                                          {//link
                                                  style='';
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=currentText;
                                                  inputText[paragraphLength].line[lineLength] = textElement;
                                                  //print('('+currentText +')');
                                                  currentText='';
                                                  lineLength++;
                                                  var uri='';
                                                  var uriText='';
                                                  for(j=i+2;j< text.length;j++)        // uri        - location
                                                  {
                                                          if(text.charAt(j) ==' ') break;
                                                          else uri +=text.charAt(j);
                                                  }
                                                  for(j=j+1;j< text.length;j++)           // uri text
                                                  {
                                                          if(text.charAt(j) ==']') break;
                                                          else uriText +=text.charAt(j);
                                                  }
                                                  i=j+1;
                                                  //inputText[paragraphLength].line[lineLength] = Browser.createVrmlFromString( 'TextElement {text \"' +  uriText + '\" uri \"' + uri + '\" style \"' + style + '\"}')[0];
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=uriText;
                                              textElement.uri=uri;
                                                  //print('textElement.uri=uri'+ textElement.uri);
                                              textElement.style=style;
                                                  inputText[paragraphLength].line[lineLength]=textElement;
                                                  lineLength++;
                                          }
                                          else currentText+=character;
                                  }
  
                                  else if(character=='')
                                  {
                                          if(text.charAt(i+1) =='')
                                          {//email
                                                  style='';
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=currentText;
                                                  inputText[paragraphLength].line[lineLength] = textElement;
                                                  //print('('+currentText +')');
                                                  currentText='';
                                                  lineLength++;
                                                  var uri='';
                                                  var uriText='';
                                                  for(j=i+2;j< text.length;j++)
                                                  {
                                                          if(text.charAt(j) ==' ') break;
                                                          else uri +=text.charAt(j);
                                                  }
                                                  for(j=j+1;j< text.length;j++)
                                                  {
                                                          if(text.charAt(j) =='') break;
                                                          else uriText +=text.charAt(j);
                                                  }
                                                  i=j+1;
                                                  //inputText[paragraphLength].line[lineLength] = Browser.createVrmlFromString( 'TextElement {text \"' +  uriText + '\" uri \"' + uri + '\" style \"' + style + '\"}')[0];
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=uriText;
                                              textElement.email=uri;
                                                  //print('textElement.email=uri'+ textElement.email);
                                              textElement.style=style;
                                                  inputText[paragraphLength].line[lineLength]=textElement;
                                                  lineLength++;
                                          }
                                          else currentText+=character;
                                  }
  
                                  else if(character=='#')
                                  {
                                          if(text.charAt(i+1) =='#')
                                          {//extern URL
                                                  style='';
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=currentText;
                                                  inputText[paragraphLength].line[lineLength] = textElement;
                                                  //print('('+currentText +')');
                                                  currentText='';
                                                  lineLength++;
                                                  var uri='';
                                                  var uriText='';
                                                  for(j=i+2;j< text.length;j++)
                                                  {
                                                          if(text.charAt(j) ==' ') break;
                                                          else uri +=text.charAt(j);
                                                  }
                                                  for(j=j+1;j< text.length;j++)
                                                  {
                                                          if(text.charAt(j) =='#') break;
                                                          else uriText +=text.charAt(j);
                                                  }
                                                  i=j+1;
                                                  //inputText[paragraphLength].line[lineLength] = Browser.createVrmlFromString( 'TextElement {text \"' +  uriText + '\" uri \"' + uri + '\" style \"' + style + '\"}')[0];
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=uriText;
                                              textElement.webpage=uri;
                                                  //print('textElement.webpage=uri'+ textElement.webpage);
                                              textElement.style=style;
                                                  inputText[paragraphLength].line[lineLength]=textElement;
                                                  lineLength++;
                                          }
                                          else currentText+=character;
                                  }
  
                                  else if(character=='%')
                                  {
                                          var color =  containsColor(text,i+1);
                                          if(color!='')
                                          {//color
                                                  colorSize= color.length+3;
                                                  style='';
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=currentText;
                                                  inputText[paragraphLength].line[lineLength] = textElement;
                                                  //print('('+currentText +')');
                                                  currentText='';
                                                  lineLength++;
                                                  var colorText='';
                                                  for(j=i+colorSize;j< text.length;j++)
                                                  {
                                                          if(text.charAt(j) == '\n') break;
                                                          if (text.charAt(j) =='%' && text.charAt(j+1) =='%')
                                                          {
                                                                  j++;
                                                                  break;
                                                          }
                                                          else colorText +=text.charAt(j);
                                                  }
                                                  i=j+1;
                                                  //inputText[paragraphLength].line[lineLength] = Browser.createVrmlFromString( 'TextElement {text \"' +  uriText + '\" uri \"' + uri + '\" style \"' + style + '\"}')[0];
                                                  textElement = Browser.createVrmlFromString('TextElement {}')[0];
                                                  textElement.text=colorText;
                                              textElement.color=color;
                                              textElement.style=style;
                                                  inputText[paragraphLength].line[lineLength]=textElement;
                                                  lineLength++;
                                                  
                                          }
                                          else currentText+=character;
                                  }
                                     else  currentText+=character;
  
                           }
  
                                  
                                                                    
                   }
  
                   function containsColor(text,pointer)
                   {
                           if (containsColor2(text,'red%',pointer)) return 'red';
                           else if (containsColor2(text,'blue%',pointer)) return 'blue';
                           else if (containsColor2(text,'green%',pointer)) return 'green';
                           else if (containsColor2(text,'bold%',pointer)) return 'bold';
                           return '';
  
                   }
  
                   function containsColor2(text,color,pointer)
                   {
                          for(j=0;j< text.length;j++)
                          {
                                  if(j>=color.length)return true;
                                  if(text.charAt(j+pointer) != color.charAt(j)) return false;
                          }
                          return false;
                   }
  
          
                   function createTextLines()
                   {
                           //print('create lines');                         
                           lines = new MFNode();
                           var yPos=0;                         
                           for(i =0;i< inputText.length;i++)
                           {
                                   
                                   yPos = createWords(inputText[i].line,yPos);
                                   yPos++;
                                  //print(lines[i]);
                           }
                   }
  
                   function createWords(paragraph,yPos)
                   {                                                  
                           //mfnode can only contain sfnodes so create one
                           var line = Browser.createVrmlFromString( 'LineElement {}')[0];
                           if(paragraph.length==0)
                           {
                                   lines[yPos] = line;
                           }
                           else
                           {
                                   var currentLineLength=0;
                                   for(i =0;i< paragraph.length;i++)
                                   {
                                           var current = paragraph[i];
                                           var text = current.text;
                                          //print(current.text); 
                                                      
                                           while(text.length > maxCharsOnALine-currentLineLength)
                                           {
                                                   for(j=maxCharsOnALine-currentLineLength;j>=0;j--)
                                                   {
                                                           if(text.charAt(j)==' ') break;
                                                   }
                                                   if(j<0 && currentLineLength==0)
                                                   {
                                                          j=maxCharsOnALine-currentLineLength;
                                                      currentLineLength=createTextLineElement(line.line,i,text.substring(0,j-1)+ '-' ,current,yPos,currentLineLength);
                                                          text = text.substring(j-1,text.length);
                                                   }
                                                   else
                                                   {
                                                          currentLineLength=createTextLineElement(line.line,i,text.substring(0,j),current,yPos,currentLineLength);
                                                          text = text.substring(j+1,text.length);
                                                   }                                                 
                                                   lines[yPos] = line;
                                                   yPos++;
                                                   currentLineLength=0;
                                                   line = Browser.createVrmlFromString( 'LineElement {}')[0];
                                           }
                                           
                                           currentLineLength=createTextLineElement(line.line,i,text,current,yPos,currentLineLength);
                                           //print(currentLineLength);
                                           lines[yPos] = line;
                                           //yPos++;
                                   
                                   }
                           }
                           //new SFNode('vrmlstring');
                           //print(texts[0]);
                           return yPos;
                   }
  
                   function createTextLineElement(texts,i,text,current,yPos,currentLineLength)
                   {
                          var vrmlString='TextLineElement {';
                          var font = textFont;
                          if(current.uri!='') font = linkFont;
                          else if(current.email!='') font = linkFont;
                          else if(current.webpage!='') font = linkFont;
                          else if(current.color == 'blue') font = blueFont;
                          else if(current.color == 'green') font = greenFont;
                          else if(current.color == 'red') font = redFont;
                          else if(current.color == 'bold') font = boldFont;
                          
                          vrmlString=vrmlString+' textFont \"' + font + '\"';;
                          vrmlString=vrmlString+' fontSize ' + charHeight;
                          vrmlString=vrmlString+' style \"' + current.style + '\"';
                          vrmlString=vrmlString+' family [\"TEXTURE 0 255 16 16 '+charAspect+' '+(charSpacing-1)+' 0\"] ';
                          vrmlString=vrmlString+'}';
                          texts[i] = Browser.createVrmlFromString(vrmlString)[0];
                          texts[i].text=new MFString(text);
                          texts[i].translation = new SFVec3f(-0.5+marginX+currentLineLength*charSpacing*charWidth, 0, 0.05);//changed by olaf & changed back by Tim
                          texts[i].setYPos = 0.5-charHeight-marginY-yPos*lineSpacing*charHeight;
  
                          if(current.uri!='')
                          {                                
                                  texts[i].uri=current.uri;                                                
                                  texts[i].addURLHandler = Browser.getScript();
                          }
                                  
                          
                          if(current.email!='')
                          {                                
                                  texts[i].email=current.email;                                                
                                  texts[i].addURLHandler = Browser.getScript();
                          }
  
                          
                          if(current.webpage!='')
                          {                                
                                  texts[i].webpage=current.webpage;                                                
                                  texts[i].addURLHandler = Browser.getScript();
                          }
  
                          currentLineLength += text.length;
                          return currentLineLength;
                          
                     
                          
                  }
                   
                   
                   function uriClicked(value)
                   {                        
                          linkClicked = value;
                                  
                   }
  
                   function uriActive(value)
                   {
                           activeLink=value;
                   }
  
                   
                   function emailClicked(value)
                   {
  
                   Browser.loadURL('javascript:sendEmail(\"'+value+'\");');
  
                   }
  
                   function webpageClicked(value)
                   {
                    
                   Browser.loadURL('javascript:goToWebpage(\"'+value+'\");');
  
                   }
  
                   function time()
                   {
                           if(direction) scrollUp();
                           else scrollDown();
                   }
  
                   function up(value,eventTime)
                   {                        
                          direction = true;
                          timerStartTime=eventTime;
                          timerEnabled =value;                        
                   }
  
                   function down(value,eventTime)
                   {
                          direction = false;
                          timerStartTime=eventTime;
                          timerEnabled =value;
                   }
                   
                   function scrollUp()
                   {
                          position--;
                          if(position<0) position=0;
                          else 
                          {
                                  group.addChildren = lines[position].line;
                                  group.removeChildren = lines[position+pageLength].line;                                
                                  printText();
                          }                
                          resetScrollerTranslation();        
                   }
                   
                   function scrollDown()
                   {
                           position++;
                           if(position>lastPosition) position--; 
                           else
                           {
                                   group.removeChildren = lines[position-1].line;
                                   group.addChildren = lines[position+pageLength-1].line;                                 
                                   printText();
                           }                        
                           resetScrollerTranslation();
                   }
  
                   function scrollbarClicked(buttonDown)
                   {                         
                           if(!buttonDown) return;
                           var newY=scrollbarSensor.hitPoint.y;
                           if(newY<-maxScrollY) newY=-maxScrollY;
                           if(newY> maxScrollY) newY= maxScrollY;
                           scrollTransform.translation=new SFVec3f(0,newY,0);
                           scrollSensor.offset=new SFVec3f(0,newY,0);
                   }
  
                   function scrollChanged(scrollTranslation)
                   {
                           var scrollFactor=1-(scrollTranslation.y+maxScrollY)/(2*maxScrollY);                         
                           var scrollLine=Math.round(scrollFactor*(lastPosition+1)-0.5);
                           scrollToPosition(scrollLine);                 
                   }
  
                   function scrollToPosition(pos)
                   {
                           if(pos>lastPosition) pos=lastPosition;
                           if(pos<0) pos=0;
                           if(pos==position) return;
                           else
                           {
                                   position=pos;
                                   group.children=new MFNode();
                                   for(var i=pos;i< pos+pageLength;i++)
                                           group.addChildren=lines[i].line;                                 
                                   printText();
                           }
                   }
  
                   function scrollText(value)
                   {                         
                           scrollToPosition(position+value);
                           resetScrollerTranslation();
                   }
  
                   function resetScrollerTranslation()
                   {
                           var newY=(position+0.5)/(lastPosition+1);
                           newY += (position-lastPosition/2)/(lastPosition/2)/(2*lastPosition);
                           newY = (1-newY)*(2*maxScrollY)-maxScrollY;
                           if(newY>maxScrollY) newY=maxScrollY;
                           scrollTransform.translation=new SFVec3f(0,newY,0);
                           scrollSensor.offset=new SFVec3f(0,newY,0);
                   }
  
                   function printText()
                   {
                          currentLines = new MFNode();
                           for(i =0;i< pageLength;i++)
                          {
                                  if(i>=lines.length) break;
                                  currentLines[i] = lines[i+position];
                                  reposLines(currentLines[i].line,i);
                          }                                                                                                                                                                        
                          //textTransform = new SFVec3f(0,position*10 ,.1);
                  }
                          //text.string = currentTexts;
             
                  function reposLines(line,pos)
                  {
                           for(i=0;i< line.length;i++)
                           {
                                   line[i].setYPos = 0.5-charHeight-marginY-pos*lineSpacing*charHeight;
                           }
                  }"
  
          }
  
          ROUTE UP.isActive TO  S1.up
          ROUTE DOWN.isActive TO  S1.down
          ROUTE scrollbarSensor.isActive TO S1.scrollbarClicked
          ROUTE TIMER.cycleTime TO        S1.time
          ROUTE S1.timerStartTime        TO TIMER.startTime
          ROUTE S1.timerEnabled TO TIMER.enabled
          ROUTE scrollSensor.translation_changed TO S1.scrollChanged
          ROUTE        S1.backgroundColor TO backgroundColor.diffuseColor
          ROUTE        S1.backgroundColor TO backgroundColor.emissiveColor
  
          
          
          
  }
  
  DEF scrollPane ScrollPane {
  #        textFont "lucida.bmp"
  #        linkFont "aerial_link_black.bmp"
          charAspect 0.59375
  }
  
  Viewpoint
  {
          position 0 0 1.2071076
  }
  
  NavigationInfo {
          type "WALK"        
  }
  
  DEF script Script
  {
          field SFNode scrollPane USE        scrollPane
          eventIn        SFString linkClicked
          directOutput TRUE
          url        "javascript:
          function initialize()
          {
                  scrollPane.setText='test test';
          //                scrollPane.setText='[[Test bla bla]] sdfsdfkjhsd lkjhjsdlkfjsdf \%blue% kjhkj';
  
          }
          
          function linkClicked(link)
          {
                  print('link clicked: '+link); // doet het niet
                  scrollPane.loadURL=link;   // doet niets
                   
          }"
  }
  
  ROUTE scrollPane.linkClicked TO script.linkClicked
  
  


(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.