Если вы создаете тулбокс, который работает с MathWorks® можно добавить в тулбокс параметры, позволяющие пользователям настраивать внешний вид и поведение тулбокса после установки. Например, можно добавить настройку, которая позволяет пользователю изменять размер шрифта в вашем тулбоксе.
Чтобы добавить настройки, которые включают заводские значения, поставляемые с тулбоксом, создайте заводские настройки с помощью matlab.settings.FactoryGroup.createToolboxGroup
функция. После установки тулбокса пользователи могут либо использовать заводские значения, либо задавать собственные личные или временные значения.
Создание заводских настроек для тулбоксов включает следующие шаги:
Создайте дерево заводских настроек.
Создайте файл JSON заводских настроек.
Протестируйте дерево заводских настроек.
Первым шагом к созданию заводских настроек тулбокса является создание дерева заводских настроек. Используйте matlab.settings.FactoryGroup.createToolboxGroup
функция для создания корневой группы заводских параметров для тулбокса. Например, создайте корневую заводскую группу для тулбокса mytoolbox
. По умолчанию заводские группы скрыты, что означает, что они не отображаются в родительской группе настроек. Задайте 'Hidden'
Пара "имя-значение" со значением false
чтобы группа была видна в дереве заводских настроек либо при отображении в Командном окне, либо при заполнении клавишей Tab.
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
необходимо следовать этому шаблону. The 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.MyFontSize
ans = 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
Создайте функцию без входов, чтобы сохранить инструкции по обновлению личных настроек из предыдущей версии тулбокса. Включите файл с кодом тулбокса, когда вы упакуете и распределите тулбокс. Запись изменений в дерево заводских параметров гарантирует, что пользователи тулбокса, обновляющиеся до новой версии, не имеют проблем несовместимости с существующими параметрами тулбокса. Изменения, которые могут привести к проблемам несовместимости в обратном направлении, включают переименование, перемещение и удаление заводских параметров тулбокса или группы параметров. Вам не нужно записывать сложение новых настроек в дерево заводских настроек.
В функции добавьте объект upgrader файла настроек для каждой версии тулбокса, который содержит изменения в дереве заводских параметров. Используйте 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
Не изменяйте записанные инструкции по обновлению в функции обновления дерева настроек после упаковки и распространения тулбокса среди пользователей. Инструкции по изменению могут иметь неожиданные результаты. Если вы вносите дополнительные изменения в дерево настроек, запишите изменения, добавив их к существующим инструкциям или создав новый образец upgrader.
Для примера этот код записей изменения для версии 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
папка.
Примечание
После изменения settingsInfo.json
необходимо перезапустить MATLAB файл.
После обновления личных параметров тулбокса можно проверить результаты, чтобы убедиться, что обновление произошло правильно. Чтобы изучить результаты обновления, используйте 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
functions, удалите журнал результатов перед повторным запуском функций. Удаление журнала обеспечивает постоянную загрузку правильных результатов обновления. Журнал расположен в папке preferences, в
папка.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