DevDocEditPartCreation - JUCMNAV/projetseg-update GitHub Wiki

Edit Part Creation

Overview

As indicated in Dev Doc UCMEditor, the graphical viewer is assigned:

  • An EditPartFactory
    • seg.jUCMNav.editparts.GraphicalEditPartFactory
    • (seg.jUCMNav.editparts.treeEditparts.TreeEditPartFactory for the outline, the same concepts apply)
  • A RootEditPart
    • seg.jUCMNav.editparts.UCMConnectionOnBottomRootEditPart
    • (seg.jUCMNav.editparts.treeEditparts.OutlineRootEditPart for the outline, the same concepts apply)
  • A model element

At this time, I recommend you read http://eclipsewiki.editme.com/GefDescription and http://eclipsewiki.editme.com/GefDescription2. Refresh the page, the images will appear.

Edit Part Hierarchy

  • When a call is made to our graphical viewer's setContents() the following code (from the framework is invoked):
/**
 * @see EditPartViewer#setContents(java.lang.Object)
 */
public void setContents(Object contents) {
   Assert.isTrue(getEditPartFactory() != null,
      "An EditPartFactory is required to call setContents(Object)");//$NON-NLS-1$
   setContents(getEditPartFactory().
         createEditPart(null, contents));
}
/**
 * @see EditPartViewer#setContents(org.eclipse.gef.EditPart)
 */
public void setContents(EditPart editpart) {
   getRootEditPart().setContents(editpart);
}

/**
 * @see org.eclipse.gef.RootEditPart#setContents(org.eclipse.gef.EditPart)
 */
public void setContents(EditPart editpart) {
   if (contents != null)
      removeChild(contents);
   contents = editpart;
   if (contents != null)
      addChild(contents, 0);
}
  • Therefore, we ask the editpart factory for a new editpart, build using our model element. This new editpart is assigned as the contents of the root editpart.
  • The editpart factory does something like this:
   public EditPart createEditPart(EditPart context, Object model) {
      if(model instanceof Map)
         return new UCMMapGraphEditPart((UCMmap)model);
                else if (model instanceof ...)
                        ...
  • How do the other editparts get created? Once created, each editpart is queried for model children (if not queried by the graphical viewer, I suppose it queries itself). The default implementation returns none, but one can overwrite getModelChildren().
    protected List getModelChildren() {
        List list = getComponents();
        list.addAll(getPathNodes());
        list.addAll(getLabels());
        list.addAll(getConditions());
        return list;
    }
  • With this list, the caller can generate new editparts for the children using the editpart factory and register them in the editpart registry.
  • The order of the children is important; we will get back to that in another document. It describes the order in which the figures are rendered. First child -> rendered at the back.
  • Quick fact: Any editpart knows its parent (getParent()) and the root edit part (getRoot()). Therefore, the root editpart is a nice location for state information such as the view mode (show all elements, hide empty points, hide empty points and stub labels).
  • Quick fact 2: Any editpart knows its viewer (getViewer()) and thus can obtain the editpart registry to communicate with other editparts. Not necessarily encouraged but can be done.
  • Obvious reminder: Any editpart is associated with a single model element and can obtain it using getModel().

-- Main.JasonKealey - 24 Jun 2005

  • DevDocEditPartCreation-Map2-EditPartCreation.jpg: