我知道我可以plugin.xml
创建新观点。此外,我可以使用{/ 1>代码创建IPerpspectiveFactory.createInitialLayout(IPageLayout)
的新视图
layout.addView(ChatView.ID, IPageLayout.LEFT, 1.0f, editorArea);
是否可以通过命令从另一个视图执行相同操作?
此外,我的观点不是单身,所以我希望创建视图副本。
不幸的是,使用像
这样的代码HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(viewId);
我无法在布局中定义视图位置。我想将所有新视图传递给布局文件夹。
更新
我已按以下方式修改了透视代码:
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.addView(IConsoleConstants.ID_CONSOLE_VIEW, IPageLayout.BOTTOM, 0.75f, editorArea);
layout.addView(CoreSettingsView.ID, IPageLayout.LEFT, 0.25f, editorArea);
//layout.addView(ChatView.ID, IPageLayout.LEFT, 1.0f, editorArea);
IFolderLayout folder = layout.createFolder("chatfolder", IPageLayout.LEFT, 1.0f, editorArea);
folder.addPlaceholder(ChatView.ID);
}
之前的评论行导致聊天视图出现在透视的“主要”区域。
现在我根据建议改变它,让占位符在同一个地方。
处理程序执行的代码如下:
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
try {
ChatView chatView = (ChatView) HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(
ChatView.ID,
Integer.toString(counter++),
IWorkbenchPage.VIEW_ACTIVATE);
} catch (PartInitException e) {
e.printStackTrace();
}
return event;
}
这会导致出现新视图,但它们都显示在与控制台视图相同的位置。即不是直接定位时出现的那个地方。
为什么?
更新2
这是关于占位符如何发生的图片。如果按下绿色按钮,红色箭头将显示实际出现的新视图。蓝色箭头显示视图应显示的位置以及如果显式位于透视图中,它(一个实例)实际出现的位置:
更新3
以下工作:
IFolderLayout folder = layout.createFolder("chatfolder", IPageLayout.LEFT, 1.0f, editorArea);
folder.addPlaceholder(ChatView.ID + ":*");
我也使用1.0f,尽管0.95f被认为是最大值。如果我使用0.95f则不会占用整个区域。
答案 0 :(得分:4)
在创建初始布局时添加占位符。之后,从其他视图中,您只需显示要显示的视图。它会出现在占位符中。
答案 1 :(得分:1)
您可以为每个视图使用唯一的secondary id
并使用
IWorkbenchPage.showView(viewId, secondardId, IWorbenchPage.VEW_ACTIVATE);
所有视图都将放置在为视图ID定义的文件夹中。
你可以在透视工厂中做这样的事情来设置它:
IFolderLayout folder = layout.createFolder(folderId, IPageLayout.BOTTOM, 0.75f, layout.getEditorArea());
folder.addPlaceholder(viewId);