Рабочая среда изнутри

Рабочая среда предоставляет широкий набор классов и интерфейсов для создания сложных пользовательских интерфейсов. К счастью, для создания простого проекта не требуется разбираться во всех них. Мы начнем со знакомства с простыми концепциями и понятиями пользовательского интерфейса рабочей среды и с их структурой.

Рабочая среда

Термин рабочая среда служит для обозначения "окна, открывающегося при запуске платформы". Давайте более внимательно изучим визуальные компоненты, составляющие рабочую среду.

Рабочая среда с тремя панелями и редактором на одной странице

Далее мы будем употреблять термин "рабочая среда" для обозначения окна рабочей среды (IWorkbenchWindow). Окно рабочей среды является главным окном в рабочей среде. Оно содержит меню, панель инструментов, строку состояния, панель быстрого доступа и страницы. Обычно нет необходимости программировать в окне рабочей среды. Вы просто должны знать, что здесь есть.

Примечание:  Можно открывать несколько окон рабочей среды; однако, каждое окно является самостоятельной областью, содержащей редакторы и панели, поэтому мы сосредоточимся на одном окне рабочей среды.

С точки зрения пользователя рабочая среда содержит панели и редакторы. Для реализации рабочей среды используются и другие классы.  

Страница

Внутри окна рабочей среды находится одна страница (IWorkbenchPage), содержащая компоненты. Страницы являются механизмом реализации группирования компонентов. Обычно нет надобности программировать на странице, но вы будете сталкиваться с ней в контексте отладки и программирования.

Проекции

Проекции - это еще один уровень организации данных внутри окна рабочей среды.   Проекция содержит набор панелей, их макет и допустимые действия для определенной пользовательской задачи.   Пользователи могут переключаться между проекциями по мере перемещения между задачами.   С точки зрения реализации активная проекция управляет тем, какие панели отображать на странице рабочей среды, а также задает их размеры и расположение.  Редакторы не зависят от изменений в проекции.

Панели и редакторы

Панели и редакторы выводят нас из области обсуждения подробностей реализации в область обычного программирования модулей. При добавлении визуального компонента к рабочей среде необходимо решить, хотите ли вы использовать панель или редактор. Как это узнать?

В любом случае создание панели или редактора похоже на другие распространенные процедуры.

В ходе этого процесса страница рабочей среды будет оповещать заинтересованных получателей об открытии, активации, деактивации и закрытии панелей и редакторов, которые она содержит.

Выглядит просто?  Возможно, так оно и есть. В этом и заключается красота панелей и редакторов рабочей среды. Они всего лишь являются держателями виджетов, и могут настолько простыми или сложными, насколько вы захотите. При создании панели "hello world" мы рассмотрели самый простой вариант панели. Давайте еще раз взглянем на него после того, как узнали немного больше:

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
   import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
   public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // активирует виджет. Для метки это не
         // важно, но для более сложных наборов виджетов     
         // придется выбирать, какой из них станет текущим.
      }
   }

Обратите внимание, что нам не пришлось применять метод dispose(), так как мы всего лишь создали метку в методе createPartControl(parent). Если бы мы выделили какие-либо ресурсы пользовательского интерфейса, например, изображения или шрифты, их необходимо было бы удалить. Расширив класс ViewPart, мы наследовали реализацию "ничего не делать" метода dispose().