Get all occurrencies of Object-Typ for Combo [message #780253] |
Tue, 17 January 2012 13:28 |
Markus Jo Messages: 83 Registered: January 2012 |
Member |
|
|
Hi,
me again.
I think this must be i little bit simpler.
Lets say I have many markets in my EMF Model below he root object in a list "markets". Every Market has a list called "products" in which you can find its products (type Product).
Now I have a combo box that I created like this:
// Listing Device
Label listingDeviceLabel = toolkit.createLabel(composite, "Maschine:", SWT.NONE);
listingDeviceLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
this.listingDeviceCombo = new Combo(composite, SWT.READ_ONLY);
listingDeviceCombo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
toolkit.adapt(listingDeviceCombo);
toolkit.paintBordersFor(listingDeviceCombo);
listingDeviceComboViewer = new ComboViewer(listingDeviceCombo);
ObservableListContentProvider observableListContentProvider = new ObservableListContentProvider();
listingDeviceComboViewer.setContentProvider(observableListContentProvider);
IObservableMap observableMap = EMFProperties.value(MetamodelPackage.Literals.LISTING_DEVICE__NAME).observeDetail(observableListContentProvider.getKnownElements());
listingDeviceComboViewer.setLabelProvider(new ObservableMapLabelProvider(observableMap));
FeaturePath parallelTrainNumberFeature = FeaturePath.fromList(
MetamodelPackage.Literals.COACH_GROUP__CLIENT_ORGANIZATION,
MetamodelPackage.Literals.CLIENT_ORGANIZATION__LISTING_DEVICES,
MetamodelPackage.Literals.LISTING_DEVICES__LISTING_DEVICE);
IEMFListProperty p = EMFProperties.list(parallelTrainNumberFeature);
CoachGroup coachGroup = (CoachGroup) ((Listing) getCurrentSelection()).eContainer().eContainer();
listingDeviceComboViewer.setInput(p.observe(coachGroup));
// bind
IViewerObservableValue listingDeviceViewerObsevable = ViewersObservables.observeSingleSelection(listingDeviceComboViewer);
IObservableValue listingDeviceModelObsevable = EMFEditProperties.value(editingDomain, MetamodelPackage.Literals.LISTING__DEVICE).observeDetail(masterTreeViewerObservable);
bindingContext.bindValue(listingDeviceViewerObsevable, listingDeviceModelObsevable);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ClientOrganization = Market
ListingDevice = Product
QUESTION: How can I display ALL Products (ListingDevices) of ALL Markets (ClientOrganization) in my ComboBoy using the EMF mechnism ?
Thank you
Markus
|
|
|
Re: Get all occurrencies of Object-Typ for Combo [message #780306 is a reply to message #780253] |
Tue, 17 January 2012 15:12 |
Christophe Bouhier Messages: 937 Registered: July 2009 |
Senior Member |
|
|
Hi Markus,
I haven't looked at your code, but I post here the way I deal with combo's which should present
enums and it works nicely. My UI screens, are always chopped in two parts, 1) build the widgets, 2) inject the data
1) first build a combo
cmbLevelViewer = new ComboViewer(composite_1, widgetStyle);
Combo cmbToleranceLevel = cmbLevelViewer.getCombo();
cmbToleranceLevel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1,
1));
toolkit.paintBordersFor(cmbToleranceLevel);
2) do the binding stuff, with an injected object.
cmbLevelViewer.setContentProvider(new ArrayContentProvider());
cmbLevelViewer.setLabelProvider(new LabelProvider());
cmbLevelViewer.setInput(LevelKind.VALUES);
IEMFValueProperty toleranceLevelProperty = EMFEditProperties
.value(editingService.getEditingDomain(), LibraryPackage.Literals.TOLERANCE__LEVEL);
IValueProperty selectionProperty = ViewerProperties.singleSelection();
context.bindValue(selectionProperty.observe(cmbLevelViewer),
toleranceLevelProperty.observe(tolerance), null, null);
does this help?
|
|
|
Re: Get all occurrencies of Object-Typ for Combo [message #780312 is a reply to message #780253] |
Tue, 17 January 2012 15:29 |
Christophe Bouhier Messages: 937 Registered: July 2009 |
Senior Member |
|
|
ok, I did look at the code now, you didn't mention what happens with this code. Does it work?
As you build a feature path, you will get only the entries, in the last part of the path, so this will be items from this correct?
MetamodelPackage.Literals.LISTING_DEVICES__LISTING_DEVICE
When combining items from multiple features, I use a Computed list.
see some sample code here:
ComputedList computedResourceList = new ComputedList() {
@SuppressWarnings("unchecked")
@Override
protected List<Object> calculate() {
List<Object> result = Lists.newArrayList();
Object value = anySelectionObservable.getValue();
// here: put items from value, in the "result" list.
// in your case from both these features, //MetamodelPackage.Literals.CLIENT_ORGANIZATION__LISTING_DEVICES,
// MetamodelPackage.Literals.LISTING_DEVICES__LISTING_DEVICE
return result;
}
};
the computed list is then set as an input to the ComboViewer.
Does this help you?
Cheers Christophe
[Updated on: Tue, 17 January 2012 15:30] Report message to a moderator
|
|
|
|
|
|
|
Re: Get all occurrencies of Object-Typ for Combo [message #781077 is a reply to message #781074] |
Fri, 20 January 2012 12:13 |
Markus Jo Messages: 83 Registered: January 2012 |
Member |
|
|
OK, I am the champ.....I got it. Because of the List-in-List construct I had to loop for the features a then trigger "-iterator()" on every ObservableList (the inner ones) in order to "register" it as dependency of the computed list.
I could do something more beautyful....please comment:
Here is the code:
final IObservableList clientOrganizationsObsevable =
EMFObservables.observeList(EpaModelAccess.getRootObject().getMandants(), ClientorganizationPackage.Literals.CLIENT_ORGANIZATIONS__MANDANT);
final List<IObservableList> observableLists = new ArrayList<IObservableList>();
for(ClientOrganization clientOrganization : EpaModelAccess.getRootObject().getMandants().getMandant()){
final IObservableList listingDevicesObsevable = EMFObservables.observeList(clientOrganization.getListingDevices(), ListingdevicePackage.Literals.LISTING_DEVICES__LISTING_DEVICE);
observableLists.add(listingDevicesObsevable);
}
ComputedList computedResourceList = new ComputedList() {
@SuppressWarnings("unchecked")
@Override
protected List<Object> calculate() {
List<Object> result = new ArrayList<Object>();
for (Object object : clientOrganizationsObsevable) {
ClientOrganization clientOrganization = (ClientOrganization) object;
if(clientOrganization.getListingDevices() != null && clientOrganization.getListingDevices().getListingDevice() != null){
result.addAll(((ClientOrganization) object).getListingDevices().getListingDevice());
}
}
for(IObservableList observableList : observableLists){
observableList.iterator();
}
return result;
}
};
listingDeviceComboViewer.setInput(computedResourceList);
[Updated on: Fri, 20 January 2012 12:14] Report message to a moderator
|
|
|
Powered by
FUDForum. Page generated in 0.03820 seconds