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

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

Introduction

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

Prototype

public ObservableListContentProvider() 

Source Link

Document

Constructs an ObservableListContentProvider.

Usage

From source file:org.eclipse.e4.xwt.javabean.metadata.properties.InputBeanProperty.java

License:Open Source License

@Override
public void setValue(Object target, Object value) throws IllegalArgumentException, IllegalAccessException,
        InvocationTargetException, SecurityException, NoSuchFieldException {
    if (value == null) {
        return;/* w ww .j  a v a2  s .  c  om*/
    }

    if (value instanceof Class<?>) {
        Class<?> type = (Class<?>) value;
        if (type.isEnum()) {
            value = new WritableList(XWT.getRealm(), Arrays.asList(type.getEnumConstants()), type);
        }
    }

    Class<?> elementType = getElementType();
    if (value.getClass().isArray()) {
        elementType = value.getClass().getComponentType();
    }
    if (value instanceof IObservableList) {
        IObservableList list = (IObservableList) value;
        Object listElementType = list.getElementType();
        if (listElementType instanceof Class<?>) {
            elementType = (Class<?>) listElementType;
        }
    } else if (elementType == Object.class && value instanceof Collection<?>) {
        Collection<?> collection = (Collection<?>) value;
        for (Iterator<?> iterator = collection.iterator(); iterator.hasNext();) {
            Object object = (Object) iterator.next();
            if (object != null) {
                elementType = object.getClass();
                break;
            }
        }
    }

    if (target instanceof ContentViewer) {
        ContentViewer viewer = (ContentViewer) target;

        String[] propertyNames = JFacesHelper.getViewerProperties(viewer);
        if (target instanceof AbstractTreeViewer) {
            IContentProvider contentProvider = (IContentProvider) viewer.getContentProvider();
            if (contentProvider instanceof ObservableTreeContentProvider) {
                ObservableTreeContentProvider xwtContentProvider = (ObservableTreeContentProvider) contentProvider;
                xwtContentProvider.updateContext(viewer, value);
            }
            if (contentProvider instanceof ObservableTreeContentProvider) {
                ObservableTreeContentProvider listContentProvider = (ObservableTreeContentProvider) contentProvider;
                viewer.setLabelProvider(new ObservableMapLabelProvider(viewer,
                        listContentProvider.getKnownElements(), propertyNames));
            }
        } else {
            IContentProvider contentProvider = viewer.getContentProvider();
            if (value instanceof List<?> || value.getClass().isArray()) {
                if (contentProvider == null) {
                    contentProvider = new ObservableListContentProvider();
                    viewer.setContentProvider(contentProvider);
                }
                if (propertyNames != null && propertyNames.length > 0 && hasDefaultLabelProvider(viewer)
                        && contentProvider instanceof ObservableListContentProvider) {
                    ObservableListContentProvider listContentProvider = (ObservableListContentProvider) contentProvider;
                    viewer.setLabelProvider(new ObservableMapLabelProvider(viewer,
                            listContentProvider.getKnownElements(), propertyNames));
                }
            } else if (value instanceof Set<?>) {
                if (contentProvider == null) {
                    contentProvider = new ObservableSetContentProvider();
                    viewer.setContentProvider(contentProvider);
                }
                if (propertyNames != null && propertyNames.length > 0 && hasDefaultLabelProvider(viewer)
                        && contentProvider instanceof ObservableSetContentProvider) {
                    ObservableSetContentProvider setContentProvider = (ObservableSetContentProvider) contentProvider;
                    viewer.setLabelProvider(new ObservableMapLabelProvider(viewer,
                            setContentProvider.getKnownElements(), propertyNames));
                }
            }
        }
    }
    if (value instanceof CollectionViewSource) {
        value = ((CollectionViewSource) value).getView();
    } else if ((value instanceof Collection<?>) && !(value instanceof IObservableCollection)) {
        value = ObjectUtil.resolveValue(value, IObservableCollection.class, value);
    }
    super.setValue(target, value);
}

From source file:org.eclipse.e4.xwt.tests.snipppets.Snippet007ColorLabelProvider.java

License:Open Source License

/**
 * @param args//from  w  ww  .  jav  a 2s  . c  o  m
 */
public static void main(String[] args) {
    final List persons = new ArrayList();
    persons.add(new Person("Fiona Apple", Person.FEMALE));
    persons.add(new Person("Elliot Smith", Person.MALE));
    persons.add(new Person("Diana Krall", Person.FEMALE));
    persons.add(new Person("David Gilmour", Person.MALE));

    final Display display = new Display();
    Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
        public void run() {
            Shell shell = new Shell(display);
            shell.setText("Gender Bender");
            shell.setLayout(new GridLayout());

            Table table = new Table(shell, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
            GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
            table.setLayoutData(gridData);
            table.setHeaderVisible(true);
            table.setLinesVisible(true);
            TableColumn column = new TableColumn(table, SWT.NONE);
            column.setText("No");
            column.setWidth(20);
            column = new TableColumn(table, SWT.NONE);
            column.setText("Name");
            column.setWidth(100);
            final TableViewer viewer = new TableViewer(table);

            IObservableList observableList = Observables.staticObservableList(persons);
            ObservableListContentProvider contentProvider = new ObservableListContentProvider();

            viewer.setContentProvider(contentProvider);

            // this does not have to correspond to the columns in the table,
            // we just list all attributes that affect the table content.
            IObservableMap[] attributes = BeansObservables.observeMaps(contentProvider.getKnownElements(),
                    Person.class, new String[] { "name", "gender" });

            class ColorLabelProvider extends ObservableMapLabelProvider implements ITableColorProvider {
                Color male = display.getSystemColor(SWT.COLOR_BLUE);

                Color female = new Color(display, 255, 192, 203);

                ColorLabelProvider(IObservableMap[] attributes) {
                    super(attributes);
                }

                // to drive home the point that attributes does not have to
                // match
                // the columns
                // in the table, we change the column text as follows:
                public String getColumnText(Object element, int index) {
                    if (index == 0) {
                        return Integer.toString(persons.indexOf(element) + 1);
                    }
                    return ((Person) element).getName();
                }

                public Color getBackground(Object element, int index) {
                    return null;
                }

                public Color getForeground(Object element, int index) {
                    if (index == 0)
                        return null;
                    Person person = (Person) element;
                    return (person.getGender() == Person.MALE) ? male : female;
                }

                public void dispose() {
                    super.dispose();
                    female.dispose();
                }
            }
            viewer.setLabelProvider(new ColorLabelProvider(attributes));

            viewer.setInput(observableList);

            table.getColumn(0).pack();

            Button button = new Button(shell, SWT.PUSH);
            button.setText("Toggle Gender");
            button.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent arg0) {
                    StructuredSelection selection = (StructuredSelection) viewer.getSelection();
                    if (selection != null && !selection.isEmpty()) {
                        Person person = (Person) selection.getFirstElement();
                        person.setGender((person.getGender() == Person.MALE) ? Person.FEMALE : Person.MALE);
                    }
                }
            });

            shell.setSize(300, 400);
            shell.open();

            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
        }
    });
    display.dispose();
}

From source file:org.eclipse.e4.xwt.tests.snipppets.Snippet021MultiFieldValidation.java

License:Open Source License

private void bindSumAndAddendsGroup(DataBindingContext dbc) {
    IObservableValue targetSum = SWTObservables.observeText(sumTarget, SWT.Modify);
    final IObservableValue middleSum = new WritableValue(null, Integer.TYPE);
    dbc.bindValue(targetSum, middleSum);

    final IObservableList targetAddends = new WritableList(new ArrayList(), Integer.TYPE);
    addendsTarget.setContentProvider(new ObservableListContentProvider());
    addendsTarget.setInput(targetAddends);

    addAddendButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent e) {
            InputDialog dialog = new InputDialog(getShell(), "Input addend", "Enter an integer addend", "0",
                    new IInputValidator() {
                        public String isValid(String newText) {
                            try {
                                Integer.valueOf(newText);
                                return null;
                            } catch (NumberFormatException e) {
                                return "Enter a number between " + Integer.MIN_VALUE + " and "
                                        + Integer.MAX_VALUE;
                            }/*from   w w  w.j  a v a  2 s  . co m*/
                        }
                    });
            if (dialog.open() == Window.OK) {
                targetAddends.add(Integer.valueOf(dialog.getValue()));
            }
        }
    });

    removeAddendButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            IStructuredSelection selection = (IStructuredSelection) addendsTarget.getSelection();
            if (!selection.isEmpty())
                targetAddends.remove(selection.getFirstElement());
        }
    });

    IObservableValue modelSum = new WritableValue(new Integer(5), Integer.TYPE);
    dbc.bindValue(SWTObservables.observeText(sumModelValue, SWT.Modify), modelSum);

    IObservableList modelAddends = new WritableList(new ArrayList(), Integer.TYPE);

    MultiValidator validator = new MultiValidator() {
        protected IStatus validate() {
            Integer sum = (Integer) middleSum.getValue();
            int actualSum = 0;
            for (Iterator iterator = targetAddends.iterator(); iterator.hasNext();) {
                actualSum += ((Integer) iterator.next()).intValue();
            }
            if (sum.intValue() != actualSum)
                return ValidationStatus.error("Sum of addends is " + actualSum + ", expecting " + sum);
            return ValidationStatus.ok();
        }
    };
    dbc.addValidationStatusProvider(validator);

    addendsModelValue.setContentProvider(new ObservableListContentProvider());
    addendsModelValue.setInput(modelAddends);

    dbc.bindValue(validator.observeValidatedValue(middleSum), modelSum);
    dbc.bindList(validator.observeValidatedList(targetAddends), modelAddends);
}

From source file:org.eclipse.emf.cdo.security.internal.ui.util.OneToManyBlock.java

License:Open Source License

public void createControl(Composite parent, FormToolkit toolkit) {
    final EReference reference = getConfiguration().getModelReference();
    final EClass itemType = getConfiguration().getItemType();

    parent.setLayout(new GridLayout(2, false));

    Composite tableParent;/*from  w w  w . ja v a 2  s  . co m*/
    TableColumnLayout tableLayout = null;
    if (isTable()) {
        tableParent = toolkit.createComposite(parent);
        tableLayout = new TableColumnLayout();
        tableParent.setLayout(tableLayout);
    } else {
        tableParent = parent;
    }

    Table table = toolkit.createTable(tableParent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE);
    viewer = new TableViewer(table);

    if (isTable()) {
        tableParent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        configureColumns(viewer, tableLayout);
    } else {
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        AdapterFactoryLabelProvider labels = new TableLabelProvider(adapterFactory);
        labels.setFireLabelUpdateNotifications(true); // Needed to support the data-binding input
        viewer.setLabelProvider(labels);
    }

    viewer.setContentProvider(new ObservableListContentProvider());
    SecurityUIUtil.applySupportedElementFilter(viewer, itemType);
    if (itemType != reference.getEReferenceType()) {
        applyTypeFilter(viewer, itemType);
    }

    if (getConfiguration().getItemFilter() != null) {
        viewer.addFilter(getViewerFilter(getConfiguration().getItemFilter()));
    }

    viewer.setInput(value);
    hookUnsupportedModelContentValidation(value);

    if (!reference.isContainment()) {
        configureDropSupport(viewer);
    }

    context.bindValue(WidgetProperties.enabled().observe(viewer.getControl()), input, null,
            ObjectWritableConverter.createUpdateValueStrategy());

    Composite buttons = toolkit.createComposite(parent);
    FillLayout fill = new FillLayout(SWT.VERTICAL);
    fill.spacing = 5;
    buttons.setLayout(fill);
    buttons.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));

    Button newButton = null;
    Button addButton = null;
    Button removeButton = null;

    newButton = toolkit.createButton(buttons, Messages.OneToManyBlock_0, SWT.PUSH);
    if (!reference.isContainment()) {
        addButton = toolkit.createButton(buttons, Messages.OneToManyBlock_1, SWT.PUSH);
    }

    removeButton = toolkit.createButton(buttons, Messages.OneToManyBlock_2, SWT.PUSH);

    final IObservableValue<?> selection = ViewersObservables.observeSingleSelection(viewer);

    context.bindValue(WidgetProperties.enabled().observe(newButton), input, null,
            ObjectWritableConverter.createUpdateValueStrategy());
    if (addButton != null) {
        context.bindValue(WidgetProperties.enabled().observe(addButton), input, null,
                ObjectWritableConverter.createUpdateValueStrategy());
    }

    context.bindValue(WidgetProperties.enabled().observe(removeButton), selection, null,
            ObjectWritableConverter.createUpdateValueStrategy());

    newButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Realm realm = ((SecurityItem) input.getValue()).getRealm();

            Object owner;
            if (reference.isContainment()) {
                owner = input.getValue();
            } else {
                owner = SecurityUIUtil.getDirectory(realm, itemType);
            }

            if (owner != null) {
                // Create a new object in the appropriate owner and add it to the
                // reference list if that's not the containment
                Object child = EcoreUtil.create(itemType);

                CommandParameter param;
                Command addToReference;

                if (reference.isContainment()) {
                    param = new CommandParameter(owner, reference, child);
                    addToReference = IdentityCommand.INSTANCE;
                } else {
                    param = new CommandParameter(owner, SecurityPackage.Literals.DIRECTORY__ITEMS, child);
                    addToReference = AddCommand.create(domain, input.getValue(), reference,
                            Collections.singleton(child));
                }

                Command command = CreateChildCommand.create(domain, owner, param, Collections.singleton(owner));
                command = command.chain(addToReference);

                if (getNewObjectConfigurator() != null) {
                    command = command.chain(getNewObjectConfigurator().createConfigureCommand(child));
                }

                if (execute(command)) {
                    viewer.setSelection(new StructuredSelection(child));
                    viewer.getControl().setFocus();
                    viewer.refresh(child);
                }
            }
        }
    });

    if (addButton != null) {
        addButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                Realm realm = ((SecurityItem) input.getValue()).getRealm();
                Directory directory = SecurityUIUtil.getDirectory(realm, itemType);
                if (directory != null) {
                    // Get the available items not already in our input's reference list
                    List<?> available = new ArrayList<Object>(
                            EcoreUtil.getObjectsByType(directory.getItems(), itemType));
                    available.removeAll(value);
                    SecurityUIUtil.applySupportedElementFilter(available, itemType);

                    String label = NLS.bind(Messages.OneToManyBlock_3,
                            SecurityEditPlugin.INSTANCE.getString(String.format("_UI_%s_%s_feature", //$NON-NLS-1$
                                    reference.getEContainingClass().getName(), reference.getName())));

                    FeatureEditorDialog dlg = new FeatureEditorDialog(viewer.getControl().getShell(),
                            new TableLabelProvider(adapterFactory), input.getValue(),
                            reference.getEContainingClass(), Collections.EMPTY_LIST, label, available, false,
                            true, true);

                    if (dlg.open() == Window.OK && !dlg.getResult().isEmpty()) {
                        Command command = AddCommand.create(domain, input.getValue(), reference,
                                dlg.getResult());
                        if (execute(command)) {
                            viewer.setSelection(new StructuredSelection(dlg.getResult()));
                            viewer.getControl().setFocus();
                        }
                    }
                }
            }
        });
    }

    final SelectionListenerAction<EObject> removeAction = new SelectionListenerAction<EObject>(
            Messages.OneToManyBlock_2, SharedIcons.getDescriptor("etool16/delete.gif")) //$NON-NLS-1$
    {
        @Override
        public void run() {
            Object selected = selection.getValue();
            if (selected != null) {
                Command command;

                if (reference.isContainment()) {
                    command = DeleteCommand.create(domain, selection.getValue());
                } else {
                    command = RemoveCommand.create(domain, input.getValue(), reference, selection.getValue());
                }

                execute(command);
            }
        }

        @Override
        protected boolean updateSelection(IStructuredSelection selection) {
            return super.updateSelection(selection) && SecurityUIUtil.isEditable(input.getValue());
        }

        @Override
        protected Class<EObject> getType() {
            return EObject.class;
        }
    };

    removeButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (removeAction.isEnabled()) {
                removeAction.run();
            }
        }
    });

    viewer.addSelectionChangedListener(removeAction);

    new ActionBarsHelper(editorActionBars).addGlobalAction(ActionFactory.DELETE.getId(), removeAction)
            .install(viewer);
}

From source file:org.eclipse.emf.ecp.edit.internal.swt.controls.TableControl.java

License:Open Source License

@Override
protected void fillControlComposite(Composite parent) {
    final Composite composite = new Composite(parent, SWT.NONE);
    GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).hint(1, 200).applyTo(composite);
    tableViewer = createTableViewer(composite);

    final ObservableListContentProvider cp = new ObservableListContentProvider();
    final EObject tempInstance = getInstanceOf(clazz);
    final ECPTableViewerComparator comparator = new ECPTableViewerComparator();
    tableViewer.setComparator(comparator);
    int columnNumber = 0;
    final Map<EStructuralFeature, Boolean> readOnlyConfig = createReadOnlyConfig(clazz);
    final List<EStructuralFeature> structuralFeatures = new ArrayList<EStructuralFeature>();
    structuralFeatures.addAll(readOnlyConfig.keySet());
    if (!getControl().isReadonly()) {
        createFixedValidationStatusColumn(tableViewer, structuralFeatures);
    }/*from w  w  w . j  a  v  a 2s .co m*/

    for (final EStructuralFeature feature : structuralFeatures) {
        final IItemPropertyDescriptor itemPropertyDescriptor = adapterFactoryItemDelegator
                .getPropertyDescriptor(tempInstance, feature);
        if (itemPropertyDescriptor == null) {
            // if we can't render because no edit information is available, do nothing
            continue;
        }

        final CellEditor cellEditor = createCellEditor(tempInstance, feature);
        final TableViewerColumn column = TableViewerColumnBuilder.create()
                .setText(itemPropertyDescriptor.getDisplayName(null))
                .setToolTipText(itemPropertyDescriptor.getDescription(null)).setResizable(true)
                .setMoveable(false).setStyle(noStyle()).setData("width", //$NON-NLS-1$
                        ECPCellEditor.class.isInstance(cellEditor)
                                ? ECPCellEditor.class.cast(cellEditor).getColumnWidthWeight()
                                : 100)
                .build(tableViewer);

        column.setLabelProvider(new ECPCellLabelProvider(feature, cellEditor,
                feature.isMany() ? new EObjectObservableMap(cp.getKnownElements(), feature)
                        : EMFProperties.value(feature).observeDetail(cp.getKnownElements())));
        column.getColumn()
                .addSelectionListener(getSelectionAdapter(comparator, column.getColumn(), columnNumber));

        if (!isReadOnlyFeature(readOnlyConfig, feature)) {
            // remove if no editing needed
            final EditingSupport observableSupport = new ECPTableEditingSupport(tableViewer, cellEditor,
                    feature);
            column.setEditingSupport(observableSupport);
        }
        columnNumber++;
    }
    tableViewer.setContentProvider(cp);
    final IObservableList list = EMFEditObservables.observeList(getEditingDomain(mainSetting),
            mainSetting.getEObject(), mainSetting.getEStructuralFeature());
    tableViewer.setInput(list);

    // IMPORTANT:
    // - the minimumWidth and (non)resizable settings of the ColumnWeightData are not supported properly
    // - the layout stops resizing columns that have been resized manually by the user (this could be considered a
    // feature though)
    final TableColumnLayout layout = new TableColumnLayout();
    composite.setLayout(layout);
    for (int i = 0; i < tableViewer.getTable().getColumns().length; i++) {
        final Integer storedValue = (Integer) tableViewer.getTable().getColumns()[i].getData("width"); //$NON-NLS-1$
        layout.setColumnData(tableViewer.getTable().getColumns()[i],
                new ColumnWeightData(storedValue == null ? 50 : storedValue));
    }
}

From source file:org.eclipse.emf.ecp.view.internal.control.multireference.MultiReferenceSWTRenderer.java

License:Open Source License

private void createContent(Composite composite) throws DatabindingFailedException {
    tableViewer = new TableViewer(composite, SWT.MULTI | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
    tableViewer.getTable().setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_multireference"); //$NON-NLS-1$
    tableViewer.getTable().setHeaderVisible(true);
    tableViewer.getTable().setLinesVisible(true);

    final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            tableViewer) {//  ww  w. j a  v a 2 s  .co m
        @Override
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION
                    || event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
        }
    };

    TableViewerEditor.create(tableViewer, null, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
    ColumnViewerToolTipSupport.enableFor(tableViewer);

    final ECPTableViewerComparator comparator = new ECPTableViewerComparator();
    tableViewer.setComparator(comparator);

    final ObservableListContentProvider cp = new ObservableListContentProvider();

    final EMFFormsLabelProvider labelService = getEMFFormsLabelProvider();

    final TableViewerColumn column = TableViewerColumnBuilder.create().setResizable(false).setMoveable(false)
            .setStyle(SWT.NONE).build(tableViewer);

    final IObservableValue textObservableValue = WidgetProperties.text().observe(column.getColumn());
    final IObservableValue tooltipObservableValue = WidgetProperties.tooltipText().observe(column.getColumn());
    try {
        viewModelDBC.bindValue(textObservableValue, labelService.getDisplayName(
                getVElement().getDomainModelReference(), getViewModelContext().getDomainModel()));

        viewModelDBC.bindValue(tooltipObservableValue, labelService.getDescription(
                getVElement().getDomainModelReference(), getViewModelContext().getDomainModel()));
    } catch (final NoLabelFoundException e) {
        // FIXME Expectations?
        getReportService().report(new RenderingFailedReport(e));
    }

    column.getColumn()
            .addSelectionListener(getSelectionAdapter(tableViewer, comparator, column.getColumn(), 0));

    tableViewer.setLabelProvider(labelProvider);
    tableViewer.setContentProvider(cp);
    final IObservableList list = getEMFFormsDatabinding()
            .getObservableList(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
    tableViewer.setInput(list);

    final TableColumnLayout layout = new TableColumnLayout();
    composite.setLayout(layout);
    layout.setColumnData(column.getColumn(), new ColumnWeightData(1, false));

    tableViewer.addDoubleClickListener(new IDoubleClickListener() {

        @Override
        public void doubleClick(DoubleClickEvent event) {
            final EObject selectedObject = (EObject) IStructuredSelection.class.cast(event.getSelection())
                    .getFirstElement();
            handleDoubleClick(selectedObject);
        }

    });
}

From source file:org.eclipse.emf.ecp.view.internal.editor.controls.TableColumnsDMRTableControl.java

License:Open Source License

/**
 * {@inheritDoc}/*from w  ww . ja va2 s .  c om*/
 *
 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#createControl(org.eclipse.swt.widgets.Composite)
 */
@Override
protected Control createControl(final Composite parent) throws DatabindingFailedException {
    final IObservableValue observableValue = Activator.getDefault().getEMFFormsDatabinding().getObservableValue(
            getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
    structuralFeature = (EStructuralFeature) observableValue.getValueType();
    eObject = (EObject) ((IObserving) observableValue).getObserved();
    observableValue.dispose();

    final Composite composite = new Composite(parent, SWT.NONE);
    composite.setBackgroundMode(SWT.INHERIT_FORCE);
    GridLayoutFactory.fillDefaults().numColumns(1).applyTo(composite);
    final Composite titleComposite = new Composite(composite, SWT.NONE);
    titleComposite.setBackgroundMode(SWT.INHERIT_FORCE);
    GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).applyTo(titleComposite);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).applyTo(titleComposite);

    final Label filler = new Label(titleComposite, SWT.NONE);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, false).applyTo(filler);

    final Composite buttonComposite = new Composite(titleComposite, SWT.NONE);
    buttonComposite.setBackgroundMode(SWT.INHERIT_FORCE);
    GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(true).applyTo(buttonComposite);
    GridDataFactory.fillDefaults().align(SWT.END, SWT.BEGINNING).grab(false, false).applyTo(buttonComposite);

    final Button buttonSort = new Button(buttonComposite, SWT.PUSH);
    buttonSort.setText("Sort"); //$NON-NLS-1$
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(false, false).applyTo(buttonSort);

    final Button buttonAdd = new Button(buttonComposite, SWT.PUSH);
    buttonAdd.setText("Add"); //$NON-NLS-1$
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(false, false).applyTo(buttonAdd);

    final Button buttonRemove = new Button(buttonComposite, SWT.PUSH);
    buttonRemove.setText("Remove"); //$NON-NLS-1$
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(false, false).applyTo(buttonRemove);

    final Composite tableComposite = new Composite(composite, SWT.NONE);
    tableComposite.setBackgroundMode(SWT.INHERIT_FORCE);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).hint(1, 100)
            .applyTo(tableComposite);
    final TableColumnLayout layout = new TableColumnLayout();
    tableComposite.setLayout(layout);

    final TableViewer viewer = new TableViewer(tableComposite);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(viewer.getControl());

    viewer.getTable().setHeaderVisible(true);
    viewer.getTable().setLinesVisible(true);
    final TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
    final TableColumn tableColumn = column.getColumn();
    final EMFFormsLabelProvider emfFormsLabelProvider = Activator.getDefault().getEMFFormsLabelProvider();// TODO
    try {
        final IObservableValue labelText = emfFormsLabelProvider.getDisplayName(
                getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
        final IObservableValue tooltip = emfFormsLabelProvider.getDescription(
                getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
        viewModelDBC.bindValue(WidgetProperties.text().observe(tableColumn), labelText);
        viewModelDBC.bindValue(WidgetProperties.tooltipText().observe(tableColumn), tooltip);
    } catch (final NoLabelFoundException e) {
        // FIXME Expectations?
        getReportService().report(new RenderingFailedReport(e));
        tableColumn.setText(e.getMessage());
        tableColumn.setToolTipText(e.toString());
    }

    layout.setColumnData(column.getColumn(), new ColumnWeightData(1, true));

    viewer.setLabelProvider(labelProvider);
    viewer.setContentProvider(new ObservableListContentProvider());
    addDragAndDropSupport(viewer, getEditingDomain(eObject));

    final IObservableList list = Activator.getDefault().getEMFFormsDatabinding()
            .getObservableList(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
    viewer.setInput(list);

    tableControl = (VTableControl) getViewModelContext().getDomainModel();
    adapter = new TableControlAdapter(parent, viewer);
    tableControl.eAdapters().add(adapter);

    buttonSort.addSelectionListener(new SortSelectionAdapter());

    buttonAdd.addSelectionListener(new AddSelectionAdapter(tableComposite, viewer));

    buttonRemove.addSelectionListener(new RemoveSelectionAdapter(viewer));

    return composite;
}

From source file:org.eclipse.emf.ecp.view.spi.table.swt.TableControlSWTRenderer.java

License:Open Source License

@Override
protected Control renderControl(SWTGridCell gridCell, final Composite parent)
        throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
    try {//from   ww w.  ja  v a 2s . c  o m
        /* get the list-setting which is displayed */
        final VDomainModelReference dmrToCheck = getDMRToMultiReference();
        final Setting setting = getEMFFormsDatabinding().getSetting(dmrToCheck,
                getViewModelContext().getDomainModel());
        final EObject eObject = setting.getEObject();
        final EStructuralFeature structuralFeature = setting.getEStructuralFeature();
        final EClass clazz = ((EReference) structuralFeature).getEReferenceType();

        /* get the observable list */
        final IObservableList list = getEMFFormsDatabinding().getObservableList(dmrToCheck,
                getViewModelContext().getDomainModel());

        /* get the label text/tooltip */
        final IObservableValue labelText = getLabelText(dmrToCheck, false);
        final IObservableValue labelTooltipText = getLabelTooltipText(dmrToCheck, false);

        /* content provider */
        final ObservableListContentProvider cp = new ObservableListContentProvider();

        final ECPTableViewerComparator comparator = new ECPTableViewerComparator();

        /* render */
        final TableViewerCompositeBuilder compositeBuilder = new TableControlSWTRendererCompositeBuilder();
        final TableViewerSWTBuilder tableViewerSWTBuilder = TableViewerFactory
                .fillDefaults(parent, SWT.NONE, list, labelText, labelTooltipText)
                .customizeCompositeStructure(compositeBuilder)
                .customizeButtons(
                        new TableControlSWTRendererButtonBarBuilder(structuralFeature, clazz, eObject))
                .customizeTableViewerCreation(new TableControlSWTRendererTableViewerCreator())
                .customizeContentProvider(cp).customizeComparator(comparator);

        /* add columns */
        int regularColumnsStartIndex = 0;

        /* validation column */
        if (!getVElement().isReadonly()) {
            regularColumnsStartIndex++;
            createFixedValidationStatusColumn(tableViewerSWTBuilder);
        }

        addColumns(tableViewerSWTBuilder, clazz, cp);

        final TableViewerComposite tableViewerComposite = tableViewerSWTBuilder.create();

        /* setup selection changes listener */
        tableViewerComposite.getTableViewer().addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                viewerSelectionChanged(event);
            }
        });

        /* setup sorting via column selection */
        setupSorting(comparator, regularColumnsStartIndex, tableViewerComposite);

        /* get validation icon */
        setupValidation(tableViewerComposite);

        setTableViewer(tableViewerComposite.getTableViewer());

        // FIXME doesn't work with table with panel
        // setLayoutData(compositeBuilder.getViewerComposite());
        GridData.class
                .cast(compositeBuilder.getViewerComposite().getLayoutData()).heightHint = getTableHeightHint();
        return tableViewerComposite;

    } catch (final DatabindingFailedException ex) {
        getReportService().report(new RenderingFailedReport(ex));
        final Label errorLabel = new Label(parent, SWT.NONE);
        errorLabel.setText(ex.getMessage());
        return errorLabel;
    }
}

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 www  .  j  a  v  a  2  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.example.databinding.project.ui.rcp.views.ProjectFormAreaPart.java

License:Open Source License

private void createFormArea(IViewSite site, final Composite parent, FormToolkit toolkit,
        final IModelResource resource, ObservablesManager manager, final IObservableValue master) {

    final EditingDomain editingDomain = resource.getEditingDomain();

    ctx = new EMFDataBindingContext();
    // Fix for bug 278301
    Util.masterDetailFixup(ctx, master);

    addStatusSupport(manager, ctx);/*from w  w w.  j a v  a  2  s . c o  m*/

    form = toolkit.createForm(parent);
    toolkit.decorateFormHeading(form);
    form.setText(" ");
    form.setImage(projectImage);

    Composite body = form.getBody();
    body.setLayout(new GridLayout(3, false));

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

    {
        final IEMFValueProperty shortProp = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__SHORTNAME);
        toolkit.createLabel(body, "&Short name");
        Text t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), shortProp.observeDetail(master));

        final IEMFValueProperty longProp = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__LONGNAME);
        toolkit.createLabel(body, "&Long name");
        t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), longProp.observeDetail(master));

        ComputedValue cVal = new ComputedValue() {
            private IObservableValue shortname = shortProp.observeDetail(master);
            private IObservableValue longname = longProp.observeDetail(master);

            @Override
            protected Object calculate() {
                return shortname.getValue() + " - " + longname.getValue();
            }
        };
        manager.addObservable(cVal);
        ctx.bindValue(FormTextProperty.create().observe(form), cVal);
    }

    {
        IEMFValueProperty mProp = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__START);
        toolkit.createLabel(body, "Start Date");
        Text t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), mProp.observeDetail(master),
                UpdateStrategyFactory.stringToDateNotNull(
                        NLSMessages.ProjectAdminViewPart_StartDateNotParseable, "Start date must not be null"),
                UpdateStrategyFactory.dateToString());
    }

    {
        IEMFValueProperty mProp = EMFEditProperties.value(editingDomain, ProjectPackage.Literals.PROJECT__END);
        toolkit.createLabel(body, "End Date");
        Text t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), mProp.observeDetail(master),
                UpdateStrategyFactory.stringToDate(NLSMessages.ProjectAdminViewPart_EndDateNotParseable),
                UpdateStrategyFactory.dateToString());
    }

    {
        IEMFValueProperty mProp = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__HOMEPAGE);
        toolkit.createLabel(body, "Homepage");
        Text t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), mProp.observeDetail(master));
    }

    {
        IEMFValueProperty mProp = EMFEditProperties.value(editingDomain,
                ProjectPackage.Literals.PROJECT__DEVMAIL);
        toolkit.createLabel(body, "Dev-Mail");
        Text t = toolkit.createText(body, "");
        t.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
        ctx.bindValue(prop.observeDelayed(400, t), mProp.observeDetail(master));
    }

    {
        IEMFListProperty mProp = EMFEditProperties.list(editingDomain,
                ProjectPackage.Literals.PROJECT__PROJECTLEADS);
        toolkit.createLabel(body, "Project Leads")
                .setLayoutData(new GridData(SWT.TOP, SWT.DEFAULT, false, false));

        Table c = toolkit.createTable(body,
                SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        final TableViewer tv = new TableViewer(c);
        tv.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Person p = (Person) element;
                return p.getLastname() + ", " + p.getFirstname();
            }
        });
        tv.setContentProvider(new ObservableListContentProvider());
        tv.setInput(mProp.observeDetail(master));

        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.heightHint = 100;
        c.setLayoutData(gd);

        Composite buttonContainer = toolkit.createComposite(body);
        buttonContainer.setLayoutData(new GridData(SWT.DEFAULT, SWT.BOTTOM, false, false));
        buttonContainer.setLayout(new GridLayout());

        Button b = toolkit.createButton(buttonContainer, "Add ...", SWT.FLAT);
        gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
        gd.horizontalAlignment = SWT.FILL;
        b.setLayoutData(gd);
        b.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                PersonFilterDialog dialog = new PersonFilterDialog(parent.getShell(), resource);
                if (dialog.open() == IDialogConstants.OK_ID) {
                    Command cmd = AddCommand.create(editingDomain, master.getValue(),
                            ProjectPackage.Literals.PROJECT__PROJECTLEADS, dialog.getFirstResult());
                    if (cmd.canExecute()) {
                        resource.executeCmd(cmd);
                    }
                }
            }
        });
        b = toolkit.createButton(buttonContainer, "Remove", SWT.FLAT);
        gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
        gd.horizontalAlignment = SWT.FILL;
        b.setLayoutData(gd);
        b.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection s = (IStructuredSelection) tv.getSelection();
                if (!s.isEmpty()) {
                    Command cmd = RemoveCommand.create(editingDomain, master.getValue(),
                            ProjectPackage.Literals.PROJECT__PROJECTLEADS, s.toList());
                    if (cmd.canExecute()) {
                        resource.executeCmd(cmd);
                    }
                }
            }
        });
    }

    addTabArea(site, body, toolkit, ctx, editingDomain, manager, master);
    body.setBackgroundMode(SWT.INHERIT_DEFAULT);
}