Java源码示例:org.eclipse.draw2d.Viewport

示例1
public void reveal(IFigure figure) {
	Viewport viewport = canvas.getViewport();
	Rectangle viewportBounds = viewport.getBounds().getCopy();
	viewportBounds.translate(viewport.getViewLocation());
	Rectangle figureBounds = figure.getBounds().getCopy();
	figure.translateToAbsolute(figureBounds);
	figureBounds.translate(viewport.getViewLocation());
	if (!viewportBounds.contains(figureBounds)) {
		int newX = viewportBounds.x;
		int newY = viewportBounds.y;
		if(viewportBounds.x > figureBounds.x) {
			newX = figureBounds.x; 
		} else if(viewportBounds.x + viewportBounds.getRight().x < figureBounds.getRight().x) {
			newX = figureBounds.getRight().x - viewportBounds.width;
		}
		if(viewportBounds.y > figureBounds.y) {
			newY = figureBounds.y; 
		} else if(viewportBounds.getBottom().y < figureBounds.getBottom().y) {
			newY = figureBounds.getBottom().y - viewportBounds.height;
		}
		canvas.scrollSmoothTo(newX, newY);
	}
}
 
示例2
private void disposeRulerViewer( GraphicalViewer viewer )
{
	if ( viewer == null )
		return;
	/*
	 * There's a tie from the editor's range model to the RulerViewport (via
	 * a listener) to the RulerRootEditPart to the RulerViewer. Break this
	 * tie so that the viewer doesn't leak and can be garbage collected.
	 */

	RangeModel rModel = new DefaultRangeModel( );
	Viewport port = ( (FigureCanvas) viewer.getControl( ) ).getViewport( );
	port.setHorizontalRangeModel( new RulerDefaultRangeModel( rModel ) );
	port.setVerticalRangeModel( new RulerDefaultRangeModel( rModel ) );
	rulerEditDomain.removeViewer( viewer );
	viewer.getControl( ).dispose( );
}
 
示例3
/**
 * Convenient method to translate bounds to Absolute coordinate
 *
 * @param owner
 * @param b
 */
public static void translateToAbsolute(final IFigure owner, final Rectangle b) {
    owner.translateToAbsolute(b);
    IFigure parentFigure = owner.getParent();
    while (parentFigure != null) {
        if (parentFigure instanceof Viewport) {
            final Viewport viewport = (Viewport) parentFigure;
            b.translate(
                    viewport.getHorizontalRangeModel().getValue(),
                    viewport.getVerticalRangeModel().getValue());
            parentFigure = parentFigure.getParent();
        }
        else {
            parentFigure = parentFigure.getParent();
        }
    }
}
 
示例4
/**
 * initialize the overview
 */
protected void initializeOverview() {
	LightweightSystem lws = new LightweightSystem(overview);
	RootEditPart rep = getGraphicalViewer().getRootEditPart();
	DiagramRootEditPart root = (DiagramRootEditPart) rep;
	thumbnail = new ScrollableThumbnailEx((Viewport) root.getFigure());
	// thumbnail.setSource(root.getLayer(org.eclipse.gef.LayerConstants.PRINTABLE_LAYERS));
	thumbnail.setSource(root.getLayer(LayerConstants.SCALABLE_LAYERS));

	lws.setContents(thumbnail);
	disposeListener = new DisposeListener() {

		public void widgetDisposed(DisposeEvent e) {
			if (thumbnail != null) {
				thumbnail.deactivate();
				thumbnail = null;
			}
		}
	};
	getEditor().addDisposeListener(disposeListener);
	this.overviewInitialized = true;
}
 
示例5
private void showThumbnail() {
	if (quickMode) {
		return;
	}
	// RootEditPart�̃r���[���\�[�X�Ƃ��ăT���l�C�����쐬
	ScalableFreeformRootEditPart editPart = (ScalableFreeformRootEditPart) this.graphicalViewer
			.getRootEditPart();

	if (this.thumbnail != null) {
		this.thumbnail.deactivate();
	}

	this.thumbnail = new ScrollableThumbnail((Viewport) editPart
			.getFigure());
	this.thumbnail.setSource(editPart
			.getLayer(LayerConstants.PRINTABLE_LAYERS));

	this.lws.setContents(this.thumbnail);

}
 
示例6
private void showThumbnail() {
    if (quickMode) {
        return;
    }
    final ScalableFreeformRootEditPart editPart = (ScalableFreeformRootEditPart) graphicalViewer.getRootEditPart();
    if (thumbnail != null) {
        thumbnail.deactivate();
    }
    this.thumbnail = new ScrollableThumbnail((Viewport) editPart.getFigure());
    thumbnail.setSource(editPart.getLayer(LayerConstants.PRINTABLE_LAYERS));
    lws.setContents(thumbnail);
}
 
示例7
/**
 * 
 */
public void initStepDat( )
{
	Viewport port = ( (FigureCanvas) getControl( ) ).getViewport( );
	stepData.minX = port.getHorizontalRangeModel( ).getMinimum( );
	stepData.maxX = port.getHorizontalRangeModel( ).getMaximum( );
	stepData.valueX = port.getHorizontalRangeModel( ).getValue( );
	stepData.extendX = port.getHorizontalRangeModel( ).getExtent( );

	stepData.minY = port.getVerticalRangeModel( ).getMinimum( );
	stepData.maxY = port.getVerticalRangeModel( ).getMaximum( );
	stepData.valueY = port.getVerticalRangeModel( ).getValue( );
	stepData.extendY = port.getVerticalRangeModel( ).getExtent( );
}
 
示例8
/**
 * Returns <code>true</code> if the given point is inside the
 * viewport, but near its edge.
 * 
 * @see org.eclipse.gef.AutoexposeHelper#detect(org.eclipse.draw2d.geometry.Point)
 */
public boolean detect( Point where )
{
	lastStepTime = 0;
	Viewport port = findViewport( owner );
	Rectangle rect = Rectangle.SINGLETON;
	port.getClientArea( rect );
	port.translateToParent( rect );
	port.translateToAbsolute( rect );
	return rect.contains( where )
			&& !rect.crop( threshold ).contains( where );
}
 
示例9
/**
 * Convenient method to translate bounds to Absolute coordinate
 *
 * @param owner
 * @param p
 */
public static void translateToAbsolute(IFigure owner, final Point p) {
    while (owner != null) {
        if (owner instanceof Viewport) {
            final Viewport viewport = (Viewport) owner;
            p.translate(
                    viewport.getHorizontalRangeModel().getValue(),
                    viewport.getVerticalRangeModel().getValue());
            owner = owner.getParent();
        }
        else {
            owner = owner.getParent();
        }
    }
}
 
示例10
@Override
public void mousePressed(final MouseEvent me) {
    try {

        final IFigure  f = ((CustomMainProcessEditPart) laneEditPart.getParent().getParent().getParent()).getFigure() ;
        IFigure p = f ;
        while(!(p instanceof Viewport)){
            p = p.getParent();
        }

        final int y = ((Viewport)p).getVerticalRangeModel().getValue() ;

        IGraphicalEditPart targetEp = laneEditPart;
        if(type.equals(UpdateSizePoolSelectionEditPolicy.ADD_RIGHT)||type.equals(UpdateSizePoolSelectionEditPolicy.REMOVE_RIGHT)){
            targetEp = getPoolEditPart();
        }

        final IUndoableOperation c = new UpdatePoolSizeCommand(targetEp, type);
        OperationHistoryFactory.getOperationHistory().execute(c,null,null);
        me.consume();
        laneEditPart.getViewer().setSelection(new StructuredSelection(targetEp));
        refresh();
        laneEditPart.getViewer().setSelection(new StructuredSelection(getHost()));
        ((Viewport)p).setVerticalLocation(y);


    } catch (final ExecutionException e) {
        e.printStackTrace();
    }
}
 
示例11
/**
 * @param zoom 
 * 
 */
private void showSelectionForAddBottom(double zoom) {
	if (!isOnBottom()) {

		IFigure f = new ImageFigure(Pics.getImage(PicsConstants.arrowDown));
		f.setSize(20, 20);

		sourceFigure = getHostFigure() ;

		Rectangle bounds = sourceFigure.getBounds().getCopy();
		//get the absolute coordinate of bounds
		sourceFigure.translateToAbsolute(bounds);
		IFigure parentFigure = sourceFigure.getParent();
		while( parentFigure != null  ) {
			if(parentFigure instanceof Viewport) {
				Viewport viewport = (Viewport)parentFigure;
				bounds.translate(
						viewport.getHorizontalRangeModel().getValue(),
						viewport.getVerticalRangeModel().getValue());
				parentFigure = parentFigure.getParent();
			}
			else {
				parentFigure = parentFigure.getParent();
			}
		}

		Point location =new Point(bounds.getBottomLeft().x+20,bounds.getBottomLeft().y) ; 

		f.setLocation(location);

		f.addMouseListener(new MouseListenerForSpan(AbstractSwitchLaneSelectionEditPolicy.ADD_BOTTOM));
		getLayer(LayerConstants.HANDLE_LAYER).add(f);
		figures.add(f);
	}
}
 
示例12
/**
 * @param zoom 
 * 
 */
private void showSelectionForAddTop(double zoom) {
	if (!isOnTop()) {

		IFigure f = new ImageFigure(Pics.getImage(PicsConstants.arrowUp));
		f.setParent(getHostFigure());
		f.setSize(20, 20);



		sourceFigure = getHostFigure() ;

		Rectangle bounds = sourceFigure.getBounds().getCopy();
		//get the absolute coordinate of bounds
		sourceFigure.translateToAbsolute(bounds);
		IFigure parentFigure = sourceFigure.getParent();
		while( parentFigure != null  ) {
			if(parentFigure instanceof Viewport) {
				Viewport viewport = (Viewport)parentFigure;
				bounds.translate(
						viewport.getHorizontalRangeModel().getValue(),
						viewport.getVerticalRangeModel().getValue());
				parentFigure = parentFigure.getParent();
			}
			else {
				parentFigure = parentFigure.getParent();
			}
		}


		Point location = new Point(bounds.getTopLeft().x+20,bounds.getTopLeft().y-20) ;

		f.setLocation(location);
		f.addMouseListener(new MouseListenerForSpan(AbstractSwitchLaneSelectionEditPolicy.ADD_TOP));
		getLayer(LayerConstants.HANDLE_LAYER).add(f);
		figures.add(f);
	}
}
 
示例13
/**
 * 
 */
private void showSelectionForAddBottom() {
	if (!isOnBottom()) {

		IFigure f = new ImageFigure(Pics.getImage(PicsConstants.arrowDown));
		f.setSize(20, 20);

		sourceFigure = getHostFigure() ;

		Rectangle bounds = sourceFigure.getBounds().getCopy();
		//get the absolute coordinate of bounds
		sourceFigure.translateToAbsolute(bounds);
		IFigure parentFigure = sourceFigure.getParent();
		while( parentFigure != null  ) {
			if(parentFigure instanceof Viewport) {
				Viewport viewport = (Viewport)parentFigure;
				bounds.translate(
						viewport.getHorizontalRangeModel().getValue(),
						viewport.getVerticalRangeModel().getValue());
				parentFigure = parentFigure.getParent();
			}
			else {
				parentFigure = parentFigure.getParent();
			}
		}

		f.setLocation(new Point(bounds.getBottomLeft().x,bounds.getBottom().y));

		f.addMouseListener(new MouseListenerForSpan(AbstractSwitchLaneSelectionEditPolicy.ADD_BOTTOM));
		layer.add(f);
		figures.add(f);
	}
}
 
示例14
/**
 * 
 */
private void showSelectionForAddTop() {
	if (!isOnTop()) {

		IFigure f = new ImageFigure(Pics.getImage(PicsConstants.arrowUp));
		f.setParent(getHostFigure());
		f.setSize(20, 20);



		sourceFigure = getHostFigure() ;

		Rectangle bounds = sourceFigure.getBounds().getCopy();
		//get the absolute coordinate of bounds
		sourceFigure.translateToAbsolute(bounds);
		IFigure parentFigure = sourceFigure.getParent();
		while( parentFigure != null  ) {
			if(parentFigure instanceof Viewport) {
				Viewport viewport = (Viewport)parentFigure;
				bounds.translate(
						viewport.getHorizontalRangeModel().getValue(),
						viewport.getVerticalRangeModel().getValue());
				parentFigure = parentFigure.getParent();
			}
			else {
				parentFigure = parentFigure.getParent();
			}
		}

		f.setLocation(new Point(bounds.getTopLeft().x,bounds.getTop().y-20));
		f.addMouseListener(new MouseListenerForSpan(AbstractSwitchLaneSelectionEditPolicy.ADD_TOP));
		layer.add(f);
		figures.add(f);
	}
}
 
示例15
@Override
public void mousePressed(MouseEvent me) {
    try {

        IFigure  f = ((CustomMainProcessEditPart) poolEditPart.getParent()).getFigure() ;
        IFigure p = f ;
        while(!(p instanceof Viewport)){
            p = p.getParent();
        }

        int y = ((Viewport)p).getVerticalRangeModel().getValue() ;
        int x = ((Viewport)p).getHorizontalRangeModel().getValue() ;


        IUndoableOperation c = new UpdatePoolSizeCommand(poolEditPart, type);
        OperationHistoryFactory.getOperationHistory().execute(c,null,null);
        me.consume();


        poolEditPart.getViewer().setSelection(new StructuredSelection(poolEditPart));
        refresh();
        poolEditPart.getViewer().setSelection(new StructuredSelection(getHost()));

        if(type.equals(ADD_RIGHT)){
            ((Viewport)p).setHorizontalLocation(x+150);
        }

        ((Viewport)p).setVerticalLocation(y);


    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}
 
示例16
/**
 * 
 */
protected Point getPartAbsoluteCursorLocation() {
	org.eclipse.draw2d.geometry.Point toolLocation = null;
	try {
		Tool tool = selectedTargetEditPart.getViewer().getEditDomain().getActiveTool();
		AbstractTool aTool = (AbstractTool) tool;
		Method m = AbstractTool.class.getDeclaredMethod("getLocation"); //$NON-NLS-1$
		m.setAccessible(true);
		toolLocation = ((org.eclipse.draw2d.geometry.Point) m.invoke(aTool)).getCopy();

		IFigure parentFigure = selectedTargetEditPart.getFigure().getParent();
		while( parentFigure != null  ) {
			if(parentFigure instanceof Viewport) {
				Viewport viewport = (Viewport)parentFigure;
				toolLocation.translate(viewport.getHorizontalRangeModel().getValue(),
						viewport.getVerticalRangeModel().getValue());
				parentFigure = parentFigure.getParent();
			} else {
				parentFigure = parentFigure.getParent();
			}
		}

		return toolLocation;
	} catch (Exception e) {
		BonitaStudioLog.log("can't find exact location for pasting"); //$NON-NLS-1$
		return null;
	}
}
 
示例17
private void update(Viewport port, IFigure figure, Control control, ZoomManager zoomManager) {
	this.port = port;
	this.figure = figure;
	this.control = control;
	this.zoomManager = zoomManager;
	if (window != null)
		window.refresh();
}
 
示例18
public static boolean captureLayout(IFigure root) {

		RECORDING = true;

		while (!(root instanceof Viewport)) {
			root = root.getParent();
		}
		viewport = (Viewport) root;
		while (root.getParent() != null) {
			root = root.getParent();
		}

		initialStates = new HashMap<>();
		finalStates = new HashMap<>();

		// This part records all layout results.
		root.validate();
		Iterator<IFigure> iter = initialStates.keySet().iterator();
		if (!iter.hasNext()) {
			// Nothing layed out, so abort the animation
			RECORDING = false;
			return false;
		}
		while (iter.hasNext()) {
			recordFinalState(iter.next());
		}

		start = System.currentTimeMillis();
		finish = start + DURATION;
		current = start + 20;

		RECORDING = false;
		PLAYBACK = true;
		return true;
	}
 
示例19
private ScrollableThumbnail createThumbnail() {
	Viewport port = (Viewport) part.getFigure();
	IFigure figure = part.getLayer(LayerConstants.PRINTABLE_LAYERS);
	ScrollableThumbnail thumbnail = new ScrollableThumbnail(port);
	thumbnail.setSource(figure);
	return thumbnail;
}
 
示例20
public void reveal( EditPart part )
{
	// In some case, the editor control is not created, but get the sync selection event.
	// Fix this problem temporary.
	if(getFigureCanvas( )==null || getFigureCanvas( ).isDisposed( ))
	{
		return;
	}
	
	Viewport port = getFigureCanvas( ).getViewport( );
	IFigure target = ( (GraphicalEditPart) part ).getFigure( );

	Rectangle exposeRegion = target.getBounds( ).getCopy( );

	// Get the primary editpolicy
	EditPolicy policy = part.getEditPolicy( EditPolicy.PRIMARY_DRAG_ROLE );

	// If the policy let us access the handles, proceed, otherwise
	// default to original behaviour
	if ( !( policy instanceof ISelectionHandlesEditPolicy ) )
	{
		super.reveal( part );
		return;
	}

	// First translate exposeRegion to the root level
	target = target.getParent( );
	while ( target != null && target != port )
	{
		target.translateToParent( exposeRegion );
		target = target.getParent( );
	}

	// Merge selection handles if any to the exposeRegion
	List handles = ( (ISelectionHandlesEditPolicy) policy ).getHandles( );
	for ( Iterator iter = handles.iterator( ); iter.hasNext( ); )
	{
		AbstractHandle handle = (AbstractHandle) iter.next( );

		Locator locator = handle.getLocator( );
		locator.relocate( handle );
		exposeRegion.union( handle.getBounds( ).getCopy( ) );
	}

	exposeRegion.getExpanded( 5, 5 );

	Dimension viewportSize = port.getClientArea( ).getSize( );

	Point topLeft = exposeRegion.getTopLeft( );
	Point bottomRight = exposeRegion.getBottomRight( )
			.translate( viewportSize.getNegated( ) );
	Point finalLocation = new Point( );
	if ( viewportSize.width < exposeRegion.width )
		finalLocation.x = Math.min( bottomRight.x, Math.max( topLeft.x,
				port.getViewLocation( ).x ) );
	else
		finalLocation.x = Math.min( topLeft.x, Math.max( bottomRight.x,
				port.getViewLocation( ).x ) );

	if ( viewportSize.height < exposeRegion.height )
		finalLocation.y = Math.min( bottomRight.y, Math.max( topLeft.y,
				port.getViewLocation( ).y ) );
	else
		finalLocation.y = Math.min( topLeft.y, Math.max( bottomRight.y,
				port.getViewLocation( ).y ) );

	getFigureCanvas( ).scrollSmoothTo( finalLocation.x, finalLocation.y );
}
 
示例21
/**
 * Returns <code>true</code> if the given point is outside the
 * viewport or near its edge. Scrolls the viewport by a calculated (time
 * based) amount in the current direction.
 * 
 * todo: investigate if we should allow auto expose when the pointer is
 * outside the viewport
 * 
 * @see org.eclipse.gef.AutoexposeHelper#step(org.eclipse.draw2d.geometry.Point)
 */
public boolean step( Point where )
{
	Viewport port = findViewport( owner );

	Rectangle rect = Rectangle.SINGLETON;
	port.getClientArea( rect );
	port.translateToParent( rect );
	port.translateToAbsolute( rect );
	if ( !rect.contains( where )
			|| rect.crop( threshold ).contains( where ) )
		return false;

	// set scroll offset (speed factor)
	int scrollOffset = 0;

	// calculate time based scroll offset
	if ( lastStepTime == 0 )
		lastStepTime = System.currentTimeMillis( );

	DeferredGraphicalViewer.OriginStepData stepData = ( (DeferredGraphicalViewer) owner.getViewer( ) ).getOriginStepData( );
	long difference = System.currentTimeMillis( ) - lastStepTime;

	if ( difference > 0 )
	{
		scrollOffset = ( (int) difference / 3 );
		lastStepTime = System.currentTimeMillis( );
	}

	if ( scrollOffset == 0 )
		return true;

	rect.crop( threshold );

	int region = rect.getPosition( where );
	Point loc = port.getViewLocation( );

	if ( ( region & PositionConstants.SOUTH ) != 0 )
		loc.y += scrollOffset;
	else if ( ( region & PositionConstants.NORTH ) != 0 )
		loc.y -= scrollOffset;

	if ( ( region & PositionConstants.EAST ) != 0 )
		loc.x += scrollOffset;
	else if ( ( region & PositionConstants.WEST ) != 0 )
		loc.x -= scrollOffset;

	if ( stepData.minX > loc.x )
		loc.x = port.getHorizontalRangeModel( ).getValue( );
	if ( stepData.maxX - stepData.extendX < loc.x )
		loc.x = port.getHorizontalRangeModel( ).getValue( );
	if ( stepData.minY > loc.y )
		loc.y = port.getVerticalRangeModel( ).getValue( );
	if ( stepData.maxY - stepData.extendY < loc.y )
		loc.y = port.getVerticalRangeModel( ).getValue( );
	port.setViewLocation( loc );

	return true;
}
 
示例22
private Viewport getViewport() {
	return (Viewport) getRootEditPart().getFigure();
}
 
示例23
/**
 * Convenience method to get to the viewport
 * 
 * @return the figure cast as a viewport
 */
protected Viewport getViewport( )
{
	return (Viewport) getFigure( );
}