Aggiornamento del modello GEF da un thread in background
-
07-07-2019 - |
Domanda
Sto cercando di aggiornare un modello per GEF e ho mostrato le modifiche nella vista che ho creato. Attualmente nessun cambiamento che faccio si riflette nella vista, sto usando il seguente approccio per aggiornare il modello e mi chiedo se sia il giusto approccio da adottare:
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();
}
}
});
Soluzione
La tua EditPart sta ascoltando le modifiche al modello?
1 - Devi registrarti come listener per il tuo modello. Usiamo il meccanismo di notifica di EMF.
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 - Devi agire quando qualcosa cambia.
public void notifyChanged(Notification notification) {
...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow