List of usage examples for org.eclipse.jface.databinding.viewers ObservableListContentProvider ObservableListContentProvider
public ObservableListContentProvider()
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); }