Руководство разработчика
			
		
		Содержание 
		
		
			- 
				Обзор
				
			
 - 
				Указатель имён
				
					- 
					Пространства имён Нотус
					
 - 
					События
					
 - 
					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