Acomeing EMF Editing Domain - PullRequest
       42

Acomeing EMF Editing Domain

0 голосов
/ 27 февраля 2020

Я создал модель EMF внутри плагина Eclipse. Я хочу отобразить содержимое моделей в Nebula Grid (используя GridTreeViewer для отображения и вкладку свойств для редактирования).

Gridviewer

Я написал пользовательский лейбл и контент-провайдер, так как я не заставил сгенерированные 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()) {...}
    }
}

установить поставщика выбора в классе основного вида

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;
}

Таблица свойств с вкладками

Это прекрасно работает вместе с привязкой данных 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, который, похоже, не поддерживает виджеты туманности.

1 Ответ

0 голосов
/ 27 февраля 2020
TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(String)

- для получения EditingDomain, связанного с определенным идентификатором (обычно потому, что вы хотите повторно использовать EditingDomain существующего редактора и т. Д. c.).

Полагаю, вы хотите использовать:

org.eclipse.emf.transaction.TransactionalEditingDomain.Factory.createEditingDomain(ResourceSet)
...