spinners = {}; spinnerGraphs = {}; showSpinnerLabels = 1; attendees=45; nDisplayCols = 5; initialsize=nDisplayCols * 60; newSpinner = Function( {}, {spinner = [=> ]}, spinner["point"] = {Sin( 0 ), Cos( 0 )}; spinner["tail"] = {-Sin( 0 ), -Cos( 0 )}; spinner["currentValue"] = 0; spinner["textbox"] = Text Box( Char( 0 ) ); spinner["random"] = 0; spinner; ); newSpinnerGraph = Function( {theSpinnerNumber}, {spinnerGraph}, spinnerGraph = Eval( Substitute( Expr( V List Box( H List Box( Text Box( "Spinner Value: " ), spinners[theSpinnerNumber]["textbox"] ), Graph Box( framesize( initialsize / Ceiling( N Items( spinners ) / nDisplayCols ), initialsize / Ceiling( N Items( spinners ) / nDisplayCols ) ), X Scale( -3, 3 ), Y Scale( -3, 3 ), suppressAxes, /* Fill Color( "red" ); Transparency( .8 ); Pie( -2, 2, 2, -2, 0, 72 ); */ Local( {i, x, y}, For( i = 1, i <= attendees, i++, x = Sin( (i/attendees) * 2 * Pi() ); y = Cos( (i/attendees) * 2 * Pi() ); If( showSpinnerLabels, Text( Center Justified, {x * 2.25, (y * 2.25) - .1}, Char( i ) ) ); Line( {x * 1.75, y * 1.75}, {x * 2, y * 2} ); ) ); Oval( -2, 2, 2, -2, 0 ); Fill Color( "black" ); Transparency( 1 ); Oval( -.1, .1, .1, -.1, 1 ); Arrow( spinners[nn]["tail"], spinners[nn]["point"] ); ) ) ), Expr( nn ), Eval( theSpinnerNumber ) ) ); spinnerGraph; ); spinThem = Expr( For( i = 1, i <= N Items( spinners ), i++, spinners[i]["textbox"] << set text( "??" ); spinners[i]["random"] = Random Integer( attendees ) / attendees; ); For( j = 1, j <= 1096, j = j + N Items( spinners ) * 4, // show(nitems(spinners)); For( i = 1, i <= N Items( spinners ), i++, spinners[i]["currentvalue"] = spinners[i]["random"] - (1 - (Log( j ) - Floor( Log( j ) ))); spinners[i]["point"] = Eval List( {Sin( spinners[i]["currentvalue"] * 2 * Pi() ), Cos( spinners[i]["currentvalue"] * 2 * Pi() )} ); spinners[i]["tail"] = Eval List( {-Sin( spinners[i]["currentvalue"] * 2 * Pi() ), -Cos( spinners[i]["currentvalue"] * 2 * Pi() )} ); ); spinnerListBox << reshow; Wait( 0.01 ); ); For( i = 1, i <= N Items( spinners ), i++, spinners[i]["point"] = Eval List( {Sin( spinners[i]["random"] * 2 * Pi() ), Cos( spinners[i]["random"] * 2 * Pi() )} ); spinners[i]["tail"] = Eval List( {-Sin( spinners[i]["random"] * 2 * Pi() ), -Cos( spinners[i]["random"] * 2 * Pi() )} ); spinners[i]["textbox"] << set text( Char( spinners[i]["random"] * attendees ) ); ); ); resetEm = Expr( For( i = 1, i <= N Items( spinners ), i++, spinners[i]["point"] = {Sin( 0 ), Cos( 0 )}; spinners[i]["tail"] = {-Sin( 0 ), -Cos( 0 )}; spinners[i]["currentValue"] = 0; spinners[i]["textbox"] << set Text( Char( 0 ) ); spinners[i]["random"] = 0; ); ); addAnother = Expr( //if(Nitems(spinnerGraphs)+1/n) If( initialsize / Ceiling( (N Items( spinners ) + 1) / nDisplayCols ) < 200, showSpinnerLabels = 0 ); For( i = 1, i <= N Items( spinnerGraphs ), i++, spinnerGraphs[i][FrameBox( 1 )] << framesize( initialsize / Ceiling( (N Items( spinners ) + 1) / nDisplayCols ), initialsize / Ceiling( (N Items( spinners ) + 1) / nDisplayCols ) ) ); Insert Into( spinners, newSpinner() ); Insert Into( spinnerGraphs, newSpinnerGraph( N Items( spinners ) ) ); spinnerListBox << append( spinnerGraphs[N Items( spinnerGraphs )] ); resetEm; ); deleteOne = Expr( If( N Items( spinners ) == 1, Dialog( "Must have at least one spinner.", Button( "OK" ) ), If( initialsize / Ceiling( (N Items( spinners ) - 1) / nDisplayCols ) > 200, showSpinnerLabels = 1 ); spinnerGraphs[N Items( spinnerGraphs )] << delete; Remove From( spinnerGraphs, N Items( spinnerGraphs ), 1 ); Remove From( spinners, N Items( spinners ), 1 ); For( i = 1, i <= N Items( spinnerGraphs ), i++, spinnerGraphs[i][FrameBox( 1 )] << framesize( initialsize / Ceiling( (N Items( spinners ) ) / nDisplayCols ), initialsize / Ceiling( (N Items( spinners ) ) / nDisplayCols ) ) ); resetEm; ) ); Insert Into( spinners, newSpinner() ); Insert Into( spinnerGraphs, newSpinnerGraph( N Items( spinners ) ) ); spinWin = Expr( New Window( "Spinners", Outline Box( "Spinners", spinnerListBox = Lineup Box( N Col( nDisplayCols ), spacing( 10 ) ), For( i = 1, i <= N Items( spinnerGraphs ), i++, spinnerListBox << append( spinnerGraphs[i] ) ) ), v = V List Box( h = H List Box( Button Box( "Spin", spinThem ) ), H List Box( Button Box( "Add another spinner", addAnother ), Button Box( "Remove one spinner", deleteOne ) ) ) ) ); If( ex = Dialog( Title( " How many people?" ), vlist( hlist( "How many people? ", variable = EditNumber( attendees ) ), hlist( Button( "OK" ), Button( "Cancel" ) ) ) ); ex["button"] == 1; , attendees = ex["variable"]; spinWin );