Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java464
1 files changed, 0 insertions, 464 deletions
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java
deleted file mode 100644
index 216ac5539..000000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.editpolicies;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.draw2d.ColorConstants;
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.RectangleFigure;
-import org.eclipse.draw2d.geometry.Dimension;
-import org.eclipse.draw2d.geometry.Insets;
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.PrecisionRectangle;
-import org.eclipse.draw2d.geometry.Rectangle;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.GraphicalEditPart;
-import org.eclipse.gef.Request;
-import org.eclipse.gef.RequestConstants;
-import org.eclipse.gef.SharedCursors;
-import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.editpolicies.ResizableEditPolicy;
-import org.eclipse.gef.handles.NonResizableHandleKit;
-import org.eclipse.gef.requests.ChangeBoundsRequest;
-import org.eclipse.gef.requests.LocationRequest;
-import org.eclipse.gef.requests.SelectionRequest;
-import org.eclipse.gef.tools.SelectEditPartTracker;
-import org.eclipse.jst.pagedesigner.IHTMLConstants;
-import org.eclipse.jst.pagedesigner.IJMTConstants;
-import org.eclipse.jst.pagedesigner.commands.single.ChangeStyleCommand;
-import org.eclipse.jst.pagedesigner.common.utils.StringUtil;
-import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
-import org.eclipse.jst.pagedesigner.css2.layout.BlockBox;
-import org.eclipse.jst.pagedesigner.css2.layout.CSSFigure;
-import org.eclipse.jst.pagedesigner.css2.layout.MultiLineLabel;
-import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
-import org.eclipse.jst.pagedesigner.editors.palette.IPaletteItemCategory;
-import org.eclipse.jst.pagedesigner.editors.palette.IPaletteItemDescriptor;
-import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager;
-import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
-import org.eclipse.jst.pagedesigner.requests.LocationModifierRequest;
-import org.eclipse.jst.pagedesigner.utils.CMUtil;
-import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * @author mengbo
- * @version 1.5
- */
-public class ElementResizableEditPolicy extends ResizableEditPolicy {
- private static final Insets INSETS_1 = new Insets(1, 1, 1, 1);
-
- private static final int THRESHHOLD = 3;
-
- private static final Insets INSETS_CONST = new Insets(THRESHHOLD,
- THRESHHOLD, THRESHHOLD, THRESHHOLD);
-
- private boolean _showLabelFeedback = true;
-
- private IFigure[] _hoverFeedbackFigure;
-
- public static Color HOVER_FEEDBACK_COLOR = ColorConstants.darkBlue;
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.gef.editpolicies.AbstractEditPolicy#showTargetFeedback(org.eclipse.gef.Request)
- */
- public void showTargetFeedback(Request request) {
- if (RequestConstants.REQ_SELECTION_HOVER.equals(request.getType())) {
- if (_hoverFeedbackFigure != null) {
- for (int i = 0; i < _hoverFeedbackFigure.length; i++) {
- removeFeedback(_hoverFeedbackFigure[i]);
- }
- _hoverFeedbackFigure = null;
- }
- _hoverFeedbackFigure = showHoverFeedback(request);
- } else {
- super.showTargetFeedback(request);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.gef.editpolicies.AbstractEditPolicy#eraseTargetFeedback(org.eclipse.gef.Request)
- */
- public void eraseTargetFeedback(Request request) {
- if (RequestConstants.REQ_SELECTION_HOVER.equals(request.getType())) {
- if (_hoverFeedbackFigure != null) {
- for (int i = 0; i < _hoverFeedbackFigure.length; i++) {
- removeFeedback(_hoverFeedbackFigure[i]);
- }
- _hoverFeedbackFigure = null;
- }
- } else {
- super.eraseTargetFeedback(request);
- }
- }
-
- /**
- * @param request
- */
- private IFigure[] showHoverFeedback(Request request) {
- if (!shouldUseObjectMode(request) && !isStyleTags(getHost())) {
- return null;
- }
-
- IFigure figure = this.getHostFigure();
- Rectangle[] rects;
- if (figure instanceof CSSFigure) {
- rects = ((CSSFigure) figure).getFragmentsBounds();
- } else {
- rects = new Rectangle[] { figure.getBounds() };
- }
- IFigure[] figures = new IFigure[rects.length
- + (_showLabelFeedback ? 1 : 0)];
- for (int i = 0; i < rects.length; i++) {
- RectangleFigure fig = new RectangleFigure();
- fig.setFill(false);
- fig.setOutline(true);
- fig.setLineWidth(1);
- fig.setForegroundColor(HOVER_FEEDBACK_COLOR);
- addFeedback(fig);
-
- Rectangle r = rects[i].getCopy();
- figure.translateToAbsolute(r);
- fig.translateToRelative(r);
- fig.setBounds(r);
-
- figures[i] = fig;
- }
- if (_showLabelFeedback) {
- Label label = new MultiLineLabel();
- label.setOpaque(true);
- label.setBackgroundColor(ColorConstants.yellow);
- // label.setBorder(new LineBorder(HOVER_FEEDBACK_COLOR, 1));
- label.setForegroundColor(HOVER_FEEDBACK_COLOR);
- label.setText(getTooltipText());
- addFeedback(label);
- // use last rect's bottom left as the label's left top
- Point leftTop = new Point(rects[rects.length - 1].getBottomLeft());
- figure.translateToAbsolute(leftTop);
- label.translateToRelative(leftTop);
- Dimension d = label.getPreferredSize();
- Rectangle rect = new Rectangle(leftTop, d);
-
- // to avoid enlarge feedback pane.
- rect = rect.intersect(getFeedbackLayer().getBounds());
- label.setBounds(rect);
-
- figures[rects.length] = label;
- }
- return figures;
- }
-
- private String getTooltipText() {
- Element element = (Element) this.getHost().getModel();
- StringBuffer text = new StringBuffer();
- text.append("<").append(element.getTagName()).append(">");
-
- PaletteItemManager manager = PaletteItemManager
- .getInstance(getProject(element));
- if (manager != null) {
- IPaletteItemCategory category = manager.findOrCreateCategory(CMUtil
- .getElementNamespaceURI(element), null);
- if (category != null) {
- String name = element.getLocalName();
- if (category.getURI().equals(IJMTConstants.URI_JSP)) {
- name = element.getTagName();
- }
- IPaletteItemDescriptor descriptor = category
- .getItemByTagName(name);
- if (category.getURI().equals(IJMTConstants.URI_HTML)
- && IHTMLConstants.TAG_INPUT.equalsIgnoreCase(name)) {
- String type = element
- .getAttribute(IHTMLConstants.ATTR_TYPE);
- if (IHTMLConstants.TYPE_SUBMIT.equalsIgnoreCase(type)) {
- descriptor = category.getItemByID("html:INPUT:Button");
- } else if (IHTMLConstants.TYPE_CHECKBOX
- .equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Check Box");
- } else if (IHTMLConstants.TYPE_RADIO.equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Radio Button");
- } else if (IHTMLConstants.TYPE_IMAGE.equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Image Button");
- } else if (IHTMLConstants.TYPE_PASSWORD
- .equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Password Field");
- } else if (IHTMLConstants.TYPE_TEXT.equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Text Field");
- } else if (IHTMLConstants.TYPE_HIDDEN
- .equalsIgnoreCase(type)) {
- descriptor = category
- .getItemByID("html:INPUT:Hidden Field");
- }
- }
-
- if (descriptor != null) {
- text.append("\n").append(
- StringUtil.filterConvertString(descriptor
- .getDescription()));
- }
- }
- }
-
- if (text.toString().endsWith("\n")) {
- return text.substring(0, text.length() - 1);
- }
- return text.toString();
- }
-
- private IProject getProject(Element element) {
- if (element instanceof IDOMElement) {
- IDOMModel model = ((IDOMElement) element).getModel();
- IFile file = StructuredModelUtil.getFileFor(model);
- if (file != null) {
- return file.getProject();
- }
- }
- return null;
- }
-
- private boolean isStyleTags(EditPart part) {
- if (part != null && part.getModel() instanceof Node) {
- return EditModelQuery.HTML_STYLE_NODES.contains(((Node) part
- .getModel()).getNodeName());
- } else {
- return false;
- }
- }
-
- /**
- * @param request
- * @return
- */
- public boolean shouldUseObjectMode(Request request) {
- ElementEditPart part = (ElementEditPart) this.getHost();
- if (isStyleTags(part)) {
- return false;
- }
- if (part.isWidget()
- || (!part.canHaveDirectTextChild() && !part
- .haveNonWhitespaceTextChild())) {
- return true;
- }
- if (request instanceof SelectionRequest
- && ((SelectionRequest) request).isControlKeyPressed()) {
- return true;
- }
- if (request instanceof LocationModifierRequest
- && ((LocationModifierRequest) request).isControlKeyPressed()) {
- return true;
- }
-
- // for other elements
- if (request instanceof LocationRequest) {
- Point location = ((LocationRequest) request).getLocation()
- .getCopy();
- part.getFigure().translateToRelative(location);
- return shouldUseObjectMode(location);
- } else {
- return false; // should not happen
- }
- }
-
- /**
- * @param location
- * @return
- */
- private boolean shouldUseObjectMode(Point location) {
- // when the location is close to the border/padding of the element, then
- // we think it is default to
- // object mode selection.
- CSSFigure figure = (CSSFigure) this.getHostFigure();
- if (figure.getFragmentsBounds().length != 1) {
- return false;
- }
- Rectangle bounds = figure.getBounds().getCopy();
- Insets insets = figure.getInsets();
- bounds.crop(insets);
- if (insets.top > THRESHHOLD && insets.left > THRESHHOLD
- && insets.right > THRESHHOLD && insets.bottom > THRESHHOLD) {
- return !bounds.contains(location);
- }
-
- // since the figure insets could be 0, so we expand it a little, thus
- // even the point is
- // a little inside the content area, we still think it is selection the
- // object.
- if (bounds.height < 3 * THRESHHOLD || bounds.width < 3 * THRESHHOLD) {
- bounds.crop(INSETS_1);
- } else {
- bounds.crop(INSETS_CONST);
- }
- return !bounds.contains(location);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.gef.editpolicies.ResizableEditPolicy#createSelectionHandles()
- */
- protected List createSelectionHandles() {
- // we have three different kinds of handles.
- // 1. Those element that is resizable.
- // 2. Those element that is rectangle but not resizable.
- // 3. Those element that is not rectangle (fragments)
-
- IFigure figure = this.getHostFigure();
- if (figure instanceof CSSFigure && getHost() instanceof ElementEditPart) {
- CSSFigure cssfigure = (CSSFigure) figure;
- List fragments = cssfigure.getFragmentsForRead();
-
- // XXX: only one fragment and is blockbox, then we think it is
- // resizable by figure
- // should move this test to somewhere else.
- if (fragments != null && fragments.size() == 1
- && fragments.get(0) instanceof BlockBox) {
- if (((ElementEditPart) getHost()).isResizable()) {
- // super is Resizable policy, will create a resize handles.
- return super.createSelectionHandles();
- } else {
- return createNonResizeHandles();
- }
- } else {
- return createFragmentsHandles();
- }
- } else {
- // second case
- return createNonResizeHandles();
- }
- }
-
- /**
- * @return
- */
- private List createFragmentsHandles() {
- List list = new ArrayList();
- list.add(new FragmentHandle((GraphicalEditPart) getHost()));
- return list;
- }
-
- /**
- * @return
- */
- private List createNonResizeHandles() {
- // following code copied from NonResizableEditPolicy
- List list = new ArrayList();
- if (isDragAllowed()) {
- NonResizableHandleKit.addHandles((GraphicalEditPart) getHost(),
- list);
- } else {
- NonResizableHandleKit.addHandles((GraphicalEditPart) getHost(),
- list, new SelectEditPartTracker(getHost()),
- SharedCursors.ARROW);
- }
-
- return list;
- }
-
- /**
- * child class could override this method.
- *
- * @param width
- * @param height
- * @return
- */
- protected Command getResizeCommand(IDOMElement element, int width,
- int height) {
- Map map = new HashMap();
- if (width > 0) {
- map.put("width", width + "px");
- }
- if (height > 0) {
- map.put("height", height + "px");
- }
- if (map.isEmpty()) {
- return null;
- } else {
- return new ChangeStyleCommand(element, map);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.gef.editpolicies.ResizableEditPolicy#getResizeCommand(org.eclipse.gef.requests.ChangeBoundsRequest)
- */
- protected Command getResizeCommand(ChangeBoundsRequest request) {
- ElementEditPart part = (ElementEditPart) this.getHost();
-
- Rectangle rect = part.getFigure().getBounds();
- rect = request.getTransformedRectangle(rect);
- int width = rect.width;
- int height = rect.height;
-
- // since the user dragged rectangle included border/padding of the
- // element. And if the element's
- // width/height style setting don't include border padding, then we need
- // to set the element's width/height
- // style property a little smaller.
- if (part.getFigure() instanceof CSSFigure) {
- CSSFigure cssfigure = (CSSFigure) part.getFigure();
- ICSSStyle style = cssfigure.getCSSStyle();
- if (style != null && !style.isSizeIncludeBorderPadding()) {
- width -= (style.getBorderInsets().getWidth() + style
- .getPaddingInsets().getWidth());
- height -= (style.getBorderInsets().getHeight() + style
- .getPaddingInsets().getHeight());
- }
- }
- return getResizeCommand((IDOMElement) part.getIDOMNode(), width, height);
- }
-
- /**
- * Shows or updates feedback for a change bounds request.
- *
- * @param request
- * the request
- */
- protected void showChangeBoundsFeedback(ChangeBoundsRequest request) {
- IFigure feedback = getDragSourceFeedbackFigure();
-
- PrecisionRectangle rect = new PrecisionRectangle(
- getInitialFeedbackBounds().getCopy());
- getHostFigure().translateToAbsolute(rect);
- rect.translate(request.getMoveDelta());
- rect.resize(request.getSizeDelta());
-
- // to avoid enlarge feedback pane.
- // when draging a editpart inside designer to move/copy it, we do not
- // want to
- // enlarge the canvas, since that may resulting in relayout.
- rect = (PrecisionRectangle) rect.intersect(getFeedbackLayer()
- .getBounds());
-
- feedback.translateToRelative(rect);
- feedback.setBounds(rect);
- }
-}

Back to the top