diff --git a/McuLib/m/customtable.m b/McuLib/m/customtable.m index 43ab261..f247a1f 100644 --- a/McuLib/m/customtable.m +++ b/McuLib/m/customtable.m @@ -8,13 +8,17 @@ classdef customtable tableControl = mask.getDialogControl(table_name); tableParameter = mask.getParameter(table_name); nCols = tableControl.getNumberOfColumns; - % if nCols > 0 - % for i = 1:nCols - % tableControl.removeColumn(1); - % end - % end - % column = tableControl.addColumn(Name='Title', Type='edit'); - % tableControl.Sortable = 'on'; + % инициализация колонок если они пустые + % такое случается при removeParameter + if isempty(tableControl.Columns) + if nCols > 0 + for i = 1:nCols + tableControl.removeColumn(1); + end + end + column = tableControl.addColumn(Name='Title', Type='edit'); + tableControl.Sortable = 'on'; + end column.Name = tableParameter.Alias; end diff --git a/McuLib/m/periphConfig.m b/McuLib/m/periphConfig.m index c0e8146..25c3a0e 100644 --- a/McuLib/m/periphConfig.m +++ b/McuLib/m/periphConfig.m @@ -10,8 +10,9 @@ classdef periphConfig tableNames = {'incTable', 'srcTable'}; columns_backup = customtable.save_all_tables(tableNames); - try + rowWidth = str2double(get_param(blockPath, 'rowWidth')); + containerName = 'configTabAll'; periphConfig.clear_all_from_container(mask, containerName); @@ -42,12 +43,13 @@ classdef periphConfig tabCtrl = container.addDialogControl('tab', periph); tabCtrl.Prompt = [periph ' Config']; + rowCountMap = containers.Map(); for j = 1:numel(defNames) defPrompt = defNames{j}; def = defines.(defPrompt); % Вызов функции добавления одного параметра - periphConfig.addConfig(mask, containerName, periph, defPrompt, def); + periphConfig.addConfig(mask, containerName, periph, defPrompt, def, rowCountMap, rowWidth); end end end @@ -492,13 +494,26 @@ classdef periphConfig end end - function addConfig(mask, containerName, periphName, defPrompt, def) + function addConfig(mask, containerName, periphName, defPrompt, def, rowCountMap, rowWidth) % mask — объект маски Simulink.Mask.get(blockPath) % containerName — имя контейнера, в который добавляем параметр (например, 'configTabAll') % periphName — имя вкладки / контейнера для текущего периферийного блока (например, 'ADC') % defPrompt — имя параметра в Defines (например, 'shift_enable') % def — структура с описанием параметра (Prompt, Def, Type, Default, NewRow и т.п.) + if ~isKey(rowCountMap, periphName) + rowCountMap(periphName) = 0; + end + rowCount = rowCountMap(periphName) + 1; + + % Устанавливаем NewRow, если он не задан + if ~isfield(def, 'NewRow') + def.NewRow = mod(rowCount - 1, rowWidth) == 0; + elseif def.NewRow == true + rowCount = 0; + end + rowCountMap(periphName) = rowCount; + % Найдем контейнер с таким именем container = mask.getDialogControl(containerName); if isempty(container)