Mercurial > hg > ltpda
diff m-toolbox/m/gui/gltpda/g_numberDataInput.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/m/gui/gltpda/g_numberDataInput.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,55 @@ +function g_numberDataInput(hObject,varargin) + % Called whenever the user changes the number of data inputs: + + global params + + if nargin>2 + prevNumb = varargin{1}; + newNumb = varargin{2}; + else + prevNumb = get(hObject,'UserData'); + newNumb = str2double(get(hObject,'String')); + if isnan(newNumb), set(hObject,'String',num2str(prevNumb)); return; end + end + + fakeInp = find_system(gcb,'SearchDepth',1,'LookUnderMasks','all','BlockType','Ground'); + if ~isempty(fakeInp) && newNumb>0 + blockLines = get_param(fakeInp{1},'LineHandles'); + if (blockLines.Outport(1)~=-1 && ~isempty(blockLines.Outport(1))), delete_line(blockLines.Outport(1)); end + delete_block(fakeInp{1}) + end + + dataInports = find_system(gcb,'SearchDepth',1,'LookUnderMasks','all','BlockType','Inport'); + + paramFromSimulink = 0; + for ii=1:nparams(params) + paramvals{ii} = params.params(ii).val; + if isa(paramvals{ii},'char') && numel(paramvals{ii})>2 && strcmp(paramvals{ii},'-->'), paramFromSimulink = paramFromSimulink + 1; end + end + + % To set the proper port number for parameters inport: + for ii=1:paramFromSimulink + set_param(dataInports{end-paramFromSimulink+ii},'Port',num2str(newNumb+11)); + end + % To avoid considering inports for parameters: + dataInports(end-paramFromSimulink+1:end) = []; + + % To remove all previous data inports: + for ii=1:numel(dataInports) + try %#ok<ALIGN> + blockLines = get_param(dataInports{ii},'LineHandles'); + if (blockLines.Outport(1)~=-1 && ~isempty(blockLines.Outport(1))), delete_line(blockLines.Outport(1)); end + delete_block(dataInports{ii}); + catch, end + end + + % To add new inports for all data expected: + if newNumb==0, add_block('simulink/Sources/Ground', [gcb,'/data_input'],'MakeNameUnique','on','Name','data'); end + for ii=1:newNumb + newBlock = add_block('simulink/Sources/In1', [gcb,'/Inport1'],'MakeNameUnique','on','Name',['data',num2str(ii)]); + set_param(newBlock,'Port',num2str(ii)); + end + + g_UpdateInports('',1) + +end