Модель конструктора отчетов

advertisement
aМодель конструктора отчетов.
1. DrawableObject – корень иерархии.
1.1. Поля данных:
1.1.1. Указатель на графический контекст. Используется для отображения
объекта в его области вывода.
1.1.2. Границы области вывода объекта. Прямоугольник, описывающий
координаты левого верхнего угла, высоту и ширину прямоугольника.
1.1.3. Флаг выделенности объекта. Показывает имеет ли в данный момент
объект фокус ввода пользователя.
1.1.4. Цвет фона.
1.1.5. Параметры шрифта.
1.2. Конструкторы:
1.2.1. Конструктор с параметрами. Инициализирует все поля из 1.1.
1.3. Методы:
1.3.1. Метод прорисовки. Абстрактный. Не имеет параметров. Задает для всех
наследников возможность изображать себя в области вывода,
описываемой прямоугольником.
1.3.2. Метод установки новой границы области вывода.
1.3.3. Метод получения границы области вывода.
1.3.4. Методы реакции на ввод пользователя (мышь или клавиатура).
Виртуальные. Абстрактные.
1.3.5. Метод, сообщающий о том, содержится ли точка с указанными
координатами внутренней для данного объекта.
1.3.6. Метод получения/установки графического контекста. Перед рисованием
необходимо установить новый контекст, в случае изменения выводящего
устройства (обязательно при непосредственном выводе через активный
контекст).
1.3.7. Методы доступа к цвету фона (чтение/запись).
1.3.8. Методы доступа к параметрам шрифта (чтение/запись).
1.3.9. Метод доступа к ссылке на редактор свойств (чтение/запись)
2. DrawableContainer: DrawableObject – контейнер, содержащий коллекцию
объектов типа DrawableObject и обеспечивающий управление ими, а также
перерисовку все элементов, хранящихся в нем.
2.1. Поля данных:
2.1.1. Массив ссылок на объекты типа DrawableObject. Реализуется в виде
вектора или списка.
2.1.2. Ссылка на объект типа DrawableObject, которая указывает на активный
объект в данном контейнере (объект, имеющий фокус ввода).
2.1.3. Ссылка на родительский объект типа DrawableContainer.
2.2. Конструкторы:
2.2.1. Конструктор с теми же параметрами, что и у предка.
2.3. Методы:
2.3.1. Переопределенный метод прорисовки. Вызываются по очереди методы
прорисовки для каждого объекта из коллекции.
2.3.2. Метод удаления объекта из контейнера (по номеру и по ссылке).
2.3.3. Метод добавления объекта в контейнер.
2.3.4. Метод получения ссылки на объект контейнера по номеру или по
координатам.
2.3.5. Методы реакции на ввод пользователя. Реализуют пустые вирттуальные
методы родителя. Опрашивает все объекты, которыми он владеет, о
попадании в прямоугольную область. Если какой-то объект ответил
положительно вызвать метод реакции этого объекта. Если объект,
ответивший положительно, сам является контейнером, то процесс
повторяется до тех пор, пока не будет достигнут простой объект. Если ни
один объект в контейнере не ответил положительно, то произвести
действия, специфичные для данного контейнера.
2.3.6. Метод получения ссылки на активный объект.
2.3.7. Методы получения и установки индекса активного объекта в контейнере.
Если при попытке установить индекс активного объекта будет передан
индекс, больший, чем число объектов в контейнере, то выбрасывается
соответствующее исключение.
3. CustomText: DrawableObject – базовый класс для отображения текстовых
строк (одно- и многострочных).
3.1. Поля данных:
3.1.1. Текстовая строка. Содержит данные для отображения.
3.2. Конструкторы:
3.2.1. Конструктор параметрами: графический контекст, область вывода,
состояние активности (выбранности), текстовая строка.
3.3. Методы:
3.3.1. Методы доступа к строковому поля (чтение и запись)
Примечание: метод прорисовки здесь не реализуется.
4. ColonTitle: CustomText – колонтитул.
4.1. Поля данных:
4.1.1. Тип колонтитула: верхний или нижний.
4.1.2. Флаг изображения линии над (под) текстом. Зависит от типа колонтитула.
4.2. Конструкторы:
4.2.1. Конструктор: те же параметры, что и у родителя. Добавляется тип и флаг
изображения линии.
4.3. Методы:
4.3.1. Методы доступа к поля типа колонтитула (чтение/запись).
4.3.2. Методы доступа к флагу изображения линии над (под) колонтитулом
(чтение/запись).
4.3.3. Переопределенный метод прорисовки. Изображает текст и линию.
5. SimpleText: CustomText – изображает одно – или многострочный текст.
5.1. Поля данных:
5.2. Конструктор: тот же, что и у родителя
5.3. Методы:
5.3.1. Переопределенный метод прорисовки.
6. Table: DrawableObject – таблица. Содержит двумерный массив ячеек (ссылок
на объекты типа Cel)
6.1. Поля данных:
6.1.1. Двумерный массив объектов типа Cel.
6.1.2. Поля состояния таблицы и параметров ее отображения.
6.2. Конструкторы:
2
6.2.1. Тот же, что и у родителя с добавления параметра начальной размерности
таблицы.
6.3. Методы:
6.3.1. Методы чтения и установки размерности таблицы.
6.3.2. Методы чтения/записи ссылки на объект типа Cel по двойному индексу.
6.3.3. Переопределенный метод изображения, вызывающий метод изображения
для каждого объекта-ячейки таблицы.
7. Cel: DrawableObject – ячейка таблиы Cel.
7.1. Поля данных:
7.1.1. Текст хранимый ячейкой.
7.2. Конструкторы:
7.2.1. Тот же, что и у родителя но с параметром - текстовой строкой.
7.3. Методы:
7.3.1. Методы чтения записи текста ячейки.
7.3.2. Переопределенный метод изображения. Если ячейка выделена, что
изображается выделение, рисуется контур и текст ячейки.
8. Page: DrawableContainer – страница отчета. Содержит все элементы:
колонтитулы, простой текст, таблицы, графические изображения.
8.1. Поля данных:
8.1.1. Видимость верхнего и/или нижнего колонтитулов.
8.1.2. Ориентация страницы.
8.1.3. Отступы от краев страницы.
8.1.4. Номер страницы.
8.1.5. Флаг отображения номера страницы.
8.1.6. Флаг положения номера индикатора номера.
8.1.7. Размеры бумаги.
8.2. Конструкторы:
8.2.1. Тот же, что и у родителя, но с добавлением параметров, соответствующим
8.1.1.-8.1.6.
8.2.2. Конструктор копий. Используется создании новой страницы с такими же
параметрами.
8.3. Методы:
8.3.1. Методы доступа к полям 8.1.1-8.1.6 (чтение/запись).
8.3.2. Переопределенный метод изображения.
8.3.3. Чтение/Запись размеров бумаги.
9. PageContainer: DrawableContainer – управляет коллекцией страниц типа
Page.
9.1. Поля данных:
9.1.1. Массив объектов типа Page.
9.1.2. Индекс активной страницы.
9.1.3. Ссылка на объект типа Page выделенной страницы.
9.2. Конструкторы:
9.2.1. Тот же, что и у родителя.
9.3. Методы:
9.3.1. Добавление страницы.
9.3.2. Вставка страницы.
9.3.3. Удаление страницы.
3
9.3.4. Обмен страниц местами.
9.3.5. Переопределенный метод изображения.
9.3.6. Переопределенные методы реакции на возденйствия пользователя.
10. Image: DrawableObject – изображение.
10.1. Поля данных:
10.1.1. Объект-битовый образ.
10.2. Конструкторы:
10.2.1. Тот же, что и у родителя с добавлением ссылки на объект bitmap.
10.3. Методы:
10.3.1. Получение и установка нового битового образа.
10.3.2. Переопределенный метод отображения
11. AbstractPropertyEditor: CDialog – базовый класс для редакторов свойств
графических элементов страницы.
11.1. Поля данных:
11.1.1. Указатель на объект DrawableObject – объект, свойства которого нужно
редактировать.
11.2. Конструкторы:
11.2.1. Тот же, что и у родителя с добавлением параметра-указателя на
DrawableObject.
11.3. Методы:
11.3.1. Методы доступа к редактируемому объекту (чтение/запись)
12. TextPropertyEditor: AbstractPropertyEditor – редактор свойств для объектов
типа SimpleText.
12.1. Поля данных:
12.1.1. Текстовая строка.
12.2. Конструкторы:
12.2.1. Тот же, что и у родителя, но с добавлением параметра-строки.
12.3. Методы:
12.3.1. Методы доступа к текстовой строке (чтение/запись).
13. ColonTitlePropertyEditor: TextPropertyEditor – редактор свойств для
объектов типа ColonTitle.
13.1. Поля данных:
13.1.1. Флаг отображения линии.
13.2. Конструкторы:
13.2.1. Тот же, что и у родителя, но с добавлением флага отображения.
13.3. Методы:
13.3.1. Методы доступа к флагу отображения (чтение/запись).
14. Аналогично выглядят и классы для других объектов иерархии.
4
Диаграмма классов.
DrawableObject
DrawableContainer
Page
CustomText
PageCont
ainer
Cel
ColonTitle
Table
SimpleText
Image
5
Примечание: графический вывод производится не на через активный контекст
устройства окна, а на совместимый с ним, созданный в памяти. После прорисовки
активной страницы (по условию только одна страница может видна в некоторый
момент времени) PageContainer, зная, какую часть страницы нужно от отобразить,
копирует ее со вторичного битмэпа на первичный с помощью функции BitBlt().
6
Download