blob: f8214f20e103db32f5a0d5d4300cbe69588de8ee [file] [log] [blame]
/*******************************************************************************
* Copyright 2005-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.core.viewers.internal;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.zest.core.widgets.Graph;
import org.eclipse.zest.core.widgets.GraphConnection;
import org.eclipse.zest.core.widgets.GraphItem;
import org.eclipse.zest.core.widgets.GraphNode;
/**
* A Graph model factory that supports the structural and visual refreshing of
* graph elements based on the content provider and label provider in the viewer
* that this factory is associated with. Model elements are created using the
* content provider supplied by getContentProvider(), and styled using the label
* provider supplied by getLabelProvider(). By the end of creation and
* refreshing, the graph model elements are expected to be styled according to
* the given label provider, however, default styles are dependant on the
* particular implementation of IStylingGraphModelFactory. Unless otherwise
* documented, clients should expect that the implementation of
* IStylingGraphModelFactory adheres to the general defaults found in
* {@link IZestGraphDefaults}.
*
* @author Del Myers
*/
public interface IStylingGraphModelFactory {
/**
* Returns the label provider used in this factory.
*
* @return the label provider used in this factory.
*/
public IBaseLabelProvider getLabelProvider();
/**
* Returns the content provider used in this factory.
*
* @return the content provider used in this factory.
*/
public IStructuredContentProvider getContentProvider();
/**
* Creates and returns the graph model from this factory based on the label
* provider and the label provider returned in getContentProvider() and
* getLabelProvider().
*
* @return the created graph model.
*/
public Graph createGraphModel(Graph model);
/**
* Creates and returns a node on the given graph based on the user model
* data, "data", using the content provider returned by
* getContentProvider(). They node will also be styled according to the
* information given by the label provider. If the node already exists in
* the graph, it is restyled and returned; no new node is created.
*
* @param graph
* the graph to create or retrieve the node on.
* @param element
* the user model data to use in the node.
* @return the node created or retrieved for the given graph.
*/
public GraphNode createNode(Graph graph, Object element);
/**
* Creates and returns a connection with the given source and destination
* objects from the user model. If the source and destination nodes don't
* exist for the given user model objects, they are created using
* createNode(GraphModel, Object). If a connection already exists for the
* given user data, but with different source or destinations, it is
* disconnected and reconnected to the given source and destination. It is
* always styled according to the label provider provided by
* getLabelProvider().
*
* @param graph
* the graph to create or retrieve the connection on.
* @param element
* the user model data to use in this connection.
* @param source
* the user model data used for the source node.
* @param dest
* the user model data used for the destination node.
* @return the created or retrieved connection for the given graph.
*/
public GraphConnection createConnection(Graph graph, Object element, Object source, Object dest);
/**
* Restyles the given graph items according to the label provider supplied
* by getLabelProvider().
*
* @param items
* the items to update.
*/
public void update(GraphItem[] items);
/**
* Restyles the given graph item according to the label provider supplied by
* getLabelProvider().
*
* @param item
* the item to update.
*/
public void update(GraphItem item);
/**
* Structurally refreshes the graph model nodes and connections associated
* with the given user model element. Does nothing if the element does not
* currently exist in the view. No restyling is done by default.
*
* @param graph
* @param element
* the element to restructure.
*/
public void refresh(Graph graph, Object element);
/**
* Structurally refreshes the graph model nodes and connections associated
* with the given user model element. If updateLabels is true, then the
* labels are updated as well. Does nothing if the element does not
* currently exist in the view.
*
* @param graph
* the graph to find the element on.
* @param element
* the user model element.
* @param updateLabels
* true if the labels should be updated as well.
*/
public void refresh(Graph graph, Object element, boolean updateLabels);
/**
* Structurally refreshes the entire graph.
*
* @param graph
* the graph to refresh;
*/
public void refreshGraph(Graph graph);
/**
* Returns the viewer that this factory is building the model for.
*
* @return the viewer that this factory is building the model for.
*/
public StructuredViewer getViewer();
public void setConnectionStyle(int style);
/**
* @return the connectionStyle
*/
public int getConnectionStyle();
public void setNodeStyle(int style);
/**
* @return the nodeStyle
*/
public int getNodeStyle();
}