Можно добавить команды и подменю в панель меню и контекстные меню для Simulink® Редактор и Stateflow® Редактор.
Добавить элемент в меню:
Для каждого элемента создайте функцию, вызванную schema function, который задает элемент (см., Задают Пункты меню).
Укажите индивидуальные настройки меню с менеджером по индивидуальной настройке Simulink при запуске, например, в sl_customization.m
файл на MATLAB® путь (см. Индивидуальные настройки Меню Регистра).
Создайте функции обратного вызова, которые реализуют команды, инициированные элементами, которые вы добавляете в меню.
Следующий sl_customization.m
файл добавляет четыре элемента в меню Tools, которое появляется ниже Панели инструментов Simulink.
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 в Редакторе Simulink, таким образом, вы не можете переопределить его.
Чтобы задать это значение, используйте форму 'Ctrl+
K
'
, где K
сочетание клавиш. Например, используйте 'Ctrl+Alt+T'
для акселератора, вызванного удержанием Ctrl и Alt и нажатия T.
callback
Вектор символов, задающий выражение MATLAB, которое будет оценено или указатель на функцию, которая будет вызвана, когда пользователь выбирает пункт меню, который инициировал это действие. Эта функция должна принять один аргумент: объект информации о коллбэке.
autoDisableWhen
Свойство, которое управляет, когда пункт меню автоматически отключен.
Установка | Когда пункты меню отключены |
---|---|
'Locked' | (значение по умолчанию), Когда активный редактор заблокирован или когда модель занята |
'Busy' | Только если модель занята |
'Never' | Никогда |
Переключите Объект схемы. Этот объект указывает информацию о пункте меню, который переключает некоторый объект на или прочь. Используйте функцию sl_toggle_schema
создать экземпляры этого объекта в ваших функциях схемы. Его свойства включают:
tag
Дополнительный вектор символов, который идентифицирует это действие переключателя, например, так, чтобы на это могла сослаться функция filter.
label
Вектор символов, задающий метку, которая появляется на пункте меню, который инициировал это действие переключателя.
checked
Задайте, отображает ли пункт меню галочку. Допустимыми значениями является 'unchecked'
(значение по умолчанию) и 'checked'
state
Состояние этого действия переключателя в виде 'Enabled'
(значение по умолчанию), 'Disabled'
, и 'Hidden'
.
statustip
Текст определения вектора символов, чтобы появиться в строке состояния редактора, когда пользователь выбирает пункт меню, который инициировал это действие переключателя.
userdata
Данные, которые вы задаете. Может иметь любой тип.
accelerator
Вектор символов, задающий Ctrl и сочетание клавиш, чтобы использовать, чтобы инициировать это действие. Можно добавить горячую клавишу только для пользовательских элементов меню, которые появляются в меню панели меню и не могут переопределить акселераторы, которые идут с Редактором Simulink. Например, Ctrl+D является акселератором для Update Diagram в Редакторе Simulink, таким образом, вы не можете переопределить его.
Чтобы задать это значение, используйте форму '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
Указатель на функцию, которая возвращает массив ячеек, задающий содержимое подменю. Массив ячеек должен иметь тот же формат как заданный для контейнерной схемы objects childrenFcns
свойство.
Примечание
generateFcn
свойство более приоритетно по сравнению с childrenFcns
свойство. Если вы устанавливаете обоих, childrenFcns
свойство проигнорировано и массив ячеек, возвращенный generateFcn
используется, чтобы создать подменю.
userdata
Данные любого типа, который передается generateFcn
.
autoDisableWhen
Свойство, которое управляет, когда пункт меню автоматически отключен.
Установка | Когда пункты меню отключены |
---|---|
'Locked' | (значение по умолчанию), Когда активный редактор заблокирован или когда модель занята |
'Busy' | Только если модель занята |
'Never' | Никогда |
Необходимо указать пользовательские элементы, которые будут включены в меню Simulink с менеджером по индивидуальной настройке. Используйте sl_customization.m
файл для установки Simulink (см. Индивидуальные настройки Регистра с Simulink) выполнять эту задачу. В частности, для каждого меню, которое вы хотите настроить, ваша система sl_customization
функция должна вызвать менеджера по индивидуальной настройке addCustomMenuFcn
метод. Каждый вызов должен передать тег меню (см. Теги Меню) быть настроенным и функция пользовательского меню, которая задает элементы, которые будут добавлены к меню (см. Создание Функции Пользовательского меню). Например, следующий sl_customization
функция добавляет пользовательские элементы в меню Simulink Tools.
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 |
Simulink:FileMenu | Элемент в конец меню Simulink Editor File |
Simulink:EditMenu | Элемент в конец меню Simulink Editor Edit |
Simulink:ViewMenu | Элемент в конец меню Simulink Editor View |
Simulink:DisplayMenu | Элемент в конец меню Simulink Editor Display |
Simulink:DiagramMenu | Элемент в конец меню Simulink Editor Diagram |
Simulink:SimulationMenu | Элемент в конец меню Simulink Editor Simulation |
Simulink:AnalysisMenu | Элемент в конец меню Simulink Editor Analysis |
Simulink:CodeMenu | Элемент в конец меню Simulink Editor Code |
Simulink:ToolsMenu | Элемент в конец меню Simulink Editor Tools |
Simulink:HelpMenu | Элемент в конец меню Simulink Editor Help |
Теги Stateflow | |
Stateflow:MenuBar | Меню в панель меню редактора Stateflow |
Stateflow:PreContextMenu | Элемент к началу контекстного меню Stateflow Editor. |
Stateflow:ContextMenu | Элементы в конец контекстного меню Stateflow Editor. |
Stateflow:FileMenu | Элемент в конец меню Stateflow Editor File |
Stateflow:EditMenu | Элемент в конец меню Stateflow Editor Edit |
Stateflow:ViewMenu | Элемент в конец меню Stateflow Editor View |
Stateflow:DisplayMenu | Элемент в конец меню Stateflow Editor Display |
Stateflow:ChartMenu | Элемент в конец меню Stateflow Editor Chart |
Stateflow:SimulationMenu | Элемент в конец меню Stateflow Editor Simulation |
Stateflow:AnalysisMenu | Элемент в конец меню Stateflow Editor Analysis |
Stateflow:CodeMenu | Элемент в конец меню Stateflow Editor Code |
Stateflow:ToolsMenu | Элемент в конец меню Stateflow Editor Tools |
Stateflow:HelpMenu | Элемент в конец меню Stateflow Editor Help |
Используйте те же общие процедуры, чтобы настроить меню Stateflow Editor, как вы используете для Редактора Simulink. Сложение функций пользовательского меню к концам меню верхнего уровня зависит от активного редактора:
Меню связаны с Simulink:FileMenu
только появитесь, когда Редактор Simulink будет активен.
Меню связаны с Stateflow:FileMenu
только появитесь, когда редактор Stateflow будет активен.
Чтобы иметь меню, чтобы появиться в обоих из редакторов, вызовите addCustomMenuFcn
дважды, однажды для каждого тега. Проверяйте, что код работает в обоих редакторах.