Perspektywy

W poprzednich sekcjach omówiono już niektóre metody umożliwiające użytkownikowi sterowanie funkcjonalnym wyglądem modułu dodatkowego. Widoki można ukrywać i wyświetlać przy użyciu menu Okna >Pokaż widok. Zbiory akcji można ukrywać i wyświetlać przy użyciu menu Okna >Dostosuj perspektywę. Funkcje te pomagają użytkownikowi zorganizować środowisko robocze.

Perspektywy udostępniają dodatkową warstwę organizacji wewnątrz okna środowiska roboczego. Użytkownicy mogą przełączać się między perspektywami w miarę wykonywania kolejnych czynności. Perspektywa definiuje kolekcję widoków, ich układ oraz widoczne zbiory akcji, które powinny być dostępne, gdy użytkownik otwiera perspektywę po raz pierwszy.

Perspektywy implementuje się przy użyciu interfejsu  IPerspectiveFactory.   Oczekuje się, że klasy implementujące interfejs IPerspectiveFactory zdefiniują w interfejsie IPageLayout informacje opisujące perspektywę i układ strony tej perspektywy.

Układ części środowiska roboczego

Jednym z głównych zadań interfejsu IPageLayout jest opis położenia edytora i widoków w oknie środowiska roboczego. Należy zwrócić uwagę, że te układy są różne od klasy Layout w pakiecie SWT. Chociaż interfejs IPageLayout i klasa Layout rozwiązują podobny problem (określania wielkości i pozycji widgetów w większym obszarze), do pracy z układem strony perspektywy nie jest potrzebna znajomość układów w rozumieniu pakietu SWT.

Układ strony perspektywy jest inicjowany z jednym obszarem przeznaczonym do wyświetlania edytora. Fabryka perspektyw jest odpowiedzialna za dodawanie kolejnych widoków względem edytora. Widoki są dodawane do układu względem innej części (u góry, u dołu, z prawej, z lewej). Zamiast elementów, które nie są początkowo wyświetlane, można dodawać obiekty zastępcze (puste miejsca).

Aby zorganizować pokrewne widoki i zredukować szum informacyjny, można użyć interfejsu IFolderLayout do zgrupowania widoków w foldery z kartami. Na przykład w perspektywie Zasób nawigator zasobów jest umieszczony w górnym lewym rogu środowiska roboczego.  Obiekty zastępcze są często używane w układach folderów. W perspektywie Zasób definiowany jest obiekt zastępczy dla widoku zakładek w tym samym folderze co nawigator zasobów. Gdy użytkownik wybierze widok zakładek, zostanie on wyświetlony w tym samym folderze co nawigator i będzie miał osobne karty dla każdego widoku.

Interfejs IPageLayout umożliwia także definiowanie akcji i skrótów dostępnych w perspektywie.  

Łączenie widoków i edytorów przy użyciu operacji "Pokaż w"

Inną przydatną funkcją udostępnianą przez perspektywy i interfejs IPageLayout jest pomoc w nawigacji między edytorem i pokrewnymi widokami.  Widoki są najczęściej postrzegane jako pomocne w znalezieniu obiektu, z którym użytkownik chce pracować w edytorze.  Jednak przydatna jest także operacja odwrotna:  użytkownik pracujący z obiektem w edytorze może chcieć przejść do tego obiektu wewnątrz widoku.  Można to zrealizować, używając menu Nawigacja > Pokaż w.  Polecenie to umożliwia użytkownikowi przeskoczenie do jednego z widoków pokrewnych w kontekście edytowanego w danym momencie (lub zaznaczonego) obiektu.  Na przykład użytkownik edytujący plik może chcieć przejść do tego pliku w nawigatorze zasobów.

Architektura modułów dodatkowych środowiska roboczego umożliwia programistom wnoszenie widoków i edytorów przez różne moduły dodatkowe, które nie mają informacji o sobie nawzajem.  Zaimplementowanie we własnym widoku lub edytorze obsługi polecenia "Pokaż w" umożliwia wygodne przechodzenie do widoków i edytorów wnoszonych przez inne moduły dodatkowe. 

Pozwala to użytkownikom szybko poruszać się między widokami oraz w prosty sposób otwierać widoki, które nie są zwykle otwierane w danej perspektywie.   Na przykład użytkownik pracujący w perspektywie Java może użyć menu Nawigacja > Pokaż w, aby wyświetlić edytowany w danym momencie plik Java w widoku nawigatora.

Część źródłowa operacji Pokaż w

Aby umożliwić użytkownikom edytora lub widoku korzystanie z menu Nawigacja > Pokaż w w celu przejścia do innego widoku, należy zaimplementować interfejs IShowInSource. Dana część może dostarczać interfejs IShowInSource bezpośrednio przy użyciu protokołu (getShowInSource()) lub jako adapter.  Interfejs IShowInSource umożliwia części dostarczanie kontekstu (ShowInContext), który jest używany przez część docelową w celu zdecydowania, jak ma być wyświetlana część źródłowa.  Kontekst operacji "Pokaż w" dla edytora to zwykle jego element wejściowy.  Dla widoku kontekstem jest zazwyczaj wybór.  Zarówno wybór, jak i element wejściowy są udostępniane w klasie ShowInContext w celu zapewnienia części docelowej elastyczności w określaniu sposobu wyświetlania źródła. 

Ponieważ dla edytorów jest udostępniany kontekst domyślny, dany edytor może korzystać z polecenia "Pokaż w" bez konieczności specjalnego kodowania.  Do utworzenia odpowiedniego kontekstu dla edytorów używany jest element wejściowy i wybór. 

Widoki muszą implementować interfejs IShowInSource, aby oferować funkcję menu Nawigacja > Pokaż w.

Część docelowa operacji Pokaż w

Aby dany widok był poprawną częścią docelową operacji "Pokaż w", konieczne jest zaimplementowanie interfejsu IShowInTarget.   Część docelowa jest odpowiedzialna za wyświetlenie danego kontekstu w sposób zgodny z jego prezentacją.  Na przykład w widoku Nawigator drzewo jest rozwijane w celu wyświetlenia i wybrania zasobu określonego w kontekście.  

Część docelowa powinna najpierw sprawdzić wybór w klasie ShowInContext, aby zdecydować, co powinno zostać wyświetlone, ponieważ jest to informacja szczegółowa.  Element wejściowy powinien zostać wyświetlony tylko wtedy, gdy nie dokonano wyboru.

Prezentowanie odpowiednich części docelowych

W jaki sposób określana jest lista dostępnych części docelowych?  Dla danej perspektywy można to zrobić w jej interfejsie IPageLayout.  Należy pamiętać, że operacja "Pokaż w" może otwierać widok, który nie jest jeszcze obecny w perspektywie.  Przy użyciu metody IPageLayout.addShowInPart można określić poprawną część docelową operacji "Pokaż w" na podstawie jej identyfikatora.  W ten sposób można ustanawiać poprawne części docelowe bez konieczności tworzenia żadnych widoków.