Example usage for org.eclipse.jface.databinding.swt WidgetProperties text

List of usage examples for org.eclipse.jface.databinding.swt WidgetProperties text

Introduction

In this page you can find the example usage for org.eclipse.jface.databinding.swt WidgetProperties text.

Prototype

public static IWidgetValueProperty text() 

Source Link

Document

Returns a value property for observing the text of a Button , CCombo , CLabel , Combo , Item , Label , Link , Shell , Group , StyledText or Text .

Usage

From source file:org.eclipse.emf.ecp.view.spi.categorization.swt.SWTCategorizationRenderer.java

License:Open Source License

/**
 * {@inheritDoc}//from   www .ja va 2 s .  com
 *
 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#renderControl(int, org.eclipse.swt.widgets.Composite,
 *      org.eclipse.emf.ecp.view.spi.model.VElement, org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
 */
@Override
protected Control renderControl(SWTGridCell cell, Composite parent)
        throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
    final Composite categoryComposite = new Composite(parent, SWT.NONE);
    categoryComposite.setBackground(parent.getBackground());
    categoryComposite.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_categorization"); //$NON-NLS-1$

    categoryComposite.setLayout(LayoutProviderHelper.getColumnLayout(1, false));

    final Label headingLbl = new Label(categoryComposite, SWT.NONE);
    headingLbl.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_categorization_title"); //$NON-NLS-1$
    final Label whatToDoLbl = new Label(categoryComposite, SWT.NONE);
    whatToDoLbl.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_categorization_message"); //$NON-NLS-1$

    final IObservableValue modelValue = EMFEditObservables.observeValue(
            AdapterFactoryEditingDomain.getEditingDomainFor(getVElement()), getVElement(),
            VViewPackage.eINSTANCE.getElement_Label());
    final IObservableValue targetValue = WidgetProperties.text().observe(headingLbl);
    dataBindingContext.bindValue(targetValue, modelValue);

    whatToDoLbl.setText(LocalizationServiceHelper.getString(getClass(), MessageKeys.Categorization_Selection));
    return categoryComposite;
}

From source file:org.eclipse.emf.ecp.view.spi.core.swt.AbstractControlSWTRenderer.java

License:Open Source License

/**
 * Create the {@link Control} displaying the label of the current {@link VControl}.
 *
 * @param parent the {@link Composite} to render onto
 * @return the created {@link Control} or null
 *///from www .  ja v a  2 s .co m
protected final Control createLabel(final Composite parent) {
    Label label = null;
    labelRender: if (hasLeftLabelAlignment()) {
        final VDomainModelReference domainModelReference = getVElement().getDomainModelReference();
        final IValueProperty valueProperty;
        try {
            valueProperty = getEMFFormsDatabinding().getValueProperty(domainModelReference,
                    getViewModelContext().getDomainModel());
        } catch (final DatabindingFailedException ex) {
            getReportService().report(new RenderingFailedReport(ex));
            break labelRender;
        } catch (final IllegalArgumentException ex) {
            getReportService().report(new AbstractReport(ex));
            break labelRender;
        }

        final EMFFormsLabelProvider labelProvider = getEMFFormsLabelProvider();
        label = new Label(parent, SWT.NONE);
        label.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_label"); //$NON-NLS-1$
        label.setBackground(parent.getBackground());

        final EObject rootObject = getViewModelContext().getDomainModel();
        try {
            final IObservableValue textObservable = WidgetProperties.text().observe(label);
            final IObservableValue displayNameObservable = labelProvider.getDisplayName(domainModelReference,
                    rootObject);
            viewModelDBC.bindValue(textObservable, displayNameObservable, null, new UpdateValueStrategy() {

                /**
                 * {@inheritDoc}
                 *
                 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
                 */
                @Override
                public Object convert(Object value) {
                    String extra = ""; //$NON-NLS-1$
                    final VTMandatoryStyleProperty mandatoryStyle = getMandatoryStyle();
                    final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty
                            .getValueType();
                    if (mandatoryStyle.isHighliteMandatoryFields() && structuralFeature.getLowerBound() > 0) {
                        extra = mandatoryStyle.getMandatoryMarker();
                    }
                    final String result = (String) super.convert(value);
                    return result + extra;
                }

            });
            final IObservableValue tooltipObservable = WidgetProperties.tooltipText().observe(label);
            final IObservableValue descriptionObservable = labelProvider.getDescription(domainModelReference,
                    rootObject);
            viewModelDBC.bindValue(tooltipObservable, descriptionObservable);
        } catch (final NoLabelFoundException e) {
            // FIXME Expectations?
            getReportService().report(new RenderingFailedReport(e));
        }

    }
    return label;
}

From source file:org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT.java

License:Open Source License

/**
 * Create the {@link Control} displaying the label of the current {@link VControl}.
 *
 * @param parent the {@link Composite} to render onto
 * @return the created {@link Control} or null
 * @throws NoPropertyDescriptorFoundExeption thrown if the {@link org.eclipse.emf.ecore.EStructuralFeature
 *             EStructuralFeature} of the {@link VControl} doesn't have a registered {@link IItemPropertyDescriptor}
 * @since 1.3/*from   w  w  w.  j  a va  2 s. c o m*/
 */
protected final Control createLabel(final Composite parent) throws NoPropertyDescriptorFoundExeption {
    Label label = null;
    labelRender: if (hasLeftLabelAlignment()) {
        IValueProperty valueProperty;
        try {
            valueProperty = Activator.getDefault().getEMFFormsDatabinding().getValueProperty(
                    getCustomControl().getDomainModelReference(), getViewModelContext().getDomainModel());
        } catch (final DatabindingFailedException ex) {
            Activator.getDefault().getReportService().report(new DatabindingFailedReport(ex));
            break labelRender;
        }
        final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();

        label = new Label(parent, SWT.NONE);
        label.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_label"); //$NON-NLS-1$
        label.setBackground(parent.getBackground());

        try {
            viewModelDBC.bindValue(WidgetProperties.text().observe(label),
                    Activator.getDefault().getEMFFormsLabelProvider().getDisplayName(
                            getCustomControl().getDomainModelReference(),
                            getViewModelContext().getDomainModel()),
                    null, new UpdateValueStrategy() {

                        /**
                         * {@inheritDoc}
                         *
                         * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
                         */
                        @Override
                        public Object convert(Object value) {
                            final String labelText = (String) super.convert(value);
                            String extra = ""; //$NON-NLS-1$
                            if (structuralFeature.getLowerBound() > 0) {
                                extra = "*"; //$NON-NLS-1$
                            }
                            return labelText + extra;
                        }

                    });
            viewModelDBC.bindValue(WidgetProperties.tooltipText().observe(label),
                    Activator.getDefault().getEMFFormsLabelProvider().getDescription(
                            getCustomControl().getDomainModelReference(),
                            getViewModelContext().getDomainModel()));
        } catch (final NoLabelFoundException e) {
            Activator.getDefault().getReportService().report(new RenderingFailedReport(e));
            label.setText(e.getMessage());
            label.setToolTipText(e.toString());
        }

    }
    return label;
}

From source file:org.eclipse.emf.ecp.view.spi.label.swt.LabelSWTRenderer.java

License:Open Source License

private void setText(Label label) {
    if (getVElement().getDomainModelReference() != null) {
        try {/*from  w w  w . j a  v a2 s .  c o  m*/
            final IObservableValue observableValue = emfFormsDatabinding.getObservableValue(
                    getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
            final ISWTObservableValue observeText = WidgetProperties.text().observe(label);
            final Binding binding = getDataBindingContext().bindValue(observeText, observableValue);

            label.addDisposeListener(new DisposeListener() {
                @Override
                public void widgetDisposed(DisposeEvent e) {
                    binding.dispose();
                }
            });
        } catch (final DatabindingFailedException ex) {
            getReportService().report(new RenderingFailedReport(ex));
            label.setText(ex.getMessage());
        }
    } else {
        final IObservableValue modelValue = EMFEditObservables.observeValue(
                AdapterFactoryEditingDomain.getEditingDomainFor(getVElement()), getVElement(),
                VViewPackage.eINSTANCE.getElement_Label());
        final IObservableValue targetValue = WidgetProperties.text().observe(label);

        dbc.bindValue(targetValue, modelValue);
    }
}

From source file:org.eclipse.emf.ecp.view.template.internal.tooling.controls.AttributeValueControlSWTRenderer.java

License:Open Source License

/**
 * {@inheritDoc}/*from ww  w  .j  a  va  2  s .c  om*/
 *
 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
 */
@Override
protected Binding[] createBindings(Control control) throws DatabindingFailedException {
    final Label label = (Label) Composite.class.cast(control).getChildren()[0];
    final Binding binding = getDataBindingContext().bindValue(WidgetProperties.text().observe(label),
            getModelValue(), new UpdateValueStrategy(), new UpdateValueStrategy() {

                /**
                 * {@inheritDoc}
                 *
                 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
                 */
                @Override
                public Object convert(Object value) {
                    return super.convert(value).toString();
                }

            });
    return new Binding[] { binding };
}

From source file:org.eclipse.emf.ecp.view.template.internal.tooling.controls.URLSelectionControlSWTRenderer.java

License:Open Source License

/**
 * {@inheritDoc}//from  w  w w  . ja  v  a  2  s  .  co  m
 *
 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
 */
@Override
protected Binding[] createBindings(Control control) throws DatabindingFailedException {
    final Composite composite = Composite.class.cast(control);
    final Control childControl = composite.getChildren()[0];
    final IObservableValue value = WidgetProperties.text().observe(childControl);
    final Binding binding = getDataBindingContext().bindValue(value, getModelValue());

    final IObservableValue toolTip = WidgetProperties.tooltipText().observe(childControl);
    final Binding tooltipBinding = getDataBindingContext().bindValue(toolTip, getModelValue());
    return new Binding[] { binding, tooltipBinding };
}

From source file:org.eclipse.emf.example.databinding.project.ui.rcp.dialogs.CommitterShipDialog.java

License:Open Source License

private Control createForm(final Composite comp) {

    Composite container = new Composite(comp, SWT.NONE);
    container.setLayout(new GridLayout(3, false));

    {/*w  w w .  ja v a 2  s. c  o  m*/
        Label l = new Label(container, SWT.NONE);
        l.setText("Committer");

        IEMFEditValueProperty mprop = EMFEditProperties.value(resource.getEditingDomain(),
                ProjectPackage.Literals.COMMITTER_SHIP__PERSON);

        ViewForm form = new ViewForm(container, SWT.BORDER | SWT.FLAT);
        form.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        CLabel label = new CLabel(form, SWT.NONE);
        form.setContent(label);

        ctx.bindValue(WidgetProperties.text().observe(label), mprop.observe(committership), null,
                new EMFUpdateValueStrategy().setConverter(new PersonToStringConverter()));

        Button b = new Button(container, SWT.PUSH);
        b.setText("...");
        b.setEnabled(isnew);
        b.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                FilteredItemsSelectionDialog dialog = new PersonFilterDialog(comp.getShell(), resource);
                dialog.open();
                Person p = (Person) dialog.getFirstResult();

                if (p != null) {
                    Command cmd = SetCommand.create(resource.getEditingDomain(), committership,
                            ProjectPackage.Literals.COMMITTER_SHIP__PERSON, p);
                    if (cmd.canExecute()) {
                        resource.executeCmd(cmd);
                    }
                }
            }
        });
    }

    IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);

    {
        Label l = new Label(container, SWT.NONE);
        l.setText("Startdate");

        IEMFEditValueProperty mprop = EMFEditProperties.value(resource.getEditingDomain(),
                ProjectPackage.Literals.COMMITTER_SHIP__START);

        Text t = new Text(container, SWT.BORDER);
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));

        ctx.bindValue(textProp.observe(t), mprop.observe(committership),
                UpdateStrategyFactory.stringToDateNotNull("Can't convert start date value into a valid date",
                        "The start date can not be null"),
                UpdateStrategyFactory.dateToString());
    }

    {
        Label l = new Label(container, SWT.NONE);
        l.setText("Enddate");

        IEMFEditValueProperty mprop = EMFEditProperties.value(resource.getEditingDomain(),
                ProjectPackage.Literals.COMMITTER_SHIP__END);

        Text t = new Text(container, SWT.BORDER);
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));

        ctx.bindValue(textProp.observe(t), mprop.observe(committership),
                UpdateStrategyFactory.stringToDate("Can't convert end date value into a valid date"),
                UpdateStrategyFactory.dateToString());
    }

    TitleAreaDialogSupport.create(this, ctx);

    return container;
}

From source file:org.eclipse.emf.example.databinding.project.ui.rcp.views.ProjectCommittersPart.java

License:Open Source License

private void init(IViewSite site, CTabFolder folder, DataBindingContext ctx, EditingDomain editingDomain,
        IObservableValue master) {/*from  w  w w  .ja va2  s . c  o m*/
    final TableViewer viewer = new TableViewer(folder, SWT.FULL_SELECTION);

    {
        IValueProperty prop = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__COMMITTERS);
        CTabItem item = new CTabItem(folder, SWT.NONE);
        item.setControl(viewer.getControl());

        ctx.bindValue(WidgetProperties.text().observe(item), prop.observeDetail(master),
                new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy().setConverter(new LengthConverter()));
    }

    folder.setSelection(0);

    viewer.getTable().setHeaderVisible(true);
    ObservableListContentProvider cp = new ObservableListContentProvider();

    {
        IObservableMap[] attributeMap = new IObservableMap[2];
        attributeMap[0] = EMFEditProperties
                .value(editingDomain, FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,
                        ProjectPackage.Literals.PERSON__LASTNAME))
                .observeDetail(cp.getKnownElements());
        attributeMap[1] = EMFEditProperties
                .value(editingDomain,
                        FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,
                                ProjectPackage.Literals.PERSON__FIRSTNAME))
                .observeDetail(cp.getKnownElements());

        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("Name");
        column.getColumn().setWidth(150);
        column.setLabelProvider(new GenericMapCellLabelProvider("{0}, {1}", attributeMap));
    }

    {
        IObservableMap attributeMap = EMFEditProperties
                .value(editingDomain, ProjectPackage.Literals.COMMITTER_SHIP__START)
                .observeDetail(cp.getKnownElements());
        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("Start");
        column.getColumn().setWidth(100);
        column.setLabelProvider(new GenericMapCellLabelProvider("{0,date,short}", attributeMap));
    }

    {
        IObservableMap attributeMap = EMFEditProperties
                .value(editingDomain, ProjectPackage.Literals.COMMITTER_SHIP__END)
                .observeDetail(cp.getKnownElements());
        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("End");
        column.getColumn().setWidth(100);
        column.setLabelProvider(new GenericMapCellLabelProvider("{0,date,short}", attributeMap));
    }

    IListProperty prop = EMFEditProperties.list(editingDomain, ProjectPackage.Literals.PROJECT__COMMITTERS);
    viewer.setContentProvider(cp);
    viewer.setInput(prop.observeDetail(master));

    MenuManager mgr = new MenuManager();
    mgr.add(new Action("Hide historic committers", IAction.AS_CHECK_BOX) {
        @Override
        public void run() {
            if (isChecked()) {
                viewer.addFilter(new ViewerFilterImpl());
            } else {
                viewer.setFilters(new ViewerFilter[0]);
            }
        }
    });

    viewer.getControl().setMenu(mgr.createContextMenu(viewer.getControl()));

    site.registerContextMenu(Activator.PLUGIN_ID + ".committers", mgr, viewer);
}

From source file:org.eclipse.emf.examples.library.databinding.stock.StockForm.java

License:Open Source License

@Override
public void doCreateForm(TabFolder folder, TabItem item, EditingDomain domain, DataBindingContext dbc,
        IObservableValue master) {/*w  w w  .j  a  v a 2  s .c  o  m*/
    Composite comp = new Composite(folder, SWT.NONE);
    IValueProperty textProp = WidgetProperties.text();
    dbc.bindValue(textProp.observe(item),
            EMFEditObservables.observeDetailValue(Realm.getDefault(), domain, master,
                    EXTLibraryPackage.Literals.LIBRARY__STOCK),
            new UpdateValueStrategy(), new UpdateValueStrategy().setConverter(new LengthConverter()));

    TableColumnLayout layout = new TableColumnLayout();
    comp.setLayout(layout);

    itemViewer = new TableViewer(comp,
            SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
    IFocusService focusService = (IFocusService) getSite().getService(IFocusService.class);
    focusService.addFocusTracker(itemViewer.getControl(), STOCK_TABLE);
    itemViewer.getTable().setHeaderVisible(true);
    itemViewer.getTable().setLinesVisible(true);
    ObservableListContentProvider cp = new ObservableListContentProvider();
    itemViewer.setContentProvider(cp);
    itemViewer.addSelectionChangedListener(new ISelectionChangedListener() {

        public void selectionChanged(SelectionChangedEvent event) {
            ISourceProviderService service = (ISourceProviderService) getSite()
                    .getService(ISourceProviderService.class);
            SourceProvider pv = (SourceProvider) service.getSourceProvider(ISources.SELECTED_STOCK_ITEM_NAME);
            pv.setItemSelection(event.getSelection());
        }

    });

    ConditionalTemplate tplBookTitle = new ConditionalTemplate("${0}") {

        @Override
        public boolean isTemplate(EObject element) {
            return element instanceof Book && ((Book) element).getTitle() != null;
        }

    };
    ConditionalTemplate tplAudiovisualTitle = new ConditionalTemplate("${1}") {

        @Override
        public boolean isTemplate(EObject element) {
            return element instanceof AudioVisualItem && ((AudioVisualItem) element).getTitle() != null;
        }

    };
    ConditionalTemplate tplPeriodicalTitle = new ConditionalTemplate("${2}") {

        @Override
        public boolean isTemplate(EObject element) {
            return element instanceof Periodical && ((Periodical) element).getTitle() != null;
        }

    };

    ConditionalTemplate tplPublicationDate = new ConditionalTemplate("${0,date,medium}") {

        @Override
        public boolean isTemplate(EObject element) {
            return ((Item) element).getPublicationDate() != null;
        }

    };

    ConditionalTemplate tplNullValue = new ConditionalTemplate("-") {

        @Override
        public boolean isTemplate(EObject element) {
            return true;
        }

    };

    IObservableMap featBookTitle = EMFEditObservables.observeMap(domain, cp.getKnownElements(),
            EXTLibraryPackage.Literals.BOOK__TITLE);
    IObservableMap featAudiovisualTitle = EMFEditObservables.observeMap(domain, cp.getKnownElements(),
            EXTLibraryPackage.Literals.AUDIO_VISUAL_ITEM__TITLE);
    IObservableMap featPeriodicalTitle = EMFEditObservables.observeMap(domain, cp.getKnownElements(),
            EXTLibraryPackage.Literals.PERIODICAL__TITLE);
    IObservableMap featItemPublicationDate = EMFEditObservables.observeMap(domain, cp.getKnownElements(),
            EXTLibraryPackage.Literals.ITEM__PUBLICATION_DATE);

    TableViewerColumn c = new TableViewerColumn(itemViewer, SWT.NONE);
    c.getColumn().setText("AAAAA");
    layout.setColumnData(c.getColumn(), new ColumnWeightData(1, 120));
    c.setLabelProvider(new ObservableColumnLabelProvider(
            new IObservableMap[] { featBookTitle, featAudiovisualTitle, featPeriodicalTitle },
            Arrays.asList(tplBookTitle, tplAudiovisualTitle, tplPeriodicalTitle, tplNullValue)));

    c = new TableViewerColumn(itemViewer, SWT.NONE);
    c.getColumn().setText("Type");
    layout.setColumnData(c.getColumn(), new ColumnWeightData(1, 120));
    c.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof Book) {
                return "Book";
            } else if (element instanceof BookOnTape) {
                return "Book On Tape";
            } else if (element instanceof VideoCassette) {
                return "Video";
            } else if (element instanceof Periodical) {
                return "Periodical";
            } else {
                return "";
            }
        }

    });

    c = new TableViewerColumn(itemViewer, SWT.NONE);
    c.getColumn().setText("Publication Date");
    layout.setColumnData(c.getColumn(), new ColumnWeightData(1, 120));
    c.setLabelProvider(new ObservableColumnLabelProvider(new IObservableMap[] { featItemPublicationDate },
            Arrays.asList(tplPublicationDate, tplNullValue)));

    MenuManager mgr = new MenuManager();
    itemViewer.getControl().setMenu(mgr.createContextMenu(itemViewer.getControl()));
    getSite().registerContextMenu("org.eclipse.emf.examples.library.databinding.stock", mgr, itemViewer);

    item.setControl(comp);
    itemViewer.setInput(EMFEditObservables.observeDetailList(Realm.getDefault(), domain, master,
            EXTLibraryPackage.Literals.LIBRARY__STOCK));
}

From source file:org.eclipse.emf.examples.library.databinding.writer.WriterForm.java

License:Open Source License

@Override
public void doCreateForm(TabFolder folder, TabItem item, final EditingDomain domain, DataBindingContext dbc,
        IObservableValue master) {/*from w  w  w  .  j  a v a  2 s  .c  om*/

    IValueProperty textProp = WidgetProperties.text();
    dbc.bindValue(textProp.observe(item),
            EMFEditObservables.observeDetailValue(Realm.getDefault(), domain, master,
                    EXTLibraryPackage.Literals.LIBRARY__WRITERS),
            new UpdateValueStrategy(), new UpdateValueStrategy().setConverter(new LengthConverter()));

    Composite comp = new Composite(folder, SWT.NONE);
    TableColumnLayout layout = new TableColumnLayout();
    comp.setLayout(layout);

    writerViewer = new TableViewer(comp, SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    writerViewer.getTable().setHeaderVisible(true);
    writerViewer.getTable().setLinesVisible(true);

    Color color = comp.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION);
    final Color bg = new Color(comp.getDisplay(),
            new RGB(color.getRed() - 50, color.getGreen() - 50, color.getBlue() - 50));

    writerViewer.getControl().addDisposeListener(new DisposeListener() {

        public void widgetDisposed(DisposeEvent e) {
            bg.dispose();
        }
    });

    TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(writerViewer,
            new FocusCellOwnerDrawHighlighter(writerViewer) {
                @Override
                protected Color getSelectedCellBackgroundColor(ViewerCell cell) {
                    return bg;
                }
            });
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(writerViewer) {
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            boolean rv = false;

            if (event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION) {
                rv = (((MouseEvent) event.sourceEvent).stateMask & SWT.MOD1) == SWT.MOD1;
            }

            return rv || event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR)
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
        }
    };

    TableViewerEditor.create(writerViewer, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
            //| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
            | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    IFocusService focusService = (IFocusService) getSite().getService(IFocusService.class);
    focusService.addFocusTracker(writerViewer.getControl(), WRITER_TABLE);

    ObservableListContentProvider cp = new ObservableListContentProvider();
    writerViewer.setContentProvider(cp);

    ConditionalTemplate[] tpl = new ConditionalTemplate[3];
    tpl[0] = new ConditionalTemplate("${0}") {

        @Override
        public boolean isTemplate(EObject element) {
            return element instanceof Writer && ((Writer) element).getFirstName() != null;
        }

    };
    tpl[1] = new ConditionalTemplate("${0}") {

        @Override
        public boolean isTemplate(EObject element) {
            return element instanceof Writer && ((Writer) element).getLastName() != null;
        }

    };
    tpl[2] = new ConditionalTemplate("-") {

        @Override
        public boolean isTemplate(EObject element) {
            return true;
        }

    };

    EStructuralFeature[] features = new EStructuralFeature[2];
    features[0] = EXTLibraryPackage.Literals.PERSON__FIRST_NAME;
    features[1] = EXTLibraryPackage.Literals.PERSON__LAST_NAME;

    IObservableMap[] map = EMFEditObservables.observeMaps(domain, cp.getKnownElements(), features);

    TableViewerColumn c = new TableViewerColumn(writerViewer, SWT.NONE);
    c.getColumn().setText("Firstname");
    layout.setColumnData(c.getColumn(), new ColumnWeightData(1, 120));
    c.setLabelProvider(
            new ObservableColumnLabelProvider(new IObservableMap[] { map[0] }, Arrays.asList(tpl[0], tpl[2])));

    final TextCellEditor editor = new TextCellEditor(writerViewer.getTable());

    ObservableValueEditingSupport o = new ObservableValueEditingSupport(writerViewer, dbc) {

        @Override
        protected CellEditor getCellEditor(Object element) {
            return editor;
        }

        @Override
        protected IObservableValue doCreateElementObservable(Object element, ViewerCell cell) {
            return EMFEditObservables.observeValue(domain, (EObject) element,
                    EXTLibraryPackage.Literals.PERSON__FIRST_NAME);
        }

        @Override
        protected IObservableValue doCreateCellEditorObservable(CellEditor cellEditor) {
            return SWTObservables.observeText(cellEditor.getControl());
        }
    };
    c.setEditingSupport(o);

    c = new TableViewerColumn(writerViewer, SWT.NONE);
    c.getColumn().setText("Lastname");
    layout.setColumnData(c.getColumn(), new ColumnWeightData(1, 120));
    c.setLabelProvider(
            new ObservableColumnLabelProvider(new IObservableMap[] { map[1] }, Arrays.asList(tpl[1], tpl[2])));
    o = new ObservableValueEditingSupport(writerViewer, dbc) {

        @Override
        protected CellEditor getCellEditor(Object element) {
            return editor;
        }

        @Override
        protected IObservableValue doCreateElementObservable(Object element, ViewerCell cell) {
            return EMFEditObservables.observeValue(domain, (EObject) element,
                    EXTLibraryPackage.Literals.PERSON__LAST_NAME);
        }

        @Override
        protected IObservableValue doCreateCellEditorObservable(CellEditor cellEditor) {
            return SWTObservables.observeText(cellEditor.getControl());
        }
    };
    c.setEditingSupport(o);

    MenuManager mgr = new MenuManager();
    writerViewer.getControl().setMenu(mgr.createContextMenu(writerViewer.getControl()));
    getSite().registerContextMenu("org.eclipse.emf.examples.library.databinding.writer", mgr, writerViewer);

    writerViewer.setInput(EMFEditObservables.observeDetailList(Realm.getDefault(), domain, master,
            EXTLibraryPackage.Literals.LIBRARY__WRITERS));
    item.setControl(comp);

}