Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Проектирование редактора документов

Читайте также:
  1. I. ДОКУМЕНТАЛИСТИКА, ДОКУМЕНТОВЕДЕНИЕ
  2. IV. Состав необходимых для государственного учета документов
  3. Oт редактора перевода
  4. V. Порядок представления заявителями документов для осуществления государственного учета
  5. VI. Правила оформления и предоставления пакета конкурсных документов
  6. X. ПРОЕКТИРОВАНИЕ НОВЫХ ГОРОДОВ
  7. А описания документов?
  8. АРХИВНЫЕ МАТЕРИАЛЫ (Масонские коллекции и собрания документов) орргб.
  9. Аудит учредительных документов.
  10. Бланки документов изготавливают

Рис. 2.4. Частичная иерархия класса Glyph

Глифу-родителю часто бывает нужно «знать», сколько места на экране зани­мает глиф-потомок, чтобы расположить его и остальные глифы в строке без пере­крытий (как показано на рис. 2.2). Операция Bounds возвращает прямоугольную область, занимаемую глифом, точнее, противоположные углы наименьшего прямо­угольника, содержащего глиф. В подклассах класса Glyph эта операция переопре­делена в соответствии с природой конкретного элемента.

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

Поскольку у глифов могут быть потомки, то нам необходим единый интерфейс для добавления, удаления и обхода потомков. Например, потомки класса Row - это глифы, расположенные в данной строке. Операция Insert вставляет глиф в по­зицию, заданную целочисленным индексом.1 Операция Remove удаляет заданный глиф, если он действительно является потомком.

Возможно, целочисленный индекс - не лучший способ описания потомков глифа. Это зависит от структуры данных, используемой внутри глифа. Если потомки хранятся в связанном списке, то бо­лее эффективно было бы передавать указатель на элемент списка. Мы еще увидим более удачное ре­шение проблемы индексации в разделе 2.8, когда будем обсуждать анализ документа.


 

 

 


Операция Child возвращает потомка с заданным индексом (если таковой су­ществует). Глифы типа Row, у которых действительно есть потомки, должны пользоваться операцией Child, а не обращаться к структуре данных потомка на­прямую. В таком случае при изменении структуры данных, скажем, с массива на связанный список не придется модифицировать операции вроде Draw, которые обходят всех потомков. Аналогично операция Parent предоставляет стандартный интерфейс для доступа к родителю глифа, если таковой имеется. В Lexi глифы хранят ссылку на своего родителя, a Parent просто возвращает эту ссылку.

Паттерн компоновщик

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

2.3. Форматирование

Мы решили, как представлять физическую структуру документа. Далее нужно разобраться с тем, как сконструировать конкретную физическую структуру, соответ­ствующую правильно отформатированному документу. Представление и формати­рование - это разные аспекты проектирования. Описание внутренней структуры не дает возможности добраться до определенной подструктуры. Ответственность за это лежит в основном на Lexi. Редактор разбивает текст на строки, строки - на ко­лонки и т.д., учитывая при этом пожелания пользователя. Так, пользователь может изменить ширину полей, размер отступа и положение точек табуляции, установить одиночный или двойной междустрочный интервал, а также задать много других параметров форматирования.1 В процессе форматирования это учитывается.

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

Таблица 2.2. Базовый интерфейс класса Compositor




Дата добавления: 2015-09-11; просмотров: 102 | Поможем написать вашу работу | Нарушение авторских прав

Организация каталога | Введение в паттерны проектирования | Введение в паттерны проектирования | Как решать задачи проектирования | Введение в паттерны проектирования | Введение в паттерны проектирования | Проектирование с учетом будущих изменений | Как решать задачи проектирования | Введение в паттерны проектирования | Структура документа |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав