[RCP] View durch einen anderen View ersetzen

L

lowskilla

Hallo,

ich stehe momentan vor folgendem Problem: Ich habe eine Ansicht in meiner RCP Applikation, die Listenförmig Daten anzeigt. Nun habe ich einen neuen View implementiert, der die selben Daten in einer Baumansicht anzeigt. Beide Views funktionieren einwandfrei.

Nun möchte ich, dass ich mittels einem ViewMenu eine Action erscheint, mit der ich zwischen den Views umschalten kann. Meine momentane Lösung sieht so aus, dass ich mit dieser Action den alten View schließe und den neuen View anzeigen lasse.

Java:
public class OpenComponentListAndCloseTreeAction extends Action implements IWorkbenchAction
{

 public void run()
    {
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        IViewReference ref = page.findViewReference(ComponentTreeView.ID);
        IViewPart viewPart = ref.getView(true);

            // Deen TreeView verstecken und den ListView aufmachen
            page.hideView(viewPart);
            page.showView(ComponentListView.ID);
   }

public void dispose()
    {
    // Beim zumachen soll gar nichts passieren
    }
}

Ansich würde das ganze schon funktionieren, ist jedoch mMn nich optimal gelöst, es gibt es nocheinige Unschönheiten. Falls der eine View nämlich vom Benutzer verschoben wurde und der Bunutzer dann den View wechselt, erscheint der neue View wieder an der alten Stelle.

Was ich mir im Endeffekt vorstellen würde, wäre in etwa das, wenn man im Eclipse Package Explorer auf "Package Presentation" klickt und man dort zwischen "Flat" und "Hierachical Presentation" wählen könnte.

Was eventuell eine Lösung für mein Problem sein könnte: Ich müsste irgendwie überprüfen, ob die eine Perspektive geöffnet ist und falls ja, müsste diese dann geschlossen werden. So könnte ich zumindest verhindern, dass unter Umständen beide Views offen sind.

Für Antworten oder Links bin ich sehr dankbar!
 
Wieso machst du denn nicht unterschiedliche Composites und halt ähnlich wie du es schon angesprochen hast, ne Einstellung mit der man einstellen kann wie das ganze aussehen soll. Dann stellst du je nach dem, das oder das Composite dar.
 
Hallo,
so frei aus dem Bauch heraus würde ich zunächst folgendes versuchen:
Du sagtest du zeigst Sachen 'listenförmig' an. Deswegen nehme ich an Du benutzt einen TreeViewer oder TableViewer mit Label- und ContentProvider zum Anzeigen der Daten.

Du könntest versuchen zwei LabelProvider zu schreiben, der eine für die 'Listenansicht' und der andere für die 'Baumansicht'.

Wenn nun standardmäßig die Listenansicht aktiviert ist könntest Du bei der Action dem TreeViewer/TableViewer den anderen LabelProvider zuweisen.

Auch die Idee von zeja mit den zwei Composites wäre gut. Optimales Layout dafür wäre das StackLayout:
http://help.eclipse.org/help32/inde...e/api/org/eclipse/swt/custom/StackLayout.html

Gruß,
Jens
 

Neue Beiträge

Zurück