E4中可以使用简单的POJO类替代3.x的ViewPart子类作为视图对象,这样的话就不能使用org.eclipse.ui.views扩展点指定视图类了。
其实我个人觉得E4的Model Fragments更灵活,我们将做一个简单例子试用一下。
测试场景:
- 一个主E4工程,比如"vwpolo.demo.client”(包含Application.e4xmi、MainView视图)
- 一个附属插件工程”vwpolo.demo.view1”(包含fragment.e4xmi、SimpleView视图)
测试目的:将SimpleView视图添加到"vwpolo.demo.client”的透视图中(和MainView平级)。
创建vwpolo.demo.client
新建一个E4工程,命名为”vwpolo.demo.client”。再新建一个MainView视图。
package vwpolo.demo.client.views; import javax.inject.Inject; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class MainView { private final Composite parent; @Inject // E4将会注入parent组件到视图中 public MainView(Composite parent) { this.parent = parent; final GridLayout layout = new GridLayout(2, false); parent.setLayout(layout); createLabel("作者"); createText("vwpolo"); createLabel("日期"); createText("2011-07-22"); } private void createLabel(String text) { Label label = new Label(parent, SWT.NONE); label.setText(text); GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalIndent = 20; label.setLayoutData(gridData); } private void createText(String text) { GridData gridData = new GridData(GridData.FILL_HORIZONTAL); Text textField = new Text(parent, SWT.NONE); textField.setText(text); textField.setLayoutData(gridData); } }
然后将MainView视图注册到Application.e4xmi文件中。
展开到Part Stack节点,
为Part Stack指定id:”client.partstack”,并添加子节点:“Part”组件。
然后编辑“Part”组件属性,设置ID、Label属性,在Class URI属性指定MainView视图,
运行看下效果:
创建vwpolo.demo.view1
创建一个空Plug-in Project,命名为”vwpolo.demo.view1”.添加依赖项工程:javax.inject。再添加一个SimpleView视图。
package vwpolo.demo.view1.views; import javax.inject.Inject; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; public class SimpleView { private final Composite parent; @Inject public SimpleView(Composite parent) { this.parent = parent; final GridLayout layout = new GridLayout(2, false); parent.setLayout(layout); Button helloWorld = new Button(parent, SWT.NONE); helloWorld.setText("Hello World"); } }
使用“New Model Fragment”向导生成vwpolo.demo.view1工程的fragment.e4xmi文件
打开fragment.e4xmi文件,在Model Fragments新增一个”String Model Fragment”节点.
双击打开。
点击“Element Id”后面的”Find…”按钮,选择PartStack。
点击 OK 按钮后,会列出工作区中注册的PartStack组件。选择id为“client.partstack”的Part Stack。
点击Featurename的“Find…”按钮,选择basic –> PartStack –> children节点。
接下来再添加一个Part组件
编辑Part组件信息:在Class URI中指定SimpleView视图。
增加org.eclipse.e4.workbench.model扩展点
为插件”vwpolo.demo.view1”增加”org.eclipse.e4.workbench.model”扩展点.
最终:
运行测试
将插件vwpolo.demo.view1加入到vwpolo.demo.client的.product文件中,打开运行配置对话框,添加依赖插件,运行
我们的SimpleView视图被加入到vwpolo.demo.client项目的透视图中了。
然后发挥你的想象力吧,其他组件可使用同样方式扩展。