Описание пользователя
Глава 3. Использование стандартных модулей автокомпиляции
§3.5. Окно редактора модели
§3.5.6. Настроечные параметры блока
Описывается добавление в модель параметров, которые пользователь сможет изменять в окне настройки блока, а также организация этого окна.
Величины, участвующие в расчете, выполняемом блоком, можно условно разделить на две категории: переменные и параметры. Переменные, как правило, изменяются часто, и значения их приходят от других блоков схемы. Параметры либо не изменяются вообще, либо изменяются крайне редко, и, чаще всего, задаются пользователем. Разумеется, это деление достаточно условно. Рассмотрим, например, блок, задача которого – выдать на выход «y» значение входа «x», умноженное на некоторую константу «K» (в модели блока будет записан оператор «y=K*x;»). Вход x и выход y блока должны быть статическими переменными – только статические переменные могут быть входами и выходами. Параметр K тоже можно сделать входом блока и подавать на него значение, например, с поля ввода. Однако, поскольку K меняется редко, загромождать схему дополнительным полем ввода и связью, соединенной с ним, может оказаться не лучшей идеей. Будет гораздо удобнее, если значение K можно будет вводить в отдельном окне, открывающемся, например, по двойному щелчку на блоке. Большинство стандартных блоков в RDS позволяют задавать свои параметры именно таким образом, при помощи предусмотренной для каждого блока функции настройки. Такие параметры называют настроечными, а окно, в котором они вводятся, окном настройки блока. Стандартный модуль автокомпиляции позволяет достаточно простыми средствами добавлять в блок настроечные параметры и создавать окна с полями ввода, в которых пользователь сможет эти параметры задавать.
Рис. 344. Настроечные параметры блока
Настроечные параметры блока и поля ввода для их задания описываются на вкладке «» дополнительной панели окна редактора модели (рис. 344). В верхней части вкладки вводится список самих параметров, в нижней задается состав полей ввода окна настройки (горизонтальную границу раздела между этими двумя списками можно перемещать вверх и вниз левой кнопкой мыши). Как правило, для каждого параметра в окне предусматривают поле ввода, однако, это не обязательно – некоторые параметры можно оставить без возможности редактирования пользователем.
Список параметров блока в верхней части вкладки состоит из трех колонок:
- «» – имя поля, которое будет создано в классе блока для хранения этого параметра. Это имя должно удовлетворять требованиям языка C++ (содержать только латинские буквы, цифры и знак подчеркивания и не начинаться с цифры) и не должно совпадать с именами статических и динамических переменных блока.
- «» – тип параметра. Поддерживаются типы «double» (вещественное число), «int» (целое число), «BOOL» (логический тип, используемый в Windows), «COLORREF» (цвет, используемый в Windows) и «rdsbcppString» (собственный тип для работы со строками, используемый модулем автокомпиляции).
- «» – исходное значение параметра, которое он получает при подключении модели к блоку. Значение параметра может быть позднее изменено пользователем, если в окно настройки для этого параметра будет добавлено поле ввода.
Непосредственно под списком находятся кнопки, позволяющие добавлять, удалять и изменять параметры:
| Кнопка | Действие |
|---|---|
| Переместить выбранный параметр на одну позицию вверх по списку. | |
| Переместить выбранный параметр на одну позицию вниз по списку. | |
| Добавить новый параметр (открывает отдельное окно). | |
| Изменить выбранный параметр (открывает отдельное окно). | |
| Удалить выбранный параметр. |
Порядок параметров в списке никак не отражается на работе модели, он нужен только для визуального упорядочения этих параметров в редакторе.
При добавлении нового параметра в список открывается окно, изображенное на рис. 345. В его верхней части задается имя поля внутри класса блока, в котором будет храниться параметр, тип этого параметра (выбирается из выпадающего списка) и его исходное значение. Для параметров строкового типа там также размещается флажок, разрешающий выгрузку текста параметра в файл перевода схемы. В нижней части окна, установив флажок «», можно автоматически создать для добавляемого параметра поле ввода в окне настройки. Под этим флажком описывается тип поля ввода, его заголовок, размер и т.п. – все эти параметры будут объяснены далее, когда речь пойдет об окне настроек. Поле ввода для параметра не обязательно создавать вместе с самим параметром, его можно будет добавить позже.
Рис. 345. Окно добавления нового параметра
В окне редактирования уже существующего параметра (рис. 346) можно изменить только имя, тип и значение параметра. Параметры его поля ввода в этом окне изменить нельзя – после создания это поле нужно редактировать в списке в нижней части вкладки.
Рис. 346. Окно редактирования существующего параметра
Нижнюю часть вкладки занимает список полей ввода окна настройки блока. Список выводится в виде дерева – каждое поле ввода соединено линией с содержащим его элементом окна. Если в окно не были добавлены вкладки, все поля ввода будут расположены в списке друг под другом и соединены линиями с элементом «» (рис. 347 а). Если же вкладки были добавлены, каждое поле ввода в списке будет соединено с символом своей вкладки (рис. 348 а).

(а)

(б)
Рис. 347. Список полей ввода окна без вкладок (а) и внешний вид окна (б)

(а)

(б)
Рис. 348. Список полей ввода окна с вкладками (а) и внешний вид окна (б)
Для каждого поля ввода в списке изображается значок его типа, имя переменной, с которой связано поле, и, в скобках, заголовок этого поля, который видит пользователь. Порядок полей и вкладок в списке определяет их порядок в окне: поля будут располагаться в окне сверху вниз в том же порядке, что и в списке, а вкладки – слева направо. Модуль автокомпиляции поддерживает следующие типы полей ввода:
| Значок в списке | Описание | Внешний вид | Допустимые типы параметров |
|---|---|---|---|
| «» – простое поле ввода | все типы | ||
| «» – поле ввода со стрелками для увеличения и уменьшения значения | double, int | ||
| «» – поле ввода, в которое можно как вводить значение с клавиатуры, так и выбирать его из выпадающего списка | ![]() |
все типы | |
| «» – поле ввода, в котором можно выбирать значение из выпадающего списка (ввести с клавиатуры произвольное значение нельзя) | ![]() |
все типы | |
| «» – флажок, который можно включать и выключать (заголовок этого поля всегда располагается справа от самого флажка) | BOOL | ||
| «» – кнопка, нажатие на которую открывает стандартный диалог выбора цвета | COLORREF | ||
| «» – поле ввода, занимающее всю ширину окна или вкладки и позволяющее ввести несколько строк текста | ![]() |
rdsbcppString | |
| «» – поле ввода, в которое можно ввести имя файла с клавиатуры или выбрать это имя в стандартном диалоге открытия файла, вызываемом кнопкой с многоточием | rdsbcppString | ||
| «» – поле ввода, в которое можно ввести имя файла с клавиатуры или выбрать это имя в стандартном диалоге сохранения файла, вызываемом кнопкой с многоточием | rdsbcppString | ||
| «» – текстовая надпись, не имеющая поля ввода и не связанная с каким-либо настроечным параметром | — |
Для логических параметров (параметров типа BOOL) можно не только создавать отдельные поля ввода, но и использовать их для разрешения и запрещения ввода в другие поля. Пример такого использования приведен на рис. 349: логический параметр EnableStep привязан к разрешению поля ввода вещественной переменной Step с заголовком «шаг изменения». При этом в списке полей ввода поле для EnableStep соединено линией с управляемым им полем, а в окне настроек перед полем ввода «шаг изменения» располагается флажок, значение которого связано с переменной EnableStep: ввести данные в это поле можно будет только тогда, когда флажок включен, то есть EnableStep имеет ненулевое значение (TRUE). Такая связь дополнительного флажка с полем устанавливается в параметрах управляемого поля ввода (см. рис. 352).

(а)

(б)
Рис. 349. Флаг разрешения для поля ввода «шаг изменения»: список параметров
и полей в редакторе (а) и внешний вид окна настройки (б)
Выше и ниже списка полей в нижней части вкладки «» располагаются кнопки, позволяющие добавлять, удалять и редактировать поля ввода и вкладки в окне, а также задавать и просматривать внешний вид получающегося окна настройки:
| Кнопка | Действие |
|---|---|
| Показать или скрыть дополнительную панель для задания заголовка окна настройки и его размеров. | |
| Переместить выбранное поле или вкладку на одну позицию вверх по списку. | |
| Переместить выбранное поле или вкладку на одну позицию вниз по списку. | |
| Тест окна – показать внешний вид окна настроек со всеми введенными полями и вкладками. | |
| Добавить новую вкладку (открывает отдельное окно). | |
| Добавить новое поле ввода (открывает отдельное окно). | |
| Изменить выбранное поле ввода или вкладку (открывает отдельное окно). | |
| Удалить выбранное поле ввода или вкладку. |
Рис. 350. Панель параметров
окна настроек (над списком)
Кнопка, расположенная справа сверху от списка полей ввода, показывает или скрывает дополнительную панель, на которой можно ввести заголовок окна настроек, а также задать ширину и высоту окна в точках экрана (рис. 350). Первое нажатие кнопки показывает панель (кнопка при этом остается нажатой), второе – скрывает. Ширину и высоту окна задавать не обязательно: по умолчанию окно самостоятельно подстраивает свои размеры таким образом, чтобы все поля ввода уместились в нем. Тем не менее, если по каким-либо причинам необходимо точно задать один или оба размера окна, можно включить флажок «» или «» и ввести соответствующий размер в поле рядом с ним.
Кнопки перемещения полей и вкладок вверх и вниз по списку меняют положение этих полей и вкладок в окне. Чем выше поле ввода в списке, тем выше оно будет располагаться в окне или на своей вкладке, а чем выше в списке вкладка, тем левее она будет располагаться в окне. Вкладки в списке перемещаются вверх и вниз вместе со всеми своими полями. Поле ввода можно переместить и за пределы его вкладки, в этом случае оно перейдет на соседнюю. Если, например, поле ввода – самое верхнее на вкладке, нажатие кнопки перемещения вверх по списку переместит его в конец предыдущей вкладки.
Кнопка со всплывающей подсказкой «», находящаяся справа от кнопок перемещения пунктов списка вверх и вниз, открывает окно настроек со всеми теми полями и вкладками, которые введены в список на данный момент. Все поля ввода и кнопки в этом окне работают, но измененные в нем параметры не запоминаются – это окно предназначено только для того, чтобы пользователь мог увидеть, как выглядят введенные им поля на экране.
Правее кнопки тестирования окна находятся кнопки добавления вкладок и полей. Исходно окно не содержит ни одной вкладки – корневой элемент списка называется «», и все поля ввода в списке соединены линиями с ним (см. рис. 347 а). Чтобы в окне появилась вкладка, необходимо нажать на кнопку добавления вкладки и ввести в открывшемся окне ее заголовок (рис. 351). При добавлении самой первой вкладки все уже имевшиеся в окне поля ввода помещаются на нее, следующие вкладки будут добавляться пустыми в конец списка.
Рис. 351. Окно для ввода заголовка вкладки
Чтобы добавить в окно поле ввода, необходимо нажать на соответствующую кнопку под списком и заполнить окно параметров добавляемого поля (рис. 352). Поля добавляются на выбранную в данный момент в списке вкладку или, если в списке выбрано поле ввода, на одну с ним вкладку в конец списка (после добавления поле можно перемещать верх и вниз).
Рис. 352. Окно параметров поля ввода для простого поля
В верхней части этого окна необходимо выбрать один из взаимоисключающих флажков «» или «». Выбор флажка «» позволяет создать поле для ввода для какого-либо настроечного параметра, выбор флажка «» создает в окне произвольную текстовую строку, никак не связанную с каким-либо параметром (в этой строке можно ввести, например, пояснения пользователю). Имя параметра, который будет редактироваться в этом поле, выбирается из выпадающего списка справа от флажка «». Если включен дополнительный флажок «», в этот список попадут только те параметры, для которых еще не созданы поля ввода. Если флажок выключен, в список попадут все настроечные параметры блока. Следует иметь в виду, что стандартный модуль автокомпиляции не позволяет создавать для одного параметра несколько полей ввода, поэтому при выборе в выпадающем списке имени параметра, для которого уже есть поле ввода, старое поле ввода будет стерто (об этом будет выдано предупреждение пользователю).
В поле ввода «» вводится заголовок поля, то есть текст, который пользователь увидит рядом с полем ввода параметра. В выпадающем списке справа задается выравнивание текста заголовка в окне: слева (по левой границе окна или вкладки), по центру или справа (текст будет прижат к полю ввода параметра). В окне настроек заголовок будет располагаться слева от поля ввода, за исключением поля в виде флажка для логических параметров (у них заголовок располагается справа от флажка) и многострочных полей ввода (заголовок располагается над полем, а поле занимает всю ширину окна или вкладки). Если в верхней части окна выбран флажок «», заголовок и его выравнивание – единственное, что можно задать в окне.
Справа от заголовка указывается ширина поля ввода в точках экрана. Эту ширину обычно подбирают опытным путем – так, чтобы типичные значения параметров умещались в поле ввода. Проще всего, добавив поле ввода, вызывать его параметры и пробовать задавать разные значения ширины, каждый раз закрывая окно параметров кнопкой «» и нажимая после этого кнопку «» для того, чтобы увидеть, как стало выглядеть окно настройки.
Непосредственно под заголовком из выпадающего списка выбирается тип поля ввода. Состав остальных полей окна зависит от выбранного типа. Для простого поля ввода, флага, выбора цвета и полей сохранения и загрузки файла окно параметров изображено на рис. 352, в нем нет дополнительных настроек, задающих его поведение. Для поля «ввод (+/−)» дополнительно задается шаг изменения параметра при нажатии на кнопки со стрелками, а также, если значение параметра необходимо ограничить, максимальное и минимальное его значения (рис. 353).
Рис. 353. Дополнительные настройки для поля типа «ввод (+/−)»
Для многострочного поля ввода задается его высота в точках экрана (рис. 354). Обычно ее подбирают так, чтобы в поле уместилось нужное число строк текста.
Рис. 354. Дополнительные настройки для поля типа «многострочный ввод»
Для полей «выбор из списка» и «ввод или выбор из списка» задается список вариантов – по одному варианту на строке (рис. 355). Если поле ввода «выбор из списка» связано с целым параметром, в этот параметр записывается индекс выбранного элемента списка (выбор первого варианта даст параметру значение 0, второго – 1, и т.д.), в противном случае в параметр будет записано само выбранное в списке значение.
Рис. 355. Дополнительные настройки для поля типа «выбор из списка»
Под выпадающим списком типа поля ввода находится флажок «». Если он включен, между этим полем ввода и следующим в окне будет нарисована горизонтальная линия во всю ширину окна или вкладки. Такими линиями можно разделять поля ввода, относящиеся к разным по смыслу группам параметров.
В нижней части окна параметров поля ввода (см. рис. 352) располагается панель «», позволяющая добавить к заголовку поля ввода флажок, разрешающий и запрещающий ввод в это поле и связанный с отдельным логическим параметром. Пример такого флага разрешения приведен на рис. 349. Если включить на этой панели флажок «», в выпадающем списке под ним можно будет выбрать один из уже созданных для блока логических (то есть типа BOOL) настроечных параметров. Как и в верхней части окна, справа от выпадающего списка находится дополнительный флажок «»: если он включен, в список попадут только те параметры, для которых еще не созданы поля ввода.
Заполнив список настроечных параметров блока и создав для них поля ввода (или использовав их как флаги разрешения полей), пользователь автоматически получает работающее окно настройки, которое можно вызвать из контекстного меню блока. Изменив в параметрах блока реакцию на двойной щелчок в режиме редактирования, можно заставить это окно открываться по двойному щелчку. Никаких дополнительных действий по сохранению и загрузке настроечных параметров блоков выполнять не нужно: модуль автокомпиляции сам добавит необходимые функции в программу модели. Таким образом, блоки с такой моделью позволят пользователю менять их параметры и будут помнить их при сохранении и загрузке схемы. Несмотря на то, что у нескольких блоков схемы может быть одинаковая модель и, поэтому, одинаковый набор параметров, значения этих параметров у них будут разными, поскольку параметры сохраняются независимо для каждого блока. В функциях модели к настроечным параметрам можно обращаться по именам, как к обычным переменным – они оформляются модулем автокомпиляции как поля класса блока и доступны из всех реакция на события.
В §2.7.4 руководства программиста описывается способ хранения настроечных параметров блока в значениях по умолчанию его статических переменных. Этот способ удобен тем, что позволяет пользователю выбирать: задавать ли ему параметр вручную в окне настроек блока или подключить к нему связь и передавать ему значение откуда-нибудь из схемы. Многие стандартные блоки в RDS хранят настроечные параметры именно так. Стандартный модуль автокомпиляции не поддерживает этот способ. Дело в том, что все блоки с одной и той же моделью имеют один и тот же набор статических переменных, а, следовательно, и одинаковые значения по умолчанию для этих переменных. Если бы параметры хранились в значениях переменных по умолчанию, при каждой компиляции модели, когда модуль устанавливает структуру переменных для всех обслуживаемых блоков, введенные пользователем значения сбрасывались бы, что недопустимо.
Если сравнить приведенные выше типы полей ввода с А.5.28.3 приложений, можно заметить, что сервисные функции RDS поддерживают больше типов полей ввода, чем стандартный модуль автокомпиляции. Модуль автокомпиляции пользуется теми же самыми сервисными функциями, но в его интерфейс пользователя включены только самые простые поля. Если пользователю для каких-то целей необходимы не поддерживаемые модулем поля ввода для настроечных параметров, он может создавать окно настройки не с помощью заполнения вкладки «» дополнительной панели окна редактора, а вручную, как описывается в §2.7.2 руководства программиста. Для этого в модель необходимо будет включить реакцию на вызов функции настройки (RDS_BFM_SETUP), и разместить в ней программу создания и открытия окна с нужными полями ввода.

