The Slate uses objects called interactors to abstract user interface events into concrete objects. One of these, the DragDropper, was used in the prototype editor. However, DragDropper does not map directly to the dynamic model for making connections. Here is the dynamic model of DragDropper.
Additional notes on the model:
States
Idle = Terminal.Idle
Ready = Terminal.Ready
Primed = Terminal.Primed
Dragging = Net.Dragging
Charged = Net.Snapped
Events
Init(source) = ()
Moving(source) = Terminal/create Net in Dragging
Drag(x,y) = Net/snap to cursor
Ready(target) = Net/snap to target
Done()[Net created] = Net/create pinned grapple
Done()[Net not created] = ()
Done(target) = Net/create edge, Net/make selected, Net/create grapples
States
Idle = Net.Selected
Ready = (?)
Primed = Net.Resisting
Dragging = Net.Dragging
Charged = Net.Snapped
Events
Init(source) = ()
Moving(source) = Net/delete edge, Net/delete grapples
Drag(x,y) = Net/snap to cursor
Ready(target) = Net/snap to target
Done() = Net/create pinned grapple
Done(target) = Net/create edge, Net/make selected, Net/create grapples
States
Idle = Net.Selected
Ready = ()
Primed = Net.Preparing
Dragging = Net'.Dragging
Charged = Net'.Snapped
Events
Init(source) = ()
Moving(source) = Net/create new Junction and Vertex,
Net/split Net and Edge in two, create Net' in Dragging
Drag(x,y) = Net'/snap to cursor
Ready(target) = Net'/snap to target
Done() = Net'/create pinned grapple
Done(target) = Net'/create edge, Net/make selected, Net/create grapples
JohnR, 20 Oct 97