Graph Editor - design - 3 layers 1. model for nodes / graphs - contains no display information - this is what would be browsed / manipulated by the computer - node - uid (use ruby id for the moment, don't know about persistence) - child nodes, indexed in some way - parent nodes, and indexes of this node in each - ? data, or url to data - ? type - ? name (maybe) - facility to create layout peers 2. layout - this is specifying shapes, colours, labels, etc. there may be more than one layout (diagram) for a particular node - the layout must reflect the underlying model, and should be able to send signals back to change the model when necessary? - node-layout - world coordinates - shapes - colours - labels - facility to create view peers (i.e. canvas items / canvas group), given a view (i.e. canvas) - different 3. views - tk canvases and canvas-items or other such visible images - there may be more than one view on a particular diagram, with different viewpoint (pan, zoom) - these are also responsible for getting user input, and sending signals back to the layout - canvas - canvas-item - canvas-group