Come ottenere la parte attiva in un particolare partStack in Eclipse E4?
-
21-12-2019 - |
Domanda
Ho un pulsante che crea parti.Ho bisogno di ottenere la parte attiva attualmente visibile nella parte di parte di parte e lo sto memorizzando come una chiave per qualche valore.Come dovrei ottenere la parte attiva? Ho usato il seguente codice ma sta ottenendo tutte le parti nella partStack.
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);
}
}
. Soluzione
Da un MPart
è possibile ottenere il suo contenitore direttamente con:
final MElementContainer<MUIElement> container = part.getParent();
.
(questo sarà il MPartStack
)
È quindi possibile ottenere gli stack Attualmente selezionati figlio con:
MUIElement selected = container.getSelectedElement();
. Altri suggerimenti
Usando il genitore della parte e il suo elemento selezionato ha funzionato anche per me.partiservice.getactivepartpart () Non ha funzionato perché nella nostra applicazione abbiamo diverse pile di parte e avevo bisogno di una parte da una parte di una parte che non era a fuoco in quel momento. Dovevo anche lanciare il mumielement a un mpart perché avevo bisogno di restituire un mpart, non era un problema, dal momento che Mpart si estende dal muelement. Ecco il mio codice:
Ho trovato la risposta.Lavora ora.
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);
}
}
.
Dovremmo fare uso di ricambi per controllare la pila particolare è visibile o meno.
Questo è piuttosto semplice con Eclipse E4:
- .
-
Iniettare l'epartservice
-
Quindi ottenere da parti parti della parte attiva.
Hier è un campione del mio aggiornamento.
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;
}
}
.