Viewport视口

Viewport视口:编辑器中当前可以见到的部分。一般在outline视图实现鹰眼功能的时候会用到这个东西。

 

Viewport有三个子类:FocusableViewport、RulerViewport和FreeformViewport。这三个Viewport跟gef中默认提供的RootEditPart是一一对应的:

RulerRootEditPart对应于RulerViewport

FreeFormGraphicalRootEditPart和它的子类ScalableFreeformRootEditPart对应于FreeformViewport

FocusableViewport是一个内部类

 

在outline中使用Viewport:

由于Viewport是一个真实的视口它的大小跟当前编辑器打开的大小一样,而outline视图上现实的肯定会跟它实际大小不一样。所有在Viewport用到outline中的时候,有一个转换过程,这个转换能力是由Thumbnail提供。

 

Thumbnail:缩略图的意思,其功能主要也是干这个的。它还有一个子类ScrollableThumbnail:扩展了一个滚动的功能。通常我们使用的就是这个子类ScrollableThumbnail。

 

我在实现outline视图的鹰眼功能的时候,没有自己实现这些细节,我是直接使用emf提供的一个类OverviewComposite:

 

public void createControl(Composite parent)
    {
        RootEditPart rootEditPart = viewer.getRootEditPart();
        if (rootEditPart instanceof ScalableFreeformRootEditPart)
        {
            overview = new OverviewComposite(parent,
                    (ScalableFreeformRootEditPart) rootEditPart);
            overview.setLayoutData(new GridData(GridData.FILL_BOTH));
        }
    }

 这个方法是我的DiagramsOutlinePage类里面的方法,我只需要传入一个ScalableFreeformRootEditPart进去就行了。但是OverviewComposite类只能在使用ScalableFreeformRootEditPart作为rootEditPart 的时候才能使用。如果想自己实现:

 

public void createControl(Composite parent) {  
    parent.setLayout(new GridLayout(1,false));  
    Canvas canvas = new Canvas(parent, SWT.NONE);  
    canvas.setLayoutData(new GridData(GridData.FILL_BOTH));  
  
    LightweightSystem lightweightSystem = new LightweightSystem(canvas);  
  
    ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart) getViewer()  
            .getRootEditPart();  
    ScrollableThumbnail thumbnail = new ScrollableThumbnail(  
            (Viewport) rootEditPart.getFigure());  
    thumbnail.setSource(rootEditPart.getFigure());  
    lightweightSystem.setContents(thumbnail);  
}  
 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值