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

О Добавление элементов

Можно добавить команды и подменю к этим местоположениям меню для Редактора 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;

Примечание

Некоторые пункты меню не могут работать, в то время как отображение тега меню включено. Чтобы гарантировать, что все элементы работают, выключите отображение тега меню перед использованием меню.

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

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

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

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

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

Похожие темы