rem ' clock.txt sysgui = unt open (sysgui)"X0" sysgui! = bbjapi().getSysGui() window! = sysgui!.addWindow(50,50,2000,2000,"BBjClock",$00090093$,$$) window!.setCallback(window!.ON_CLOSE,"eoj") window!.setCallback(window!.ON_RESIZE,"resize") mode$ = "client" popup! = window!.addPopupMenu() analog! = popup!.addMenuItem(-1,"Analog") analog!.setCallback(analog!.ON_POPUP_ITEM_SELECT,"analog") digital! = popup!.addMenuItem(-1,"Digital") digital!.setCallback(digital!.ON_POPUP_ITEM_SELECT,"digital") client! = popup!.addMenuItem(-1,"Client") client!.setCallback(analog!.ON_POPUP_ITEM_SELECT,"client") server! = popup!.addMenuItem(-1,"Server") server!.setCallback(digital!.ON_POPUP_ITEM_SELECT,"server") gosub init process_events eoj: release rem ' ----------------------------------------------------------------- rem ' Initialize the clock rem ' ----------------------------------------------------------------- init: tz$ = bbjapi().getThinClient().getClientTimeZone().getDisplayName() PI=java.lang.Math.PI,t=-1 analog=0,digital=1,format=analog,radius=150,diameter=radius*2 print (sysgui)'backcolor'(240,240,240),'clearbg','track'(0),'opaque'(0) print (sysgui)'size'(0,diameter,diameter) print (sysgui)'font'(0,"Courier New",int(diameter/9),1) if format=analog then gosub face print (sysgui)'show'(0) rem ' Create the second timer bbjapi().createTimer(0,1,"tick") dim event$:tmpl(sysgui) return rem ' ----------------------------------------------------------------- rem ' Analog Tick rem ' ----------------------------------------------------------------- analog_tick: t=tim(mode=mode$),h=mod(int(t),12),s=int(fpt(t)*3600),m=int(s/60),s=mod(s,60) rem ' hour angle=(18-mod(t,12))*2*PI/12 x=radius+round(radius*0.6*sin(angle,16),0) y=radius+round(radius*0.6*cos(angle,16),0) print (sysgui)'pencolor'(2),'penwidth'(5),'line'(radius,radius,x,y),'line'(x,y,radius,radius) rem ' minute angle=(90-m)*2*PI/60 x=radius+round(radius*0.7*sin(angle,16),0) y=radius+round(radius*0.7*cos(angle,16),0) print (sysgui)'pencolor'(1),'penwidth'(3),'line'(radius,radius,x,y),'line'(x,y,radius,radius) rem ' second angle=(90-s)*2*PI/60 x=radius+round(radius*0.85*sin(angle,16),0) y=radius+round(radius*0.85*cos(angle,16),0) print (sysgui)'pencolor'(0),'penwidth'(1),'line'(radius,radius,x,y),'line'(x,y,radius,radius) return rem ' ----------------------------------------------------------------- rem ' Digital Tick rem ' ----------------------------------------------------------------- digital_tick: print (sysgui)'plottext'(5,radius,date(0:"%hz:%mz:%sz %p",mode=mode$)) return rem ' ----------------------------------------------------------------- rem ' Draw the Analog Clock Face rem ' ----------------------------------------------------------------- Face: print (sysgui)'clearbg','ellipse'(0,0,diameter,diameter) for hour=0 to 11 angle=hour*2*PI/12 if mod(hour,3) then offset=0.95,width=1 else offset=0.90,width=2 x1=radius+round(radius*offset*cos(angle,16),0) y1=radius+round(radius*offset*sin(angle,16),0) x2=radius+round(radius*cos(angle,16),0) y2=radius+round(radius*sin(angle,16),0) print (sysgui)'penwidth'(width),'line'(x1,y1,x2,y2),'line'(x2,y2,x1,y1) next hour return rem ' ----------------------------------------------------------------- rem ' Tick rem ' ----------------------------------------------------------------- tick: print (sysgui)'title'(0,date(0:"%hz:%mz:%sz %p",mode=mode$)),'clearbg' if format=digital then gosub digital_tick if format=analog then gosub face;gosub analog_tick return rem ' --------------------------------------------------------------- rem ' Window Resize rem ' --------------------------------------------------------------- resize: rem ' Window resized to event.x by event.y pixels event$=sysgui!.getLastEventString() radius=int(min(event.x,event.y)/2),diameter=radius*2 print (sysgui)'backcolor'(240,240,240),'clearbg' print (sysgui)'font'(0,"Courier New",int(diameter/9),1) if format=analog then gosub face gosub tick return rem ' --------------------------------------------------------------- rem ' Set the clock style to analog rem ' event.context = the window on which the popup menu was fired rem ' event.id = control on which the popup was fired rem ' event.x = popup id rem ' event.y = popup item id rem ' --------------------------------------------------------------- analog: if format = analog then return format = analog gosub face gosub tick return rem ' --------------------------------------------------------------- rem ' Set the clock style to digital rem ' event.context = the window on which the popup menu was fired rem ' event.id = control on which the popup was fired rem ' event.x = popup id rem ' event.y = popup item id rem ' --------------------------------------------------------------- digital: print (sysgui)'clearbg' format = digital gosub tick return rem ' --------------------------------------------------------------- rem ' Set the client time zone rem ' event.context = the window on which the popup menu was fired rem ' event.id = control on which the popup was fired rem ' event.x = popup id rem ' event.y = popup item id rem ' --------------------------------------------------------------- client: mode$ = "client" gosub face gosub tick return rem ' --------------------------------------------------------------- rem ' Set the server time zone rem ' event.context = the window on which the popup menu was fired rem ' event.id = control on which the popup was fired rem ' event.x = popup id rem ' event.y = popup item id rem ' --------------------------------------------------------------- server: mode$ = "server" gosub face gosub tick return