/*******************************************************************************
 * Copyright 2005-2007, 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.core.widgets;

import java.util.List;

import org.eclipse.zest.layouts.LayoutAlgorithm;

/**
 * This interface describes all Zest components that are Containers. This is an internal interface
 * and thus should not be used outside of Zest.  Implementors of this interface must include the 
 * following two methods
 *   o addNode(GraphNode)
 *   o addNode(GraphContainer)
 *   
 * These are not actually listed here because Java does not allow protected methods in
 * interfaces.
 * 
 * @author Ian Bull
 */
public interface IContainer {

	public Graph getGraph();

	// All implementers must include this method
	/* protected void addNode(GraphNode node); */

	// All implementers must include this method
	/* protected void addNode(GraphContainer container); */

	public int getItemType();

	/**
	 * Re-applies the current layout algorithm
	 */
	public void applyLayout();

	/**
	 * Sets the LayoutAlgorithm for this container and optionally applies it.
	 *  
	 * @param algorithm The layout algorithm to set
	 * @param applyLayout 
	 */
	public void setLayoutAlgorithm(LayoutAlgorithm algorithm, boolean applyLayout);

	public List getNodes();

	/* protected void highlightNode(GraphNode node); */

	/* protected void highlightNode(GraphContainer container);*/

	/* protected void unhighlightNode(GraphNode node); */

	/* protected void unhighlightNode(GraphContainer container);*/

} // end of IContainer
