Comment obtenir la partie active dans une pile de pièces particulière dans Eclipse e4 ?
-
21-12-2019 - |
Question
J'ai un bouton qui crée des pièces.J'ai besoin d'obtenir la partie active qui est actuellement visible dans la pile de pièces et je la stocke comme clé pour une certaine valeur.Comment dois-je obtenir la partie active ?J'ai utilisé le code suivant mais il récupère toutes les pièces de la pile de pièces.
MPart graphpart = partService
.createPart("com.abc.xyz.project.partDescriptor.1");
MPartStack stack = (MPartStack) modelService.find(
"com.abc.xyz.project.partstack.2", application);
for (int i = 0; i < stack.getChildren().size(); i++) {
if (stack.getChildren().get(i).isVisible()) {
System.out.println("values"
+ ((MPart) stack.getChildren().get(i)).getLabel());
application.getTransientData().put(
((MPart) stack.getChildren().get(i)).getLabel(),
selectedFiles);
}
}
La solution
De MPart
vous pouvez récupérer son conteneur directement avec :
final MElementContainer<MUIElement> container = part.getParent();
(ce sera le MPartStack
)
Vous pouvez alors récupérer les stacks enfants actuellement sélectionnés avec :
MUIElement selected = container.getSelectedElement();
Autres conseils
Utiliser le parent de la pièce et son élément sélectionné a également fonctionné pour moi.PERSERVICE.GETACTIVEPART () N'a pas fonctionné car dans notre application, nous avons plusieurs piles de pièces et j'avais besoin d'une partie d'une pile de pièces qui n'était pas au centre de ce moment. J'ai aussi dû lancer le muelement à un MPART parce que je devais retourner un MPART, ce n'était pas un problème, car MPART s'étend de Muielement. Voici mon code:
J'ai trouvé la réponse.Son travail maintenant.
for (int i = 0; i < stack.getChildren().size(); i++) {
if (partService.isPartVisible((MPart) stack.getChildren().get(i))) {
System.out.println("Storage of values"
+ ((MPart) stack.getChildren().get(i)).getLabel());
application.getTransientData().put(
((MPart) stack.getChildren().get(i)).getLabel(),
selectedFiles);
}
}
Nous devrions utiliser PERSERVICE pour vérifier que la pile particulière est visible ou non.
Ceci est assez simple avec Eclipse E4:
-
injecter l'EPARTSERVICE
-
puis obtenir de PERSERVICE la partie active.
HIER est un échantillon de mon rafraîchisseur.
public class RefreshHandler {
@Inject
EModelService modelService;
@Inject
MWindow window;
@Inject
IEventBroker broker;
@Inject
EPartService partService;
@Execute
public void execute() {
System.out.println(this.getClass().getSimpleName() + " called");
MPart activePart = partService.getActivePart();
if(activePart != null) {
System.out.println("--->" + activePart.getElementId());
}
}
@CanExecute
public boolean canExecute() {
MPerspective activePerspective = modelService.getActivePerspective(window);
if (activePerspective != null && activePerspective.getElementId()
.equals(IApplicationUIElementID.PERSPECTIVE_WORKINGSTORE_ID)) {
return true;
}
return false;
}
}