Программы просмотра

В чем заключается преимущество применения программ просмотра, если элементы пользовательского интерфейса рабочей среды, такие как панели, редакторы, мастеры и окна диалога, можно реализовать непосредственно с помощью управляющих элементов SWT?   

Программы просмотра позволяет создавать управляющие элементы, не запрещая при этом работу с объектами модели. Непосредственное применение управляющего элемента SWT предусматривает преобразование всех объектов в строки и изображения, поддерживаемые SWT. Программы просмотра выполняют роль адаптеров управляющих элементов SWT. Они управляют общим исходным кодом обработки событий, связанных с управляющими элементами, который в противном случае потребовалось бы реализовать дополнительно.  

Впервые понятие программы просмотра было упомянуто при добавлении панели утилиты readme в класс ReadmeSectionsView.

   public void createPartControl(Composite parent) {
      viewer = new ListViewer(parent);
      ...
   }
Примечание: Программы просмотра предназначены для реализации как панелей рабочей среды, так редакторов. Понятие программы просмотра в данном случае не ограничивается только реализацией панелей. Например, класс TextViewer применяется для реализации многих редакторов рабочей среды и модулей.

Стандартные программы просмотра

JFace предоставляет программы просмотра для большинства нетривиальных управляющих элементов SWT. Как правило, программы просмотра применяются для работы с управляющими элементами в виде списков, деревьев и таблиц, а также текстовыми управляющими элементами.  

Для каждой программы просмотра должен быть указан связанный управляющий элемент SWT. Его можно создать неявно, указав родительский класс Composite в соответствующем стандартном конструкторе, либо явным образом создать и добавить в конструктор программы просмотра.

Программы просмотра списков

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

Эти программы просмотра сохраняют список объектов домена (называемых элементами) и отображают их в соответствующих управляющих элементах SWT. Программа просмотра списков может извлечь текстовую метку, связанную с любым элементом списка. Метка передается интерфейсом ILabelProvider, который можно связать с программой просмотра. Программа просмотра списков задает обратное преобразование между управляющими элементами SWT и элементами, поддерживаемыми клиентом программы просмотра.

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

Для реализации функций фильтрации и сортировки программе просмотра назначается сортировщик (ViewerSorter) и фильтр (ViewerFilter). (Их можно указать для программ просмотра структур, таблиц и списков). Клиенту необходимо только предоставить класс для сравнения или фильтрации объектов из списка. Программа просмотра обрабатывает сведения о заполнении списка в соответствии с указанными порядком и параметрами фильтра, а также обновляет список по мере добавления и удаления элементов.

Программы просмотра не предполагают расширение клиентами. Программу просмотра можно настроить, указав для нее собственные источники содержимого и меток.

Программа просмотра ListViewer преобразует элементы из списка в управляющий элемент SWT List.

Программа просмотра TreeViewer отображает объекты, входящие в состав структуры, в качестве управляющего элемента SWT Tree. Кроме того, она обрабатывает сведения о развернутых и свернутых элементах. Для управляющих элементов SWT, описывающих деревья различных типов (простое дерево, дерево таблиц, дерево переключателей), предусмотрены разные программы просмотра.

Программа просмотра TableViewer, во многом аналогичная программе просмотра списков, позволяет просматривать сведения о каждом элементе таблицы в нескольких столбцах. Программы просмотра таблиц значительно расширяют функциональность управляющего элемента таблицы SWT, обеспечивая возможность редактирования ячейки. Специальные редакторы ячеек позволяют пользователю вносить изменения в ячейки таблицы с помощью переключателей, окон диалога или текстовых управляющих элементов. Программа просмотра таблиц управляет созданием и размещением таких управляющих элементов в соответствии с действиями пользователя.   Для этой цели применяются классы CellEditor, такие как TextCellEditor и CheckboxCellEditor. Виртуальная таблица заполняется только в ходе просмотра; программа просмотра обрабатывает заданное число результатов независимо от создаваемых данных. База данных отправляет "медленный" запрос JIT и одновременно обрабатывает только предопределенное число результатов.

Текстовая программа просмотра

Текстовые управляющие элементы обладают общей семантикой, такой как способ обработки двойного щелчка, операция отмены, выделение цветом, а также навигация по строкам или индексу. Программа просмотра TextViewer представляет собой адаптер управляющего элемента SWT StyledText. Текстовые программы просмотра предоставляют модель документа клиенту и управляют преобразованием документа в текстовую информацию, отображаемую текстовым управляющим элементом в соответствии с заданным стилем.

Более подробная информация о программах просмотра текста приведена в разделе Редакторы рабочей среды.

Архитектура программы просмотра

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

Входные элементы

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

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

Программы просмотра содержимого

Программа просмотра содержимого получает информацию из входного элемента с помощью заданного протокола. Для заполнения связанных управляющих элементов и отображения сведений о входных элементах программы просмотра содержимого применяют два специальных вспомогательных класса IContentProvider и ILabelProvider.

IContentProvider предоставляет основной протокол цикла существования, необходимый для связывания источника содержимого и входного элемента, а также обработки изменений входного элемента. Для программ просмотра разных типов реализованы собственные настроенные источники содержимого. Наиболее общим является источник содержимого IStructuredContentProvider, который предоставляет список объектов в соответствии с входным элементом. Он применяется в программах просмотра списков (списки, таблицы и структуры). В общем случае источнику содержимого известен способ преобразования между входными элементами и ожидаемым содержимым программы просмотра.

ILabelProvider идет еще дальше. В соответствии с конкретным содержимым (извлекается из входного элемента и источника содержимого) он создает элементы пользовательского интерфейса, такие как имена и значки. Эти элементы необходимы для отображения содержимого в программе просмотра. Источники меток повышают эффективность использования ресурсов, поскольку один и тот же экземпляр значка применяется для всех одинаковых типов в программе просмотра.

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

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

Источник меток может показывать не только текст и значки. JFace содержит несколько классов и интерфейсов для поддержки наиболее востребованных возможностей. Следующие классы поддерживаются TableViewer, AbstractTreeViewer и TableTreeViewer.

В Eclipse 3.1 цвета панели можно изменять двумя способами - с помощью источника меток и декоратора. Декораторы изменяют все панели, показывающие определенный тип, тогда как источники меток - только одну. Если вы используете декораторы, убедитесь, что их значения могут быть установлены на странице Цвета и шрифты.

Программы просмотра и рабочая среда

Гибкость, обеспечиваемую программами просмотра, источниками содержимого и источниками меток, можно продемонстрировать, рассмотрев особенности их применения в рабочей среде.

WorkbenchContentProvider представляет собой структурированный источник содержимого, который получает содержимое из входного элемента, запрашивая его дочерние элементы. Для реализации базовой функции снова применяется концепция адаптеров. В ответ на запрос списка элементов, содержащегося во входном элементе, WorkbenchContentProvider получает IWorkbenchAdapter, связанный с входным элементом. Если IWorkbenchAdapter, связанный с входным элементом, зарегистрирован, источник содержимого предполагает, что его дочерние элементы доступны для обращения. Кроме того, WorkbenchContentProvider выполняет действия, необходимые для синхронизации связанной программы просмотра с изменениями, вносимыми в рабочую область.  

Источник меток WorkbenchLabelProvider выполняет поиск текста и изображения, связанных с объектом, в соответствии с полученным IWorkbenchAdapter. Преимущества концепции источника меток, предусматривающей кэширование часто применяемых изображений, наиболее очевидны при работе с объектами рабочей среды. Например, загрузив изображение, связанное с объектом IProject, источник меток WorkbenchLabelProvider может сохранить его в кэше и впоследствии использовать для всех объектов IProject, отображаемых в программе просмотра.

Определив общий адаптер IWorkbenchAdapter и зарегистрировав его для разных платформ, можно обеспечить правильное представление этих типов в большинстве общих программ просмотра и панелях рабочей среды.