Components: What is a concept map?
- A concept map consists of nodes and arcs connecting the nodes.
- Commands: change label attributes (e.g. text and text color), change fill color,
change line color, change surround shape, autosize, resize, delete, create, clone?
- Nodes should be auto sizable and user resizable
- Various shapes. At least rectangle, ellipse, rounded rectangle.
- Can vary fill color, surround color, text color.
- Have popup menus, under control of the application.
- Can be dragged to relocate.
- Can be deleted, if it has any arcs, the arcs' endpoints on this node become unanchored.
- Nodes may be anchors for arcs.
- When in "autosize" state, surrounds are always "just big enough" to contain the label; otherwise, surrounds
may be larger or smaller that the text in the label, which is centered on the center of the surround.
- Operators: change label attributes (text, color, surround...), move handle, set endpoint anchor node,
detach endpoint from anchor, delete, create, change line color, thickness?, style?, terminator graphics, clone?
- May or may not have a label, but not more than one.
- If it has a label, the label may or may not have a surround similar to that of a node.
- Has 1 or more endpoints (anchors).
- May optionally have one or more grabble "handle" (breaking point); a label is a handle.
- End points need not be anchored in a node: unanchored endponts have a specific "park" position,
and this is always maintained relative to the handle.
- If an endpoint is anchored on a node, it touchs the "nearest" edge of
that node, and this relation is always maintained (e.g.: if node moves, resizes or reshapes).
- Can be deleted without effecting any other objects.
- Have popupmenus (possibly different for handle, arc line, and endpoint) under the control of the app.
- Handles may be moved by dragging them.
- Endpoints may be anchored by dragging from the near vacinity of the endpoint and dropping into a
- The method of "unachoring" is up to the application (since some application may disallow unanchoring of arcs).
- Arcs may not be anchor objects for other arcs.
- Background of text is always transparent.
- Labels contain any printable character, length can be up to at least 1024 characters.
- Label text may be any color (all of it one color!).
- Labels are autowrapped to attempt to hit some specific aspect ratio. Line breaks only on "white space" charcters.
- No need to vary fonts -- one font for the whole map (we may eventually go to html -- not this version!).
- No operations takes place directly: any state change by an object is accomplished by constructing a command
object, dispatching it up to the chain of supervisor (containing) objects. The top-level supervisor will
perform any relivant operation and dispatch it back to the originating object, which will interpret and
execute the state change. This requirement supports undo/redo, groupware operations, and history list.
- Command objects must contain enough context information to perform an undo or its operation.
- Selected objects are visually distinguished from unselected objects.
- "Clicking" (mouse-down and mouse-up with no significant move in between) on an object selects it.
- If the click is unmodified (no shift), then all other selected objects in the map are de-selected.
- If the click is modified by a shift key, then there is not effect on the selection state of other objects.
- Multiple objects can also be selected by dragging a rectangle around them, starting with a mouse-down on
- Commands which effect all selected objects: delete, move (and others up to the discrection of the application).
- Any command applied to be group is considered a single command object.
- The library should provide a facility to save and restore a map to/from a stream. A save operation should
allow the restore operation to completely reconstruction of a map from an "empty" state.
- Applications must be able to override every aspect of behaviour of an object, including the treatment of
mouse events, the contents of popup menus, and the interpretation of all command messages.
- The appearance of all graphic objects must be completely independent of their behaviour and "individuality".
- Mouse cursors should vary (controllable by the application) to reflect changes
in the behaviour of clicking the mouse buttons. This implies that the cursor should have a different
appearance when over a node or a link than when it is over the background. If objects exhibit different
behaviour depending on the exact location of the mouse, this should be reflected by cursor changes.
- Any process that takes significant time should be accompanied by an appropriate "wait" cursor.