Package org.freeplane.view.swing.map

Source Code of org.freeplane.view.swing.map.SummaryEdgePainter

package org.freeplane.view.swing.map;

import java.awt.Graphics2D;
import java.awt.Point;

import org.freeplane.core.ui.components.UITools;
import org.freeplane.view.swing.map.edge.EdgeView;
import org.freeplane.view.swing.map.edge.SummaryEdgeView;

class SummaryEdgePainter {
  SummaryEdgePainter(NodeView parent, boolean isLeft){
    this.isLeft = isLeft;
    int maxSize = parent.getComponentCount();
    xs = new int[maxSize];
    yMins = new int[maxSize];
    yMaxs = new int[maxSize];
    level = 0;
    maxLevel = 0;
    resetLevelValues(0);
    saveCurrentValues();
  }
  private void resetLevelValues(int level) {
    if(this.isLeft)
      xs[level] = Integer.MAX_VALUE;
    else
      xs[level] = Integer.MIN_VALUE;
    yMins[level] = Integer.MAX_VALUE;
    yMaxs[level] = Integer.MIN_VALUE;
  }
  private void saveCurrentValues() {
    currentX = xs[level];
    currentY1 = yMins[level];
    currentY2 = yMaxs[level];
  }
 
  final private int yMins[];
  final private int yMaxs[];
  final private int xs[];
  private int currentX;
  private int currentY1;
  private int currentY2;
  final private boolean isLeft;
  private int level;
  private int maxLevel;
  void addChild(NodeView child){
    if(child.isLeft() != isLeft)
      return;
    setCurrentLevel(child);
        updateLevelValues(child);
   
   
  }
  private void updateLevelValues(NodeView child) {
    resetLevelValuesForStart(child);
    int spaceAround = child.getSpaceAround();
        if(child.getHeight() == 2 * spaceAround)
          return;
    int yMin = child.getY() + spaceAround;
    int yMax = child.getY() + child.getHeight() - child.getSpaceAround();
        int x;
        if (isLeft) {
            x = child.getX() + spaceAround;
        }
        else {
            x = child.getX() + child.getWidth() - spaceAround;
        }
        yMins[level] = Math.min(yMin, yMins[level]);
        yMaxs[level] = Math.max(yMax, yMaxs[level]);
    if (isLeft) {
      xs[level] = Math.min(x, xs[level]);
    }
    else {
      xs[level] = Math.max(x, xs[level]);
    }
  }
  private void resetLevelValuesForStart(NodeView child) {
    if(child.isFirstGroupNode())
      resetLevelValues(level);
    if(level > maxLevel){
      maxLevel = level;
      resetLevelValues(level);
    }
  }
  private void setCurrentLevel(NodeView child) {
    if(child.isSummary()){
      saveCurrentValues();
      resetLevelValues(level);
      level++;
    }
    else{
      level = 0;
    }
  }
  private boolean hasSummaryEdge(){
    return level > 0 && currentY1 != Integer.MAX_VALUE;
  }
 
  boolean paintSummaryEdge(Graphics2D g, NodeView source, NodeView target) {
    if(! hasSummaryEdge())
      return false;
    final Point start1 = new Point(currentX, currentY1);
    final Point start2 = new Point(currentX, currentY2);
    final NodeView parentView = target.getParentView();
    UITools.convertPointToAncestor(parentView, start1, source);
    UITools.convertPointToAncestor(parentView, start2, source);
    final EdgeView edgeView = new SummaryEdgeView(source, target, source);
    edgeView.setStart(start1);
    edgeView.paint(g);
    edgeView.setStart(start2);
    edgeView.paint(g);
    return true;
  }

  int getY1(){
    return currentY1;
  }
  int getY2(){
    return currentY2;
  }
  int getX(){
    return currentX;
  }

}
TOP

Related Classes of org.freeplane.view.swing.map.SummaryEdgePainter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.