/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.layouttpl.ui.parts; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Layer; import org.eclipse.draw2d.LayeredPane; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.DragTracker; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.Request; import org.eclipse.gef.editparts.LayerManager; import org.eclipse.gef.editparts.SimpleRootEditPart; import org.eclipse.gef.tools.MarqueeDragTracker; /** * @author Gregory Amerson */ public class LayoutTplRootEditPart extends SimpleRootEditPart implements LayerConstants, LayerManager { class FeedbackLayer extends Layer { FeedbackLayer() { setEnabled( false ); } /** * @see org.eclipse.draw2d.Figure#getPreferredSize(int, int) */ public Dimension getPreferredSize( int wHint, int hHint ) { Rectangle rect = new Rectangle(); for( int i = 0; i < getChildren().size(); i++ ) { rect.union( ( (IFigure) getChildren().get( i ) ).getBounds() ); } return rect.getSize(); } } private LayeredPane layers; public LayoutTplRootEditPart() { super(); } protected IFigure createFigure() { layers = new LayeredPane(); createLayers( layers ); return layers; } protected void createLayers( LayeredPane layeredPane ) { // layeredPane.add(getScaledLayers(), SCALABLE_LAYERS); // layeredPane.add(getPrintableLayers(), PRINTABLE_LAYERS); Layer layer = new Layer(); layer.setLayoutManager( new StackLayout() ); layeredPane.add( layer, PRIMARY_LAYER ); layeredPane.add( new Layer() { public Dimension getPreferredSize( int wHint, int hHint ) { return new Dimension(); } }, HANDLE_LAYER ); layeredPane.add( new FeedbackLayer(), FEEDBACK_LAYER ); } public IFigure getContentPane() { return getLayer( PRIMARY_LAYER ); } /** * Should not be called, but returns a MarqeeDragTracker for good measure. * * @see org.eclipse.gef.EditPart#getDragTracker(org.eclipse.gef.Request) */ public DragTracker getDragTracker( Request req ) { /* * The root will only be asked for a drag tracker if for some reason the contents editpart says it is neither * selector nor opaque. */ return new MarqueeDragTracker(); } /** * Returns the layer indicated by the key. Searches all layered panes. * * @see LayerManager#getLayer(Object) */ public IFigure getLayer( Object key ) { // if (innerLayers == null) // return null; // IFigure layer = printableLayers.getLayer(key); // if (layer != null) // return layer; return layers.getLayer( key ); } /** * The root editpart does not have a real model. The LayerManager ID is returned so that this editpart gets * registered using that key. * * @see org.eclipse.gef.EditPart#getModel() */ public Object getModel() { return LayerManager.ID; } }