<a> ::= B
where <a>
is a single
nontermimal, and B
is a non-empty string of terminals and/or
non-terminals
1. MouseDown waitingForLine ->
StartLine.X <- MouseDown.X
StartLine.Y <-
MouseDown.Y
StartLine!
lineDragging
|
2. MouseDown waitingForCircle ->
CircleCenter.X
<- MouseDown.X
CircleCenter.Y <- MouseDown.Y
CircleCenter!
circleDragging |
3. MouseUp
circleDragging ->
EnterCircle.X <- MouseUp.X
EnterCircle.Y <- MouseUp.Y
EnterCircle!
waitingForCircle |
Command getCmd
-> cmd |
Argument getArg -> arg |
- - - cmd arg ->
Process!
waitProcessing |
DoneProcessing waitProcessing
->
getCmd |
getArg |
on mouseUp
global PreviousName
put field "Name" into PreviousName
PurgeName
end
mouseUp
on PurgeName
put "???" into field "Name"
end
PurgeName
Transition
PropertiesButton.pressed()
{
PropertiesWindow.mapped :=
1;
PropertiesButton.enabled := false;
}
Transition
PropertiesCancelButton.pressed()
{
PropertiesWindow.mapped :=
0;
PropertiesButton.enabled := true;
}
Transition
(*.isSelectable=="true").pressed()
{
self.color :=
"red";
}
Transition bb.changed(string attr == "selectedPins",
int NewLength != 2)
{
connectButton.enabled :=
false;
}
Transition bb.changed(string attr == "selectedPins",
int NewLength == 2)
{
connectButton.enabled :=
true;
}
Transition
((*.isAButton=="true") &&
(*.status =="enabled")).released()
{
throw
self.invoke();
}
[FormName: "File System Manager"
Purpose: "For browsing and managing files"
]
[
Name: "Sort by"
ValueType: String
DefaultValue: Name
InteractionMode: CycleButton
ChangeResponse: Active
EnumeratedValues: (Name, "Last Change Date", Size)
Purpose: "How the files should be sorted"
Location: 10, 40
]
[
Name: Files
ValueType: String
DefaultSource: NoDefault
MinNumber: 1
MaxNumber: 1000
InteractionMode: Table
NumColumns: 4
ChangeResponse: Passive
Purpose: "List of files found matching the spec"
Location: 10, 40
Size: 400, 100
]