# Perspective



## Gast2 (11. Sep 2008)

Hallo zusammen,

wie kann ich einer Perspektive nachdem sie einmal aktiv war noch weitere views anhängen?


----------



## foobar (12. Sep 2008)

http://help.eclipse.org/help32/inde...erence/api/org/eclipse/ui/IWorkbenchPage.html

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(myViewID);


----------



## Gast2 (12. Sep 2008)

ja des ist klar... Problem schlecht beschrieben =)
ich hab ein ContributionItem in meinem Menü...

```
perspectivesMenu = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);
```
Da kann ich jetzt alle meine Perspektiven auswählen eine Perspektive beinhaltet nur Views
wenn ich diese auswähle wird meine Perspektive initialisiert soweit so gut


```
public void createInitialLayout(IPageLayout layout) {

//bekannte views adden



  }
```

jetzt wechsel ich eine Perspektive und komme wieder zu meiner obigen zurück in der zeit können neue Views enstanden sein wie kann ich diese jetzt einfügen da createInitialLayout nicht mehr ausgeführt wird...

Meine Lösung ist bis jetzt  einen listener zu adden und dann meine views zu adden...


```
PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(new IPerspectiveListener(){
      public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective)
      {
          if(perspective.getId().equals(ID))
          {

                page.showView......
             }
          }
      }
```


----------



## foobar (12. Sep 2008)

Sowas brauchst du nicht selber zu implementieren das erledigt die Workbench alles für dich. Du mußt nur die Perspective über setPerspective setzen:


```
IPerspectiveDescriptor desc = PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(ReportPerspective.ID);
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setPerspective(desc);
```


----------



## Gast2 (12. Sep 2008)

und wo genau? soll ich das setzen???


----------



## foobar (12. Sep 2008)

Das machst du in deiner run-Methode der Action. Du hast z.b. eine Action ShowCustomerPerspective, die bei Betätigung die dazugehörige Perspective setzen soll:

```
public class ShowCustomerPerspective implements IWorkbenchWindowActionDelegate
{

    @Override
    public void dispose()
    {
    }

    @Override
    public void init(IWorkbenchWindow window)
    {
    }

    @Override
    public void run(IAction action)
    {
      IPerspectiveDescriptor desc = PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(CustomerPerspective.ID);
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setPerspective(desc);  
    }

    @Override
    public void selectionChanged(IAction action, ISelection selection)
    {
    }
}
```

Das ist alles. Auf die Art und Weise kannste dir auch nen eigenen Perspectiveswitcher implementieren z.b. auf Basis einer Combobox oder eines CustomWidgets etc.


----------



## Gast2 (12. Sep 2008)

ja aber dein button macht ja auch nichts anderes wie der progammtische action von eclipse


```
perspectivesMenu = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);
```

oder wird bei deiner variante jetzt jedes mal die create methode von meiner Perspektive aufgerufen


----------



## foobar (12. Sep 2008)

> oder wird bei deiner variante jetzt jedes mal die create methode von meiner Perspektive aufgerufen


Natürlich nicht, wofür sollte das auch gut sein?

Die Perspective wird einmal instanziiert und fortan von Eclipse verwaltet. Wenn du auf eine Perspective zugreifen willst, mußt du die ID kennen. Wie die Perspective dann implementiert ist, spielt dann keine Rolle mehr.

Worum gehts dir denn genau? Irgendwie habe ich das Gefühl, daß du an der API vorbei entwickelst.


----------



## Gast2 (12. Sep 2008)

Wie oben beschrieben ich habe eine Perspektive die besteht nur aus Views(eine Tabelle mit Ergebnissen) von einer Klasse ...
ok wenn ich die perspektive(1.mal) aufrufe instanziert er mir alles Views und zeigt sie an klappt...
So jetzt wechselt er die Perspektive und macht was jetzt kann sein dass durch seine Änderungen eine neue View enstanden ist... 
Jetzt ruft er wieder die Ergebnis perspektive auf und da sind immer noch die gleichen views aber die neue ist nicht hinzugekommen... weißt wie ich mein??? wie gesagt hab bis jetzt nur die möglichkeit durch einen Listener gefunden


----------



## foobar (12. Sep 2008)

Dieses Szenario habe ich in meiner Anwendung auch und keine Probleme damit denn die Workbench merkt sich welche View in welcher Perspective geöffnet ist und welche Größe etc. hat.
Dafür mußt du nur der Workbench sagen, daß sie ihre Einstellungen persistieren soll.
Gerade das ist doch einer der Vorteile der RCP. Wenn man immer alle Views, Editoren mit allen Einstellungen persistieren müsste, wäre das kein großer Mehrwert. Wenn du zusätzlich noch irgendwas Speichern willst, kannste das sehr einfach durch IMementos lösen,

Was meinst du mit View entstanden? Eine View wurde angezeigt durch showView?


----------



## Gast2 (12. Sep 2008)

ich weiß net hab des gefühl wir reden einander vorbei... oder ich kapier die lösung nicht die du vorschlägst ^^

Also ich hab Perspektive a und Perspektive b

so jetzt mache ich was in Perspektive a dadruch enstehen views die ich in Perspektive b darstellen will...
so jetzt wechsel ich in perspektive b (wie oben gezeigt das was von eclipse angebietet wird)
dann ruft er mir das create... auf da lass ich alle meine views anlegen und anzeigen.... so genug angeschaut
wechsel in Perspektive a jetzt kann es sein dass ich solange ich in a was mache neue views enstehen die ich in Perspektive b anzeigen lassen will und nu????Ich bin in Perspektive a , kann also schlecht die activeSeite holen sonst zeigt er sie mir in der falschen Perspektive  a an...
so wechsel ich in Perspektive b werden meine views von vorher noch angezeigt weil sie wie du gesagt hast gespeichert werden von der Workbench... aber ich finde nirgends eine Stelle wo ich meine neuen views noch im nachinein hinzufügen kann zu dieser Perspektive  b

view enstehen = daten wurden in Perspektive  a erstellt und jetzt würde ich gern diese daten in einer view darstellen lassen ABER in Perspektive b ... und ich weiß wie


----------



## foobar (12. Sep 2008)

Hm, klingt komisch was du da machst.  

Der Sinn einer Perspective ist es die Sicht auf die Views/Editoren zu fokusieren .d.h es wird nur das wesentliche für diesen Usecase angezeigt. In der Reportperspektive zeige ich nur meine Reportauswahl und die Ergebnisse an und in der Datenerfassungsview zeige ich nur meinen Eingabeeditor an.

Du willst also in Perspektive A eine View öffnen mit showView, die dann in Perspektive B angezeigt wird? Wofür? 
Ich verstehe den Sinn nicht so ganz. Wofür benutzt du Perspektiven?


----------



## Gast2 (12. Sep 2008)

ich beschäftige mich mit RCP noch nicht so lange und versuch grad noch ein bischen rum und wollt halt schauen was alles so geht...

bei mir ist es jetzt so ich lese tipps con jedem user (xml-files ein)für ein tippspiel ein  (perspektive a) dann zeigt in einer view (perspektive a )die punkte an so jetzt will ich die perspektive b öffnen wo für jeden user eine view existiert wo alle seine tipps drin stehen mit punkte das klappt ja alles wunderbar....

so jetzt wechsel ich in die perspektive a und lese wieder tipps ein jetzt kann es sein dass es einen neuen user gibt 
also ensteht auch eine neue view in perspektive b ... nur wird die erst beim nächsten start angezeigt oder halt wie oben mit deinem listener sobald die perspektive aktiviert wird zeig ich die neue(n) view(s) an...


----------



## foobar (12. Sep 2008)

Wenn du Eclipse als IDE verwendest haste ja auch mehrere Perspektiven z.b. Java Dev oder Database Dev, Svn Repository etc.
Je nachdem was du machen willst wählst du eben eine Perspektive aus, um nicht von den Informationen erschlagen zu werden.
Genauso ist das in einer RCP App auch. Der Benutzer wählt sich eine Perspektive aus, die ihn in dem unterstützt was er machen will z.b. Daten import.
Bei einer RCP App ist es sinnvoll den Perspectiveswitcher durch ein Menü, Coolbar, Combox oder ähnliches zu ersetzen dadurch wirkt das ganze weniger technisch und IDE-artig.

Aber in einer Perspektive A etwas zu berechnen eine View zu öffnen und dann die Perspektive zu wechseln um dort das Ergebnis anzuzeigen ist nicht im Sinne des Erfinders.
Eine Perspektive ist nur eine Sicht auf deine Anwendung.


----------



## Wildcard (12. Sep 2008)

Foobar hat absolut recht, was du vorhast ist nicht der Use-Case einer Perspective. Eine Perspective gruppiert die Werkzeuge die für eine bestimmte Aufgabe notwendig sind. Der Entwickler gibt ein bestimmtest Layout vor und ab dann hat der User die Kontrolle. Er bestimmt nun wie seine Perspective aussieht in dem er Views verschiebt, schließt und öffnet.
Wenn bei dir eine Perspective die andere ständig verändern will, dann bewegst du dich ausserhalb dem Sinn einer Perspective und erhälst dementsprechend keine Unterstützung durch die API.


----------



## Gast2 (12. Sep 2008)

okay alles klar


----------

