From 0145ec818e8880c6dd5d7dd84f244d209d50cd3a Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sun, 15 Jun 2025 15:52:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B0=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=B2=D1=83=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=B2=20=D1=81=D1=82=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit сделана инициализация таблицы по необходимости (деинициализированные колонки) --- McuLib/m/customtable.m | 18 +++++++++++------- McuLib/m/periphConfig.m | 21 ++++++++++++++++++--- 2 files changed, 29 insertions(+), 10 deletions(-) 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)