Создание заводских настроек для тулбоксов

Если вы создаете тулбокс, который работает с MathWorks® можно добавить в тулбокс параметры, позволяющие пользователям настраивать внешний вид и поведение тулбокса после установки. Например, можно добавить настройку, которая позволяет пользователю изменять размер шрифта в вашем тулбоксе.

Чтобы добавить настройки, которые включают заводские значения, поставляемые с тулбоксом, создайте заводские настройки с помощью matlab.settings.FactoryGroup.createToolboxGroup функция. После установки тулбокса пользователи могут либо использовать заводские значения, либо задавать собственные личные или временные значения.

Создание заводских настроек для тулбоксов включает следующие шаги:

  1. Создайте дерево заводских настроек.

  2. Создайте файл JSON заводских настроек.

  3. Протестируйте дерево заводских настроек.

Создание дерева заводских настроек

Первым шагом к созданию заводских настроек тулбокса является создание дерева заводских настроек. Используйте 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® задает несколько функций валидации.

Имя

Значение

Функции, вызываемые на входах

matlab.settings.mustBeStringScalar(A)

A должен быть строковым скаляром.

isStringScalar

matlab.settings.mustBeLogicalScalar(A)

A должен быть логическим скаляром.

islogical, isscalar

matlab.settings.mustBeNumericScalar(A)

A должен быть числовым скаляром.

isnumeric, isscalar

matlab.settings.mustBeIntegerScalar(A)

A должен быть целочисленным скаляром.

isinteger, isscalar

mustBePositive(A)

A > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(A)

A <= 0

ge, isreal, isnumeric, islogical

mustBeFinite(A)

A не имеет NaN и нет Inf элементы.

isfinite

mustBeNonNan(A)

A не имеет NaN элементы.

isnan

mustBeNonnegative(A)

A >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(A)

A < 0

lt, isreal, isnumeric, islogical

mustBeNonzero(A)

A ~= 0

eq, isnumeric, islogical

mustBeNonempty(A)

A не пуст.

isempty

mustBeNonsparse(A)

A не имеет разреженных элементов.

issparse

mustBeNumeric(A)

A является числовым.

isnumeric

mustBeNumericOrLogical(A)

A является числовым или логическим.

isnumeric, islogical

mustBeReal(A)

A не имеет мнимой части.

isreal

mustBeInteger(A)

A == floor(A)

isreal, isfinite, floor, isnumeric, islogical

Чтобы задать функцию валидации при создании заводских настроек, используйте '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.

Создание файла JSON заводских настроек

В порядок, чтобы 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.

Убедитесь в обратной совместимости между версиями тулбокса

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

Чтобы гарантировать обратную совместимость при внесении изменений в дерево заводских настроек, выполните следующие шаги:

  1. Измените дерево заводских параметров.

  2. Журнал изменений в дереве.

  3. Измените файл JSON заводских настроек.

  4. Проверьте результаты обновления дерева личных настроек.

Изменения, которые могут привести к проблемам несовместимости в обратном направлении, включают переименование, перемещение и удаление заводских параметров тулбокса или групп параметров. Если вы добавляете новые настройки в дерево заводских настроек, то вам не нужно следовать этим шагам.

Предупреждение

Изменения в функции создания дерева заводских настроек могут повлиять на сохраненные личные и временные значения настроек для рассматриваемого тулбокса. Чтобы избежать потери данных, создайте резервную копию файла настроек тулбокса перед внесением каких-либо изменений или перед обновлением тулбокса. Файл настроек тулбокса, toolboxname.mlsettings, находится в папке настроек. Чтобы увидеть полный путь к папке настроек, введите prefdir в Командном Окне 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

Изменение файла JSON заводских настроек

В порядок, чтобы 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 перед распределением тулбокса.

  1. Перезагрузите дерево заводских настроек для mytoolbox.

    matlab.settings.reloadFactoryFile('mytoolbox');
  2. Используйте 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
  3. Запустите 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]
  4. Доступ к Results свойство для определения количества выполненных операций обновления.

    upgradeResults.Results
    ans = 
      VersionResults with properties:
          VersionLabel: "Version2"
        VersionChanges: [1×2 matlab.settings.OperationResult]
  5. Проверьте состояние каждой операции обновления, чтобы убедиться, что она выполнена успешно.

    upgradeResults.Results.VersionChanges.Status
    ans = 
        "Succeeded"
    
    ans = 
        "Succeeded"
    

Результаты обновления можно также изучить после установки новой версии тулбокса. Этот подход полезен, например, если вы помогаете пользователю тулбокса устранить проблемы с настройками тулбокса после обновления.

Например, предположим, что у вас есть версия 1 от mytoolbox установить и установить личные значения для нескольких настроек. После установки 2 от mytoolboxпроверьте результаты обновления, чтобы убедиться, что ваши личные параметры перемещены правильно.

  1. Используйте settings функция для доступа к корню дерева настроек и настройкам тулбокса. Доступ к настройкам тулбокса инициирует процесс обновления личных настроек.

    s = settings;
    s.mytoolbox
    ans = 
      SettingsGroup 'mytoolbox' with properties:
        font: [1×1 SettingsGroup]

  2. Запустите 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

См. также

| |

Похожие темы