2009-09-15 7 views
0

J'essaie de mettre à jour un modèle pour GEF et d'afficher les modifications dans la vue que j'ai créée. À l'heure actuelle aucun changement que je fais se reflète dans la vue, j'utilise l'approche suivante pour mettre à jour le modèle et je me demande si son approche droit de prendre:Mise à jour du modèle GEF à partir d'un fil d'arrière-plan

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(); 
      } 
     } 
    }); 

Répondre

1

Est-ce votre EditPart écoute pour modéliser les changements?

1 - Vous devez vous enregistrer en tant qu'auditeur pour votre modèle. Nous utilisons le mécanisme de notification d'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 - Vous devez agir lorsque quelque chose change.

public void notifyChanged(Notification notification) { 
... 
} 
Questions connexes