Provides a Sequence diagram capability.

## Summary

A historical note: ArgoUml's Sequence diagrams now have had 3+ implementations: pre- 0.14, an incomplete 0.14 thru 0.18 implementation, which inspired an implementation by the current author, which was introduced in the 0.19 timeframe. There is also some code implemented by Peter Nabbefeld, this is described in the section: 'work_sdnested_epdv Branch Implementation'.

Sequence diagrams are different from the other diagrams in that:

- there is a lot of automatic layout to perform.
- The source and destination connection points of edges are not centred on the node they are connecting to.
- If one edge is removed it is possible that other edges must be repositioned or even deleted due to the sequence of messages.

## PRE-0.14 Implementation

- Persistent Structure (PGML / UML model)

To Do

- Save / Load procedure

To Do

- Diagram rendering / editing implementation

To Do

## work_sdnested_epdv BRANCH Implementation

- Persistent Structure (PGML / UML model)

To Do

- Save / Load procedure

To Do

- Diagram rendering / editing implementation

To Do

## 0.14 Implementation

- Persistent Structure (PGML / UML model)

To Do

- Save / Load procedure

To Do

- Diagram rendering / editing implmenentation

To Do

## 0.19 Implementation

- Persistent Structure (PGML / UML model)

The model is updated at the specification level; the object lifetimes in the sequence diagram are associated with ClassifierRoles; the edges are Messages. Each message is associated with an action, which may be Call, Create, Destroy, or return. For the model to serialize correctly, the actions have to be associated with a state; a state in a state diagram for the model is created for each message.

- Save / Load procedure

Each FigClassifierRole create a FigMessagePort fig at every point that it sends and receives a message. The FigMessagePort objects are associated with the FigEdge objects by their Y position; this is how the diagram is re-connected and the messages positioned when the diagram is loaded. The PGMLStackParser pgml implementation lets FigClassifierRole control loading itself; otherwise, the FigMessagePort object positions would be ignored.

- Diagram rendering / editing implmenentation

Each FigClassifierRole contains an array of MessageNode objects that designate a port--a point where a message can be sent or received. The array stretches the length of the lifeline. When a message is actually created, each end is associated with a FigMessagePort that is itself associated with a MessageNode in each FigClassifierRole. When drawing the activation boxes, the array of MessageNode objects is traversed by a state machine; sending or receiving a message triggers a change of state that may start or end an activation box. The state that is associated with each node also determines the messages that may be sent or received there.

## Related Documentation:

Issues