aUCBLogo Demos and Tests / textmodevalues


to textmodevalues
   
setCaseIgnored false
   
clearText
   
for [1 3][setCursor list 79 i]
   
overwritemode
   
setUpdateGraph false
   
init_boxes
   
angle=90
   
length=200
   
number=4
   
factor=1
   
x=0
   
y=0
   
drawlines
   
intbox [angle a 5 1 12]
   
intbox [length l 20 1 13]
   
intbox [number n 35 1 13]
   
floatbox [factor f 50 1 15 1.001] 
   
intbox [x x 5 3 12]
   
intbox [y y 20 3 12]
   
setCursor list 0 5
   
pr [Click with the mouse on the values to change them!]
   
run_boxes [drawlines]
end

to init_boxes
   
intboxes=[]
   
floatboxes=[]
   
activebox=-1
   
focusbox=1
end

to drawlines
   
cs ht pu setxy -length/2+-length/2+pd
   
if number [number=display intboxes.3]
   
drawit number length
   
updateGraph
end

to drawit n l
   
if n==[stop]
   
setPC hsb 360*n/number 1 1
   
fd right angle
   
drawit n-l*factor
end

to display intboxlist
   
local [display_name display_x display_y]
   
display_name=intboxlist.1
   
display_x=intboxlist.3
   
display_y=intboxlist.4
   
setCursor list display_x display_y
   
type str intboxlist.5 "\ 
   
setCursor list display_x display_y
   
(type display_name "\  thing display_name)
   
wait 0
end

to str num ch
   
if num==[output "]
   
output word ch str num-ch
end

to intbox intboxlist   ;intboxlist is: [name key x y sizex]
   
display intboxlist
   
push "intboxes intboxlist
end

to floatbox floatboxlist   ;floatboxlist is: [name key x y sizex factor]
   
display floatboxlist
   
push "floatboxes floatboxlist
end

to inputbox boxlist boxnumber
   
local [inputbox_]
   
inputbox_=boxlist.boxnumber
   
setCursor list inputbox_.3 inputbox_.4
   
type str inputbox_.5 "\ 
   
setCursor list inputbox_.3 inputbox_.4
   
(type inputbox_.1 "\ )
   
wait 0
   
local [ch w]
   
w="
   
do_until
   
[   ch=readChar
      
ifelse (or number? ch  ch==".  ch=="-)
      
[   type ch
         
wait 0
         
w=word w ch
      
][   ifelse ch==char 8
         
[   if (count w) > [w=butLast w]
            
setCursor list inputbox_.3 inputbox_.4
            
type str inputbox_.5 "\ 
            
setCursor list inputbox_.3 inputbox_.4
            
(type inputbox_.1 "\  w)
            
wait 0
         
][   tone 0 100
         
]
      
]
   
][or ch==char 13 ch==char 27]   
   
make inputbox_.1 w
end

to run_boxes updateproc
   
local [run_boxes_x run_boxes_y newactive run_boxex_c boxkey]
   
disableTextMouseEvents
   
run_boxes_x=TextMouseX
   
run_boxes_y=TextMouseY
updateVars

   
newactive=[]
   
ifelse MouseButtons != 0
   
[   foreach intboxes
      
[   if (and run_boxes_y==(?).4  
               
run_boxes_x >= (?).3  
               
run_boxes_x < (?).3+(?).5)
         
[   if MouseButtons==1
            
[   make (?).1 (thing (?).1)+1
            
]
            
if MouseButtons==2
            
[   make (?).1 (thing (?).1)-1
            
]
            
display ?
            
newactive=#
            
focusbox=#
         
]
      
]
      
foreach floatboxes
      
[   if (and run_boxes_y==(?).4  
               
run_boxes_x >= (?).3  
               
run_boxes_x < (?).3+(?).5)
         
[   if MouseButtons==1
            
[   make (?).1 (thing (?).1)*(?).6
            
]
            
if MouseButtons==2
            
[   make (?).1 (thing (?).1)/(?).6
            
]
            
display ?
            
newactive=#+1000
            
focusbox=#
         
]
      
]
      
run updateproc
      
if activebox != newactive [waitms 300 activebox=newactive]
   
][   activebox=-1
   
]
   
if key? 
   
[   run_boxex_c=readChar
      
if run_boxex_c==char 27 [enableTextMouseEvents stop]
      
boxkey=false
      
foreach intboxes
      
[   if (?).2==run_boxex_c
         
[   boxkey=true
            
focusbox=#
            
make (?).1 (thing (?).1)-1
            
display ?
            
run updateproc
         
]
         
if (upperCase (?).2)==run_boxex_c
         
[   boxkey=true
            
focusbox=#
            
make (?).1 (thing (?).1)+1
            
display ?
            
run updateproc
         
]
      
]
      
foreach floatboxes
      
[   if (?).2==run_boxex_c
         
[   boxkey=true
            
focusbox=#
            
make (?).1 (thing (?).1)/(?).6
            
display ?
            
run updateproc
         
]
         
if (upperCase (?).2)==run_boxex_c
         
[   boxkey=true
            
focusbox=#
            
make (?).1 (thing (?).1)*(?).6
            
display ?
            
run updateproc
         
]
      
]
      
if not boxkey
      
[   ifelse focusbox 1000 
         
[   inputbox intboxes focusbox   
         
][   inputbox floatboxes focusbox   
         
]
         
run updateproc
      
]
   
]
   
GC
   
run_boxes updateproc
end