blob: 17a783c07287518922a52d7c2882d5690f8f02ee [file] [log] [blame]
/*******************************************************************************
* Copyright 2005, 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;
import java.util.Comparator;
import java.util.List;
import org.eclipse.zest.layouts.progress.ProgressListener;
/**
* A simple interface used by all layouts.
*
* Each layout Algorithm must implement the applyLayoutInternal method which actually compute the layout
*
* @author Casey Best
* @author Ian Bull
*/
public interface LayoutAlgorithm {
/**
* Apply the layout to the given entities. The entities will be moved and resized based
* on the algorithm.
*
* @param entitiesToLayout Apply the algorithm to these entities
* @param relationshipsToConsider Only consider these relationships when applying the algorithm.
* @param x The left side of the bounds in which the layout can place the entities.
* @param y The top side of the bounds in which the layout can place the entities.
* @param width The width of the bounds in which the layout can place the entities.
* @param height The height of the bounds in which the layout can place the entities.
* @param asynchronous Should the algorithm run Asynchronously
*/
public void applyLayout(LayoutEntity[] entitiesToLayout, LayoutRelationship[] relationshipsToConsider, double x, double y, double width, double height, boolean asynchronous, boolean continuous) throws InvalidLayoutConfiguration;
/**
* Returns whether or not the algorithm is currenly running
* @return True if a layout algorithm is currenly running, false otherwise
*/
public boolean isRunning();
/**
* Determines the order in which the objects should be displayed.
* Note: Some algorithms force a specific order, in which case
* this comparator will be ignored.
*/
public void setComparator(Comparator comparator);
/**
* Filters the entities and relationships to apply the layout on
*/
public void setFilter(Filter filter);
/**
* Set the width to height ratio you want the entities to use
* Note: Each layout is responsible for ensuring this ratio is used.
* Note: By default the layout will use a ratio of 1.0 for each entity.
*/
public void setEntityAspectRatio(double ratio);
/**
* Returns the width to height ratio this layout will use to set the size of the entities.
* Note: By default the layout will use a ratio of 1.0 for each entity.
*/
public double getEntityAspectRatio();
/**
* A layout algorithm could take an uncomfortable amout of time to complete. To relieve some of
* the mystery, the layout algorithm will notify each ProgressListener of its progress.
*/
public void addProgressListener(ProgressListener listener);
/**
* Removes the given progress listener, preventing it from receiving any more updates.
*/
public void removeProgressListener(ProgressListener listener);
/**
* Makes a request to this layout algorithm to stop running.
*/
public void stop();
/**
* Sets the style for this layout algorithm. This will overwrite any other style set.
* @param style
*/
public void setStyle(int style);
/**
*
* @return
*/
public int getStyle();
public void addEntity(LayoutEntity entity);
public void addRelationship(LayoutRelationship relationship);
public void removeEntity(LayoutEntity entity);
public void removeRelationship(LayoutRelationship relationship);
public void removeRelationships(List relationships);
}