Можно добавить команды и подменю к этим местоположениям меню для Редактора Simulink® и Редактора Stateflow®:
Конец меню верхнего уровня
Панель меню
Начало или конец контекстного меню
Добавить элемент в меню редактора:
Для каждого элемента создайте функцию, вызванную schema function, который задает элемент (см., Задают Пункты меню).
Укажите индивидуальные настройки меню с менеджером по индивидуальной настройке Simulink при запуске, например, в файле sl_customization.m
на пути MATLAB® (см. Индивидуальные настройки Меню Регистра).
Создайте функции обратного вызова, которые реализуют команды, инициированные элементами, которые вы добавляете в меню.
Следующий файл sl_customization.m
добавляет четыре элемента в меню Simulink Editor's 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's label. schema.label = 'My Item 1'; schema.userdata = 'item1'; %% Specify the menu item's 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 (см. Индивидуальные настройки Регистрации) выполнять эту задачу. В частности, для каждого меню, которое вы хотите настроить, функция 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's File, но перед элементом Exit MATLAB |
Simulink:EditMenu | Элемент в конец меню Simulink Editor's Edit |
Simulink:ViewMenu | Элемент в конец меню Simulink Editor's View |
Simulink:DisplayMenu | Элемент в конец меню Simulink Editor's Display |
Simulink:DiagramMenu | Элемент в конец меню Simulink Editor's Diagram |
Simulink:SimulationMenu | Элемент в конец меню Simulink Editor's Simulation |
Simulink:AnalysisMenu | Элемент в конец меню Simulink Editor's Analysis |
Simulink:CodeMenu | Элемент в конец меню Simulink Editor's Code |
Simulink:ToolsMenu | Элемент в конец меню Simulink Editor's Tools |
Simulink:HelpMenu | Элемент в конец меню Help Редактора Simulink |
Теги Stateflow | |
Stateflow:MenuBar | Меню в панель меню редактора Stateflow |
Stateflow:PreContextMenu | Элемент к началу контекстного меню редактора Stateflow. |
Stateflow:ContextMenu | Элементы в конец контекстного меню редактора Stateflow. |
Stateflow:FileMenu | Элемент около конца меню Stateflow Editor's File, но перед элементом Exit MATLAB |
Stateflow:EditMenu | Элемент в конец меню Edit редактора Stateflow |
Stateflow:ViewMenu | Элемент в конец меню Stateflow Editor's View |
Stateflow:DisplayMenu | Элемент в конец меню Stateflow Editor's Display |
Stateflow:ChartMenu | Элемент в конец меню Stateflow Editor's Chart |
Stateflow:SimulationMenu | Элемент в конец меню Stateflow Editor's Simulation |
Stateflow:AnalysisMenu | Элемент в конец меню Stateflow Editor's Analysis |
Stateflow:CodeMenu | Элемент в конец меню Stateflow Editor's Code |
Stateflow:ToolsMenu | Элемент в конец меню Stateflow Editor's Tools |
Stateflow:HelpMenu | Элемент в конец меню Stateflow Editor's Help |
Можно сконфигурировать программное обеспечение Simulink и Stateflow, чтобы отобразить тег для пункта меню рядом с меткой элемента, позволив вам определить сразу тег для меню. Индивидуальные настройки Simulink:TagName
появляются, только если текущим редактором является Редактор Simulink. Индивидуальные настройки Stateflow:TagName
появляются, только если текущим редактором является редактор Stateflow.
Чтобы сконфигурировать редактор к тегам меню отображения, в командной строке MATLAB, устанавливают свойство showWidgetIdAsToolTip
менеджера по индивидуальной настройке на true
. Например:
cm = sl_customization_manager; cm.showWidgetIdAsToolTip=true;
Тег каждого пункта меню появляется рядом с меткой элемента в меню:
Чтобы выключить отображение тега, введите следующую команду в командной строке:
cm.showWidgetIdAsToolTip=false;
Некоторые пункты меню не могут работать, в то время как отображение тега меню включено. Чтобы гарантировать, что все элементы работают, выключите отображение тега меню перед использованием меню.
Используйте те же общие процедуры, чтобы настроить меню Stateflow Editor, как вы используете для Редактора Simulink. Сложение функций пользовательского меню к концам меню верхнего уровня зависит от активного редактора:
Меню, связанные с Simulink:FileMenu
только, появляются, когда Редактор Simulink активен.
Меню, связанные с Stateflow:FileMenu
только, появляются, когда редактор Stateflow активен.
Чтобы иметь меню, чтобы появиться в обоих из редакторов, вызовите addCustomMenuFcn
дважды, однажды для каждого тега. Проверяйте, что код работает в обоих редакторах.