Руководство разработчика
Содержание
-
Обзор
-
Указатель имён
-
Пространства имён Нотус
-
События
-
notus::view
-
notus::gdi
-
device
-
font
-
bitmap
-
image_list
-
notus::displays
-
window
-
window_frame
-
window_rectangle
-
dialog
-
menu
-
bitmap_display
-
notus::displays::controls
-
control
-
static
-
button
-
edit
-
list
-
notus::messages
-
notus::strategies
-
notus::managers
-
Примеры
-
Подгонка платформы
-
Traits
-
notus::impl
-
Events
-
impl::window
-
impl::window_frame
-
impl::dialog
-
impl::menu
-
impl::message
-
impl::controls
-
control
-
static
-
button
-
edit
-
list
-
impl::gdi
-
device
-
font
-
bitmap
-
image_list
* ... работа не закончена
Обзор
Этот раздел содержит обзор концепций библиотеки.
Дисплей/стратегия/модель (ДСМ) (англ. Display/Strategy/Model (DSM) )
Главной концепцией библиотеки является концепция дисплей/стратегия/модель (ДСМ).
-
Модель
- это данные приложения
-
Дисплей
- это устройство, способное отображать данные и принимать ввод пользователя
-
Стратегия - это логика взаимодействия между моделью, дисплеем и пользователем.
Компоненты ДСМ оформлены как параметры шаблона, объединяемые в одно целое combined с помощью notus::view
.
template<
typename Display
, typename
Strategy
, typename
Model
>
struct view;
view
обеспечивает пересылку событий от дисплея и модели к
подходящим стратегиям. Стратегии устроены как кортежи (tuples), поэтому несколько стратегий
могут быть заданы в одном view
. Например.
typedef
TUP::tuple< mouse_event_strategy,
paint_strategy > my_strategy;
typedef
view< window,
my_strategy, some_data
> my_dsm_view;
Стратегии могут быть вложенными.
typedef
TUP::tuple< keyboard_event_strategy,
my_strategy > my_extended_strategy;
Перечень готовых дисплеев см. notus::displays.
Вы всегда можете сделать собственный дисплей
или произвести его от уже существующего с помощью наследования.
Весь ум приложения заключён в стратегиях. Стратегии определяют обработчики
событий. view
посылает события этим обработчикам. Заодно view
посылает
ссылку на себя. Используя эту ссылку, стратегии могут могут получить доступ к объекту view
,
моделям и дисплеям.
Модель - активный объект в Нотус. Если приложение обновляет данные модели,
генерируется событие обновления данных. Если пользователь задал стратегию для событий такого типа,
view
вызывает эту стратегию. Типичный сценарий может выглядеть так.
-
Приложение обновляет данные модели.
-
view
посылает событие обновления данных заданной пользователем стратегии.
-
Стратегия форматирует форматирует данные модели для передачи сущности, которую можно назвать дисплеем.
-
Когда форматирование выполнено, стратегия использует дисплей
для отображения отформатированных данных.
Менеджеры
Пространство имён managers предназначено для построения высокоуровневых GUI-конструкций
представляющих собой типичные случаи использования. Основные строительные блоки - notus::view
-ы
и другие менеджеры. Менеджер есть конкретный дизайн для определённого случая использования
или семейства случаев.
Жизненный цикл объекта
Как быть с жизненным циклом объектов? Вопрос об отношении жизненного цикла физических объектов
GUI, таких как HWND в Win32 или wxWindow в wxWindows, к жизненному циклу
экземпляров классов Нотус.
Нотус использует следующий набор правил:
-
Объект Нотус всегда соединён с валидным физическим объектом.
-
Физический объект может быть соединён с объектом Нотус, а может и не быть соединён.
-
Платформа поддерживает счётчики ссылок для физических объектов. Когда значение счётчика
равно 0, объект автоматически удаляется.
-
При создании объекта-потомка счётчик ссылок его родителя увеличивается.
-
При удалении объекта-потомка счётчик ссылок его родителя уменьшается.
-
Физические объекты создаются со значением счётчика ссылок, равным 1.
-
Когда Нотус велит платформе уничтожить физический объект, платформа
уменьшает свой счётчик ссылок. Вся эта функциональность реализована
в пространстве имён notus::impl.
© Copyright Евгений Гладышев, 2004