Std/Docu/ru/Tables.odc

StdTables
ENGLISH
Редакция перевода: Ф.В.Ткачев, 2010-10-31.

DEFINITION StdTables;

	IMPORT
		Ports, Dialog, Views, Properties, Controls;

	CONST
		line = 0DX;
		deselect = -1; select = -2; changed = -3;
		layoutEditable = 0; dataEditable = 1; selectionStyle = 2;
		noSelect = 0; cellSelect = 1; rowSelect = 2; colSelect = 3; crossSelect = 4;

	TYPE
		Table = RECORD
			rows-, cols-: INTEGER;
			(VAR tab: Table) SetSize (rows, cols: INTEGER), NEW;
			(VAR tab: Table) SetItem (row, col: INTEGER; item: Dialog.String), NEW;
			(VAR tab: Table) GetItem (row, col: INTEGER; OUT item: Dialog.String), NEW;
			(VAR tab: Table) SetLabel (col: INTEGER; label: Dialog.String), NEW;
			(VAR tab: Table) GetLabel (col: INTEGER; OUT label: Dialog.String), NEW;
			(VAR tab: Table) HasSelection (): BOOLEAN, NEW;
			(VAR tab: Table) GetSelection (OUT row, col: INTEGER), NEW;
			(VAR tab: Table) Select (row, col: INTEGER), NEW;
			(VAR tab: Table) Deselect, NEW;
			(VAR tab: Table) SetAttr (l, t, r, b: INTEGER; style: SET; weight: INTEGER; color: Ports.Color), NEW;
			(VAR tab: Table) GetAttr (row, col: INTEGER; 
										OUT style: SET; OUT weight: INTEGER; OUT color: Ports.Color), NEW
		END;

		Prop = POINTER TO RECORD (Properties.Property)
			layoutEditable, dataEditable: BOOLEAN;
			selectionStyle: INTEGER;
			(p: Prop) IntersectWith (q: Properties.Property; OUT equal: BOOLEAN)
		END;

		Directory = POINTER TO ABSTRACT RECORD
			(d: Directory) NewControl (p: Controls.Prop): Views.View, ABSTRACT, NEW
		END;


	VAR
		dir-, stdDir-: Directory;
		text: Dialog.String;
		dlg: RECORD
			layoutEditable, dataEditable: BOOLEAN;
			selectionStyle: Dialog.List
		END;

	PROCEDURE InitDialog;
	PROCEDURE Set;
	PROCEDURE Guard (idx: INTEGER; VAR par: Dialog.Par);
	PROCEDURE Notifier (idx, op, from, to: INTEGER);
	PROCEDURE SetDir (d: Directory);
	PROCEDURE DepositControl;

END StdTables.

Модуль StdTables реализует простой элемент управления табличного вида (grid view). Для создания новых таблиц экспортируется фабричныйобъект (StdTables.dir). В качестве интеракторов для таблиц используются записи типа StdTables.Table.

Типичная команды меню:
	"Insert Table"	""	"StdTables.DepositControl; StdCmds.PasteView"	"StdCmds.PasteViewGuard"
	
Редактор свойств для StdTables такой же, как и для обычных элементов управления. Поля Link, Label, Guard и Notifier используются как обычно. В дополнение к редактору свойств для таблиц имеется специальный диалог, где можно выбрать способ визуализации выделения в таблице. Кроме того, там можно задать, будет ли формат таблицы (ширина столбцов) редактируемым, и будут ли доступны для редактирования данные в ячейках.

CONST line
Символ новой строки для заголовков столбцов, если заголовок должен быть в несколько строк.

CONST deselect
Код операции для процедуры-уведомителя. Указывает, что было снято выделение с ячейки в позиции row (ряд) =from и column (столбец)=to.

CONST select
Код операции для процедуры-уведомителя. Указывает, что пользователь выделил ячейку в позиции row (ряд)=from и column (столбец)=to.

CONST changed
Код операции для процедуры-уведомителя. Указывает, что пользователь изменил содержимое ячейки в позиции row (ряд)=from и column (столбец) =to.

CONST layoutEditable
Элемент из множества valid свойства элемента управления (см. поле Prop.valid прим. ред.). Определяет, справедливо ли свойство формат редактируем.

CONST dataEditable
Элемент из множества valid для некоторого свойства элемента управления. Определяет, справедливо ли свойство данные редактируемы.

CONST selectionStyle
Элемент из множества valid для некоторого свойства элемента управления. Определяет, справедливо ли свойство стиль выделения.


CONST noSelect, cellSelect, rowSelect, colSelect, crossSelect
Константы (возможные значения) для свойства стиль выделения.


TYPE Table
Интеракторы для табличных элементов управления.

rows-, cols-: INTEGER		(rows >= 0) & (cols >= 0)
Количество рядов и столбцов в таблице.

PROCEDURE (VAR tab: Table) SetSize (rows, cols: INTEGER), NEW
Устанавливает размер таблицы.

Предусловие
20	(rows >= 0) & (cols >= 0)
21	((cols > 0) OR ((cols = 0) & (rows = 0))

PROCEDURE (VAR tab: Table) SetItem (row, col: INTEGER; item: Dialog.String), NEW
Устанавливает содержимое ячейки в ряду row и столбце col в значение item.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

PROCEDURE (VAR tab: Table) GetItem (row, col: INTEGER; OUT item: Dialog.String), NEW
Возвращает содержимое ячейки в ряду row и столбце col.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

PROCEDURE (VAR tab: Table) SetLabel (col: INTEGER; label: Dialog.String), NEW
Устанавливает заголовок столбца col. Каждое вхождение в label символа StdTables.line начинает новую строку.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

PROCEDURE (VAR tab: Table) GetLabel (col: INTEGER; OUT label: Dialog.String), NEW
Возвращает заголовок столбца col.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

PROCEDURE (VAR tab: Table) HasSelection (): BOOLEAN, NEW
Сообщает, есть ли в таблице выделенная ячейка.

PROCEDURE (VAR tab: Table) GetSelection (OUT row, col: INTEGER), NEW
Возвращает координаты (строку и столбец) выделенной ячейки таблицы.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize
21	tab.HasSelection()

PROCEDURE (VAR tab: Table) Select (row, col: INTEGER), NEW
Выделить позицию row, col.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

Постусловие
tab.HasSelection() = TRUE


PROCEDURE (VAR tab: Table) Deselect, NEW
Remove current selection in table, if any. 
Снимает в таблице текущее выделение, если оно есть.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize

Постусловие
tab.HasSelection() = FALSE

PROCEDURE (VAR tab: Table) SetAttr (l, t, r, b: INTEGER; style: SET; weight: INTEGER; color: Ports.Color), NEW
Устанавливает атрибуты для диапазона ячеек. style и weight влияют на шрифт текста в ячейке, а color  это цвет текста в ячейке. (Подробнее о параметрах style и weight см. Fonts.Font.) Диапазон ячеек задается следующим образом: колонка l и ряд t  позиция верхней левой ячейки, колонка r и ряд b  позиция нижней правой ячейки диапазона.


PROCEDURE (VAR tab: Table) GetAttr (row, col: INTEGER; OUT style: SET; OUT weight: INTEGER; OUT color: Ports.Color), NEW
Возвращает текущие значения атрибутов для ячейки таблицы в позиции row, col.

Предусловие
20	Ранее должна была быть вызвана процедура SetSize


TYPE Prop
Свойства, специфичные для таблиц.

layoutEditable, dataEditable: BOOLEAN
Ширина колонок может редактироваться пользователем; данные в ячейках таблицы могут редактироваться пользователем.

selectionStyle: INTEGER
Визуальный стиль выделения:
noSelect: 	нет визуального выделения
cellSelect: 	подсвечена выделенная ячейка
rowSelect: 	подсвечены все ячейки в выделенном ряду
colSelect: 	подсвечены все ячейки в выделенном столбце
crossSelect:	подсвечены все ячейки в выделенных ряду и столбце

PROCEDURE (p: Prop) IntersectWith (q: Properties.Property; OUT equal: BOOLEAN)
Заменяет свойства p на пересечение свойств p и q. Если они равны, equal устанавливается в TRUE.


TYPE Directory
Новые таблицы могут создаваться с помощью фабричного объекта StdTables.dir.

PROCEDURE (d: Directory) NewControl (p: Controls.Prop): Views.View, ABSTRACT, NEW
Создает новую таблицу, используя свойства p.


VAR dir-, stdDir-: Directory		dir # NIL, stdDir # NIL, stable stdDir = d
Фабричный объект и стандартный фабричный объект для таблиц.

VAR text: Dialog.String		имеет смысл только при редактировании ячейки
Содержимое ячейки, редактируемой в данный момент.


VAR dlg: RECORD
Интерактор для диалога свойств таблицы.

PROCEDURE InitDialog
Инициализировать диалог свойств таблицы.

PROCEDURE Set
Применить к таблице свойства, выбранные в диалоге свойств таблицы.

PROCEDURE Guard (idx: INTEGER; VAR par: Dialog.Par)
Охрана для диалога свойств таблицы.

CASE idx OF 
0: флаг Разметка редактируема
1: флаг Данные редактируемы
2: список Стиль выделения
END

PROCEDURE Notifier (idx, op, from, to: INTEGER)
Уведомитель для диалога свойств таблицы.

CASE idx OF 
0: флаг Разметка редактируема
1: флаг Данные редактируемы
2: список Стиль выделения
END

PROCEDURE SetDir (d: Directory)
Установить фабричный объект.

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

Постусловие
stdDir' = NIL
	stdDir = d
dir = d

PROCEDURE DepositControl
Команда, ставящая новую таблицу в глобальную очередь.