Mittwoch, 12. Oktober 2011

Eclipse RCP - IFolder nach dem Beenden der letzten View erhalten

Problem: nachdem die letzte View geschlossen wird, verschwindet auch der IFolder. Werden neue Views wieder geöffnet, dann erscheinen diese nicht immer in einem Teil des Fensters. Die Anwendung sieht dann recht unkonsistent aus, wie in Abbildung 1 dargestellt.


Abbildung 1

Lösung: Im WorkbenchWindowAdvisor (bzw. in der Klasse die von diesem erbt) muss die Methode isDurableFolder überschriben werden:


@Override
public boolean isDurableFolder(String perspectiveId, String folderId) { 

  if (folderId.equals("folderName")) {
    if ("perspective.id".equals(perspectiveId)) {
      return true;
    }
  }
  return super.isDurableFolder(perspectiveId, folderId); 
}

Der folderName ist der Name des IFolder der in der Persepctive Klasse angelegt wurde. perspective.id ist die im plugin.xml eingetragene ID der Perspective.

Das Ergebnis ist in Abbildung 2 dargestellt:

Abbildung 2


Hier ein Auszug aus der Perspective Klasse:


public class Perspective implements IPerspectiveFactory {
    public static final String ID = "perspective.id";

    public void createInitialLayout(IPageLayout layout) {
      String editorArea = layout.getEditorArea();
      layout.setEditorAreaVisible(false);
      layout.addStandaloneView(NavigationView.ID, false, 
                     IPageLayout.LEFT, 0.25f, editorArea);
      IFolderLayout folder = layout.createFolder("inputFolder", 
                     IPageLayout.TOP, 0.5f, editorArea);
      layout.getViewLayout(NavigationView.ID).setCloseable(false);
    }

}

Anzumerken sei, dass derartige Verweneung der isDurableFolder Methode auf den Spezialfall einer Applikation mit einen Navigationsbaum links und dem Inhalt rechts passt. Sollten komplexere GUIs gefordert sein, muss die Methode entsprechned modifiziert werden.

Dieser Artikel basiert auf folgendem Posting bei stackoverflow.com.

Keine Kommentare:

Kommentar veröffentlichen