Bonjour,
Je suis novice en Eclipse 4 et j'essaye de construire une application 100% e4. J'arrive à faire pas mal de choses, mais là je bloque:
J'ai un modèle EMF, je génère les classes de mon modèle, .edit et .editor.
Dans mon application j'ai un Explorer et quand je sélectionne un objet dans l'arbre de celui-ci, je sais le représenter graphiquement (métier).
Par contre je n'arrive pas à le mettre dans une fenêtre "PropertyPage". J'avoue que j'ai du mal à comprendre le code généré dans .editor:
La part Property avec deux colonnes "Property" et "Value" se crée bien mais rien ne se passe quand je clique sur un objet de mon explorateur, bien que je passe dans:
myProperty.handleEntrySelection(ExplorerPart.getTreeViewer().getSelection());
avec la bon objet.
Voici le code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| package galera3D.parts.explorer;
import galera.supports.provider.SupportsItemProviderAdapterFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.views.properties.IPropertySourceProvider;
import org.eclipse.ui.views.properties.PropertySheetPage;
public class PropertiesEditorPart {
ExtendedPropertySheetPage myProperty;
private AdapterFactoryEditingDomain editingDomain;
ComposedAdapterFactory adapterFactory;
List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>();
@PostConstruct
public void createComposite(Composite parent) {
ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new SupportsItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
// Create the command stack that will notify this editor as commands are executed.
//
BasicCommandStack commandStack = new BasicCommandStack();
// Create the editing domain with a special command stack.
//
editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
parent.setLayout(new FillLayout());
myProperty = new ExtendedPropertySheetPage(editingDomain){
@Override
public void setSelectionToViewer(List<?> selection) {
PropertiesEditorPart.this.setFocus();
}
@Override
public void setActionBars(IActionBars actionBars) {
}
@Override
public void handleEntrySelection(ISelection selection)
{
super.handleEntrySelection(selection);
objectsToSelect.clear();
if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection)selection;
if (structuredSelection.size() == 1)
{
Vector<ISelection> v = new Vector<ISelection>();
v.add(selection);
setSelectionToViewer(v);
Object object = structuredSelection.getFirstElement();
addObjectToSelect(object);
}
}
locateValueAction.setEnabled(!objectsToSelect.isEmpty());
}
};
{}
IPropertySourceProvider provider = new AdapterFactoryContentProvider(adapterFactory);
myProperty.setPropertySourceProvider(provider);
myProperty.createControl(parent);
myProperty.getSite().setSelectionProvider(ExplorerPart.getTreeViewer());
}
@Focus
public boolean setFocus() {
if(myProperty != null) return myProperty.getControl().setFocus();
return false;
}
@Inject
public void receiveSelection(@Optional @Named(IServiceConstants.ACTIVE_SELECTION) Object o) {
if(o != null) {
if(myProperty != null) {
myProperty.handleEntrySelection(ExplorerPart.getTreeViewer().getSelection());
}
}
setFocus();
}
} |
Quelqu'un saurait-il m'indiquer comment procéder ?
Merci d'avance pour votre aide.
Partager