Example usage for org.eclipse.jface.databinding.viewers ObservableValueEditingSupport ObservableValueEditingSupport

List of usage examples for org.eclipse.jface.databinding.viewers ObservableValueEditingSupport ObservableValueEditingSupport

Introduction

In this page you can find the example usage for org.eclipse.jface.databinding.viewers ObservableValueEditingSupport ObservableValueEditingSupport.

Prototype

public ObservableValueEditingSupport(ColumnViewer viewer, DataBindingContext dbc) 

Source Link

Document

Constructs a new instance with the provided viewer and dbc.

Usage

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) {// ww w.  ja  v  a  2  s .c o m

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

}