Mise à jour du modèle GEF à partir d'un thread d'arrière-plan
-
07-07-2019 - |
Question
J'essaie de mettre à jour un modèle pour GEF et d'afficher les modifications dans la vue que j'ai créée. Actuellement, aucun changement n’est reflété dans la vue. J'utilise l'approche suivante pour mettre à jour le modèle et je me demande si c’est la bonne approche à adopter:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
String viewId = "beat.views.BeatView";
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow mainWindow = workbench
.getActiveWorkbenchWindow();
try {
BeatView view = (BeatView) mainWindow.getActivePage()
.showView(viewId);
BeatEditPart beatEditPart = (BeatEditPart)view.getGraphicalViewer().getContents();
BeatModel beatModel = (BeatModel)beatEditPart.getModel();
beatModel.setObjects(model);
} catch (PartInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
La solution
Votre EditPart écoute-t-elle les modifications de modèle?
1 - Vous devez vous inscrire en tant qu'auditeur de votre modèle. Nous utilisons le mécanisme de notification de la FEM.
public void activate() {
if (!isActive())
((EObject) getModel()).eAdapters().add(this);
super.activate();
}
public void deactivate() {
if (isActive())
((EObject) getModel()).eAdapters().remove(this);
super.deactivate();
}
2 - Vous devez agir lorsque quelque chose change.
public void notifyChanged(Notification notification) {
...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow