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

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

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

  • Конец меню верхнего уровня

  • Панель меню

  • Начало или конец контекстного меню

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

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

  • Укажите индивидуальные настройки меню с менеджером по индивидуальной настройке Simulink при запуске, e. g., в файле 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, чтобы создать экземпляры этого объекта в ваших функциях схемы. Его свойства включают:

  • тег

    Дополнительный вектор символа, который идентифицирует это действие, например, так, чтобы на это могла сослаться функция filter.

  • метка

    Вектор символа, задающий метку, которая появляется на пункте меню, который инициировал это действие.

  • state

    Свойство, которое задает состояние этого действия. Допустимыми значениями является 'Enabled' (значение по умолчанию), 'Disabled' и 'Hidden'.

  • statustip

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

  • userData

    Данные, которые вы задаете. Может иметь любой тип.

  • accelerator

    Вектор символа, задающий Ctrl и сочетание клавиш, чтобы использовать, чтобы инициировать это действие. Можно добавить горячую клавишу только для пользовательских элементов меню, которые появляются в меню панели меню и не могут переопределить акселераторы, которые идут с Редактором Simulink. Например, Ctrl+D является акселератором для Схемы Обновления в Редакторе Simulink, таким образом, вы не можете переопределить его.

    Чтобы задать это значение, используйте форму 'Ctrl+ K ', где K является сочетанием клавиш. Например, используйте 'Ctrl+Alt+T' для акселератора, вызванного удержанием Ctrl и Alt и нажатия T.

  • 'callback'

    Вектор символа, задающий выражение MATLAB, которое будет оценено или указатель на функцию, которая будет вызвана, когда пользователь выбирает пункт меню, который инициировал это действие. Эта функция должна принять один аргумент: объект информации об обратном вызове.

  • autoDisableWhen

    Свойство, которое управляет, когда пункт меню автоматически отключен.

    УстановкаКогда пункты меню отключены
    'Locked'

    (значение по умолчанию), Когда активный редактор заблокирован или когда модель занята

    'Busy'

    Только если модель занята

    'Never'

    Никогда

Переключите Объект схемы.  Этот объект задает информацию о пункте меню, который переключает некоторый объект на или прочь. Используйте функциональный sl_toggle_schema, чтобы создать экземпляры этого объекта в ваших функциях схемы. Его свойства включают:

  • тег

    Дополнительный вектор символа, который идентифицирует это действие переключателя, например, так, чтобы на это могла сослаться функция filter.

  • метка

    Вектор символа, задающий метку, которая появляется на пункте меню, который инициировал это действие переключателя.

  • checked

    Задайте, отображает ли пункт меню галочку. Допустимыми значениями является 'unchecked' (значение по умолчанию) и 'checked'

  • state

    Состояние этого действия переключателя, заданного как 'Enabled' (значение по умолчанию), 'Disabled' и 'Hidden'.

  • statustip

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

  • userData

    Данные, которые вы задаете. Может иметь любой тип.

  • accelerator

    Вектор символа, задающий Ctrl и сочетание клавиш, чтобы использовать, чтобы инициировать это действие. Можно добавить горячую клавишу только для пользовательских элементов меню, которые появляются в меню панели меню и не могут переопределить акселераторы, которые идут с Редактором Simulink. Например, Ctrl+D является акселератором для Схемы Обновления в Редакторе 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, чтобы создать экземпляры этого объекта в ваших функциях схемы. Свойства объекта включают

  • тег

    Дополнительный вектор символа, который идентифицирует это подменю.

  • метка

    Вектор символа, задающий метку подменю.

  • 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, но перед элементом Выхода из MATLAB
Simulink:EditMenuЭлемент в конец меню Simulink Editor's Edit
Simulink:ViewMenuЭлемент в конец меню Simulink Editor's View
Simulink:DisplayMenuЭлемент в конец Меню отображения Редактора Simulink
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Элемент в конец Меню справки Редактора Simulink
Теги Stateflow
Stateflow:MenuBarМеню в панель меню редактора Stateflow
Stateflow:PreContextMenuЭлемент к началу контекстного меню редактора Stateflow.
Stateflow:ContextMenuЭлементы в конец контекстного меню редактора Stateflow.
Stateflow:FileMenuЭлемент около конца меню Stateflow Editor's File, но перед элементом Выхода из MATLAB
Stateflow:EditMenuЭлемент в конец меню Edit редактора Stateflow
Stateflow:ViewMenuЭлемент в конец меню Stateflow Editor's View
Stateflow:DisplayMenuЭлемент в конец Меню отображения редактора Stateflow
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

Отображение тегов меню

Можно сконфигурировать программное обеспечение 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 дважды, однажды для каждого тега. Проверьте, что код работает в обоих редакторах.

Похожие темы

Была ли эта тема полезной?