
Implementing Stationery
allDataDefs and allViewDefs slot in the base template. The allDataDefs slot contains a frame of dataDefs. Here's an example which holds one dataDef:
{
|DataDef:Calliope|: GetLayout("dataDef.t"),
}
The allViewDefs slot holds a frame of frames organized by dataDef symbol. Here's an example:
{
|DataDef:Calliope|: {
default: GetLayout("viewDef1.t");
another: GetLayout("viewDef2.t");
},
}
NewtApp makes registration and unregistration very simple. It is a bit of a problem, however, that although we have constants defined for our dataDef and viewDef symbols, we're not using them in our allDataDefs and allViewDefs slots. Instead, they're duplicated--a maintenance nightmare if we ever change the symbols, and certainly a situation we should try to avoid.
It turns out there is a way to take advantage of our constants. We'll take advantage of the fact that a slot value in the slot editor can be not just a single NewtonScript statement, but a sequence of statements--the value of the sequence is the value of the last statement. Let's look at allDataDefs rewritten:
f := {}; // create an empty frame
// add a slot to f
f.(kDataDefSym) := GetLayout("dataDef.t");
// value of sequence is f
f;
And here's how we'd implement allViewDefs in order to take advantage of our constants:
f := {}; // create an empty frame
f.(kDataDefSym).(kViewDef1Sym) :=
GetLayout("viewDef1.t");
f.(kDataDefSym).(kViewDef2Sym) :=
GetLayout("viewDef2.t");
// value of sequence is f
f;
An online version of Programming for the Newton using Macintosh, 2nd ed. ©1996, 1994, Julie McKeehan and Neil Rhodes.
Last modified: 1 DEC 1996