При создании панели инструментов, работающей с продуктами MathWorks ®, можно добавить в нее параметры, позволяющие пользователям настраивать внешний вид и поведение панели инструментов после установки. Например, можно добавить параметр, позволяющий пользователю изменять размер шрифта на панели инструментов.
Чтобы добавить параметры, включающие заводские значения, поставляемые с панелью инструментов, создайте заводские настройки с помощью matlab.settings.FactoryGroup.createToolboxGroup функция. После установки панели инструментов пользователи могут либо использовать заводские значения, либо указать собственные личные или временные значения.
Создание заводских настроек для панелей инструментов включает следующие шаги:
Создайте дерево параметров фабрики.
Создайте заводские настройки JSON-файла.
Протестируйте дерево заводских настроек.
Первым шагом к созданию заводских настроек для панели инструментов является создание дерева заводских настроек. Используйте matlab.settings.FactoryGroup.createToolboxGroup для создания корневой группы параметров фабрики для панели инструментов. Например, создайте корневую группу фабрики для панели инструментов mytoolbox. По умолчанию заводские группы скрыты, что означает, что они не отображаются в родительской группе параметров. Укажите 'Hidden' пара имя-значение со значением false чтобы группа была видна в дереве заводских настроек либо при отображении в окне команд, либо при заполнении вкладки.
myToolboxFactoryTree = matlab.settings.FactoryGroup.createToolboxGroup('mytoolbox','Hidden',false);
После создания корневой заводской группы панели инструментов создайте дерево заводских настроек, добавив в корень заводские настройки и группы заводских настроек. Чтобы добавить новую группу заводских настроек, используйте addGroup функция. Укажите 'Hidden' пара имя-значение со значением false для создания видимой группы фабрик. Например, добавьте font заводская группа как видимая группа для сохранения параметров шрифта для панели инструментов.
toolboxFontGroup = addGroup(myToolboxFactoryTree,'font','Hidden',false)
toolboxFontGroup =
FactoryGroup with properties:
Name: "font"
ValidationFcn: []
Hidden: 0Чтобы добавить новый заводской параметр, используйте addSetting функция. Например, добавить FontSize как видимая заводская настройка в font заводская группа. Укажите заводское значение для параметра. Это значение поставляется вместе с панелью инструментов.
addSetting(toolboxFontGroup,'FontSize','FactoryValue',11,'Hidden',false)
ans =
FactorySetting with properties:
Name: "FontSize"
FactoryValue: 11
FactoryValueFcn: []
ValidationFcn: []
Hidden: 0
ReadOnly: 0Можно также добавить параметры только для чтения с помощью 'ReadOnly' аргумент пары имя-значение. Добавьте параметры, доступные только для чтения, чтобы запретить пользователям панели инструментов изменять значения параметров.
Поместите все команды создания дерева заводских настроек в функцию без входных данных. Включите функцию в код панели инструментов при упаковке и распространении панели инструментов. Например, функция createMyToolboxFactoryTree.mlx создает дерево заводских настроек для панели инструментов mytoolbox и добавляет группу фабрики font и две заводские настройки, MyFontSize и MyFontColor, к дереву.
function myToolboxFactoryTree = createMyToolboxFactoryTree() myToolboxFactoryTree = matlab.settings.FactoryGroup.createToolboxGroup('mytoolbox', ... 'Hidden',false); toolboxFontGroup = addGroup(myToolboxFactoryTree,'font','Hidden',false) addSetting(toolboxFontGroup,'MyFontSize','FactoryValue',11,'Hidden',false) addSetting(toolboxFontGroup,'MyFontColor','FactoryValue','Black', ... 'Hidden',false); end
Можно наложить определенные ограничения на значения параметров, указав функцию проверки для параметра или группы. Функция проверки принимает значение потенциального параметра в качестве аргумента и выдает ошибку, если значение не соответствует определенному требованию.
MATLAB ® определяет несколько функций проверки.
Имя | Значение | Функции, вызываемые на входах |
|---|---|---|
| ||
| ||
| ||
| ||
| ||
| ||
|
| |
|
| |
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
| |
|
Чтобы указать функцию проверки при создании заводской настройки, используйте 'ValidationFcn' аргумент пары имя-значение и укажите дескриптор функции. Например, добавьте параметр MyLogicalSetting в myfactorysettings и укажите, что его значение должно быть логическим скаляром.
addSetting(s.myfactorysettings,'MyLogicalSetting','ValidationFcn', ... @matlab.settings.mustBeLogicalScalar);
Попробуйте установить значение MyLogicalSetting к нелогическому значению. Как и ожидалось, MATLAB выдает ошибку.
s.myfactorysettings.MyLogicalSetting.PersonalValue = 10
Error setting "MyLogicalSetting" in group "myfactorysettings": Value must be logical or convertible to logical.
Можно также указать функцию проверки для всей группы заводских настроек. Если указано, функция используется для проверки значений всех заводских настроек в группе, которые не задают свои собственные функции проверки. Сюда входят параметры настройки в подгруппах, если подгруппа или параметры настройки не задают собственные функции проверки. Например, создайте группу параметров mylogicalsettings и укажите функцию проверки matlab.settings.mustBeLogicalScalar.
addGroup(s.myfactorysettings,'mylogicalsettings','ValidationFcn', ... @matlab.settings.mustBeLogicalScalar);
Создание настройки MyLogicalSetting в пределах mylogicalsettings и попробуйте установить значение параметра в нелогическое значение. Как и ожидалось, MATLAB выдает ошибку.
addSetting(s.myfactorysettings.mylogicalsettings,'MyLogicalSetting')
s.myfactorysettings.mylogicalsettings.PersonalValue = 10;Error setting 'MyLogicalSetting' in group 'mysettings': Value must be logical or convertible to logical.
Можно также создать собственные функции проверки для проверки заводских настроек свойств, которые не охватываются функциями проверки MATLAB. Функции проверки - это обычные функции MATLAB, предназначенные для проверки значений параметров настройки. Они должны удовлетворять следующим условиям:
Примите значение потенциального параметра в качестве входного аргумента.
Нет выходных аргументов.
Выдать ошибку в случае сбоя проверки.
Разместите функции проверки на пути MATLAB, чтобы сделать их доступными.
Например, создайте функцию для проверки того, является ли значение параметра четным числом.
function evenNumberValidationFcn(x) errorMsg = 'Value must be an even number.'; iseven = isnumeric(x) && mod(x, 2) == 0; assert(iseven,errorMsg); end
Добавьте эту функцию проверки к новому параметру.
addSetting(s.mysettings,'MyEvenNumberSetting','ValidationFcn',@evenNumberValidationFcn);
Установка значения MyEvenNumberSetting на нечетное число. Как и ожидалось, MATLAB выдает ошибку.
s.mysettings.MyEvenNumberSetting.PersonalValue = 1;
Unable to validate settings data. Error using evenNumberValidationFcn (line 4) Value must be an even number.
Можно также создать пользовательские функции проверки для использования функций проверки MATLAB, которые требуют нескольких входных данных, таких как mustBeGreaterThan, mustBeLessThan, mustBeGreaterThanOrEqual, mustBeLessThanOrEqual, и mustBeMember. Например, эта функция проверяет, является ли значение параметра одним из четырех цветов.
function colorValidationFcn(val) mustBeMember(val, ['Black' 'Blue' 'Yellow' 'Green']); end
Дополнительные сведения о добавлении функции проверки в заводскую настройку или группу заводских настроек см. в разделе addSetting и addGroup.
Чтобы MATLAB знал, какую функцию следует использовать для создания дерева заводских настроек, создайте файл JSON с именем settingsInfo.json. Включить файл в панель инструментов resources при упаковке и распространении панели инструментов.
settingsInfo.json должен следовать этому шаблону. ToolboxGroupName и CreateTreeFcn требуются элементы.
{
"ToolboxGroupName" : "toolbox root factory group name",
"Hidden" : "hidden state of toolbox root factory group",
"CreateTreeFcn" : "toolbox factory tree creation function",
"CreateUpgradersFcn" : "toolbox factory tree upgrade function"
}Примечание
Значения для ToolboxGroupName и Hidden должно соответствовать имени корневой заводской группы панели инструментов и скрытому состоянию.
Например, создайте settingsInfo.json файл для mytoolbox. Определить mytoolbox в качестве имени корневой группы настроек, false как скрытое состояние, и createMyToolboxFactoryTree в качестве функции создания дерева настроек.
{
"ToolboxGroupName" : "mytoolbox",
"Hidden" : false,
"CreateTreeFcn" : "createMyToolboxFactoryTree"
}После создания функции создания дерева настроек и settingsInfo.json для панели инструментов можно протестировать дерево настроек перед упаковкой и распространением панели инструментов, чтобы убедиться, что настройки работают в соответствии с ожиданиями.
Чтобы проверить дерево, добавьте папку панели инструментов, содержащую функцию создания дерева настроек, и папку ресурсов панели инструментов в путь MATLAB. Затем используйте matlab.settings.reloadFactoryFile для загрузки заводских настроек панели инструментов и settings функция. Это дает MATLAB доступ к корню дерева настроек и дереву заводских настроек панели инструментов под ним.
Примечание
Чтобы избежать непредвиденных результатов, необходимо добавить папку панели инструментов, содержащую функцию создания дерева настроек, и папку ресурсов панели инструментов в путь MATLAB.
Например, чтобы проверить дерево заводских настроек для mytoolbox:
matlab.settings.reloadFactoryFile('mytoolbox');
s = settings;
s.mytoolbox.font.MyFontSizeans =
Setting 'mytoolbox.font.MyFontSize' with properties:
ActiveValue: 11
TemporaryValue: <no value>
PersonalValue: <no value>
FactoryValue: 11Примечание
matlab.settings.reloadFactoryFile функция предназначена только для отладки и не должна включаться в код панели инструментов отгрузки.
После вызова необходимо воссоздать переменные, ссылающиеся на указанную панель инструментов matlab.settings.reloadFactoryFile. Например, при создании переменной a = s.mytoolbox а затем позвонить matlab.settings.reloadFactoryFile, необходимо воссоздать a доступ к обновленным настройкам для mytoolbox.
Чтобы создать новую версию панели инструментов, включающую изменения дерева заводских настроек, можно предпринять шаги, чтобы убедиться, что все личные настройки, настроенные в ранее установленной версии панели инструментов, правильно перемещены в обновленное дерево заводских настроек.
Чтобы обеспечить обратную совместимость при внесении изменений в дерево заводских настроек, выполните следующие действия.
Измените дерево заводских настроек.
Регистрация изменений в дереве.
Измените заводские настройки JSON-файла.
Проверьте результаты обновления дерева личных настроек.
Изменения, которые могут вызвать проблемы обратной несовместимости, включают переименование, перемещение и удаление параметров фабрики панели инструментов или групп параметров. Если вы добавляете новые настройки в дерево заводских настроек, то вам не нужно выполнять эти действия.
Предупреждение
Изменения в функции создания дерева заводских настроек могут повлиять на сохраненные личные и временные значения параметров для рассматриваемой панели инструментов. Чтобы избежать потери данных, создайте резервную копию файла параметров панели инструментов перед внесением изменений или перед обновлением панели инструментов. Файл параметров панели инструментов, , находится в папке предпочтений. Чтобы просмотреть полный путь к папке настроек, введите toolboxname.mlsettingsprefdir в окне команд MATLAB.
При неожиданных изменениях в дереве параметров панели инструментов после обновления можно восстановить дерево, заменив файл параметров панели инструментов созданной резервной копией.
Функция создания дерева настроек фабрики создает дерево настроек для последней версии панели инструментов. Чтобы обновить дерево заводских настроек для последней версии панели инструментов, измените команды создания дерева заводских настроек.
Примечание
Команды в функции создания дерева настроек фабрики представляют последнее дерево настроек версии панели инструментов.
Например, предположим, что в версии 2 из mytoolbox, вы хотите переименовать параметры MyFontSize и MyFontColor кому FontSize и FontColor. Изменение имен параметров в createMyToolboxFactoryTree.mlx.
function myToolboxFactoryTree = createMyToolboxFactoryTree() myToolboxFactoryTree = matlab.settings.FactoryGroup.createToolboxGroup('mytoolbox', ... 'Hidden',false); toolboxFontGroup = addGroup(myToolboxFactoryTree,'font','Hidden',false) addSetting(toolboxFontGroup,'FontSize','FactoryValue',11,'Hidden',false, ... 'ValidationFcn',@matlab.settings.mustBeNumericScalar) addSetting(toolboxFontGroup,'FontColor','FactoryValue','Black', ... 'Hidden',false,'ValidationFcn',@matlab.settings.mustBeStringScalar); end
Создайте функцию без входных данных для хранения инструкций по обновлению личных настроек из предыдущей версии панели инструментов. Включите файл с кодом панели инструментов при упаковке и распространении панели инструментов. Запись изменений в дереве заводских настроек гарантирует, что пользователи панели инструментов, обновленные до новой версии, не будут иметь проблем обратной несовместимости с существующими настройками панели инструментов. Изменения, которые могут вызвать проблемы обратной несовместимости, включают переименование, перемещение и удаление параметров фабрики панели инструментов или группы параметров. Нет необходимости записывать добавление новых настроек в дерево заводских настроек.
В функции добавьте объект обновления файла настроек для каждой версии панели инструментов, содержащей изменения в дереве параметров фабрики. Используйте move и remove функции для записи отдельных изменений. Например, функция createMyToolboxSettingsFileUpgraders.mlx записывает изменения в MyFontSize и MyFontColor для версии 2 из mytoolbox.
function upgraders = createMyToolboxSettingsFileUpgraders() upgraders = matlab.settings.SettingsFileUpgrader('Version2'); move(upgraders,"mytoolbox.font.MyFontSize","mytoolbox.font.FontSize"); move(upgraders,"mytoolbox.font.MyFontColor","mytoolbox.font.FontColor"); end
Не изменяйте записанные инструкции по обновлению в функции обновления дерева настроек после упаковки и распространения панели инструментов среди пользователей. Изменение инструкций может привести к неожиданным результатам. При внесении дополнительных изменений в дерево параметров запишите изменения, добавив их в существующие инструкции или создав новый экземпляр обновителя.
Например, этот код записывает изменения для версии 2 и версия 3 из mytoolbox.
function upgraders = createMyToolboxSettingsFileUpgraders() upgraders = matlab.settings.SettingsFileUpgrader('Version2'); move(upgraders,"mytoolbox.font.MyFontSize","mytoolbox.font.FontSize"); move(upgraders,"mytoolbox.font.MyFontColor","mytoolbox.font.FontColor"); upgraders(2) = matlab.settings.SettingsFileUpgrader('Version3'); remove(upgraders(2),"mytoolbox.font.FontName"); end
Чтобы MATLAB знал, какую функцию следует использовать для обновления дерева заводских настроек панели инструментов, укажите функцию обновления дерева настроек в файле заводских настроек (settingsInfo.json). Например, в settingsInfo.json для mytoolbox, указать createMyToolboxSettingsFileUpgrader в качестве функции обновления дерева настроек.
{
"ToolboxGroupName" : "mytoolbox",
"Hidden" : false,
"CreateTreeFcn" : "createMyToolboxFactoryTree",
"CreateUpgradersFcn" : "createMyToolboxSettingsFileUpgraders"
}Включить файлы createMyToolboxFactoryTree.mlx, createMyToolboxSettingsFileUpgraders.mlx, и settingsInfo.json при упаковке и распространении mytoolbox. Разместить settingsInfo.json на панели инструментов resources папка.
Примечание
Необходимо перезапустить MATLAB после изменения settingsInfo.json файл.
После обновления личных параметров панели инструментов можно проверить результаты, чтобы убедиться в правильности обновления. Для проверки результатов обновления используйте matlab.settings.loadSettingsCompatibilityResults функция.
Для проверки правильности обновления перед распространением панели инструментов проверьте результаты обновления. Например, проверьте результаты обновления для версии 2 из mytoolbox перед распространением панели инструментов.
Перезагрузите дерево заводских настроек для mytoolbox.
matlab.settings.reloadFactoryFile('mytoolbox');Используйте settings для доступа к корню дерева настроек и проверки персонального значения FontSize параметр был правильно перемещен из MyFontSize установка. Доступ к настройкам панели инструментов инициирует процесс обновления личных настроек.
s = settings; s.mytoolbox.font.FontSize
ans =
Setting 'mytoolbox.font.FontSize' with properties:
ActiveValue: 15
TemporaryValue: <no value>
PersonalValue: 15
FactoryValue: 11Запустить matlab.settings.loadSettingsCompatibilityResults функция для получения результатов обновления для версии 2 из mytoolbox. Убедитесь в отсутствии исключений.
matlab.settings.loadSettingsCompatibilityResults('mytoolbox','Version2')
ans =
ReleaseCompatibilityResults with properties:
VersionLabel: "Version2"
PreValidationExceptions: [0×0 matlab.settings.ReleaseCompatibilityException]
Results: [1×1 matlab.settings.VersionResults]Доступ к Results для определения количества выполненных операций обновления.
upgradeResults.Results
ans =
VersionResults with properties:
VersionLabel: "Version2"
VersionChanges: [1×2 matlab.settings.OperationResult]Проверьте состояние каждой операции обновления, чтобы убедиться, что они были выполнены успешно.
upgradeResults.Results.VersionChanges.Status
ans =
"Succeeded"
ans =
"Succeeded"
Результаты обновления можно также проверить после установки новой версии панели инструментов. Этот подход полезен, например, если пользователь панели инструментов помогает устранить неполадки в настройках панели инструментов после обновления.
Например, предположим, что у вас есть версия 1 из mytoolbox установлены и установлены личные значения для нескольких параметров. После установки версии 2 из mytoolboxПроверьте результаты обновления, чтобы убедиться, что ваши личные настройки перемещены правильно.
Используйте settings для доступа к корню дерева параметров и настройкам панели инструментов. Доступ к параметрам панели инструментов инициирует процесс обновления личных параметров.
s = settings; s.mytoolbox
ans =
SettingsGroup 'mytoolbox' with properties:
font: [1×1 SettingsGroup]Запустить matlab.settings.loadSettingsCompatibilityResults для получения результатов обновления. Проверьте состояние каждой операции обновления, чтобы убедиться, что они были выполнены успешно.
upgradeResults = matlab.settings.loadSettingsCompatibilityResults('mytoolbox','Version2'); upgradeResults.Results.VersionChanges.Status
ans =
"Succeeded"
ans =
"Succeeded"
Примечание
После запуска matlab.settings.reloadFactoryFile и matlab.settings.loadSettingsCompatibilityResults удалите журнал результатов перед повторным запуском функций. Удаление журнала обеспечивает постоянную загрузку правильных результатов обновления. Журнал находится в папке предпочтений, в папке папка.toolboxname
matlab.settings.reloadFactoryFile и matlab.settings.loadSettingsCompatibilityResults функции предназначены только для отладки и не должны включаться в код панели инструментов отгрузки.
При добавлении параметров на панель инструментов для изменения пользователями панели инструментов можно создавать прослушиватели параметров для определения того, когда изменяется значение параметра, чтобы панель инструментов могла реагировать на изменения. Чтобы создать прослушиватель параметров, используйте addlistener функция.
Например, создайте прослушиватель параметров для mytoolbox.font.FontSize установка.
s = settings; settingListener = addlistener(s.mytoolbox.font,'FontSize','PostSet', ... @(src,evnt)disp('Font size changed'));
Установка значения FontSize установка для 12. Установка значения инициирует PostSet событие на установке.
s.mytoolbox.font.FontSize.PersonalValue = 12;
Font size changed
matlab.settings.FactoryGroup.createToolboxGroup | matlab.settings.loadSettingsCompatibilityResults | matlab.settings.reloadFactoryFile