Form/Docu/ru/Views.odc

FormViews

DEFINITION FormViews;

	IMPORT Ports, Views, Controllers, Containers, FormModels;

	CONST minBorder = 4 * Ports.point; maxBorder = 100 * Ports.mm;

	TYPE
		View = POINTER TO ABSTRACT RECORD (Containers.View)
			(v: View) ThisModel (): FormModels.Model, EXTENSIBLE;
			(v: View) SetBorder (border: INTEGER), NEW, ABSTRACT;
			(v: View) Border (): INTEGER, NEW, ABSTRACT;
			(v: View) SetGrid (grid, gridFactor: INTEGER), NEW, ABSTRACT;
			(v: View) Grid (): INTEGER, NEW, ABSTRACT;
			(v: View) GridFactor (): INTEGER, NEW, ABSTRACT;
			(v: View) SetBackground (background: Ports.Color), NEW, ABSTRACT
		END;

		Directory = POINTER TO ABSTRACT RECORD
			(d: Directory) New (f: FormModels.Model): View, NEW, ABSTRACT
		END;

	VAR
		dir-, stdDir-: Directory;
		ctrldir-: Controllers.Directory;

	PROCEDURE Focus (): View;
	PROCEDURE FocusModel (): FormModels.Model;
	PROCEDURE RoundToGrid (v: View; VAR x, y: INTEGER);
	PROCEDURE New (): View;
	PROCEDURE Deposit;
	PROCEDURE SetDir (d: Directory);
	PROCEDURE SetCtrlDir (d: Containers.Directory);

END FormViews.


Модуль FormViews содержит стандартные отображения для моделей форм из FormModels.


CONST minBorder, maxBorder
Рамка отображения формы - минимальное среди всех расстояний между границами отображения и ограничивающими прямоугольниками внедренных отображений. Предпочитаемая рамка может быть выбрана из диапазона [minBorder .. maxBorder].


TYPE View (Views.View)
ABSTRACT

PROCEDURE (v: View) ThisModel (): FormModels.Model
EXTENSIBLE
Тип результата говорит сам за себя.

PROCEDURE (v: View) SetBorder (border: INTEGER)
NEW, ABSTRACT, Операция
Установка предпочитаемой рамки отображения (желаемое минимальное среди всех расстояний между границами отображения и ближайшим к ним внедрённым отображением).

Предусловия
border >= 0	20

Постусловия
border < minBoder
	v.border = minBorder
border > maxBorder
	v.border = maxBorder
minBorder <= border <= maxBorder
	v.border = border

PROCEDURE (v: View) Border (): INTEGER
NEW, ABSTRACT
Возвращает рамку отображения.

Постусловия
minBorder <= result <= maxBorder

PROCEDURE (v: View) SetGrid (grid, gridFactor: INTEGER)
NEW, ABSTRACT, Операция
Установка предпочтительной для отображения сетки grid (предпочитаемая сетка - сетка, по которой будут выровнены левые верхние углы всех внерённых отображений) и коэффициента сетки gridFactor (при показе сетки, каждая её gridFactor-я линия будет изображена пунктирной линией).

Предусловия
grid > 0	20
gridFactor > 0	21

Постусловия
v.Grid() = grid  &  v.GridFactor() = gridFactor

PROCEDURE (v: View) Grid (): INTEGER
NEW, ABSTRACT
Возвращает текущую сетку.

Постусловия
result > 0

PROCEDURE (v: View) GridFactor (): INTEGER
NEW, ABSTRACT
Возвращает текущий коэффициент сетки.

Постусловия
result > 0

PROCEDURE (v: View) SetBackground (background: Ports.Color)
NEW, ABSTRACT
Установка цвета фона формы. По умолчанию используется Ports.dialogBackground.


TYPE Directory
ABSTRACT
Фабрика отображений формы.

PROCEDURE (d: Directory) New (m: FormModels.Model): View
Интерфейс
Возвращает новое отображение на m.

Предусловия
m # NIL	20

Постусловия
result # NIL
result.ThisModel() = m


VAR dir, stdDir-: Directory	dir # NIL  &  stdDir # NIL
Фабрика и стандартная фабрика отображений форм.

VAR ctrldir-: Controllers.Directory	ctrldir # NIL
Фабрика диспетчеров форм, инсталлируемая модулем FormControllers во время загрузки.


PROCEDURE Focus (): View
Возвращает сфокусированное отображение формы, если таковое существует.

PROCEDURE FocusModel (): FormModels.Model
Возвращает модель сфокусированного отображения формы, если таковое существует.

PROCEDURE RoundToGrid (v: View; VAR x, y: INTEGER)
Округляет координаты (x, y) до ближайшей точки на сетке v.

Предусловия
v # NIL	20
x > 0  &  y > 0	21

Постусловия
x MOD v.grid = 0
y MOD v.grid = 0

PROCEDURE New (): View
Возвращает новое отображение формы на новой пустой модели формы, т. е. возвращает  FormViews.dir.New(FormModels.dir.New()).

PROCEDURE Deposit
Процедура Deposit создает новое отображение формы на новой пустой модели формы и помещает его в буфер обмена.
Deposit вызывается внутренне.

PROCEDURE SetDir (d: Directory)
Установка фабрики отображений форм.

Предусловия
d # NIL	20

Постусловия
dir = d

PROCEDURE SetCtrlDir (d: Containers.Directory)
Установка фабрики диспетчеров отображений форм.

Предусловия
d # NIL	20