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