Zastrzeżenie: punkt rozszerzenia org.eclipse.ui.menus
jest jedynie częściowo zaimplementowany w Eclipse w wersji 3.2. W chwili obecnej nie obsługuje definicji menu, pasków narzędzi ani rozszerzeń (należy zamiast nich używać istniejących rozszerzeń wnoszących elementy). Jest to jednak jedyny mechanizm, za pomocą którego można wnosić widgety do obszaru marginesu środowiska roboczego. W tej sekcji opisano, jak użyć tego mechanizmu w tym celu.
Widget obszaru marginesu to element sterujący umieszczany w zewnętrznej ramce okna środowiska roboczego (w obszarze zwanym 'obszarem marginesu'). Najbardziej typowym przykładem jest ogólna 'linia statusu', którą prawie wszystkie graficzne interfejsy użytkownika umieszczają przy dolnej krawędzi okna. Punkt rozszerzenia org.eclipse.ui.menus umożliwia wtyczkom dodawanie widoków do środowiska roboczego. Wtyczki, które wnoszą margines, muszą zarejestrować go w pliku plugin.xml i udostępnić informacje konfiguracyjne o marginesie, takie jak jego klasa implementacji, grupa marginesu (pasek marginesu), w której się znajduje, a także informacje o układzie, takie jak informacje, czy margines zamierza korzystać z dostępnej przestrzeni 'dodatkowej' podczas rozmieszczania w obszarze marginesu.
Interfejs wnoszonego marginesu jest zdefiniowany w interfejsie IWorkbenchWidget, ale wtyczki mogą (a nawet powinny) rozszerzać klasę AbstractWorkbenchTrimWidget zamiast implementować interfejs od początku.
W przykładzie narzędzia readme wnieśliśmy dość prosty widget marginesu, który po prostu wyświetla łańcuch oraz informację o tym, po której stronie dokowany jest w danej chwili margines.
Przyjrzyjmy się definicji punktu rozszerzenia używanego do wnoszenia tego elementu marginesu:
Pierwsza sekcja rozszerzenia (definicja grupy, 'group') określa identyfikator grupy i położenie ('location') grupy - początek grupy 'status' (tzn. na początku dolnego obszaru marginesu). Druga sekcja (definicja 'widgetu') określa klasę ('class') implementacji widgetu i położenie ('location') widgetu (w zdefiniowanej wcześniej grupie).
Należy zauważyć, że w obu przypadkach typ paska ('type') jest zdefiniowany jako trim (jest to obecnie jedyny obsługiwany typ).
Po zainstalowaniu przykładu narzędzia readme
warto przyjrzeć się implementacji metody fill widgetu ReadmeTrimWidget
. Jest ona inna, niż pozostałe metody fill
używane przy dodawaniu widgetów do pasków narzędzi lub menu, ponieważ margines może być przeciągany z jednego obszaru do drugiego. Przekazywana jest też strona ('side'), po której umieszczony jest margines, co umożliwia dostosowanie wyświetlania widgetu na podstawie położenia, przez zmianę orientacji itp. Obecna implementacja po prostu zmienia wyświetlany tekst, aby odpowiadał on bieżącemu położeniu. Warto też zauważyć, jak obsługiwany jest cykl życia 'dispose'/'fill'. Występować będą wielokrotne wywołania dispose
i fill
, generowane przez zmiany środowiska roboczego (np. zmianę perspektywy lub przeciągnięcie marginesu na inną stronę).
W przykładowym kodzie nie uwzględniono jednak zależności menedżera układu marginesów od prawidłowej implementacji metody computeSize
elementu sterującego widgetu w marginesie. Widget musi być w stanie obliczyć i zwrócić 'preferowany' rozmiar, ponieważ jest to wykorzystywane w implementacji zarządzania układem, aby na przykład określić, ile miejsca potrzeba na określony obszar marginesu. Informacje na temat poprawnego implementowania metody computeSize
zawiera dokumentacja SWT.