logo
Bolshakov_Poyasnitelnaya_zapiska

2.3.1.2 Типичный поток событий в графическом редакторе

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

Соответствующая диаграмма последовательности приведена в приложении В на рисунке В.2. Как видно из диаграммы, для того, что пользователь имел возможность выполнить команду, она должна быть выполняемой для текущего контекста. Контекст определяет действие AddMethodAction, в данной ситуации в качестве контекста AddMethodAction использует выделенный объект. Если выделенный объект является задачей (выделенными объектами в GEF являются контролеры), то команда считается выполнимой. Когда пользователь решает исполнить команду, у действия вызывается метод run. Задача действия – получить команду от контролера, в связи с чем он и делегирует ему эту задачу, а контролер в свою очередь обращается к специально разработанной для этого случая политике FlowLayoutEditPolicy, которая непосредственно создает команду (ShapeCreateCommand) по добавлению функции к задаче. Суть этой команды заключается в добавлении единожды созданной функции к задаче или удалении ее (при выполнении команды redo). Добавление функции к задаче происходит на уровне модели графического редактора, при этом согласно архитектуре GEF и структуре разработанного редактора, происходит уведомление контролера задачи о добавлении нового элемента в модель. Контролер сам сообщает библиотеке GEF о произошедших изменениях. GEF далее вызывает метод getModelChildren, чтобы узнать элементы модели, для которых нужно создать контролеры, которые будут агрегироваться в контролер задачи. При этом для создания фигур созданных контролеров функций GEF обращается к их методам createFigure. Фигура, возвращаемая из createFigure контролера функции будет добавлена на холст к фигуре задачи.

2.3.1.3 Реализация текстового редактора

Согласно выбранной технология разработки текстового редактора (Xtext) была разработана его грамматика, приведенная в приложении Б. Разработка грамматики на языке Xtext производилась на основе грамматики языка С стандарта ANSI C 1995 года грамматики 2006 года для инструмента ANTLR, которая в свою очередь была основана на грамматике С для инструмента Yacc [51] 1985 года. В грамматику были добавлены дополнительные конструкции, сама форма грамматики была адаптирована под нотацию Xtext.

Также были разработаны следующие компоненты, интегрируемые со сгенерированным Xtext текстовым редактором через технологию встраивания зависимостей Google Guice:

- модуль предоставление областей видимости для процесса линковки;

- модуль валидации для проверки корректности типов, использующий компонент TypeSystem;

- модуль предоставления названий (LabelProvider) для отображения названий элементов синтаксического дерева в окне отображения структуры документа.