This package provides support for the referencing facilities mostly used in chat applications. A rough overview gives the following UML diagram:

The main idea is to have references, which links a source -- an IReferencingDocument -- with a target -- a ReferenceableDocument. The target of a reference can not only be the whole document, but also a part of it. This is represented by an IMarkedReference, which contains an IMarker. What information a marker is holding depends on the type of the document: If the document is plain text, offset and length of the marker might be enough, if the document is a drawing, the referenced object (for instance a circle) should be stored.

All these elements -- IReference, IReferencingDocument, IReferenceableDocument, and IMarker -- are the model, but they have a view counterpart: an IReference is drawn (mainly) by a ReferencePanel, the IReferencingDocument is shown by a IReferencingDocViewer, and an IReferenceableDocument by an IReferenceableDocViewer, resp.

What do we need for referencing?

  1. The data structure for storing references. It contains the mentioned elements
    1. IReference
    2. IReferencingDocument
    3. IReferenceableDocument
    4. IMarker
  2. The view elements:
    1. IReferencingDocViewer
    2. IReferenceableDocViewe
1. Anzeige: Welche Referenzen werden angezeigt Welche Referenzen werden nicht mehr anzeigt Eine Referenz wird angezeigt: a) wenn der entsprechende IReferencingDocViewer selektiert ist (bzw. die Referenz Bestandteil der Chain ist) b) wenn der MessageEditor aktiv ist und eine Referenzierende Message hat c) Wenn eine neue Message reinkommt wird automatisch deren Referenzchain angezeigt 2. Erzeugung einer Referenz 3. Selektion: Ein ListView bzw ein TreeView haben jeweils ein SelectionModel. Darüberhinaus gibt es noch das MultiSelectionModel. Die ChatView-SelectionModels werden durch die Views gesteurert, sie enthalten die durch den Nutzer selektierten Messages. Alle selektierten Messages zeigen ihre ausgehenden Referenzen. Die Selektion über das MultiSelectionModel stellt (im SINGLESELECTIONMODE) sicher, dass bei Selektion eines ISelectable nur dieses selektiert ist (alle anderen werden deselektiert und entsprechend werden deren ausgehende Referenzen verborgen).