blob: 987c5022b3025aaf2c00c638d717eea446967fe8 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.figures;
import java.beans.PropertyChangeListener;
import org.eclipse.draw2d.FreeformLayer;
import org.eclipse.draw2d.FreeformLayout;
import org.eclipse.draw2d.FreeformViewport;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.ScrollPane;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.gmf.runtime.diagram.ui.layout.FreeFormLayoutEx;
import org.eclipse.gmf.runtime.draw2d.ui.internal.figures.AnimatableScrollPane;
import org.eclipse.gmf.runtime.draw2d.ui.internal.figures.OverlayScrollPaneLayout;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
/**
* A specialized implementation of <code>ResizableCompartmentFigure</code>, this
* class configures the scrollpane to use a {@link org.eclipse.draw2d.FreeformLayer}
* with a {@link org.eclipse.draw2d.FreeformLayout} as its contents.
*
* @author mhanner
*/
public class ShapeCompartmentFigure extends ResizableCompartmentFigure {
/**
* constant defines the font title
*/
public static final Font FONT_TITLE = new Font(null, new FontData("Helvetica", 9, SWT.BOLD));//$NON-NLS-1$
/**
* Create an instance. Calls {@link #configureFigure()} to reconfigure
* the scrollpane.
*
* @param title figure's title.
* @param mm the <code>IMapMode</code> that is used to initialize the
* default values of of the scrollpane contained inside the figure. This is
* necessary since the figure is not attached at construction time and consequently
* can't get access to the owned IMapMode in the parent containment hierarchy.
*/
public ShapeCompartmentFigure(String title, IMapMode mm) {
super(title, mm);
}
protected AnimatableScrollPane createScrollpane(IMapMode mm) {
configureFigure(mm);
return (AnimatableScrollPane)getScrollPane();
}
/**
* The scrollpane is configured to use a {@link FreeformLayer} with a
* {@link FreeformLayout} as its contents.
* @deprecated use {@link ShapeCompartmentFigure#configureFigure(IMapMode)} instead
*/
protected void configureFigure() {
configureFigure(MapModeUtil.getMapMode(this));
}
/**
* The scrollpane is configured to use a {@link FreeformLayer} with a
* {@link FreeformLayout} as its contents.
*
* @param mm the <code>IMapMode</code> that is used to initialize the
* default values of of the scrollpane contained inside the figure. This is
* necessary since the figure is not attached at construction time and consequently
* can't get access to the owned IMapMode in the parent containment hierarchy.
*/
protected void configureFigure(IMapMode mm) {
ScrollPane scrollpane = getScrollPane();
if(scrollpane==null){
scrollpane = scrollPane = new AnimatableScrollPane();
}
scrollpane.setViewport(new FreeformViewport());
scrollPane.setScrollBarVisibility(ScrollPane.AUTOMATIC);
scrollpane.setLayoutManager(new OverlayScrollPaneLayout() );
IFigure contents = new BorderItemsAwareFreeFormLayer();
contents.setLayoutManager(new FreeFormLayoutEx());
scrollpane.setContents(contents);
int MB = mm.DPtoLP(5);
scrollpane.setBorder(new MarginBorder(MB, MB, MB, MB));
int SZ = mm.DPtoLP(10);
scrollpane.setMinimumSize(new Dimension(SZ, SZ));
this.setFont(FONT_TITLE);
}
/**
* Convenience method to registers the supplied listener to the scrollpane's
* vertical and horizonatl range models.
*
* @param listener The listener to add
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
getScrollPane().getViewport()
.getVerticalRangeModel()
.addPropertyChangeListener(
listener);
getScrollPane()
.getViewport()
.getHorizontalRangeModel()
.addPropertyChangeListener(
listener);
}
/**
* Convenience method to removes the supplied listener from the scrollpane's
* RangeModel's list of PropertyChangeListeners.
* @param listener The listener to remove
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
getScrollPane()
.getViewport()
.getVerticalRangeModel()
.removePropertyChangeListener(
listener);
getScrollPane()
.getViewport()
.getHorizontalRangeModel()
.removePropertyChangeListener(listener);
}
}