blob: 7cfb2673eea9d70ca2cbe100f1ac2048a7ad10ae [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.mylar.zest.core.viewers;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.mylar.zest.core.internal.graphviewer.overview.GraphOverviewerImpl;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPartService;
import org.eclipse.ui.IWorkbenchPart;
/**
* A viewer that can be used as an overview of graphs. It provides a small view that shows
* only rectangles representing the nodes of a graph that exists in the most recently selected
* workbench part that contains a graph. Does not show connections, and does not
* provide any selections or items. No interaction can be done directly through this viewer.
* @author Del Myers
*
*/
public class GraphOverviewer extends StructuredViewer implements DisposeListener {
private GraphOverviewerImpl viewer;
private AbstractZoomableViewer currentHookedViewer;
private IPartService service;
private ZoomablePartListener partListener;
private class ZoomablePartListener implements IPartListener {
public void partActivated(IWorkbenchPart part) {
if (part instanceof IZoomableWorkbenchPart) {
AbstractZoomableViewer viewer =
((IZoomableWorkbenchPart)part).getZoomableViewer();
if (viewer != currentHookedViewer && viewer instanceof AbstractStructuredGraphViewer) {
GraphOverviewer.this.hookViewer((AbstractStructuredGraphViewer) viewer);
}
}
}
public void partDeactivated(IWorkbenchPart part) {
}
public void partBroughtToTop(IWorkbenchPart part) {
if (part instanceof IZoomableWorkbenchPart) {
AbstractZoomableViewer viewer =
((IZoomableWorkbenchPart)part).getZoomableViewer();
if (viewer != currentHookedViewer) {
GraphOverviewer.this.unhookViewer();
}
}
}
public void partClosed(IWorkbenchPart part) {
if (part instanceof IZoomableWorkbenchPart) {
AbstractZoomableViewer viewer =
((IZoomableWorkbenchPart)part).getZoomableViewer();
if (viewer == currentHookedViewer) {
GraphOverviewer.this.unhookViewer();
}
}
}
public void partOpened(IWorkbenchPart part) {}
}
/**
*
*/
public GraphOverviewer(Composite parent, IPartService service) {
this.viewer = new GraphOverviewerImpl();
viewer.createControl(parent);
this.service = service;
partListener = new ZoomablePartListener();
service.addPartListener(partListener);
parent.addDisposeListener(this);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#doFindInputItem(java.lang.Object)
*/
protected Widget doFindInputItem(Object element) {
return null;
}
/**
* Hooks this viewer to the given structured graph viewer. This need not be called by clients,
* as it is autmatically updated based on selections.
* @param zoomViewer the viewer to hook to.
*/
protected void hookViewer(AbstractStructuredGraphViewer zoomViewer) {
viewer.setContents(zoomViewer.getEditPartViewer());
currentHookedViewer = zoomViewer;
}
/**
* Unhooks the currently hooked viewer.
*/
protected void unhookViewer() {
//viewer.unhookViewer();
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#doFindItem(java.lang.Object)
*/
protected Widget doFindItem(Object element) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, java.lang.Object, boolean)
*/
protected void doUpdateItem(Widget item, Object element, boolean fullMap) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#getSelectionFromWidget()
*/
protected List getSelectionFromWidget() {
return Collections.EMPTY_LIST;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#internalRefresh(java.lang.Object)
*/
protected void internalRefresh(Object element) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#reveal(java.lang.Object)
*/
public void reveal(Object element) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#setSelectionToWidget(java.util.List, boolean)
*/
protected void setSelectionToWidget(List l, boolean reveal) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.Viewer#getControl()
*/
public Control getControl() {
return viewer.getControl();
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
*/
public void widgetDisposed(DisposeEvent e) {
service.removePartListener(partListener);
partListener = null;
}
}