Środowisko komponentów

Środowisko komponentów, udostępniając proste interfejsy API dla widoków i edytorów, zwanych również częściami, umożliwia zagnieżdżanie i składanie istniejących części. Interfejs API środowiska komponentów pozwala klientom na tworzenie instancji części wewnątrz dowolnych elementów złożonych SWT, poprawia niezawodność i odporność na przecieki przez ustawienie części w taki sposób, aby komunikowały się z interfejsami lokalnymi dostępnymi w serwisie zamiast odwoływać się do obiektów globalnych, a także umożliwia klientom rozszerzenie zestawu interfejsów dostępnych w serwisie oraz zapewnia im środowisko do tworzenia własnych komponentów wielokrotnego użytku za pomocą tego samego interfejsu API, który jest dostępny dla widoków i edytorów. Środowisko komponentów pozwala także na konstruowanie i niszczenie części za pomocą operacji niepodzielnych oraz umożliwia istniejącym częściom używanie nowych interfejsów serwisu.

Widok NameViewNew

W tym prostym przykładzie zaprezentowano widok, który ustawia swoją nazwę, tytuł, podpowiedź i obraz, a także pokazuje, w jaki sposób napisać edytor lub widok za pomocą środowiska komponentów. Wyświetla on źródło przy użyciu interfejsu API komponentu. Nowym częściom można nadać argumenty w ich konstruktorze bez konieczności implementowania konkretnego interfejsu. Dana część nie musi także dziedziczyć z konkretnej klasy bazowej.

/**
 * Przykładowy widok, który ustawia swoją nazwę i podpowiedź oraz swój obraz i opis treści. Widok
 * używa niestandardowego obrazu dostarczanego przez moduł dodatkowy.
 *
 * @since 3.1
 */
public class NameViewNew {
    /**
     * Konstruktor komponentu. Nie należy wywoływać bezpośrednio.
     */
    public NameViewNew(Composite parent, INameable name, IPluginImages images) {
        name.setName("Nazwa widoku (Nowy)");
        name.setContentDescription("opis treści");
        name.setTooltip("To jest podpowiedź");
        name.setImage(images.getImage("icons/sample.gif"));
       
        // Tworzenie przykładowej treści widoku
        Label content = new Label(parent, SWT.NONE);
        content.setText("Treść widoku");
    }
}

Należy zwrócić uwagę, że argumenty zawarte w konstruktorze widoku są od razu umieszczone w kontekście. Na przykład w interfejsie IPluginImages nie trzeba określać, do którego modułu dodatkowego należy widok. Interfejsy są także odporne na przecieki. W tym przykładzie przydzielanie obrazu widoku odbywa się automatycznie za pomocą implementacji interfejsu INameable, więc sam widok nie musi implementować metody utylizacji.

Warto zauważyć, że interfejs API jest taki sam zarówno dla widoków, jak i edytorów. Innymi słowy, gdyby klasa NameViewNew została zarejestrowana za pomocą punktu rozszerzenia org.eclipse.ui.editors, mogłaby zostać użyta jako edytor bez dalszych modyfikacji.