我正在尝试使用Eclipse 4在我的GEF应用程序中进行缩放。 我已经设法通过使用ZoomManager和Actions:
在Eclipse 3环境中使缩放功能正常工作ZoomManager manager = rootEditPart.getZoomManager();
getActionRegistry().registerAction(new ZoomInAction(manager));
getActionRegistry().registerAction(new ZoomOutAction(manager));
现在我尝试将项目迁移到Eclipse 4环境。 据我所知,Actions被Eclipse 4中的命令取代。 我已经在我的应用程序中添加了“ZoomIn命令”和“ZoomIn处理程序”。我还找到了一个使用ScalableFreeformLayeredPane的例子。
private static ScalableFreeformLayeredPane root;
@Inject
@Optional
private void subscribeTopicViewZoomIn(@UIEventTopic(Events.TOPIC_VIEW_ZOOMIN) Map<String, String> event) {
double curScale = root.getScale();
if (curScale <= 2.9)
root.setScale(curScale + 0.1);
}
我的问题是,我不知道如何将此ScalableFreeformLayeredPane与我用于显示模型的ScrollingGraphicalViewer连接:
private static ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
private static Model model = new Model();
@PostConstruct
public void postConstruct(Composite parent) {
viewer.createControl(parent);
viewer.setEditPartFactory(editPartFactory);
viewer.setEditDomain(new DefaultEditDomain(this));
CreateModel();
viewer.setContents(model);
}
有人可以帮助我或提供一个例子吗? 或者,如果不使用ScalableFreeformLayeredPane,还有其他方法吗?
谢谢! 托马斯
答案 0 :(得分:1)
我终于找到了适合我的解决方案:
private ZoomManager manager;
@Override
protected void initializeGraphicalViewer() {
double[] zoomLevels;
ArrayList<String> zoomContributions;
ScalableRootEditPart rootEditPart = (ScalableRootEditPart) viewer.getRootEditPart();
manager = rootEditPart.getZoomManager();
zoomLevels = new double[] {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 4.0, 5.0};
manager.setZoomLevels(zoomLevels);
zoomContributions = new ArrayList<String>();
manager.setZoomLevelContributions(zoomContributions);
}
使用此配置,我可以使用命令和事件来访问ZoomManager:
@Inject
@Optional
private void subscribeTopicViewZoomIn(@UIEventTopic(Events.TOPIC_VIEW_ZOOMIN) Map<String, String> event) {
manager.setZoom(manager.getNextZoomLevel());
updateZoomCombo();
}