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/MouseSelectableChildDecorator.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java631
1 files changed, 0 insertions, 631 deletions
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java
deleted file mode 100644
index 11957af5d..000000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2007 Oracle 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:
- * Oracle Corporation - initial API and implementation
- *******************************************************************************/
-/**
- *
- */
-package org.eclipse.jst.pagedesigner.editpolicies;
-
-import org.eclipse.draw2d.Graphics;
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Locator;
-import org.eclipse.draw2d.MouseEvent;
-import org.eclipse.draw2d.MouseListener;
-import org.eclipse.draw2d.MouseMotionListener;
-import org.eclipse.draw2d.geometry.Dimension;
-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.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * A child decorator that supports mouse selection
- *
- * @author cbateman
- *
- */
-class MouseSelectableChildDecorator extends NonVisualChildDecorator
-{
- private static final String PIN_UP_IMAGE_FILE = "pin_up.gif"; //$NON-NLS-1$
-
- private static final String PIN_DOWN_IMAGE_FILE = "pin_down.gif"; //$NON-NLS-1$
-
- // no visual or affordance showing
- private static final int STATE_START = 0;
-
- // the host is showing hover feedback, but is not selected
- private static final int STATE_HOST_HOVER = 1;
-
- // the host has primary selection
- private static final int STATE_HOST_SELECTED = 2;
-
- // the selection handle for the decorator has mouse hover
- private static final int STATE_HANDLE_HOVER = 3;
-
- // the selection handle has been selected (is showing)
- private static final int STATE_HANDLE_MENU_BAR_SHOWING = 4;
-
- // the menu bar has hover
- private static final int STATE_HANDLE_MENU_BAR_HOVER = 5;
-
- // the menu bar has primary selection
- private static final int STATE_HANDLE_MENU_BAR_SELECTED = 6;
-
- /**
- * An event indicating the host received hover
- */
- public static final int EVENT_HOST_HOVER_RECEIVED = 31;
- /**
- * An event indicating the host lost hover
- */
- public static final int EVENT_HOST_HOVER_LOST = 32;
- /**
- * An event indicating the host received selection
- */
- public static final int EVENT_HOST_SELECTION_RECEIVED = 33;
- /**
- * An event indicating the host lost selection
- */
- public static final int EVENT_HOST_SELECTION_LOST = 34;
- private static final int EVENT_HANDLE_HOVER_RECEIVED = 35;
- private static final int EVENT_HANDLE_HOVER_LOST = 36;
- private static final int EVENT_HANDLE_SELECTED = 37;
- private static final int EVENT_ALL_SELECTION_LOST = 38;
- private static final int EVENT_MENU_BAR_SELECTION_RECEIVED = 39;
-
- private MouseMotionListener _motionListener;
- private MouseListener _mouseListener;
- private boolean _isMouseOver = false;
- private ElementMenuBar _elementMenuBar;
-
- private DisplayStateMachine _stateMachine;
- private VerticalMenuLocator _menuLocator;
- private AnimatedHideLocator _hideLocator;
- private IFigure _hoverParent;
- private IFigure _selectionParent;
-
- private ISelectionChangedListener _menuSelectionListener;
-
- MouseSelectableChildDecorator(final GraphicalEditPart hostPart, int location,
- IFigure hoverParent, IFigure selectionParent) {
- super(hostPart, location);
- _menuLocator = new VerticalMenuLocator(hostPart, this);
- _hideLocator = new AnimatedHideLocator();
- _elementMenuBar = ((ElementEditPart)hostPart).getElementMenuBar();
- _stateMachine = new DisplayStateMachine();
- _hoverParent = hoverParent;
- _selectionParent = selectionParent;
-
- _motionListener = new MouseMotionListener.Stub()
- {
- public void mouseEntered(MouseEvent me) {
- _isMouseOver = true;
- updateState(EVENT_HANDLE_HOVER_RECEIVED);
- }
-
- public void mouseExited(MouseEvent me) {
- _isMouseOver = false;
- updateState(EVENT_HANDLE_HOVER_LOST);
- }
- };
- addMouseMotionListener(_motionListener);
-
- _mouseListener = new MouseListener.Stub()
- {
- public void mousePressed(MouseEvent me) {
- updateState(EVENT_HANDLE_SELECTED);
- }
- };
- addMouseListener(_mouseListener);
-
- _menuSelectionListener = new ISelectionChangedListener()
- {
- public void selectionChanged(SelectionChangedEvent event) {
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- if (selection.size() == 0)
- {
- // if the host part has been given back selection, then
- // we have a host selection event
- if (getOwner().getSelected() == EditPart.SELECTED_PRIMARY)
- {
- updateState(EVENT_HOST_SELECTION_RECEIVED);
- }
- // otherwise, both the host and the non-visual children are lost,
- // so fire all selection lost
- else
- {
- updateState(EVENT_ALL_SELECTION_LOST);
- }
- }
- // otherwise, one or more non-visual children have selection
- else
- {
- updateState(EVENT_MENU_BAR_SELECTION_RECEIVED);
- }
- }
- };
- _elementMenuBar.addSelectionChangedListener(_menuSelectionListener);
- }
-
- public void paintFigure(Graphics g) {
- // TODO: could we use an image label toggle button here instead?
- Image arrowImage = null;
-
- if (_stateMachine.isMenuShowing())
- {
- arrowImage = PDPlugin.getDefault().getImage(PIN_DOWN_IMAGE_FILE);
- }
- else
- {
- arrowImage = PDPlugin.getDefault().getImage(PIN_UP_IMAGE_FILE);
- }
-
- Rectangle r = getBounds();
- g.setAlpha(75);
- g.setBackgroundColor(getFillColor());
- g.fillRectangle(r.x, r.y, r.width, r.height);
- g.setAlpha(getAlpha());
- g.drawImage(arrowImage, r.x+1, r.y+1);
- g.setForegroundColor(getBorderColor());
- g.drawRectangle(r.x, r.y, r.width-1, r.height-1);
- }
-
- /**
- * @param event
- */
- public void updateState(int event)
- {
- int oldState = _stateMachine.doTransition(event);
- updateVisual(oldState);
- }
-
- /**
- * @param oldState
- */
- protected void updateVisual(int oldState)
- {
- // overriding all other considerations is whether the menu bar even has
- // any items to show. If not don't show anything
- if (!_elementMenuBar.hasChildParts())
- {
- if (getParent() != null)
- {
- getParent().remove(this);
- }
-
- return;
- }
-
- switch (_stateMachine._curState)
- {
- case STATE_START:
- hide(_elementMenuBar, false);
- IFigure parent = getParent();
- if (parent != null)
- {
- parent.remove(this);
- }
- break;
-
- case STATE_HOST_HOVER:
- if (_hoverParent != null)
- {
- _hoverParent.add(this);
- validate();
- }
- show(_elementMenuBar, false);
- setVisible(false);
- break;
-
- case STATE_HOST_SELECTED:
- if (_selectionParent != null)
- {
- _selectionParent.add(this);
- validate();
- }
-
- setVisible(true);
-
- if (oldState != STATE_HOST_SELECTED
- && oldState != STATE_HANDLE_HOVER)
- {
- show(_elementMenuBar, true);
- hide(_elementMenuBar, true);
- }
- else
- {
- if (!_hideLocator._isAnimating)
- {
- hide(_elementMenuBar, false);
- }
- }
- repaint();
- break;
-
- case STATE_HANDLE_HOVER:
- if (_stateMachine.isMenuShowing(oldState))
- {
- hide(_elementMenuBar, false);
- }
- else
- {
- show(_elementMenuBar, false);
- }
- repaint();
- break;
-
- case STATE_HANDLE_MENU_BAR_SHOWING:
- show(_elementMenuBar, true);
- repaint();
- break;
-
- case STATE_HANDLE_MENU_BAR_HOVER:
- case STATE_HANDLE_MENU_BAR_SELECTED:
- //revalidate();
- break;
-
-
- default:
-
- }
- }
-
- protected void init() {
- setPreferredSize(new Dimension(12, 12));
- }
-
- /**
- *
- */
- public void dispose()
- {
- hide(_elementMenuBar, false);
-
- if (_motionListener != null)
- {
- removeMouseMotionListener(_motionListener);
- _motionListener = null;
- }
-
- if (_mouseListener != null)
- {
- removeMouseListener(_mouseListener);
- _mouseListener = null;
- }
-
- if (_menuSelectionListener != null)
- {
- _elementMenuBar.removeSelectionChangedListener(_menuSelectionListener);
- _menuSelectionListener = null;
- }
- }
-
- private void hide(ElementMenuBar menuBar, boolean animate)
- {
- if (animate)
- {
- final Point endPoint = this.getLocation().getCopy();
- //TODO: don't understand when translation is necessary...
- //this.translateToAbsolute(endPoint);
-
- endPoint.x += this.getBounds().width / 2;
- endPoint.y += this.getBounds().height / 2;
- _hideLocator.setHideEndPoint(endPoint);
- _hideLocator.relocate(menuBar);
- }
- else
- {
- if (menuBar.getParent() != null)
- {
- getParent().remove(menuBar);
- }
- }
- }
-
- private void show(ElementMenuBar menuBar, boolean enabled)
- {
- menuBar.setEnabled(enabled);
- getParent().add(menuBar);
- _menuLocator.relocate(menuBar);
- }
-
- protected int getAlpha()
- {
- return (_isMouseOver || _stateMachine.isMenuShowing()) ? 255 : 75;
- }
-
- private class DisplayStateMachine
- {
- private int _curState = STATE_START;
-
- /**
- * @param event
- * @return execute a state machine transition on event
- */
- public int doTransition(int event)
- {
- final int oldState = _curState;
-
- switch(_curState)
- {
- case STATE_START:
- // can only transition from start state
- // on a host event
- if (event == EVENT_HOST_HOVER_RECEIVED)
- {
- _curState = STATE_HOST_HOVER;
- }
- else if (event == EVENT_HOST_SELECTION_RECEIVED)
- {
- _curState = STATE_HOST_SELECTED;
- }
- break;
-
- case STATE_HOST_HOVER:
- if (event == EVENT_HOST_SELECTION_RECEIVED)
- {
- _curState = STATE_HOST_SELECTED;
- }
- else if (event == EVENT_HOST_SELECTION_LOST
- || event == EVENT_HOST_HOVER_LOST)
- {
- _curState = STATE_START;
- }
- else if (event == EVENT_HOST_HOVER_RECEIVED)
- {
- // preserve state in this case
- }
- break;
-
- case STATE_HOST_SELECTED:
- // once the host is selected,the only host event that
- // that can change state is selection lost
- if (event == EVENT_HOST_SELECTION_LOST)
- {
- _curState = STATE_START;
- }
- else if (event == EVENT_HANDLE_HOVER_RECEIVED)
- {
- _curState = STATE_HANDLE_HOVER;
- }
- else if (event == EVENT_HANDLE_SELECTED)
- {
- _curState = STATE_HANDLE_MENU_BAR_SHOWING;
- }
- else if (event == EVENT_ALL_SELECTION_LOST)
- {
- _curState = STATE_START;
- }
- break;
-
- case STATE_HANDLE_HOVER:
- if (event == EVENT_HANDLE_HOVER_LOST)
- {
- _curState = STATE_HOST_SELECTED;
- }
- else if (event == EVENT_HANDLE_SELECTED)
- {
- _curState = STATE_HANDLE_MENU_BAR_SHOWING;
- }
- else if (event == EVENT_HOST_SELECTION_LOST)
- {
- _curState = STATE_START;
- }
- break;
- case STATE_HANDLE_MENU_BAR_SHOWING:
- if (event == EVENT_HANDLE_SELECTED)
- {
- _curState = STATE_HANDLE_HOVER;
- }
- else if (event == EVENT_MENU_BAR_SELECTION_RECEIVED)
- {
- _curState = STATE_HANDLE_MENU_BAR_SELECTED;
- }
- else if (event == EVENT_ALL_SELECTION_LOST)
- {
- _curState = STATE_START;
- }
- break;
-
- case STATE_HANDLE_MENU_BAR_HOVER:
- break;
-
- case STATE_HANDLE_MENU_BAR_SELECTED:
- if (event == EVENT_ALL_SELECTION_LOST)
- {
- _curState = STATE_START;
- }
- else if (event == EVENT_HANDLE_SELECTED)
- {
- _curState = STATE_HANDLE_HOVER;
- }
- break;
-
- }
-
-
- return oldState;
- }
-
- /**
- * @return true if the menu should be showing in the current state
- */
- public boolean isMenuShowing()
- {
- return isMenuShowing(_curState);
- }
-
- /**
- * @param state
- * @return true if state is one in which the menu should be showing
- */
- public boolean isMenuShowing(int state)
- {
- return _curState == STATE_HANDLE_MENU_BAR_SHOWING
- || _curState == STATE_HANDLE_MENU_BAR_HOVER
- || _curState == STATE_HANDLE_MENU_BAR_SELECTED;
- }
- }
-
- private static class VerticalMenuLocator implements Locator
- {
- private IFigure _referenceFigure;
-
- VerticalMenuLocator(GraphicalEditPart owner, IFigure reference)
- {
- _referenceFigure = reference;
- }
-
- public void relocate(IFigure target)
- {
- final Rectangle finalBounds = getFinalMenuBounds(target);
- target.setBounds(finalBounds);
- }
-
-
- private Rectangle getInitialMenuBounds(final IFigure target)
- {
- Rectangle targetBounds =
- new PrecisionRectangle(_referenceFigure.getBounds().getResized(-1, -1));
- _referenceFigure.translateToAbsolute(targetBounds);
- target.translateToRelative(targetBounds);
- return targetBounds;
- }
-
- private Rectangle getFinalMenuBounds(final IFigure target)
- {
- final IFigure referenceFigure = _referenceFigure;
-
- Rectangle targetBounds = getInitialMenuBounds(target);
- Dimension targetSize = target.getPreferredSize();
-
- // copied from super.relocate because relativeX/Y are private in super
- // changed from super to remove div by 2 that centers target; we want
- // it to be corner-to-corner
- targetBounds.x
- += targetBounds.width+4;
- targetBounds.y
- -= (targetSize.height / 2) - referenceFigure.getBounds().height/2;
- targetBounds.setSize(targetSize);
- //target.setBounds(targetBounds);
-
-// final Rectangle viewPortRect =
-// ((IHTMLGraphicalViewer)_owner.getViewer()).getViewport().getBounds();
-// final Rectangle targetRect = targetBounds.getCopy();
-//
-// targetRect.intersect(viewPortRect);
-
-// int width = targetBounds.width - targetRect.width;
-// int height = targetBounds.height - targetRect.height;
-
-// if (width != 0)
-// {
-// targetBounds.x -= width;
-// }
-//
-// if (height != 0)
-// {
-// targetBounds.y += height;
-// }
-
- return targetBounds;
- }
- }
-
- private static class AnimatedHideLocator implements Locator
- {
- private Point _endPoint;
- private boolean _isAnimating;
-
- /**
- * @param endPoint -- must be absolute coordinate
- */
- public void setHideEndPoint(Point endPoint)
- {
- _endPoint = endPoint;
- }
-
- public void relocate(IFigure target)
- {
- final Point newEndPoint = _endPoint.getCopy();
- target.translateToRelative(_endPoint);
- Rectangle startBounds = target.getBounds().getCopy();
- animateBoundsChange(target, startBounds, newEndPoint);
- }
-
- private void animateBoundsChange(final IFigure target,
- final Rectangle startBounds,
- final Point endPoint)
- {
- final int numSteps = 5;
- final int numMs = 500;
- final int timeSteps = numMs/numSteps;
-
- int xDelta = endPoint.x - startBounds.x;
- int yDelta = endPoint.y - startBounds.y;
-
- final int widthIncrement = -1 * startBounds.width / numSteps;
- final int heightIncrement = -1 * startBounds.height / numSteps;
- int xIncrement = xDelta / numSteps;
- int yIncrement = yDelta / numSteps;
-
- target.setBounds(startBounds);
- if (widthIncrement != 0 || heightIncrement != 0)
- {
- _isAnimating = true;
- doAnimation(numMs, timeSteps, widthIncrement, heightIncrement, xIncrement, yIncrement, endPoint, target);
- }
- }
-
- private void doAnimation(final int remainingTime,
- final int timeIncrement,
- final int widthIncrement, final int heightIncrement
- , final int xIncrement, final int yIncrement
- , final Point endPoint
- , final IFigure target)
- {
- Display.getCurrent().timerExec(timeIncrement,
- new Runnable()
- {
- public void run()
- {
- if (remainingTime <= 0)
- {
- if (target.getParent() != null)
- {
- target.getParent().remove(target);
- }
- _isAnimating = false;
- }
- else
- {
- final Rectangle curBounds = target.getBounds().getCopy();
- curBounds.width += widthIncrement;
- curBounds.height += heightIncrement;
- curBounds.x += xIncrement;
- curBounds.y += yIncrement;
- target.setBounds(curBounds);
- target.revalidate();
- doAnimation(remainingTime-timeIncrement, timeIncrement, widthIncrement, heightIncrement, xIncrement, yIncrement, endPoint, target);
- }
- }
- });
- }
- }
-}
-

Back to the top