Mercurial > hg > ltpda
diff m-toolbox/m/gui/gltpda/pan6globals.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/pan6globals.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,201 @@ +function pan6globals(varargin) + +% ======================================================================== +% ====================== Panel for the globals =========================== +% ======================================================================== +% This is the GUI m-file to show that the panel relative to the global +% variables set by the user. +% +% $Id: pan6globals.m,v 1.6 2008/08/30 12:32:25 nicola Exp $ + +global gl currSys +currPanel = varargin{1}; +panelDimens = get(currPanel, 'Position'); +backColor = get(currPanel, 'BackgroundColor'); +selBlocks = 0; +enlargedFont = 0; +currSys = ''; + +alltimers = timerfindall; +stop(alltimers(1)); +set(alltimers(1),'TimerFcn',@ContinuousParamCheck,'Period',0.3); +start(alltimers(1)); + + %---------------------------------------------------------------------- + function buildGlobalPanel(varargin) + %---------------------------------------------------------------------- + + globBlock = find_system(bdroot,'SearchDepth',1,'BlockType','SubSystem','Tag','globals'); + if isempty(globBlock) || (~isempty(varargin) && isnumeric(varargin{3}) && varargin{3}==-1) + gl = struct(); + updateGlobalBlock() + else + gl = get_param(globBlock{1},'UserData'); + end + +% if isempty(gl) || (~isempty(varargin) && isnumeric(varargin{3}) && varargin{3}==-1), gl=struct(); end + + panelDimens = get(currPanel, 'Position'); + delete(findobj(gcf,'Parent',currPanel)) + varnames = fieldnames(gl); + y = numel(varnames); + +% 'List of global variables' text: + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','Position',[20 panelDimens(4)-40 panelDimens(3)-40 20],'String','List of global variables:','HorizontalAlignment','center','FontSize',enlargedFont+10,'FontWeight','bold','Visible','on','Style','text'); +% 'Global names' text: + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','Position',[panelDimens(3)/2-150-20 panelDimens(4)-70 150 20],'String','Names:','HorizontalAlignment','right','FontSize',enlargedFont+9,'Visible','on','Style','text'); +% 'Global values' text: + uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','Position',[panelDimens(3)/2+20 panelDimens(4)-70 150 20],'String','Values:','HorizontalAlignment','left','FontSize',enlargedFont+9,'Visible','on','Style','text'); + + for i=1:y +% % 'gl.' text: +% uicontrol('Parent',currPanel,'BackgroundColor',backColor,'Units','pixels','Position',[panelDimens(3)/2-200-20-15 panelDimens(4)-20-24*(i+2)-5 12 20],'String','gl.','FontSize',enlargedFont+8,'Visible','on','Enable','off','Style','text'); + % Variable name edit field: + uicontrol('Parent',currPanel,'Units','pixels','Position',[panelDimens(3)/2-200-20 panelDimens(4)-20-24*(i+2) 200 20],'String',['gl.',varnames{i}],'FontSize',enlargedFont+8,'Visible','on','Enable','on','UserData',i,'Callback',@globalName,'Style','edit'); + % Variable value edit field: + currVal = gl.(varnames{i}); + if iscell(currVal), currVal = cell2str(currVal); + else currVal = mat2str(currVal); + end + uicontrol('Parent',currPanel,'Units','pixels','Position',[panelDimens(3)/2+20 panelDimens(4)-20-24*(i+2) 200 20],'String',currVal,'FontSize',enlargedFont+8,'Visible','on','Enable','on','UserData',i,'Callback',@globalValue,'Style','edit'); + % Remove input button + uicontrol('Parent',currPanel,'Units','pixels','Position',[700 panelDimens(4)-20-24*(i+2) 20 20],'String','-','Visible','on','Enable','on','Callback', @RemoveGlobal,'UserData',i,'Style','pushbutton'); + end + +% Add input button + uicontrol('Parent',currPanel,'Units','pixels','Position',[panelDimens(3)/2-10 panelDimens(4)-50-24*(y+2) 20 20],'String','+','TooltipString','Add a global variable','Visible','on','Enable','on','Callback', @AddGlobal,'Style','pushbutton'); + +% Clear all button: + uicontrol('Parent',currPanel,'Units','pixels','HorizontalAlignment','center','Position',[panelDimens(3)-100 10 80 16],'FontAngle','italic','FontSize',enlargedFont+8,'String','Clear all','TooltipString','Clear all the global variables','Visible','on','Callback',{@buildGlobalPanel,-1},'Style','pushbutton'); + + + end + %---------------------------------------------------------------------- + +%% + %---------------------------------------------------------------------- + function ContinuousParamCheck(varargin) + % This is the function to execute a continuous check on the status + % of the current selection (system and block). + + % Clear if nothing's selected + if isempty(bdroot) || strcmp(get_param(bdroot,'BlockDiagramType'),'library') || isempty(find_system(bdroot,'FindAll','on','Type','Annotation','Tag','ltpda model')) + delete(findobj(gcf,'Parent',currPanel)) + currSys = gcs; + gl = struct(); + return + else + if ~strcmp(gcs,currSys) + % The selection changed. + currSys = gcs; + buildGlobalPanel(); + end + end + +% if ~isempty(find_system(bdroot,'FindAll','on','Type','Annotation','Tag','ltpda model')) +% % It's selected a ltpda simulink analysis diagram. +% if ~strcmp(gcs,currSys) +% % The selection changed. +% currSys = gcs; +% buildGlobalPanel(); +% end +% end + + end + %---------------------------------------------------------------------- + +%% + %---------------------------------------------------------------------- + function AddGlobal(varargin) + + newGlob = 'global'; + ii = 1; + while isfield(gl,[newGlob,num2str(ii)]), ii = ii+1; end + newGlob = [newGlob,num2str(ii)]; + gl.(newGlob) = []; + updateGlobalBlock() + buildGlobalPanel() + + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function RemoveGlobal(hObject,varargin) + + currGlob = get(hObject,'Userdata'); + varnames = fieldnames(gl); + gl = rmfield(gl,varnames{currGlob}); + updateGlobalBlock() + buildGlobalPanel() + + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function globalName(hObject,varargin) + + currGlob = get(hObject,'Userdata'); + varnames = fieldnames(gl); + newGlobName = get(hObject,'String'); + if numel(newGlobName)<4 || ~strcmp(newGlobName(1:3),'gl.'), newGlobName = ['gl.',strrep(newGlobName,'.','')]; end + + newGlobName = ['gl.',genvarname(newGlobName(4:end))]; + if isempty(get(hObject,'String')) || isfield(gl,newGlobName(4:end)), set(hObject,'String',['gl.',varnames{currGlob}]); return; end + + set(hObject,'String',newGlobName); + gl = utils.prog.rnfield(gl,varnames{currGlob},newGlobName(4:end)); + updateGlobalBlock() + buildGlobalPanel() + + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function globalValue(hObject,varargin) + + currGlob = get(hObject,'Userdata'); + newValue = get(hObject,'String'); + varnames = fieldnames(gl); + try newValue = eval(newValue); catch end + gl.(varnames{currGlob}) = newValue; + updateGlobalBlock() + buildGlobalPanel() + + end + %---------------------------------------------------------------------- + + %---------------------------------------------------------------------- + function updateGlobalBlock(varargin) + + varNames = fieldnames(gl); + + if numel(varNames)==0 + % Remove the block if no globals are left: + globBlock = find_system(bdroot,'BlockType','SubSystem','Tag','globals'); + if ~isempty(globBlock) + delete_block(globBlock) + return; + end + else + globBlock = find_system(bdroot,'SearchDepth',1,'BlockType','SubSystem','Tag','globals'); + try globBlock = globBlock{1}; catch end + % Check if the globals block exists: + if isempty(globBlock) + globBlock = add_block('ltpda_library/Commonly Used Blocks/Globals',[bdroot '/Globals']); + annotation = find_system(bdroot,'FindAll','on','Type','Annotation','Tag','ltpda model'); + position = get_param(annotation,'Position'); + set_param(globBlock,'Position',[position(1)+20 position(2)-25 position(1)+150 position(2)-10 ]) + set_param(globBlock,'DropShadow','on') + end + + % Update the globals block: + set_param(globBlock,'UserData',gl) + set_param(globBlock,'UserDataPersistent','on') + end + + + end + %---------------------------------------------------------------------- + +%% +end \ No newline at end of file