/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.gef.part; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Layer; import org.eclipse.draw2d.LayeredPane; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.Viewport; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.xmind.gef.GEF; import org.xmind.gef.IGraphicalViewer; import org.xmind.gef.ILayerManager; import org.xmind.gef.IViewer; /** * @author Administrator */ public class GraphicalRootEditPart extends GraphicalEditPart implements IGraphicalRootPart, ILayerManager { private IViewer viewer = null; private IGraphicalEditPart contents = null; private LayeredPane layeredPane = null; public IPart getContents() { return contents; } public void setContents(IPart part) { if (contents != null) removeChild(contents); contents = (IGraphicalEditPart) part; if (contents != null) addChild(contents, 0); } public IViewer getViewer() { return viewer; } public void setViewer(IViewer viewer) { IViewer oldViewer = getViewer(); this.viewer = viewer; viewerChanged(viewer, oldViewer); } /** * @param newViewer * @param oldViewer */ protected void viewerChanged(IViewer newViewer, IViewer oldViewer) { if (oldViewer instanceof IGraphicalViewer && ((IGraphicalViewer) oldViewer).getLayerManager() == this) { ((IGraphicalViewer) oldViewer).setLayerManager(null); } if (newViewer instanceof IGraphicalViewer) { ((IGraphicalViewer) newViewer).setLayerManager(this); } } protected IFigure createFigure() { Viewport viewport = createViewport(); layeredPane = createLayeredPane(); viewport.setContents(layeredPane); addLayers(layeredPane); return viewport; } protected Viewport createViewport() { return new Viewport(true); } protected LayeredPane createLayeredPane() { return new LayeredPane(); } protected void addLayers(LayeredPane layeredPane) { final Layer contentsLayer = new Layer(); contentsLayer.setLayoutManager(new StackLayout()); layeredPane.add(contentsLayer, GEF.LAYER_CONTENTS); Layer presentationLayer = new Layer() { @Override public Dimension getPreferredSize(int wHint, int hHint) { return contentsLayer.getPreferredSize(wHint, hHint); } }; layeredPane.add(presentationLayer, GEF.LAYER_PRESENTATION); } /* * (non-Javadoc) * @see org.xmind.ui.gantt2.gefext.GraphicalEditPart#getContentPane() */ @Override public IFigure getContentPane() { return getLayer(GEF.LAYER_CONTENTS); } /* * (non-Javadoc) * @see org.xmind.gef.ILayerManager#getLayer(java.lang.Object) */ public Layer getLayer(Object key) { return layeredPane.getLayer(key); } /* * (non-Javadoc) * @see org.xmind.gef.ILayerManager#insertLayer(java.lang.Object, * org.eclipse.draw2d.Layer, java.lang.Object, boolean) */ public void insertLayer(Object key, Layer layer, Object before, boolean scalable) { if (before == null) { layeredPane.add(layer, key); } else { layeredPane.addLayerBefore(layer, key, before); } } /* * (non-Javadoc) * @see org.xmind.gef.ILayerManager#removeLayer(java.lang.Object) */ public void removeLayer(Object key) { layeredPane.removeLayer(key); } /** * @see org.xmind.gef.part.GraphicalEditPart#findAt(org.eclipse.draw2d.geometry.Point) */ @Override public IPart findAt(Point position) { IPart ret = super.findAt(position); if (ret != null) return ret; return this; } // protected IFigure createFigure(IGenre genre) { // return genre.createRootFigure(this, (IGraphicalViewer) getViewer()); // } // // protected void addChildView(IPart child, int index) { // if (getContentPane() instanceof Viewport) { // ((Viewport) getContentPane()) // .setContents(((IGraphicalPart) child).getFigure()); // } else { // super.addChildView(child, index); // } // } // // protected void removeChildView(IPart child) { // if (getContentPane() instanceof Viewport) { // Viewport viewport = (Viewport) getContentPane(); // IFigure childFigure = ((IGraphicalPart) child).getFigure(); // if (childFigure == viewport.getContents()) { // viewport.setContents(null); // return; // } // } // super.removeChildView(child); // } }