Если вы создаете тулбокс, который работает с продуктами MathWorks®, можно добавить настройки в тулбокс, который пользователи тулбокса могут использовать, чтобы настроить внешний вид и поведение тулбокса после установки. Например, можно добавить установку, которая позволяет пользователю изменять размер шрифта в тулбоксе.
Чтобы добавить настройки, которые включают заводские значения, которые поставляются с тулбоксом, создайте заводские настройки. После того, чтобы установить ваш тулбокс пользователи могут затем или использовать заводские значения или задать их собственные личностные или временные ценности.
Создание заводских настроек для тулбоксов включает эти шаги:
Создайте дерево заводских настроек.
Создайте заводские настройки файл 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
.
function myToolboxFactoryTree = createMyToolboxFactoryTree() myToolboxFactoryTree = matlab.settings.FactoryGroup.createToolboxGroup('mytoolbox', ... 'Hidden',false); toolboxFontGroup = addGroup(myToolboxFactoryTree,'font','Hidden',false) addSetting(toolboxFontGroup,'MyFontSize','FactoryValue',11,'Hidden',false, ... 'ValidationFcn',@matlab.settings.mustBeNumericScalar) addSetting(toolboxFontGroup,'MyFontColor','FactoryValue','Black', ... 'Hidden',false,'ValidationFcn',@matlab.settings.mustBeStringScalar); 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 numericValidationFcn(x) errorMsg = 'Value must be numeric.'; assert(isnumeric(x),errorMsg); end
Добавьте эту функцию валидации в новую установку.
addSetting(s.mysettings,'MyNumericSetting','ValidationFcn',@numericValidationFcn);
Установите значение MyNumericSetting
к нечисловому значению. Как ожидалось MATLAB выдает ошибку.
s.mysettings.MyNumericSetting.PersonalValue = 'Hello';
Unable to validate settings data. Error using myvalidationFcn (line 3) Value must be numeric.
Также можно создать пользовательские функции валидации, чтобы использовать функции валидации 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
и Hidden
должен совпадать с корневым названием группы фабрики тулбокса и скрытым состоянием.
{ "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]" }
Например, создайте settingsInfo.json
файл для mytoolbox
. Задайте mytoolbox
как корневое название группы настроек, false
как скрытое состояние и createMyToolboxFactoryTree
как функция создания дерева настроек.
{ "ToolboxGroupName" : "mytoolbox", "Hidden" : "false", "CreateTreeFcn" : "createMyToolboxFactoryTree" }
После создания создания дерева настроек функционируют и settingsInfo.json
файл для вашего тулбокса, можно протестировать дерево настроек прежде, чем группировать и распределить тулбокс. Тестирование полезно для обеспечения, что структура дерева и поведение настроек работают как ожидалось.
Чтобы протестировать дерево, во-первых, добавляет, папка тулбокса, которая содержит функцию создания дерева настроек и папку ресурсов тулбокса к пути MATLAB. Затем используйте matlab.settings.reloadFactoryFile
функционируйте, чтобы загрузить ваши заводские настройки тулбокса и settings
функционируйте, чтобы получить доступ к корню дерева настроек и вашего дерева заводских настроек тулбокса под ним.
Чтобы избежать неожиданных результатов, необходимо добавить папку тулбокса, которая содержит функцию создания дерева настроек и папку ресурсов тулбокса к пути 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
Создайте функцию без входных параметров, чтобы сохранить инструкции для обновления персональных настроек от предыдущей версии тулбокса. Включайте файл со своим кодом тулбокса, когда вы группируете и распределите тулбокс. Запись изменений в дереве заводских настроек гарантирует, что у пользователей тулбокса, обновляющих до новой версии, нет обратных проблем несовместимости с их существующими настройками тулбокса. Модификации, которые могут вызвать обратные проблемы несовместимости, включают переименование, перемещение и удаление заводских настроек тулбокса или группы настроек. Вы не должны записывать сложение новых настроек к дереву заводских настроек.
В функции добавьте объект средства обновления файла настроек для каждой версии тулбокса, который содержит изменения в дереве заводских настроек. Используйте move
и remove
функции, чтобы записать отдельные изменения. Например, функциональный createMyToolboxSettingsFileUpgraders.mlx
записывает изменения в MyFontSize
и MyFontColor
для версии 2
из mytoolbox
.
function upgraders = createMyToolboxSettingsFileUpgraders() upgraders = matlab.settings.SettingsFileUpgrader('Version2'); upgraders.move("mytoolbox.font.MyFontSize","mytoolbox.font.FontSize"); upgraders.move("mytoolbox.font.MyFontColor","mytoolbox.font.FontColor"); end
Не изменяйте зарегистрированные инструкции по обновлению в функции обновления дерева настроек после упаковки и распределения тулбокса вашим пользователям. Изменение инструкций может иметь неожиданные результаты. Если вы вносите дополнительные изменения в дерево настроек, записываете изменения путем добавления их к существующим инструкциям, или путем создания нового экземпляра средства обновления.
Например, этот код записывает изменения для версии 2
и версия 3
из mytoolbox
.
function upgraders = createMyToolboxSettingsFileUpgraders() upgraders = matlab.settings.SettingsFileUpgrader('Version2'); upgraders.move("mytoolbox.font.MyFontSize","mytoolbox.font.FontSize"); upgraders.move("mytoolbox.font.MyFontColor","mytoolbox.font.FontColor"); upgraders(2) = matlab.settings.SettingsFileUpgrader('Version3'); upgraders(2).remove("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
функции предназначаются для отладки целей только и не должны быть включены в поставляющийся код тулбокса.
matlab.settings.FactoryGroup.createToolboxGroup
| matlab.settings.loadSettingsCompatibilityResults
| matlab.settings.reloadFactoryFile