Mercurial > hg > ltpda
diff m-toolbox/m/gui/gltpda/g_LoadInputParamCallback.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_LoadInputParamCallback.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,156 @@ + function g_LoadInputParamCallback(currPanel,varargin) + % This callback is called whenever the user selects an Input block. The + % callback draws the panel to set the only parameter associated to this + % type of block: the ordinal number of AO. + + global LTPDAinvar selBlocks + + backColor = get(currPanel, 'BackgroundColor'); + panelDimens = get(currPanel, 'Position'); + + if length(LTPDAinvar)<1 + % Text: 'Please load at least one AO in memory' + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','HorizontalAlignment','center','Position',[(panelDimens(4)-200)/2 panelDimens(4)-100 200 30],'String','Please load at least one AO in memory','Visible','on','Style','text'); + % Button: 'Add data' + uicontrol('Parent',currPanel,'Units','pixels','HorizontalAlignment','center','Position',[(panelDimens(4)-200)/2 panelDimens(4)-150 200 30],'String','Add data','FontSize',guiFontSize+1,'Visible','on','Enable','on','Callback',@AddButtonCallback,'Style','pushbutton'); + else + % Text: 'Obj input:' + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','HorizontalAlignment','left','Position',[100 panelDimens(4)-60 80 20],'String','Object input:','Visible','on','Style','text'); + % Edit field: + children = get_param(gcb,'Blocks'); + inputblock = strcat(gcb,'/',children{1}); + currAOinput = get_param(inputblock,'Value'); + uicontrol('Parent',currPanel,'Units','pixels','HorizontalAlignment','center','Position',[190 panelDimens(4)-57 50 20],'String',currAOinput,'Visible','on','Enable','on','Callback',@InputEditCallback,'Tag','inputEditField','Style','edit'); + + % Text: 'Objs list:' + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','HorizontalAlignment','left','Position',[20 panelDimens(4)-135 50 20],'String','Object list:','Visible','on','Style','text'); + % Popup input objs list: + xx = size(LTPDAinvar,1); + listInput = cell(xx,1); + for j=1:xx + switch class(LTPDAinvar{j,1}) + case 'ao' + anobject = LTPDAinvar{j,1}; + aoname = anobject.name; + aocreated = char(anobject.created); + listInput{j,1} = [num2str(j) , ' . AO .' , aoname , '__' , aocreated]; + case 'plist' + paramNumb = nparams(LTPDAinvar{j,1}); + objcreated = char(LTPDAinvar{j,1}.created); + listInput{j,1}=[num2str(j),' . PLIST .',num2str(paramNumb),' params','__',objcreated]; + case 'specwin' + listInput{j,1}=[num2str(j),' . SPECWIN .','__','no creation time']; + case 'pzmodel' + objcreated = char(LTPDAinvar{j,1}.created); + listInput{j,1}=[num2str(j),' . PZMODEL .','__',objcreated]; + otherwise + if isa(LTPDAinvar{j,1},'ltpda_uo') + objclass = class(LTPDAinvar{j,1}); + if ~isempty(LTPDAinvar{j,1}), listInput{j,1}=[num2str(j),' . ',objclass]; end + end + end + end + for j=xx:-1:1 + if isempty(listInput{j,1}) + listInput(j,:)=[]; + end + end + inputPopup = uicontrol('Parent',currPanel,'Units','pixels','HorizontalAlignment','center','Position',[80 panelDimens(4)-130 500 20],'String',listInput,'Visible','on','Enable','on','Callback',@InputPopupCallback,'Tag','inputPopupField','Style','popup'); + + % Set the popup list on the proper line: + for ii = 1:size(listInput,1) + if str2double(deblank(strtok(listInput{ii}))) == str2double(currAOinput), break; end + end + set(inputPopup,'Value',ii); + end + + + + %---------------------------------------------------------------------- + function InputEditCallback(hObject, varargin) + % This callback is called whenever the user modify the input parameter + % associated to an Input block + + if ~isempty(varargin{1}), newValue = varargin{1}; + else newValue = str2double(get(hObject,'String')); + end + % Check it's an integer: + newValue = round(newValue); + % Check if the value is acceptable, ie: + % - if it's <length(LTPDAinvar) + if newValue>length(LTPDAinvar) + newValue=length(LTPDAinvar); + end + % - if it's a LTPDA valid object: + if ~isa(LTPDAinvar{newValue,1},'ltpda_uo') + children = get_param(gcbh,'Blocks'); + inputblock = strcat(strcat(get(gcbh,'Path'),'/',get(gcbh,'Name')),'/',children{1}); + oldValue = get_param(inputblock,'Value'); + set(findobj('Tag','inputEditField'),'String',oldValue); + return + end + + set(hObject,'String',num2str(newValue)); + + % Set the popup list on the proper line: + inputPopup = findobj('Tag','inputPopupField'); + listInput = get(inputPopup,'String'); + for mm = 1:size(listInput,1) + if str2double(deblank(strtok(listInput{mm}))) == newValue, break; end + end + set(inputPopup,'Value',mm); + + % Object name for the annotation: + objName = LTPDAinvar{newValue,1}.name; + if numel(objName)>3 && strcmpi(objName,'none'), objName = class(LTPDAinvar{newValue,1}); end + if numel(objName)>20, objName = ['...',LTPDAinvar{newValue,1}.name(end-20:end)]; end + objName = [num2str(newValue),': ',objName]; + + for i=1:length(selBlocks) + % Since all input blocks are masks, and we want to change the + % value deep inside a block INSIDE this mask, we can't use the + % direct handles but the following: + children{i}=get_param(selBlocks(i),'Blocks'); + inputblock=strcat(strcat(get(selBlocks(i),'Path'),'/',get(selBlocks(i),'Name')),'/',children{i}{1}); + set_param(inputblock,'Value',num2str(newValue)); + % Set the annotation: + set_param(selBlocks(i),'AttributesFormatString',objName); + % Set the MaskDisplay = n° of input + set_param(selBlocks(i),'MaskDisplay',sprintf('disp(''%s'')',num2str(newValue))); + end + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function InputPopupCallback(hObject, varargin) + % This callback is called whenever the user clicks on the input list in + % the parameters panel asociated to the 'Input Obj' block + + val = get(hObject, 'Value'); + objLines = get(hObject, 'String'); + objnumb = str2double(deblank(strtok(objLines{val}))); + + InputEditCallback(findobj('Tag','inputEditField'),objnumb); + + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function AddButtonCallback(varargin) + % Callback function: run when the user click the "Add data" button + + filenames = uipickfiles('REFilter','.txt'); + if ~isempty(filenames) && ~isnumeric(filenames(1,1)) + [x,y]=size(filenames); + for nn=1:y + anobject = {ao(filenames{nn}),1,'From file'}; + LTPDAinvar = [LTPDAinvar;anobject]; + end + disp(sprintf(' + %g AOs added to the global variable LTPDAinvar', y)) + ltpdagui('Redraw',2); + end + end + %---------------------------------------------------------------------- + + + end