示例#1
0
  private void repositionDecorations(Container parent) {
    DiagramView diagramView = (DiagramView) parent;
    DesignView designView = diagramView.getDesignView();

    Iterator<Pattern> itr = diagramView.getPatterns();
    while (itr.hasNext()) {
      Pattern pattern = itr.next();

      Decoration decoration = designView.getDecoration(pattern);

      if ((decoration == null) || !decoration.hasComponents()) {
        continue;
      }

      double zoom = designView.getCorrectedZoom();

      // group components by positioneer
      HashMap<Positioner, List<Component>> positionerComponents =
          new HashMap<Positioner, List<Component>>();

      ComponentsDescriptor components = decoration.getComponents();
      int componentsCount = components.getComponentCount();

      for (int i = 0; i < componentsCount; i++) {
        Component c = components.getComponent(i);
        Positioner p = components.getPositioner(i);

        List<Component> list = positionerComponents.get(p);

        if (list == null) {
          list = new ArrayList<Component>(componentsCount);
          positionerComponents.put(p, list);
        }

        list.add(c);

        if (c instanceof ZoomableDecorationComponent) {
          // apply zoom
          ((ZoomableDecorationComponent) c).setZoom(zoom);
        }
      }

      // call positioners for each group
      for (Positioner p : positionerComponents.keySet()) {
        p.position(pattern, positionerComponents.get(p), zoom);
      }
    }
  }