获取 EMF 编辑域
Aquiring EMF Editing Domain
我在 Eclipse 插件中创建了一个 EMF 模型。我想在 Nebula Grid 中显示模型内容(使用 GridTreeViewer 进行显示,使用选项卡式属性 sheet 进行编辑)。
网格查看器
我已经编写了自定义标签和内容提供程序,因为我没有让 EMF 生成的标签和内容提供程序使用所有 Nebula 网格功能(复选框、工具提示)。
public class OverviewViewLabelProvider extends ColumnLabelProvider {
[...]
public void update(ViewerCell cell) {
AbstractEntry entry = (AbstractEntry) cell.getElement();
GridItem item = (GridItem) cell.getItem();
switch (cell.getColumnIndex()) {...}
}
}
在主视图中设置选择提供商class
public class OverviewViewPart extends ViewPart implements ITabbedPropertySheetPageContributor {
[...]
this.getSite().setSelectionProvider(this.viewer);
[...]
public Object getAdapter(Class adapter) {
if (adapter == IPropertySheetPage.class) {
return new TabbedPropertySheetPage(this);
}
return super.getAdapter(adapter);
}
public String getContributorId() {
return TaxEditorPlugin.PLUGIN_ID;
}
制表符 属性 Sheet
这与 EMF 数据绑定一起工作得很好,下面只是一个字段的示例:
this.descriptionText.setText(this.entry.getDescription());
this.descriptionText.setData(this.entry);
emfDataBindingContext.bindValue(
WidgetProperties.text(SWT.Modify).observe(this.descriptionText),
EMFProperties.value(ModelPackage.Literals.ABSTRACT_ENTRY__DESCRIPTION).observe(this.entry)
);
更新适配器和型号
public class OverviewViewUpdateAdapter extends EContentAdapter{
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
this.viewer.refresh();
}
}
现在想用编辑域和命令栈,惨遭失败
我做的模型厂:
Editing domain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain("at.liebhart.tax.editor.domain");
Resource resource = domain.getResourceSet().createResource(URI.createURI(taxModel.toString() + ".taxgui"));
resource.getContents().add(taxModel);
我也试过:
this.domain = new AdapterFactoryEditingDomain(new AdapterFactoryImpl(), this.stack);
两者均无效。
任何人都可以帮助我获得一个没有整个 model.edit 东西的工作编辑域,它似乎不支持星云小部件。
TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(String)
用于检索与特定 ID 关联的 EditingDomain(通常是因为您想重新使用现有编辑器的 EditingDomain 等)。
我猜你想使用:
org.eclipse.emf.transaction.TransactionalEditingDomain.Factory.createEditingDomain(ResourceSet)
我在 Eclipse 插件中创建了一个 EMF 模型。我想在 Nebula Grid 中显示模型内容(使用 GridTreeViewer 进行显示,使用选项卡式属性 sheet 进行编辑)。
网格查看器
我已经编写了自定义标签和内容提供程序,因为我没有让 EMF 生成的标签和内容提供程序使用所有 Nebula 网格功能(复选框、工具提示)。
public class OverviewViewLabelProvider extends ColumnLabelProvider {
[...]
public void update(ViewerCell cell) {
AbstractEntry entry = (AbstractEntry) cell.getElement();
GridItem item = (GridItem) cell.getItem();
switch (cell.getColumnIndex()) {...}
}
}
在主视图中设置选择提供商class
public class OverviewViewPart extends ViewPart implements ITabbedPropertySheetPageContributor {
[...]
this.getSite().setSelectionProvider(this.viewer);
[...]
public Object getAdapter(Class adapter) {
if (adapter == IPropertySheetPage.class) {
return new TabbedPropertySheetPage(this);
}
return super.getAdapter(adapter);
}
public String getContributorId() {
return TaxEditorPlugin.PLUGIN_ID;
}
制表符 属性 Sheet
这与 EMF 数据绑定一起工作得很好,下面只是一个字段的示例:
this.descriptionText.setText(this.entry.getDescription());
this.descriptionText.setData(this.entry);
emfDataBindingContext.bindValue(
WidgetProperties.text(SWT.Modify).observe(this.descriptionText),
EMFProperties.value(ModelPackage.Literals.ABSTRACT_ENTRY__DESCRIPTION).observe(this.entry)
);
更新适配器和型号
public class OverviewViewUpdateAdapter extends EContentAdapter{
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
this.viewer.refresh();
}
}
现在想用编辑域和命令栈,惨遭失败
我做的模型厂:
Editing domain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain("at.liebhart.tax.editor.domain");
Resource resource = domain.getResourceSet().createResource(URI.createURI(taxModel.toString() + ".taxgui"));
resource.getContents().add(taxModel);
我也试过:
this.domain = new AdapterFactoryEditingDomain(new AdapterFactoryImpl(), this.stack);
两者均无效。 任何人都可以帮助我获得一个没有整个 model.edit 东西的工作编辑域,它似乎不支持星云小部件。
TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(String)
用于检索与特定 ID 关联的 EditingDomain(通常是因为您想重新使用现有编辑器的 EditingDomain 等)。
我猜你想使用:
org.eclipse.emf.transaction.TransactionalEditingDomain.Factory.createEditingDomain(ResourceSet)