Comment obtenir la partie active dans une pile de pièces particulière dans Eclipse e4 ?

StackOverflow https://stackoverflow.com//questions/24017374

  •  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);
                }
            }
Était-ce utile?

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: Entrez la description de l'image ici

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:

  1. injecter l'EPARTSERVICE

  2. puis obtenir de PERSERVICE la partie active.

  3. 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;
        }
    
    }
    

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top