Добавление элементов к меню редактора моделей

Можно добавить команды и подменю в панель меню и контекстные меню для Simulink® Редактор и Stateflow® Редактор.

Добавить элемент в меню:

  1. Для каждого элемента создайте функцию, вызванную schema function, который задает элемент (см., Задают Пункты меню).

  2. Укажите индивидуальные настройки меню с менеджером по индивидуальной настройке Simulink при запуске, например, в sl_customization.m файл на MATLAB® путь (см. Индивидуальные настройки Меню Регистра).

  3. Создайте функции обратного вызова, которые реализуют команды, инициированные элементами, которые вы добавляете в меню.

Код для добавления пунктов меню

Следующий 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

Индивидуальная настройка меню редактора Simulink и Stateflow

Используйте те же общие процедуры, чтобы настроить меню Stateflow Editor, как вы используете для Редактора Simulink. Сложение функций пользовательского меню к концам меню верхнего уровня зависит от активного редактора:

  • Меню связаны с Simulink:FileMenu только появитесь, когда Редактор Simulink будет активен.

  • Меню связаны с Stateflow:FileMenu только появитесь, когда редактор Stateflow будет активен.

  • Чтобы иметь меню, чтобы появиться в обоих из редакторов, вызовите addCustomMenuFcn дважды, однажды для каждого тега. Проверяйте, что код работает в обоих редакторах.

Похожие темы