我如何以编程方式知道视图处于快速查看状态?

时间:2019-08-07 18:33:27

标签: eclipse eclipse-rcp

我们开发了一个基于Eclipse 3.8的Eclipse RCP应用程序。我们正在尝试在Eclipse 4.8上构建它,鉴于删除了某些类,我们的某些代码已损坏。

在Eclipse 3.8上,我们知道当此行返回null时,视图处于快速查看状态:

( (PartSite)viewPart.getSite() ).getPane().getContainer();

但是PartSite和方法getContainer()在Eclipse 4.8上都不再可用。

我们如何检查视图是否处于快速查看状态?

1 个答案:

答案 0 :(得分:1)

Eclipse 4中没有快速视图,只是最小化的部分。

您将需要使用某些e4 API来确定零件或其容器是否最小化。像这样:

EPartService partService = getSite().getService(EPartService.class);

MUIElement part = partService.findPart(getSite().getId());

MElementContainer<?> parent = part.getParent();

if (parent == null) {
   part = part.getCurSharedRef();

   parent = part.getParent();
}

boolean minimized = isMinimized(part) || isMinimized(parent);


private boolean isMinimized(MUIElement element) {
   List<String> tags = element.getTags();
   return tags.contains(IPresentationEngine.MINIMIZED) && !tags.contains(IPresentationEngine.ACTIVE);
}

您可以像这样跟踪最小化标签中的更改:

IEventBroker broker = getSite().getService(IEventBroker.class);

broker.subscribe(UIEvents.ApplicationElement.TOPIC_TAGS, event -> {
   Object element = event.getProperty(UIEvents.EventTags.ELEMENT);
   Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE);
   Object oldValue = event.getProperty(UIEvents.EventTags.OLD_VALUE);

   if (IPresentationEngine.MINIMIZED.equals(newValue))
     System.out.println("min added " + element);
   if (IPresentationEngine.MINIMIZED.equals(oldValue))
     System.out.println("min removed " + element);
 });