private void loadDiagram(Field field) {
    if (field != null) {

      if (logger.isDebugEnabled())
        logger.debug(
            String.format("draw field %s  status:%s", field.name, field.getSelectedStatus()));

      SvgScene scene = new SvgScene();
      scene.setZoom(owner.getZoomRate());

      _Object target = field.getTarget();
      if (target != null) {
        target.drawInternal(diagramPanel, scene, new Point(0, 0), getVM().getObjectRepository());

        diagramPanel.setScene(scene);
        Element background = scene.getDocument().getElementById("background");

        diagramPanel.addBackgroundPopupMenuListener((EventTarget) background);

        // use background node to capture mouse move event. otherwise
        // the
        // cursor could leave the object if you moving very fast.
        diagramPanel.addMouseMoveListener((EventTarget) background);
      } else {
        System.out.println("selected field is null");
      }
    }
  }
  private Field addChildObjectToTree(_Object obj) {

    // add to tree
    // int index = obj.getOwner().getChildIndex(obj);
    Field f = obj.getOwnerField();

    Element background = diagramPanel.getScene().getDocument().getElementById("background");
    SVGMatrix mat = ((SVGLocatable) background).getScreenCTM();
    Point screenPosition = diagramPanel.getPopupMenuPosition();

    SVGOMPoint elePosition = SVGUtils.screenToElement(mat, screenPosition);

    float startX = elePosition.getX() / (f.svgScale);
    float startY = elePosition.getY() / (f.svgScale);
    f.setStartPosition(startX, startY);

    treeModel.insertNodeInto(
        new DefaultMutableTreeNode(f),
        getSelectedTreeNode(),
        getSelectedTreeNode().getChildCount());

    reloadDiagram();
    return f;
  }
 private Field getActiveChildField() {
   return diagramPanel.getpopupTargetField();
 }