Form/Docu/ru/Controllers.odc

FormControllers

DEFINITION FormControllers;

	IMPORT Views, Controllers, Containers, FormModels, FormViews;

	CONST noSelection = Containers.noSelection; noFocus = Containers.noFocus;

	TYPE
		Controller = POINTER TO ABSTRACT RECORD (Containers.Controller)
			form-: FormModels.Model;
			view-: FormViews.View;
			(c: Controller) ThisView (): FormViews.View, EXTENSIBLE;
			(c: Controller) Select (view: Views.View), NEW, ABSTRACT;
			(c: Controller) Deselect (view: Views.View), NEW, ABSTRACT;
			(c: Controller) IsSelected (view: Views.View): BOOLEAN, NEW, ABSTRACT;
			(c: Controller) GetSelection (): List, NEW, ABSTRACT;
			(c: Controller) SetSelection (l: List), NEW, ABSTRACT
		END;

		Directory = POINTER TO ABSTRACT RECORD (Controllers.Directory)
			(d: Directory) New (): Controller, EXTENSIBLE;
			(d: Directory) NewController (opts: SET): Controller, ABSTRACT
		END;

		List = POINTER TO RECORD
			next: List;
			view: Views.View
		END;

	VAR dir-, stdDir-: Directory;

	PROCEDURE Focus (): Controller;
	PROCEDURE Insert (c: Controller; view: Views.View; l, t, r, b: INTEGER);
	PROCEDURE SetDir (d: Directory);
	PROCEDURE Install;

END FormControllers.


Модуль FormControllers содержит стандартные диспетчеры для отображений форм из FormViews. Заметьте, что формы могут быть только немодальными, т. е. программа не будет ждать, пока пользователь закончит работать с формой. Говоря другими словами: управляет пользователь, а не компьютер.


TYPE Controller (Containers.Controller)
ABSTRACT
Стандартные диспетчеры для отображений форм.

form-: FormModels.Model	form # NIL
Модель отображения формы, с которым связан диспетчер.

view-: FormViews.View	view # NIL & view.ThisModel() = form
Отображение формы, с которым связан диспетчер.

PROCEDURE (c: Controller) ThisView (): FormViews.View
EXTENSIBLE
Ковариант, с соответствующим результатом функции.

PROCEDURE (c: Controller) Select (view: Views.View)
NEW, ABSTRACT
Добавляет отображение в текущее выделение, если оно ещё не выделено.

Предусловия
view in c.form	20
~(noSel IN c.opts)	21

Постусловия
c.IsSelected(view)
c.ThisFocus() = NIL

PROCEDURE (c: Controller) Deselect (view: Views.View)
NEW, ABSTRACT
Удаляет отображение из текущего выделения, если оно выделено.

Предусловия
view in c.form	20

Постусловия
~c.IsSelected(view)

PROCEDURE (c: Controller) IsSelected (view: Views.View): BOOLEAN
NEW, ABSTRACT
Определяет, выделено или нет данное отображение.

Предусловия
view # NIL	20
view in c.form	21

PROCEDURE (c: Controller) GetSelection (): List
NEW, ABSTRACT
Возвращает список выделенных отображений.

Постусловия
все отображения в списке принадлежат модели c.form

PROCEDURE (c: Controller) SetSelection (l: List)
NEW, ABSTRACT
Снимает текущее выделение и выделяет отображения из данного списка l.

Предусловия
все отображения в l принадлежат модели c.form	20


TYPE Directory
ABSTRACT
Фабрика диспетчеров форм.

PROCEDURE (d: Directory) New (): Controller
EXTENSIBLE
Ковариантное расширение Controllers.Directory.New.

PROCEDURE (d: Directory) NewController (opts: SET): Controller
ABSTRACT
Ковариантное расширение Controllers.Directory.NewController.


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


PROCEDURE Focus (): Controller
Если отображение формы обладает фокусом, возвращает его диспетчер, иначе возвращает NIL.

PROCEDURE Insert (c: Controller; view: Views.View; l, t, r, b: INTEGER)
Вставляет отображение view в отображение формы диспетчера c c ограничивающим прямоугольником (l, t, r, b). При необходимости, положение слегка корректируется (округляется) таким образом, чтобы его верхний левый угол лежал на сетке. Оданко размер view при этом не меняется.

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

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

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

PROCEDURE Install
Используется внутренне.