2010-05-04 26 views
3

Je tente de créer une application simple à l'aide d'Eclipse GEF qui affiche un diagramme dans un ScrollingGraphicalViewer. Au démarrage, je veux que le diagramme soit centré dans la visionneuse (imaginez une disposition en étoile où le centre de l'étoile est au centre de la vue).Détermination de la taille de la zone visible d'un ScrollingGraphicalViewer dans Eclipse GEF

Voici ce que je pense sont les sections pertinentes du Code:

Mon point de vue:

public class View extends ViewPart { 
    public static final String ID = "GEFProofOfConcept.view"; 

...   

    public void createPartControl(Composite parent) { 
     viewer.createControl(parent); 

     viewer.setRootEditPart(rootEditPart); 
     viewer.setEditPartFactory(editPartFactory); 

     viewer.setContents(DummyModelCreator.generateModel());   
    } 

Le code édition de partie:

@Override 
protected void refreshVisuals() { 
    Project project = (Project) getModel(); 

    // This is where the actual drawing is done, 
    // Simply a rectangle with text 
    Rectangle bounds = new Rectangle(50, 50, 75, 50); 
    getFigure().setBounds(bounds); 
    Label label = new Label(project.getName()); 
    projectFont = new Font(null, "Arial", 6, SWT.NORMAL); 
    label.setFont(projectFont); 
    label.setTextAlignment(PositionConstants.CENTER); 
    label.setBounds(bounds.crop(IFigure.NO_INSETS)); 

    getFigure().add(label); 

    setLocation(); 
} 

private void setLocation() { 
    Project project = (Project) getModel(); 

    if (project.isRoot()) { 
     // Place in centre of the layout 
     Point centrePoint = new Point(0, 0); // This is where I need the center of the view 
     getFigure().setLocation(centrePoint); 
    } else { 
     ... 
    }  
} 

Et le parent de la partie d'édition ci-dessus:

public class ProjectDependencyModelEditPart extends AbstractGraphicalEditPart { 

@Override 
protected IFigure createFigure() { 
    Figure f = new FreeformLayer(); 
    f.setLayoutManager(new XYLayout()); 

    return f; 
} 
... 

Des solutions alternatives au problème sont également les bienvenues, je suis certainement un newbie GEF (et Eclipse en général).

Répondre

4

avaient calculé ce, pour toute personne intéressée:

 Dimension viewSize = (((FigureCanvas) getViewer().getControl()).getViewport().getSize());