<< Prev | - Up - | Next >> |
As a more interesting example let us consider a program to draw bar charts. The definition of a class to display barcharts is shown in Figure 6.1. Before any item is created in the canvas by the method bars
, the canvas widget is configured such that the scrollable region is just large enough for the barchart to be drawn.
local
O=if Tk.isColor then o(fill:wheat)
else o(stipple:gray50 fill:black)
end
D=10 D2=2*D B=10
in
class BarCanvas from Tk.canvas
meth DrawBars(Ys H X)
case Ys of nil then skip
[] Y|Yr then
{self tk(create rectangle X H X+D H-Y*D2 O)}
{self tk(create text X H+D text:Y anchor:w)}
{self DrawBars(Yr H X+D2)}
end
end
meth configure(SX SY)
{self tk(configure scrollregion:q(B ~B SX+B SY+B))}
end
meth bars(Ys)
WY=D2*({Length Ys}+1) HY=D2*({FoldL Ys Max 0}+1)
in
{self configure(WY HY)}
{self DrawBars(Ys HY D)}
end
end
end
The method DrawBars
creates for each element of the list Ys
a rectangle item as well as a text item, which both correspond to the value of the particular item. The value of O
is used as option for the rectangle items. This value depends on Tk.isColor
which is true
if the screen is a color screen, and false
otherwise. For a color screen the rectangle items are filled with the color wheat
. For a black and white screen, the rectangle items are drawn in a stippled fashion: only those pixels are drawn with the fill color (that is black
) where the stipple bitmap contains a pixel.
Figure 6.2 shows how the bar chart canvas is used in order to display data.
C={New BarCanvas tkInit(parent:W bg:white width:300 height:120)}
H={New Tk.scrollbar tkInit(parent:W orient:horizontal)}
V={New Tk.scrollbar tkInit(parent:W orient:vertical)}
{Tk.addXScrollbar C H} {Tk.addYScrollbar C V}
{Tk.batch [grid(C row:0 column:0)
grid(H row:1 column:0 sticky:we)
grid(V row:0 column:1 sticky:ns)]}
{C bars([1 3 4 5 3 4 2 1 7 2 3 4 2 4
5 6 7 7 8 4 3 5 6 7 7 8 4 3])}
<< Prev | - Up - | Next >> |