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

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

Introduction

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

Prototype

public static <E, M, T> EditingSupport create(ColumnViewer viewer, DataBindingContext dbc,
        final CellEditor cellEditor, final IValueProperty<? super CellEditor, T> cellEditorProperty,
        final IValueProperty<E, M> elementProperty) 

Source Link

Document

Returns an ObservableValueEditingSupport instance which binds the given cell editor property to the given element property.

Usage

From source file:ccw.preferences.HoverPreferencePage.java

License:Open Source License

protected DataBindingContext initDataBindings() {

    final DataBindingContext context = new DataBindingContext();

    // Page Support
    PreferencePageSupport.create(this, context);

    // ///////////////////////////
    // Label/Content providers \\
    // ///////////////////////////

    ObservableListContentProvider contentProvider = new ObservableListContentProvider();

    IObservableMap[] columnsObservables = Properties.observeEach(contentProvider.getKnownElements(),
            HoverViewModel.hoverDisplayDomain);

    ObservableMapLabelProvider labelProvider = new ObservableMapLabelProvider(columnsObservables);

    fHoverTableViewer.setLabelProvider(labelProvider);
    fHoverTableViewer.setContentProvider(contentProvider);
    fHoverTableViewer.setInput(fViewModel.hoverObservableList);

    //////////////////////////
    // Selected hover logic \\
    //////////////////////////

    final IObservableValue selectedHover = ViewersObservables.observeSingleSelection(fHoverTableViewer);

    final IObservableValue isHoverSelected = new ComputedValue(Boolean.TYPE) {
        @Override/*from   w  w w .ja v  a  2  s  .  c o m*/
        protected Object calculate() {
            return Boolean.valueOf(selectedHover.getValue() != null);
        }
    };

    context.bindValue(WidgetProperties.enabled().observe(fGrpSummary), isHoverSelected);
    context.bindValue(WidgetProperties.enabled().observe(fSummaryHoverModifierStringText), isHoverSelected);

    final IObservableValue stateMaskOfSelected = HoverViewModel.hoverStateMask.observeDetail(selectedHover);
    final IObservableValue modifierStringOfSelected = HoverViewModel.hoverModifierString
            .observeDetail(selectedHover);

    final UpdateValueStrategy modifierStringStrategyConvert = new UpdateValueStrategy(
            UpdateValueStrategy.POLICY_CONVERT);
    modifierStringStrategyConvert.setConverter(new HoverViewModel.StateMaskToModifierConverter());

    final Binding stateMaskToModifierBinding = context.bindValue(modifierStringOfSelected, stateMaskOfSelected,
            new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), modifierStringStrategyConvert);

    if (!fViewModel.hoverObservableList.isEmpty()) {
        selectedHover.setValue(fViewModel.hoverObservableList.get(0));
    }

    //////////////////////
    // Validation logic \\
    //////////////////////

    MultiValidator validator = new MultiValidator() {

        @Override
        protected IStatus validate() {
            IStatus status = ValidationStatus.ok();

            if (isHoverSelected.getValue() == Boolean.TRUE) {
                status = fViewModel.stateMaskValidator.validate(stateMaskOfSelected.getValue());
            }

            if (status.isOK()) {
                Iterator<HoverDescriptor> it = fViewModel.checkedSet.iterator();
                while (it.hasNext()) {
                    int stateMask = it.next().getStateMask();
                    if (!fViewModel.isStateMaskUnique(stateMask)) {
                        status = fViewModel.stateMaskError(stateMask);
                    }
                }
            }
            return status;
        }
    };

    context.addValidationStatusProvider(validator);

    //////////////////////////
    // Checked hovers logic \\
    //////////////////////////

    // AR - because of some ordering issue problem, I am disabling the automatic
    // update from model to target of the checked hovers and...
    final UpdateSetStrategy checkedModelToTargetStrategy = new UpdateSetStrategy(
            UpdateValueStrategy.POLICY_ON_REQUEST);

    // AR - ... add an explicit binding that will be needed...
    final Binding checkedBindSet = context.bindSet(
            ViewersObservables.observeCheckedElements(fHoverTableViewer, HoverDescriptor.class),
            fViewModel.checkedSet, null, checkedModelToTargetStrategy);

    // AR - ...to manually trigger the update when new elements are added to the provider...
    IObservableSet realizedElements = contentProvider.getRealizedElements();
    realizedElements.addChangeListener(new IChangeListener() {
        @Override
        public void handleChange(ChangeEvent event) {
            checkedBindSet.updateModelToTarget();
        }
    });

    /////////////////
    // UI Bindings \\
    /////////////////

    EditingSupport modifierEditorSupport = ObservableValueEditingSupport.create(fHoverTableViewer, context,
            fHoverModifierStringTextCellEditor,
            CellEditorProperties.control().value(WidgetProperties.text(SWT.Modify)),
            HoverViewModel.hoverModifierString);

    fModifierTableViewerColumn.setEditingSupport(modifierEditorSupport);

    final UpdateValueStrategy statusMaskToModifierStrategy = new UpdateValueStrategy();
    statusMaskToModifierStrategy.setConverter(new HoverViewModel.StateMaskToModifierConverter());

    final UpdateValueStrategy modifierToStatusMaskStrategy = new UpdateValueStrategy();
    modifierToStatusMaskStrategy.setConverter(new HoverViewModel.ModifierToStateMaskConverter());

    context.bindValue(WidgetProperties.text().observe(fSummaryHoverNameLabel),
            HoverViewModel.hoverLabel.observeDetail(selectedHover));

    context.bindValue(WidgetProperties.text().observe(fSummaryHoverDescriptionLabel),
            HoverViewModel.hoverDescription.observeDetail(selectedHover));

    context.bindValue(WidgetProperties.text().observe(fSummaryHoverModifierStringText),
            HoverViewModel.hoverStateMask.observeDetail(selectedHover), modifierToStatusMaskStrategy,
            statusMaskToModifierStrategy);

    KeyListener stateMaskKeyListener = new KeyListener() {
        public void keyPressed(KeyEvent e) {

            boolean isPressedKeyModifier = e.keyCode > 0 && e.character == 0
                    && (e.keyCode & SWT.MODIFIER_MASK) != 0;
            boolean isStateKeyModifier = e.stateMask > 0 && (e.stateMask & SWT.MODIFIER_MASK) != 0;

            int mask = SWT.NONE;
            if (isPressedKeyModifier) {
                mask = e.keyCode;

                if (isStateKeyModifier) {
                    mask |= e.stateMask;
                }

                stateMaskOfSelected.setValue(mask);
                stateMaskToModifierBinding.updateModelToTarget();
            }
        }

        public void keyReleased(KeyEvent e) {
            if (e.keyCode == SWT.BS || e.keyCode == SWT.DEL) {
                stateMaskOfSelected.setValue(SWT.NONE);
                stateMaskToModifierBinding.updateModelToTarget();
            }
        }
    };

    fHoverModifierStringTextCellEditor.getControl().addKeyListener(stateMaskKeyListener);
    fSummaryHoverModifierStringText.addKeyListener(stateMaskKeyListener);

    return context;
}

From source file:era.foss.typeeditor.common.Ui.java

License:Open Source License

/**
 * Create a column with EMF databinding for a table viewer
 * /*from   w w w  . j  a  va 2  s.  co m*/
 * <li>In case the top level structural feature is a reference display a combo box</li> <li>In case the top level
 * structural feature is a containment reference create element if it does not exist</li> <li>In case the structural
 * feature is a boolean show a checkbox</li> <li>Otherwise show a simple text field</li>.
 *
 * @param column the column
 * @param eStructuralFeatureList list to create a feature path from
 * @param refObservedObject the ref observed object
 * @param refEStructuralFeatureList the ref e structural feature list
 */
public void bindColumn(TableViewerColumn column, EStructuralFeature[] eStructuralFeatureList,
        EObject refObservedObject, EStructuralFeature[] refEStructuralFeatureList) {

    TableViewer tableViewer = (TableViewer) column.getViewer();
    ObservableListContentProvider cp = (ObservableListContentProvider) tableViewer.getContentProvider();
    assert (cp != null);

    // get the top level structural feature
    EStructuralFeature topStructuralFeature = eStructuralFeatureList[0];

    // set label provider
    IValueProperty elementProperty = EMFEditProperties.value(editingDomain,
            FeaturePath.fromList(eStructuralFeatureList));
    IObservableMap attributeMap = elementProperty.observeDetail(cp.getKnownElements());
    column.setLabelProvider(new ObservableMapCellLabelProvider(attributeMap));

    EditingSupport editingSupport = null;

    // Show combo box for references
    if (refObservedObject != null && refEStructuralFeatureList != null) {

        // Combo box: Create combo box to select choices for the reference
        ComboBoxViewerCellEditor combo = new ComboBoxViewerCellEditorSp((Composite) tableViewer.getControl(),
                SWT.READ_ONLY);
        // Combo box: Set Content Provider
        ObservableListContentProvider comboContentProvider = new ObservableListContentProvider();
        combo.setContentProvider(comboContentProvider);

        IObservableMap comboAttributeMap = EMFProperties
                .value(eStructuralFeatureList[eStructuralFeatureList.length - 1])
                .observeDetail(comboContentProvider.getKnownElements());
        combo.setLabelProvider(new ObservableMapLabelProvider(comboAttributeMap));
        // Combo box: set input
        IEMFListProperty dataTypeDefinitions = EMFProperties
                .list(FeaturePath.fromList(refEStructuralFeatureList));
        combo.setInput(dataTypeDefinitions.observe(refObservedObject));

        // Set editing support of table cell
        IValueProperty editorElementProperty = EMFEditProperties.value(editingDomain, topStructuralFeature);
        IValueProperty cellEditorProperty = ViewerProperties.singleSelection();

        editingSupport = ObservableValueEditingSupport.create(tableViewer, dataBindContext, combo,
                cellEditorProperty, editorElementProperty);

    }
    // Simple text
    else {
        IValueProperty cellEditorProperty = CellEditorProperties.control()
                .value(WidgetProperties.text(SWT.Modify));

        editingSupport = ObservableValueEditingSupport.create(tableViewer, dataBindContext,
                new TextCellEditor(tableViewer.getTable()), cellEditorProperty, elementProperty);
    }

    column.setEditingSupport(editingSupport);

}

From source file:era.foss.typeeditor.spectype.SpecTypeForm.java

License:Open Source License

/** Create column for selecting the DatatypeDefinition associated with the AttributeDefinition */
private void createSpecAttributeNameColumn(AddDeleteTableViewer specAttributeTableViewer,
        TableColumnLayout columnLayout) {

    ///*w  w w . ja  va 2s.  c  o m*/
    TableViewerColumn nameColumn = new TableViewerColumn(specAttributeTableViewer, SWT.NONE);

    nameColumn.getColumn().setText(Ui.getUiName(ErfPackage.Literals.IDENTIFIABLE__LONG_NAME));
    nameColumn.getColumn().setResizable(true);
    nameColumn.getColumn().setMoveable(false);
    columnLayout.setColumnData(nameColumn.getColumn(), new ColumnWeightData(34, 100));
    IValueProperty nameColumnElementProperty = EMFEditProperties.value(editingDomain,
            ErfPackage.Literals.IDENTIFIABLE__LONG_NAME);
    // add label provider
    IObservableMap nameColumnAttributeMap = nameColumnElementProperty.observeDetail(
            ((ObservableListContentProvider) specAttributeTableViewer.getContentProvider()).getKnownElements());
    nameColumn.setLabelProvider(new ObservableMapCellLabelProvider(nameColumnAttributeMap));

    // add editing support
    IValueProperty nameColumnCellEditorProperty = CellEditorProperties.control()
            .value(WidgetProperties.text(SWT.Modify));
    EditingSupport editingSupport = ObservableValueEditingSupport.create(specAttributeTableViewer,
            dataBindContext, new TextCellEditor(specAttributeTableViewer.getTable()),
            nameColumnCellEditorProperty, nameColumnElementProperty);
    nameColumn.setEditingSupport(editingSupport);

}

From source file:era.foss.typeeditor.view.ViewForm.java

License:Open Source License

/**
 * Creates the table viewer for {@link ViewElements}
 * //from   w  w w  . j  a  v  a  2  s  .  c o m
 * @param parent parent composite
 */
private void createViewElementTableViewer(Composite parent) {

    this.viewElementTableViewer = new AddDeleteTableViewer(parent,
            SWT.MULTI | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION | AddDeleteTableViewer.NO_DESCRIPTION) {

        @Override
        public void addElement() {
            this.elementOwner = (EObject) viewMaster.getValue();
            super.addElement(); // is_a ViewElement
            ViewElement addedViewElement = (ViewElement) super.getElementAt(super.doGetItemCount() - 1);
            // default placement of views' elements
            addedViewElement.setEditorRowPosition(getCurrentMaxRowIdx() + 1);
            addedViewElement.setEditorColumnPosition(0);
            addedViewElement.setEditorColumnSpan(2);
            addedViewElement.setEditorRowSpan(1);
        }

        /**
         * Calculates maximum row index of existing view elements
         * 
         * @return maximum row index
         */
        private int getCurrentMaxRowIdx() {
            int maxRowIdx = 0;
            for (int i = 0; i < super.doGetItemCount(); ++i) {
                ViewElement iterViewElement = (ViewElement) super.getElementAt(i);
                maxRowIdx = Math.max(maxRowIdx,
                        iterViewElement.getEditorRowPosition() + (iterViewElement.getEditorRowSpan() - 1));
            }
            return maxRowIdx;
        }

        @Override
        protected void createButtonBar() {
            super.createButtonBar();
            // FIXME @cpn create "add all" button
        }
    };

    // the owner is null as it is set in the overridden addElement() method
    viewElementTableViewer.setElementInformation((EObject) viewMaster.getValue(),
            ErfPackage.Literals.VIEW__VIEW_ELEMENTS, ErfPackage.Literals.VIEW_ELEMENT);

    viewElementTableViewer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
    viewElementTableViewer.setEditingDomain(editingDomain);

    ObservableListContentProvider tableViewerContentProvider = new ObservableListContentProvider();
    viewElementTableViewer.setContentProvider(tableViewerContentProvider);

    TableColumnLayout columnLayout = (TableColumnLayout) viewElementTableViewer.getTable().getParent()
            .getLayout();

    // create column showing the Attribute Definition
    TableViewerColumn attributeDefinitionColumn = new TableViewerColumn(viewElementTableViewer, SWT.NONE);
    columnLayout.setColumnData(attributeDefinitionColumn.getColumn(), new ColumnWeightData(100, 70));
    attributeDefinitionColumn.getColumn().setResizable(false);
    attributeDefinitionColumn.getColumn().setMoveable(false);
    attributeDefinitionColumn.getColumn()
            .setText(Ui.getUiName(ErfPackage.Literals.VIEW_ELEMENT__ATTRIBUTE_DEFINITION));

    // label provider for column showing the AttributeDefintion
    IValueProperty elementProperty = EMFEditProperties.value(editingDomain,
            FeaturePath
                    .fromList(new EStructuralFeature[] { ErfPackage.Literals.VIEW_ELEMENT__ATTRIBUTE_DEFINITION,
                            ErfPackage.Literals.IDENTIFIABLE__LONG_NAME }));
    IObservableMap attributeMap = elementProperty.observeDetail(tableViewerContentProvider.getKnownElements());
    attributeDefinitionColumn.setLabelProvider(new ObservableMapCellLabelProvider(attributeMap));

    // editing support column showing the AttributeDefintion

    // Combo box: Create combo box to select choices for the reference
    ComboBoxViewerCellEditor combo = new ComboBoxViewerCellEditorSp(
            (Composite) viewElementTableViewer.getControl(), SWT.DROP_DOWN | SWT.READ_ONLY);
    // Combo box: Set Content Provider;
    ObservableListContentProvider comboBoxContentProvider = new ObservableListContentProvider();
    combo.setContentProvider(comboBoxContentProvider);

    // Combo box: Set Label Provider
    combo.setLabelProvider(
            new ObservableMapLabelProvider(EMFProperties.value(ErfPackage.Literals.IDENTIFIABLE__LONG_NAME)
                    .observeDetail(comboBoxContentProvider.getKnownElements())));
    // Combo box: set input from selected specType
    IEMFListProperty specAttributesProperty = EMFProperties
            .list(ErfPackage.Literals.SPEC_TYPE__SPEC_ATTRIBUTES);
    combo.setInput(specAttributesProperty.observeDetail(specTypeMaster));

    // Set editing support of table cell
    IValueProperty editorElementProperty = EMFEditProperties.value(editingDomain,
            ErfPackage.Literals.VIEW_ELEMENT__ATTRIBUTE_DEFINITION);
    IValueProperty cellEditorProperty = ViewerProperties.singleSelection();

    attributeDefinitionColumn.setEditingSupport(ObservableValueEditingSupport.create(viewElementTableViewer,
            dataBindContext, combo, cellEditorProperty, editorElementProperty));

    // provide input for the table
    IEMFListProperty viewsProperty = EMFProperties.list(ErfPackage.Literals.VIEW__VIEW_ELEMENTS);
    viewElementTableViewer.addFilter(new SpecTypeFilter());
    viewElementTableViewer.setInput(viewsProperty.observeDetail(viewMaster));

    viewElementMaster = ViewerProperties.singleSelection().observe(viewElementTableViewer);
    viewElementTableViewer.getTable().select(0);
}

From source file:org.eclipsetrader.ui.internal.charts.views.HistoryDataDetailEditor.java

License:Open Source License

void createViewer(Composite parent) {
    Tree tree = new Tree(parent, SWT.FULL_SELECTION | SWT.MULTI);
    tree.setHeaderVisible(true);// w w w . j  a  v  a2s  . c om
    tree.setLinesVisible(true);

    viewer = new TreeViewer(tree);

    IObservableFactory observableFactory = new IObservableFactory() {

        @Override
        public IObservable createObservable(Object target) {
            if (target instanceof HistoryDataDetailEditorModel) {
                return Observables
                        .unmodifiableObservableList(((HistoryDataDetailEditorModel) target).getList());
            }
            if (target instanceof HistoryDataEditorModel) {
                return Observables.unmodifiableObservableList(((HistoryDataEditorModel) target).getList());
            }
            return null;
        }
    };

    TreeStructureAdvisor treeStructureAdvisor = new TreeStructureAdvisor() {

        @Override
        public Boolean hasChildren(Object element) {
            if (element instanceof HistoryDataEditorModel) {
                return true;
            }
            return false;
        }
    };

    ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(observableFactory,
            treeStructureAdvisor);
    viewer.setContentProvider(contentProvider);

    GC gc = new GC(parent);
    FontMetrics fontMetrics = gc.getFontMetrics();
    gc.dispose();

    TreeViewerColumn viewerColumn = new TreeViewerColumn(viewer, SWT.NONE);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_Time);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 70));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.timeValue(), BeanProperties.value(HistoryDataElement.PROP_DATE)));

    viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_Open);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_OPEN)));

    viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_High);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_HIGH)));

    viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_Low);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_LOW)));

    viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_Close);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_CLOSE)));

    viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataDetailEditor_Volume);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 70));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(tree),
            CellEditorValueProperty.longValue(), BeanProperties.value(HistoryDataElement.PROP_VOLUME)));

    if (Platform.WS_GTK.equals(Platform.getWS())) {
        viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT);
        viewerColumn.getColumn().setWidth(1);
    }

    final String[] properties = new String[] { HistoryDataElement.PROP_DATE, HistoryDataElement.PROP_OPEN,
            HistoryDataElement.PROP_HIGH, HistoryDataElement.PROP_LOW, HistoryDataElement.PROP_CLOSE,
            HistoryDataElement.PROP_VOLUME, "" //$NON-NLS-1$
    };

    DataViewerLabelProvider labelProvider = new DataViewerLabelProvider(
            BeansObservables.observeMaps(contentProvider.getKnownElements(), properties));
    labelProvider.setDateFormat(Util.getTimeFormat());
    viewer.setLabelProvider(labelProvider);

    viewer.setSorter(new ViewerSorter() {

        @Override
        public int compare(Viewer viewer, Object o1, Object o2) {
            if ((o1 instanceof HistoryDataEditorModel) && (o2 instanceof HistoryDataEditorModel)) {
                TimeSpan ts1 = ((HistoryDataEditorModel) o1).getBarSize();
                TimeSpan ts2 = ((HistoryDataEditorModel) o2).getBarSize();
                if (ts1.higherThan(ts2)) {
                    return 1;
                }
                if (ts2.higherThan(ts1)) {
                    return -1;
                }
                return 0;
            } else if ((o1 instanceof HistoryDataElement) && (o2 instanceof HistoryDataElement)) {
                HistoryDataElement e1 = (HistoryDataElement) o1;
                HistoryDataElement e2 = (HistoryDataElement) o2;
                if (e1.getDate() != null && e2.getDate() != null) {
                    return e1.getDate().compareTo(e2.getDate());
                }
                if (e1.getDate() != null && e2.getDate() == null) {
                    return -1;
                }
                if (e1.getDate() == null && e2.getDate() != null) {
                    return 1;
                }
            }
            return 0;
        }
    });

    CellNavigationStrategy naviStrat = new CellNavigationStrategy() {

        @Override
        public ViewerCell findSelectedCell(ColumnViewer viewer, ViewerCell currentSelectedCell, Event event) {
            ViewerCell cell = super.findSelectedCell(viewer, currentSelectedCell, event);
            if (cell != null) {
                if (cell.getColumnIndex() == properties.length - 1) {
                    return null;
                }
                Tree tree = ((TreeViewer) viewer).getTree();
                tree.showColumn(tree.getColumn(cell.getColumnIndex()));
            }
            return cell;
        }
    };

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(viewer,
            new FocusCellOwnerDrawHighlighter(viewer), naviStrat);

    ColumnViewerEditorActivationStrategy activationStrategy = new ColumnViewerEditorActivationStrategy(viewer) {

        @Override
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR)
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;

        }
    };
    TreeViewerEditor.create(viewer, focusCellManager, activationStrategy,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    tree.addTraverseListener(new TraverseListener() {

        @Override
        public void keyTraversed(TraverseEvent e) {
            if (e.detail == SWT.TRAVERSE_RETURN || e.detail == SWT.TRAVERSE_ESCAPE) {
                e.doit = false;
            }
        }
    });
    tree.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (viewer.isCellEditorActive()) {
                return;
            }
            if (e.keyCode == SWT.INSERT) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();

                HistoryDataEditorModel parent = null;

                int index = 0;
                if (!selection.isEmpty()) {
                    parent = model.getParent(selection.getFirstElement());
                    if (parent == null) {
                        return;
                    }
                    index = parent.getList().indexOf(selection.getFirstElement());
                    if (index == -1) {
                        index = parent.getList().size();
                    }
                }

                final HistoryDataElement element = new HistoryDataElement();
                parent.getList().add(index, element);

                e.doit = false;

                Display.getDefault().asyncExec(new Runnable() {

                    @Override
                    public void run() {
                        if (!viewer.getControl().isDisposed()) {
                            viewer.editElement(element, 0);
                        }
                    }
                });
            } else if (e.character == SWT.DEL) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                for (Object element : selection.toList()) {
                    HistoryDataEditorModel parent = model.getParent(selection.getFirstElement());
                    if (parent != null) {
                        if (parent.getList().remove(element)) {
                            changeSupport.firePropertyChange(PROP_DIRTY, dirty, dirty = true);
                        }
                    }
                }
            }
        }
    });

    viewer.setInput(model);
}

From source file:org.eclipsetrader.ui.internal.charts.views.HistoryDataEditor.java

License:Open Source License

void createViewer(Composite parent) {
    Table table = new Table(parent, SWT.FULL_SELECTION | SWT.MULTI);
    table.setHeaderVisible(true);/*  w w  w  .  j  a  v  a 2 s.co m*/
    table.setLinesVisible(true);

    viewer = new TableViewer(table);

    ObservableListContentProvider contentProvider = new ObservableListContentProvider();
    viewer.setContentProvider(contentProvider);

    GC gc = new GC(parent);
    FontMetrics fontMetrics = gc.getFontMetrics();
    gc.dispose();

    TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_Date);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 70));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.dateValue(), BeanProperties.value(HistoryDataElement.PROP_DATE)));

    viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_Open);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_OPEN)));

    viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_High);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_HIGH)));

    viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_Low);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_LOW)));

    viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_Close);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 55));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.doubleValue(), BeanProperties.value(HistoryDataElement.PROP_CLOSE)));

    viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
    viewerColumn.getColumn().setText(Messages.HistoryDataEditor_Volume);
    viewerColumn.getColumn().setWidth(Dialog.convertHorizontalDLUsToPixels(fontMetrics, 70));
    viewerColumn.setEditingSupport(ObservableValueEditingSupport.create(viewer, dbc, new TextCellEditor(table),
            CellEditorValueProperty.longValue(), BeanProperties.value(HistoryDataElement.PROP_VOLUME)));

    if (Platform.WS_GTK.equals(Platform.getWS())) {
        viewerColumn = new TableViewerColumn(viewer, SWT.RIGHT);
        viewerColumn.getColumn().setWidth(1);
    }

    final String[] properties = new String[] { HistoryDataElement.PROP_DATE, HistoryDataElement.PROP_OPEN,
            HistoryDataElement.PROP_HIGH, HistoryDataElement.PROP_LOW, HistoryDataElement.PROP_CLOSE,
            HistoryDataElement.PROP_VOLUME, "" //$NON-NLS-1$
    };

    DataViewerLabelProvider labelProvider = new DataViewerLabelProvider(
            BeansObservables.observeMaps(contentProvider.getKnownElements(), properties));
    labelProvider.setDateFormat(Util.getDateFormat());
    viewer.setLabelProvider(labelProvider);

    viewer.setSorter(new ViewerSorter() {

        @Override
        public int compare(Viewer viewer, Object o1, Object o2) {
            HistoryDataElement e1 = (HistoryDataElement) o1;
            HistoryDataElement e2 = (HistoryDataElement) o2;
            if (e1.getDate() != null && e2.getDate() != null) {
                return e1.getDate().compareTo(e2.getDate());
            }
            if (e1.getDate() != null && e2.getDate() == null) {
                return -1;
            }
            if (e1.getDate() == null && e2.getDate() != null) {
                return 1;
            }
            return 0;
        }
    });

    CellNavigationStrategy naviStrat = new CellNavigationStrategy() {

        @Override
        public ViewerCell findSelectedCell(ColumnViewer viewer, ViewerCell currentSelectedCell, Event event) {
            ViewerCell cell = super.findSelectedCell(viewer, currentSelectedCell, event);
            if (cell != null) {
                if (cell.getColumnIndex() == properties.length - 1) {
                    return null;
                }
                Table table = ((TableViewer) viewer).getTable();
                table.showColumn(table.getColumn(cell.getColumnIndex()));
            }
            return cell;
        }
    };

    TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(viewer,
            new FocusCellOwnerDrawHighlighter(viewer), naviStrat);

    ColumnViewerEditorActivationStrategy activationStrategy = new ColumnViewerEditorActivationStrategy(viewer) {

        @Override
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR)
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;

        }
    };
    TableViewerEditor.create(viewer, focusCellManager, activationStrategy,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    table.addTraverseListener(new TraverseListener() {

        @Override
        public void keyTraversed(TraverseEvent e) {
            if (e.detail == SWT.TRAVERSE_RETURN || e.detail == SWT.TRAVERSE_ESCAPE) {
                e.doit = false;
            }
        }
    });
    table.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (viewer.isCellEditorActive()) {
                return;
            }
            if (e.keyCode == SWT.INSERT) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();

                int index = 0;
                if (!selection.isEmpty()) {
                    index = model.getList().indexOf(selection.getFirstElement());
                    if (index == -1) {
                        index = model.getList().size();
                    }
                }

                final HistoryDataElement element = new HistoryDataElement();
                model.getList().add(index, element);

                e.doit = false;

                Display.getDefault().asyncExec(new Runnable() {

                    @Override
                    public void run() {
                        if (!viewer.getControl().isDisposed()) {
                            viewer.editElement(element, 0);
                        }
                    }
                });
            } else if (e.character == SWT.DEL) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                if (model.getList().removeAll(selection.toList())) {
                    changeSupport.firePropertyChange(PROP_DIRTY, dirty, dirty = true);
                }
            }
        }
    });

    viewer.setInput(model.getList());
}

From source file:org.switchyard.tools.ui.editor.components.jca.JCAPropertyTable.java

License:Open Source License

/**
 * Constructor./*w  w w  .j  ava 2s  . co  m*/
 * 
 * @param parent composite parent
 * @param style any SWT style bits
 * @param isReadOnly boolean flag
 * @param toolkit Form toolkit to use when creating controls
 * @param context the data binding context
 * @param featurePathToProperties the feature path to the Property list
 * @param domain the editing domain
 */
public JCAPropertyTable(Composite parent, int style, boolean isReadOnly, FormToolkit toolkit,
        DataBindingContext context, FeaturePath featurePathToProperties, EditingDomain domain) {
    super(parent, style);
    _isReadOnly = isReadOnly;
    _changeListeners = new ListenerList();

    _bindingValue = new WritableValue(SWTObservables.getRealm(getDisplay()), null, JCABinding.class);

    int additionalStyles = SWT.NONE;
    if (isReadOnly) {
        additionalStyles = SWT.READ_ONLY;
    }

    final GridLayout gridLayout = new GridLayout();
    gridLayout.marginWidth = 0;
    gridLayout.marginHeight = 0;
    gridLayout.numColumns = 2;
    setLayout(gridLayout);

    Composite tableComposite = new Composite(this, additionalStyles);
    GridData gd11 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 5);
    gd11.heightHint = 100;
    tableComposite.setLayoutData(gd11);

    TableColumnLayout tableLayout = new TableColumnLayout();
    tableComposite.setLayout(tableLayout);

    _propertyTreeTable = new TableViewer(tableComposite,
            SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.FULL_SELECTION | additionalStyles);
    _propertyTreeTable.getTable().setHeaderVisible(true);

    TableViewerColumn nameColumn = new TableViewerColumn(_propertyTreeTable, SWT.LEFT);
    nameColumn.getColumn().setText(Messages.label_name);
    tableLayout.setColumnData(nameColumn.getColumn(), new ColumnWeightData(100, 150, true));

    TableViewerColumn valueColumn = new TableViewerColumn(_propertyTreeTable, SWT.LEFT);
    valueColumn.getColumn().setText(Messages.label_value);
    tableLayout.setColumnData(valueColumn.getColumn(), new ColumnWeightData(100, 150, true));

    IValueProperty nameProperty = domain == null ? EMFProperties.value(JcaPackage.Literals.PROPERTY__NAME)
            : EMFEditProperties.value(domain, JcaPackage.Literals.PROPERTY__NAME);
    IValueProperty valueProperty = domain == null ? EMFProperties.value(JcaPackage.Literals.PROPERTY__VALUE)
            : EMFEditProperties.value(domain, JcaPackage.Literals.PROPERTY__VALUE);
    IValueProperty cellEditorTextProperty = CellEditorProperties.control()
            .value(WidgetProperties.text(SWT.Modify));

    final ObservableListContentProvider contentProvider;
    ObservableTracker.setIgnore(true);
    try {
        // ignore any observers created internally
        contentProvider = new ObservableListContentProvider();
    } finally {
        ObservableTracker.setIgnore(false);
    }

    nameColumn.setEditingSupport(ObservableValueEditingSupport.create(_propertyTreeTable, context,
            new TextCellEditor(_propertyTreeTable.getTable()), cellEditorTextProperty, nameProperty));
    nameColumn.setLabelProvider(
            new ObservableMapCellLabelProvider(nameProperty.observeDetail(contentProvider.getKnownElements())));

    valueColumn.setEditingSupport(ObservableValueEditingSupport.create(_propertyTreeTable, context,
            new TextCellEditor(_propertyTreeTable.getTable()), cellEditorTextProperty, valueProperty));
    valueColumn.setLabelProvider(new ObservableMapCellLabelProvider(
            valueProperty.observeDetail(contentProvider.getKnownElements())));

    _propertyTreeTable.setContentProvider(contentProvider);

    _mAddButton = toolkit.createButton(this, Messages.button_add, SWT.NONE);
    _mAddButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
    _mAddButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            addPropertyToList();
        }
    });

    _mAddButton.setEnabled(false);
    _propertyTreeTable.getTable().addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            updatePropertyButtons();
        }
    });

    _mRemoveButton = toolkit.createButton(this, Messages.button_remove, SWT.NONE);
    _mRemoveButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
    _mRemoveButton.setEnabled(false);
    _mRemoveButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            removeFromList();
        }
    });

    final IObservableList propertiesList = (domain == null ? EMFProperties.list(featurePathToProperties)
            : EMFEditProperties.list(domain, featurePathToProperties)).observeDetail(_bindingValue);
    _propertyTreeTable.setInput(propertiesList);

    updatePropertyButtons();
}

From source file:org.switchyard.tools.ui.editor.components.soap.InterceptorTable.java

License:Open Source License

/**
 * Constructor./*from   w ww. jav a 2s.c o m*/
 * 
 * @param parent composite parent
 * @param style any SWT style bits
 * @param isReadOnly boolean flag
 * @param interceptorsListFeature list we're editing
 * @param interceptorsFeature actual interceptor list feature
 * @param interceptorType actual class for the interceptor type
 * @param context DataBindingContext to use 
 */
public InterceptorTable(Composite parent, int style, boolean isReadOnly, EReference interceptorsListFeature,
        EReference interceptorsFeature, EClass interceptorType, DataBindingContext context) {
    super(parent, style);

    final EditingDomain domain = AdapterFactoryEditingDomain.getEditingDomainFor(getTargetObject());

    this._isReadOnly = isReadOnly;
    this._changeListeners = new ListenerList();
    _interceptorsListFeature = interceptorsListFeature;
    _interceptorsFeature = interceptorsFeature;
    _interceptorType = interceptorType;

    int additionalStyles = SWT.NONE;
    if (isReadOnly) {
        additionalStyles = SWT.READ_ONLY;
    }

    final GridLayout gridLayout = new GridLayout();
    gridLayout.marginWidth = 0;
    gridLayout.marginHeight = 0;
    gridLayout.numColumns = 2;
    setLayout(gridLayout);

    Composite tableComposite = new Composite(this, additionalStyles);
    GridData gd11 = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 3);
    gd11.heightHint = 100;
    tableComposite.setLayoutData(gd11);

    _interceptorTable = new TableViewer(tableComposite,
            SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.FULL_SELECTION | additionalStyles);
    this._interceptorTable.getTable().setHeaderVisible(true);

    TableColumnLayout tableLayout = new TableColumnLayout();
    tableComposite.setLayout(tableLayout);

    TableViewerColumn nameColumn = new TableViewerColumn(_interceptorTable, SWT.LEFT);
    nameColumn.getColumn().setText(Messages.label_name);
    tableLayout.setColumnData(nameColumn.getColumn(), new ColumnWeightData(100, 150, true));

    IValueProperty nameProperty = domain == null
            ? EMFProperties.value(_interceptorType.getEStructuralFeature("class"))
            : EMFEditProperties.value(domain, _interceptorType.getEStructuralFeature("class"));
    IValueProperty cellEditorTextProperty = CellEditorProperties.control()
            .value(WidgetProperties.text(SWT.Modify));

    final ObservableListContentProvider contentProvider;
    ObservableTracker.setIgnore(true);
    try {
        // ignore any observers created internally
        contentProvider = new ObservableListContentProvider();
    } finally {
        ObservableTracker.setIgnore(false);
    }

    nameColumn.setEditingSupport(ObservableValueEditingSupport.create(_interceptorTable, context,
            new TextCellEditor(_interceptorTable.getTable()), cellEditorTextProperty, nameProperty));
    nameColumn.setLabelProvider(
            new ObservableMapCellLabelProvider(nameProperty.observeDetail(contentProvider.getKnownElements())));

    _interceptorTable.setContentProvider(contentProvider);

    this._mAddButton = new Button(this, SWT.NONE);
    this._mAddButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
    this._mAddButton.setText(Messages.button_add);
    this._mAddButton.addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            addInterceptorTypeToList();
            fireChangedEvent(e.getSource());
        }
    });

    this._mAddButton.setEnabled(false);

    _interceptorTable.getTable().addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            updateInterceptorTypeButtons();
        }
    });

    this._mEditButton = new Button(this, SWT.NONE);
    this._mEditButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
    this._mEditButton.setText(Messages.button_edit);
    this._mEditButton.setEnabled(false);
    this._mEditButton.addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            editInterceptorType();
            fireChangedEvent(e.getSource());
        }
    });

    this._mRemoveButton = new Button(this, SWT.NONE);
    this._mRemoveButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
    this._mRemoveButton.setText(Messages.button_remove);
    this._mRemoveButton.setEnabled(false);
    this._mRemoveButton.addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            removeFromList();
            fireChangedEvent(e.getSource());
        }
    });

    // set the input. we're observing a list on the binding value
    _bindingValue = new WritableValue(SWTObservables.getRealm(getDisplay()), null, SOAPBindingType.class);
    _interceptorTable
            .setInput(EMFProperties.list(FeaturePath.fromList(_interceptorsListFeature, _interceptorsFeature))
                    .observeDetail(_bindingValue));

    updateInterceptorTypeButtons();
}

From source file:org.switchyard.tools.ui.editor.diagram.binding.CamelAdditionalURIPropertyTable.java

License:Open Source License

CamelAdditionalURIPropertyTable(Composite parent, int style, boolean isReadOnly,
        EReference additionalUriParametersFeature, EReference parameterFeature, EClass parameterType,
        DataBindingContext context) {/*  ww w  .  j  av a2 s  .c  o m*/
    super(parent, style);
    final EditingDomain domain = AdapterFactoryEditingDomain.getEditingDomainFor(getTargetObject());
    this._isReadOnly = isReadOnly;
    this._changeListeners = new ListenerList();
    _additionalUriParametersFeature = additionalUriParametersFeature;
    _parameterFeature = parameterFeature;
    _parameterType = parameterType;

    int additionalStyles = SWT.NONE;
    if (isReadOnly) {
        additionalStyles = SWT.READ_ONLY;
    }

    final GridLayout gridLayout = new GridLayout();
    gridLayout.marginWidth = 0;
    gridLayout.marginHeight = 0;
    gridLayout.numColumns = 2;
    setLayout(gridLayout);

    Composite tableComposite = new Composite(this, additionalStyles);
    GridData gd11 = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 2);
    gd11.heightHint = 100;
    tableComposite.setLayoutData(gd11);

    _propertyTreeTable = new TableViewer(tableComposite,
            SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.FULL_SELECTION | additionalStyles);
    _propertyTreeTable.getTable().setHeaderVisible(true);

    TableColumnLayout tableLayout = new TableColumnLayout();
    tableComposite.setLayout(tableLayout);

    TableViewerColumn nameColumn = new TableViewerColumn(_propertyTreeTable, SWT.LEFT);
    nameColumn.getColumn().setText(Messages.label_name);
    tableLayout.setColumnData(nameColumn.getColumn(), new ColumnWeightData(100, 150, true));

    TableViewerColumn valueColumn = new TableViewerColumn(_propertyTreeTable, SWT.LEFT);
    valueColumn.getColumn().setText(Messages.label_value);
    tableLayout.setColumnData(valueColumn.getColumn(), new ColumnWeightData(100, 150, true));

    // TODO: need to use EMFEditProperties if we're in an editing context
    IValueProperty nameProperty = domain == null
            ? EMFProperties.value(_parameterType.getEStructuralFeature("name"))
            : EMFEditProperties.value(domain, _parameterType.getEStructuralFeature("name"));
    IValueProperty valueProperty = domain == null
            ? EMFProperties.value(_parameterType.getEStructuralFeature("value"))
            : EMFEditProperties.value(domain, _parameterType.getEStructuralFeature("value"));
    IValueProperty cellEditorTextProperty = CellEditorProperties.control()
            .value(WidgetProperties.text(SWT.Modify));

    final ObservableListContentProvider contentProvider;
    ObservableTracker.setIgnore(true);
    try {
        // ignore any observers created internally
        contentProvider = new ObservableListContentProvider();
    } finally {
        ObservableTracker.setIgnore(false);
    }

    nameColumn.setEditingSupport(ObservableValueEditingSupport.create(_propertyTreeTable, context,
            new TextCellEditor(_propertyTreeTable.getTable()), cellEditorTextProperty, nameProperty));
    nameColumn.setLabelProvider(
            new ObservableMapCellLabelProvider(nameProperty.observeDetail(contentProvider.getKnownElements())));

    valueColumn.setEditingSupport(ObservableValueEditingSupport.create(_propertyTreeTable, context,
            new TextCellEditor(_propertyTreeTable.getTable()), cellEditorTextProperty, valueProperty));
    valueColumn.setLabelProvider(new ObservableMapCellLabelProvider(
            valueProperty.observeDetail(contentProvider.getKnownElements())));

    _propertyTreeTable.setContentProvider(contentProvider);

    _mAddButton = new Button(this, SWT.NONE);
    _mAddButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
    _mAddButton.setText(Messages.button_add);
    _mAddButton.addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            addPropertyToList();
            fireChangedEvent(e.getSource());
        }
    });

    _mAddButton.setEnabled(false);

    _propertyTreeTable.getTable().addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            updatePropertyButtons();
        }
    });

    _mRemoveButton = new Button(this, SWT.NONE);
    _mRemoveButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
    _mRemoveButton.setText(Messages.button_remove);
    _mRemoveButton.setEnabled(false);
    _mRemoveButton.addSelectionListener(new SelectionAdapter() {

        public void widgetSelected(SelectionEvent e) {
            removeFromList();
            fireChangedEvent(e.getSource());
        }
    });

    // set the input. we're observing a list on the binding value
    _bindingValue = new WritableValue(SWTObservables.getRealm(getDisplay()), null, Binding.class);
    _propertyTreeTable.setInput(
            EMFProperties.list(FeaturePath.fromList(_additionalUriParametersFeature, _parameterFeature))
                    .observeDetail(_bindingValue));

    updatePropertyButtons();
}