Package org.eclipse.zest.layouts.algorithms

Source Code of org.eclipse.zest.layouts.algorithms.HorizontalShift

/*******************************************************************************
* Copyright 2006, CHISEL Group, University of Victoria, Victoria, BC, Canada.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     The Chisel Group, University of Victoria
*******************************************************************************/
package org.eclipse.zest.layouts.algorithms;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.eclipse.zest.layouts.LayoutEntity;
import org.eclipse.zest.layouts.dataStructures.InternalNode;
import org.eclipse.zest.layouts.dataStructures.InternalRelationship;

/**
* This layout shifts overlapping nodes to the right.
* @author Ian Bull
*/
public class HorizontalShift extends AbstractLayoutAlgorithm {

  private static final double DELTA = 10;
  private static final double VSPACING = 2;

  public HorizontalShift(int styles) {
    super(styles);
  }

  protected void applyLayoutInternal(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
      double boundsX, double boundsY, double boundsWidth, double boundsHeight) {
   
    ArrayList row = new ArrayList();
    for ( int i =0; i < entitiesToLayout.length; i++) {
      addToRowList(entitiesToLayout[i], row);
    }

    int heightSoFar = 0;
   
    Collections.sort(row, new Comparator() {

      public int compare(Object arg0, Object arg1) {
        // TODO Auto-generated method stub
        List a0 = (List) arg0;
        List a1 = (List) arg1;
        LayoutEntity node0 = ((InternalNode)a0.get(0)).getLayoutEntity();
        LayoutEntity node1 = ((InternalNode)a1.get(0)).getLayoutEntity();
        return (int) (node0.getYInLayout() - (node1.getYInLayout()));
      }
     
    });

    Iterator iterator = row.iterator();
    while (iterator.hasNext() ) {
      List currentRow = (List) iterator.next();
      Collections.sort(currentRow, new Comparator() {
        public int compare(Object arg0, Object arg1) {
          return (int) (((InternalNode)arg1).getLayoutEntity().getYInLayout() - ((InternalNode)arg0).getLayoutEntity().getYInLayout());
        }
      });
      Iterator iterator2 = currentRow.iterator();
      int i = 0;
      int width = (int) ((boundsWidth / 2) - currentRow.size() * 75);
     
      heightSoFar += ((InternalNode)currentRow.get(0)).getLayoutEntity().getHeightInLayout() + VSPACING*8 ;
      while(iterator2.hasNext()) {
        InternalNode currentNode = (InternalNode) iterator2.next();
       
        double location = width + 10*++i;
        currentNode.setLocation(location , heightSoFar);
        width += currentNode.getLayoutEntity().getWidthInLayout();
      }
    }
  }
 
 
  private void addToRowList( InternalNode node, ArrayList list) {
    double  layoutY = node.getLayoutEntity().getYInLayout();
   
    for ( int i = 0; i < list.size(); i++ ) {
      List currentRow = (List) list.get(i);
      InternalNode currentRowNode = (InternalNode) currentRow.get(0);
      double currentRowY = currentRowNode.getLayoutEntity().getYInLayout();
      //double currentRowHeight = currentRowNode.getLayoutEntity().getHeightInLayout();
      if ( layoutY >= (currentRowY-DELTA) && layoutY <= currentRowY + DELTA ) {
        currentRow.add(node);
        //list.add(i, currentRow);
        return;
      }
    }
    List newRow = new ArrayList();
    newRow.add(node);
    list.add(newRow);
  }

  protected int getCurrentLayoutStep() {
    // TODO Auto-generated method stub
    return 0;
  }

  protected int getTotalNumberOfLayoutSteps() {
    // TODO Auto-generated method stub
    return 0;
  }

  protected boolean isValidConfiguration(boolean asynchronous, boolean continuous) {
    // TODO Auto-generated method stub
    return true;
  }

  protected void postLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider) {
    // TODO Auto-generated method stub
  }

  protected void preLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
      double x, double y, double width, double height) {
    // TODO Auto-generated method stub

  }

  public void setLayoutArea(double x, double y, double width, double height) {
    // TODO Auto-generated method stub
  }
}
TOP

Related Classes of org.eclipse.zest.layouts.algorithms.HorizontalShift

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.