Можно добавить команды и подменю в панель меню и контекстные меню для Simulink® Редактор и Stateflow® Редактор.
Чтобы добавить элемент в меню:
Для каждого элемента создайте функцию, называемую schema function, которая определяет элемент (см. «Определение элементов меню»).
Зарегистрируйте индивидуальные настройки меню в менеджере индивидуальной настройки Simulink при запуске, например, в sl_customization.m
файл в MATLAB® путь (см. Register Menu Индивидуальных настроек).
Создайте функции обратного вызова, которые реализуют команды, инициируемые элементами, которые вы добавляете в меню.
Следующая sl_customization.m
файл добавляет четыре элемента в меню Tools Редактор.
function sl_customization(cm) %% Register custom menu function. cm.addCustomMenuFcn('Simulink:ToolsMenu', @getMyMenuItems); end %% Define the custom menu function. function schemaFcns = getMyMenuItems(callbackInfo) schemaFcns = {@getItem1, ... @getItem2, ... {@getItem3,3}, ... %% Pass 3 as user data to getItem3. @getItem4}; end %% Define the schema function for first menu item. function schema = getItem1(callbackInfo) schema = sl_action_schema; schema.label = 'Item One'; schema.userdata = 'item one'; schema.callback = @myCallback1; end function myCallback1(callbackInfo) disp(['Callback for item ' callbackInfo.userdata ' was called']); end function schema = getItem2(callbackInfo) % Make a submenu label 'Item Two' with % the menu item above three times. schema = sl_container_schema; schema.label = 'Item Two'; schema.childrenFcns = {@getItem1, @getItem1, @getItem1}; end function schema = getItem3(callbackInfo) % Create a menu item whose label is % 'Item Three: 3', with the 3 being passed % from getMyItems above. schema = sl_action_schema; schema.label = ['Item Three: ' num2str(callbackInfo.userdata)]; end function myToggleCallback(callbackInfo) if strcmp(get_param(gcs, 'ScreenColor'), 'red') == 0 set_param(gcs, 'ScreenColor', 'red'); else set_param(gcs, 'ScreenColor', 'white'); end end %% Define the schema function for a toggle menu item. function schema = getItem4(callbackInfo) schema = sl_toggle_schema; schema.label = 'Red Screen'; if strcmp(get_param(gcs, 'ScreenColor'), 'red') == 1 schema.checked = 'checked'; else schema.checked = 'unchecked'; end schema.callback = @myToggleCallback; end
Вы определяете элемент меню путем создания функции, которая возвращает объект, называемый объектом схемы, который задает информацию, необходимую для создания элемента меню. Элемент меню, который вы задаете, может вызвать пользовательское действие или отобразить пользовательское подменю. Для получения дополнительной информации см. следующие разделы.
Чтобы определить элемент, который инициирует пользовательскую команду, функция схемы должна принять объект информации о коллбэке (см. «Объект информации о коллбэке») и создать и вернуть объект схемы действия (см. «Объект схемы действия»), который задает метку элемента и функцию, называемую коллбэком, которая будет вызываться при выборе элемента пользователем. Например, следующая функция схемы определяет элемент меню, который отображает сообщение при выборе пользователем.
function schema = getItem1(callbackInfo) %% Create an instance of an action schema. schema = sl_action_schema; %% Specify the menu item label. schema.label = 'My Item 1'; schema.userdata = 'item1'; %% Specify the menu item callback function. schema.callback = @myCallback1; end function myCallback1(callbackInfo) disp(['Callback for item ' callbackInfo.userdata ' was called']); end
Объект схемы действий. Этот объект задает информацию об элементах меню, которые запускают команды, которые вы задаете, включая метку, которая появляется в элементе меню, и функцию, которая будет вызываться, когда пользователь выбирает пункт меню. Используйте функцию sl_action_schema
создание образцов этого объекта в функциях схемы. Его свойства включают:
tag
Необязательный вектор символов, который идентифицирует это действие, например, чтобы на него могла ссылаться функция filter.
label
Вектор символов, задающий метку, которая появляется в элементе меню, который запускает это действие.
state
Свойство, которое задает состояние этого действия. Допустимые значения 'Enabled'
(по умолчанию), 'Disabled'
, и 'Hidden'
.
statustip
Вектор символов символов, задающий текст для отображения в строке состояния редактора, когда пользователь выбирает элемент меню, который запускает это действие.
userdata
Данные, которые вы задаете. Может быть любого типа.
accelerator
Вектор символов, задающий комбинацию Ctrl и ключа, которая будет использоваться для запуска этого действия. Вы можете добавить горячую клавишу только для пользовательских элементов меню, которые появляются в меню панели меню и не могут переопределить ускорители, которые поставляются с редактором Simulink. Например, Ctrl+D является ускорителем для Update Diagram в Редактор, поэтому вы не можете переопределить его.
Чтобы задать это значение, используйте форму 'Ctrl+
K
'
, где K
- этот ярлык клавиш. Для примера используйте 'Ctrl+Alt+T'
для ускорителя, вызываемого путем удержания вниз Ctrl и Alt и нажатия T.
callback
Вектор символов, задающий выражение MATLAB, которое должно быть оценено, или указатель на функцию, которая будет вызываться, когда пользователь выбирает элемент меню, который запускает это действие. Эта функция должна принять один аргумент: объект информации о коллбэке.
autoDisableWhen
Свойство, которое управляет, когда элемент меню автоматически отключен.
Настройка | Когда элементы меню отключены |
---|---|
'Locked' | (по умолчанию) Когда активный редактор заблокирован или когда модель занята |
'Busy' | Только если модель занята |
'Never' | Никогда |
Переключение объекта схемы. Этот объект задает информацию об элементе меню, который переключает какой-либо объект on или off. Используйте функцию sl_toggle_schema
создание образцов этого объекта в функциях схемы. Его свойства включают:
tag
Необязательный вектор символов, который идентифицирует это действие переключения, например, чтобы на него могла ссылаться функция filter.
label
Вектор символов, задающий метку, которая появляется в элементе меню, который запускает это действие переключения.
checked
Укажите, отображается ли в элементе меню флажок. Допустимые значения 'unchecked'
(по умолчанию) и 'checked'
state
Состояние этого действия переключения, заданное как 'Enabled'
(по умолчанию), 'Disabled'
, и 'Hidden'
.
statustip
Вектор символов, задающий текст для отображения в строке состояния редактора, когда пользователь выбирает элемент меню, который запускает это действие переключения.
userdata
Данные, которые вы задаете. Может быть любого типа.
accelerator
Вектор символов, задающий комбинацию Ctrl и ключа, которая будет использоваться для запуска этого действия. Вы можете добавить горячую клавишу только для пользовательских элементов меню, которые появляются в меню панели меню и не могут переопределить ускорители, которые поставляются с редактором Simulink. Например, Ctrl+D является ускорителем для Update Diagram в Редактор, поэтому вы не можете переопределить его.
Чтобы задать это значение, используйте форму 'Ctrl+
K
'
, где K
- этот ярлык клавиш. Для примера используйте 'Ctrl+Alt+T'
для ускорителя, вызываемого путем удержания вниз Ctrl и Alt и нажатия T.
callback
Вектор символов, задающий выражение MATLAB, которое должно быть оценено, или указатель на функцию, которая будет вызываться, когда пользователь выбирает элемент меню, который запускает это действие. Эта функция должна принять один аргумент: объект информации о коллбэке.
autoDisableWhen
Свойство, которое управляет, когда элемент меню автоматически отключен.
Настройка | Когда элементы меню отключены |
---|---|
'Locked' | (по умолчанию) Когда активный редактор заблокирован или когда модель занята |
'Busy' | Только если модель занята |
'Never' | Никогда |
Чтобы задать подменю, создайте функцию схемы, которая принимает объект сведений о коллбэке и возвращает объект схемы контейнера (см. «Объект схемы контейнера»), который задает схемы, определяющие элементы подменю. Например, следующая функция схемы задает подменю, содержащую три образцов элемента меню, определенного в примере «Определение элементов меню, инициирующих пользовательские команды».
function schema = getItem2( callbackInfo ) schema = sl_container_schema; schema.label = 'Item Two'; schema.childrenFcns = {@getItem1, @getItem1, @getItem1}; end
Объект схемы контейнера. Объект схемы контейнера задает метку подменю и ее содержимое. Используйте функцию sl_container_schema
создание образцов этого объекта в функциях схемы. Свойства объекта включают
tag
Необязательный вектор символов, идентифицирующий это подменю.
label
Вектор символов, задающий метку подменю.
state
Вектор символов, задающий состояние этого подменю. Допустимые значения 'Enabled'
(по умолчанию), 'Disabled'
, и 'Hidden'
.
statustip
Вектор символов, задающий текст для отображения в строке состояния редактора при выборе пользователем этого подменю.
childrenFcns
Массив ячеек, задающий содержимое подменю. Каждая запись в массиве ячеек может быть
Указатель на функцию схемы, которая задает элемент подменю (см. «Определение элементов меню»)
Двухэлементный массив ячеек, чей первый элемент является указателем на функцию схемы, которая задает элемент, и чей второй элемент является данными, которые должны быть вставлены как пользовательские данные в объект информации коллбэка (см. «Объект информации о коллбэке»), передан в функцию схемы
'separator'
, что приводит к появлению диафрагмы между элементом, заданным предыдущей записью в массиве ячеек, и элементом, заданным в следующей записи. Случай игнорируется для этой записи (для примера, 'SEPARATOR'
и 'Separator'
оба являются допустимыми записями). Диафрагма также подавляется, если он появляется в начале или в конце подменю, и диафрагм, которые появлялись бы последовательно, объединяются в одну диафрагму (для примера, в результате скрытия элемента).
Для примера следующий массив ячеек задает две записи подменю:
{@getItem1, 'separator', {@getItem2, 1}}
В этом примере значение 1 передается в getItem2
через объект информации о коллбэке.
generateFcn
Указатель на функцию, которая возвращает массив ячеек, определяющий содержимое подменю. Массив ячеек должен иметь тот же формат, что и для объектов схемы контейнера childrenFcns
свойство.
Примечание
The generateFcn
свойство имеет приоритет над childrenFcns
свойство. Если вы задаете оба, childrenFcns
свойство игнорируется, и массив ячеек возвращается generateFcn
используется для создания подменю.
userdata
Данные любого типа, которые передаются в generateFcn
.
autoDisableWhen
Свойство, которое управляет, когда элемент меню автоматически отключен.
Настройка | Когда элементы меню отключены |
---|---|
'Locked' | (по умолчанию) Когда активный редактор заблокирован или когда модель занята |
'Busy' | Только если модель занята |
'Never' | Никогда |
Необходимо зарегистрировать пользовательские элементы, которые будут включены в меню Simulink в диспетчере индивидуальных настроек. Используйте sl_customization.m
файл для установки Simulink (см. «Регистрация индивидуальных настроек») для выполнения этой задачи. В частности, для каждого меню, которое вы хотите настроить, ваша система sl_customization
функция должна вызвать диспетчер индивидуальной настройки addCustomMenuFcn
способ. Каждый вызов должен передавать тег меню (см. «Теги меню»), который будет настроен, и пользовательскую функцию меню, которая задает элементы, добавляемые в меню (см. «Создание функции пользовательского меню»). Для примера выполните следующее sl_customization
функция добавляет пользовательские элементы в меню Инструменты.
function sl_customization(cm) %% Register custom menu function. cm.addCustomMenuFcn('Simulink:ToolsMenu', @getMyItems);
Функция пользовательского меню возвращает массив ячеек с функциями схемы, которые задают пользовательские элементы, которые вы хотите отображать в меню редактора моделей (см. «Определение элементов меню»). Функция пользовательского меню возвращает массив ячеек, подобный тому, который возвращает generateFcn
функция.
Функция пользовательского меню должна принять объект информации о коллбэке (см. «Объект информации о коллбэке») и вернуть массив ячеек, в котором перечислены функции схемы. Каждый элемент массива ячеек может быть либо указателем на функцию схемы, либо двухэлементным массивом ячеек, чей первый элемент является указателем на функцию схемы, и чей второй элемент является пользовательскими данными, которые передаются в функцию схемы. Например, следующая функция пользовательского меню возвращает массив ячеек, в котором перечислены три функции схемы.
function schemas = getMyItems(callbackInfo) schemas = {@getItem1, ... @getItem2, ... {@getItem3,3} }; % Pass 3 as userdata to getItem3. end
Образцы этих объектов передаются в функции индивидуальной настройки меню. Методы и свойства этих объектов включают:
uiObject
Метод для получения указателя на владельца меню, для которого это коллбэк. Владельцем может быть Редактор Simulink или Редактор Stateflow.
model
Метод, чтобы получить указатель на модель, отображаемую в окне редактора.
userdata
Свойство данных. Значение этого свойства может быть любым типом данных.
О системах, использующих Microsoft® Windows® операционной системы, выбор пользовательского элемента меню, коллбэк содержит точку останова, может привести к тому, что мышь станет невосприимчивой, или меню останется открытым и поверх других окон. Чтобы устранить эти проблемы, используйте команды отладчика кода MATLAB для продолжения обратного коллбэка.
Тег меню определяет Редактор Simulink или панели меню или меню Редактора Stateflow. Необходимо знать тег для меню, чтобы добавить в него пользовательские элементы (см. раздел Индивидуальные настройки меню регистра).
Тэг | Что это добавляет |
---|---|
Теги Simulink | |
Simulink:MenuBar | Меню на панели меню редактора Simulink |
Simulink:PreContextMenu | Элемент к началу контекстного меню редактора Simulink |
Simulink:ContextMenu | Элемент в конце контекстного меню Редактор |
Simulink:FileMenu | Элемент в конце меню File Редактор |
Simulink:EditMenu | Элемент в конце меню Edit Редактор |
Simulink:ViewMenu | Элемент в конце меню View Редактор |
Simulink:DisplayMenu | Элемент в конце меню Display Редактор |
Simulink:DiagramMenu | Элемент в конце меню Diagram Редактор |
Simulink:SimulationMenu | Элемент в конце меню Simulation Редактор |
Simulink:AnalysisMenu | Элемент в конце меню Analysis Редактор |
Simulink:CodeMenu | Элемент в конце меню Code Редактор |
Simulink:ToolsMenu | Элемент в конце меню Tools Редактор |
Simulink:HelpMenu | Элемент в конце меню Help Редактор |
Теги Stateflow | |
Stateflow:MenuBar | Меню на Редактора Stateflow панели меню |
Stateflow:PreContextMenu | Элемент в начале контекстного меню редактора Stateflow. |
Stateflow:ContextMenu | Элементы в конце контекстного меню редактора Stateflow. |
Stateflow:FileMenu | Пункт в конце меню Редактора Stateflow File |
Stateflow:EditMenu | Пункт в конце меню Редактора Stateflow Edit |
Stateflow:ViewMenu | Пункт в конце меню Редактора Stateflow View |
Stateflow:DisplayMenu | Пункт в конце меню Редактора Stateflow Display |
Stateflow:ChartMenu | Пункт в конце меню Редактора Stateflow Chart |
Stateflow:SimulationMenu | Пункт в конце меню Редактора Stateflow Simulation |
Stateflow:AnalysisMenu | Пункт в конце меню Редактора Stateflow Analysis |
Stateflow:CodeMenu | Пункт в конце меню Редактора Stateflow Code |
Stateflow:ToolsMenu | Пункт в конце меню Редактора Stateflow Tools |
Stateflow:HelpMenu | Пункт в конце меню Редактора Stateflow Help |
Используйте те же общие процедуры для настройки меню редактора Stateflow, что и для редактора Simulink. Сложение функций пользовательского меню в концы меню верхнего уровня зависит от активного редактора:
Меню, связанное с Simulink:FileMenu
появляется только при активном редакторе Simulink.
Меню, связанное с Stateflow:FileMenu
появляется только при активном редакторе Stateflow.
Чтобы отобразить меню в обоих редакторах, вызовите addCustomMenuFcn
дважды, по одному для каждого тега. Проверьте, что код работает в обоих редакторах.