viewSetupFormScript()
viewBounds
. You might have been tempted to write it like this:
viewBounds.right := viewBounds.left + textWidth;The problem with this assignment is that
viewBounds
is a read-only frame that is in the package. This assignment tries to follow the proto chain back to viewBounds
in the package and modify it there (see FIGURE 6.2).
FIGURE 6.2 : One wrong way to change a slot in viewBounds
.
self.viewBounds := viewBounds; viewBounds.right := viewBounds.left + textWidth;This creates a new slot in the view, but that slot simply points to the same
viewBounds
frame as the template (see the right side of FIGURE 6.3). This is still attempting to write to read-only memory.
FIGURE 6.3 : Another wrong way to change a slot in viewBounds
.
viewBounds
correctly, you must create a whole new frame. Here's one way to do it:
local bounds := Clone(viewBounds); self. viewBounds := bounds; viewBounds.right := viewBounds.left + textWidth;First is some code that clones the
viewBounds
frame and assigns it to a local bounds
. Next, a new viewBounds
slot is created in the view with the code:
self.viewBounds := bounds;Some slot must point at the new frame, and it can't be the
viewBounds
slot in the template (the template is in pseudo-ROM and can't be changed). So, a viewBounds
slot is added to the frame (see FIGURE 6.4).
The last approach has the disadvantage that the left
, top
, and bottom
slots are duplicated in the viewBounds
frame in RAM, and in the package. A solution is to take advantage of proto inheritance. Inheritance can be used with any frame, not just for views and templates.
The best way to modify the slot is:
self. viewBounds := { _proto: viewBounds, right: viewBounds.left + textWidth, };This creates a new frame, but just protos to the old
viewBounds
so that it inherits left
, top
, and bottom
slots. FIGURE 6.5 shows the result.
FIGURE 6.4 : A better way to change a slot in viewBounds
.
FIGURE 6.5 : The best way to change a slot in viewBounds
.
An online version of Programming for the Newton using Macintosh, 2nd ed. ©1996, 1994, Julie McKeehan and Neil Rhodes.
Last modified: 1 DEC 1996