diff m-toolbox/sltpda/sltpda_control.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/sltpda/sltpda_control.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,513 @@
+function varargout = sltpda_control(varargin)
+% SLTPDA_CONTROL M-file for sltpda_control.fig
+%      SLTPDA_CONTROL, by itself, creates a new SLTPDA_CONTROL or raises the existing
+%      singleton*.
+%
+%      H = SLTPDA_CONTROL returns the handle to a new SLTPDA_CONTROL or the handle to
+%      the existing singleton*.
+%
+%      SLTPDA_CONTROL('CALLBACK',hObject,eventData,handles,...) calls the local
+%      function named CALLBACK in SLTPDA_CONTROL.M with the given input arguments.
+%
+%      SLTPDA_CONTROL('Property','Value',...) creates a new SLTPDA_CONTROL or raises the
+%      existing singleton*.  Starting from the left, property value pairs are
+%      applied to the GUI before sltpda_control_OpeningFunction gets called.  An
+%      unrecognized property name or invalid value makes property application
+%      stop.  All inputs are passed to sltpda_control_OpeningFcn via varargin.
+%
+%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
+%      instance to run (singleton)".
+%
+% See also: GUIDE, GUIDATA, GUIHANDLES
+
+% Edit the above text to modify the response to help sltpda_control
+
+% Last Modified by GUIDE v2.5 04-May-2007 09:13:16
+
+% Begin initialization code - DO NOT EDIT
+gui_Singleton = 1;
+gui_State = struct('gui_Name',       mfilename, ...
+                   'gui_Singleton',  gui_Singleton, ...
+                   'gui_OpeningFcn', @sltpda_control_OpeningFcn, ...
+                   'gui_OutputFcn',  @sltpda_control_OutputFcn, ...
+                   'gui_LayoutFcn',  [] , ...
+                   'gui_Callback',   []);
+if nargin && ischar(varargin{1})
+    gui_State.gui_Callback = str2func(varargin{1});
+end
+
+if nargout
+    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
+else
+    gui_mainfcn(gui_State, varargin{:});
+end
+% End initialization code - DO NOT EDIT
+
+
+% --- Executes just before sltpda_control is made visible.
+function sltpda_control_OpeningFcn(hObject, eventdata, handles, varargin)
+% This function has no output args, see OutputFcn.
+% hObject    handle to figure
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+% varargin   command line arguments to sltpda_control (see VARARGIN)
+
+% Choose default command line output for sltpda_control
+handles.output = hObject;
+
+% Update handles structure
+guidata(hObject, handles);
+
+% UIWAIT makes sltpda_control wait for user response (see UIRESUME)
+% uiwait(handles.main);
+
+% load logo and display in axes
+logo = imread('images/sltpda.jpg');
+image(logo, 'Parent', handles.logoAxes) 
+set(handles.logoAxes,'Visible', 'off');
+
+
+% make a timer object which gets the currently selected SIMULINK model
+csyst = timer();
+set(csyst, 'TimerFcn', {@setCurrentModel,handles.currentModelTxt});
+set(csyst, 'Period', 0.5, 'ExecutionMode', 'FixedRate');
+start(csyst);
+setappdata(handles.main, 'csyst', csyst);
+
+% % make a timer object which gets the parameters for the current block
+% cbt = timer();
+% set(cbt, 'TimerFcn', {@setCurrentBlock,handles});
+% set(cbt, 'Period', 0.5, 'ExecutionMode', 'FixedRate');
+% start(cbt);
+% setappdata(handles.main, 'cbt', cbt);
+
+% setup loops
+loops = [];
+setappdata(handles.main, 'loops', loops);
+
+
+
+% --- Outputs from this function are returned to the command line.
+function varargout = sltpda_control_OutputFcn(hObject, eventdata, handles) 
+% varargout  cell array for returning output args (see VARARGOUT);
+% hObject    handle to figure
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Get default command line output from handles structure
+varargout{1} = handles.output;
+
+
+% --- Executes during object creation, after setting all properties.
+function main_CreateFcn(hObject, eventdata, handles)
+% hObject    handle to main (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    empty - handles not created until after all CreateFcns called
+
+
+% --- Executes on button press in openToolboxBtn.
+function openToolboxBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to openToolboxBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+open('sltpda.mdl')
+
+
+
+% --- Executes on button press in openModel.
+function openModel_Callback(hObject, eventdata, handles)
+% hObject    handle to openModel (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Pop-up dialog box to choose model file
+[filename, pathname] = uigetfile({'*.mdl', 'sLTPDA Model File';
+                                  '*.xml', 'LTPDA XML AO File'},...
+                        'MDL-file input',...
+                        'MultiSelect', 'on');
+
+if filename ~= 0
+  % Loop over selected files
+  if iscellstr(filename)
+    nfiles = length(filename);
+    for f=1:nfiles
+      [path, name, ext, vers] = fileparts(char(filename(f)));
+      switch ext
+        case '.mdl'
+          infile = fullfile(pathname, char(filename(f)));     
+        case '.xml'          
+          % make mdl file from ao
+          a = ao(char(filename(f)));
+          mdlfilename = get(a, 'mdlfilename');
+          mdlfilein = get(a, 'mdlfile');
+          idx = strfind(mdlfilein, '\n');
+          % convert mdlfile to a file
+          fd = fopen(mdlfilename, 'w+');
+          for j=1:length(idx)-1
+            i1 = idx(j)+2;
+            i2 = idx(j+1)-1;
+            fprintf(fd, '%s\n', mdlfilein(i1:i2));
+          end
+          fprintf(fd, '}\n');
+          fclose(fd);
+          
+          infile = mdlfilename;
+        otherwise
+          error('### unknown file type.');
+      end
+      open_system(infile);
+    end
+  else
+    [path, name, ext, vers] = fileparts(char(filename));
+    switch ext
+      case '.mdl'
+        infile = fullfile(pathname, char(filename));
+      case '.xml'
+        % make mdl file from ao
+        a = ao(char(filename));
+        mdlfilename = get(a, 'mdlfilename');
+        mdlfilein = get(a, 'mdlfile');
+        idx = strfind(mdlfilein, '\n');
+        % convert mdlfile to a file
+        fd = fopen(mdlfilename, 'w+');
+        for j=1:length(idx)-1
+          i1 = idx(j)+2;
+          i2 = idx(j+1)-1;
+          fprintf(fd, '%s\n', mdlfilein(i1:i2));
+        end
+        fprintf(fd, '}\n');
+        fclose(fd);
+
+        infile = mdlfilename;
+      otherwise
+        error('### unknown file type.');
+    end
+    open_system(infile);
+  end
+end
+
+% --- Executes on button press in runModel.
+function runModel_Callback(hObject, eventdata, handles)
+% hObject    handle to runModel (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% get current model name
+model = get(handles.currentModelTxt, 'String');
+sltpda_execute_loops(model);
+
+% --- Executes during object creation, after setting all properties.
+function currentModelTxt_CreateFcn(hObject, eventdata, handles)
+% hObject    handle to currentModelTxt (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    empty - handles not created until after all CreateFcns called
+
+%--------------------------------------------------------------------------
+% 
+function setCurrentModel(obj, event, handles)
+
+try
+  set(handles, 'String', gcs);
+catch
+  set(handles, 'String', '');
+end
+
+
+% --- Executes on button press in writeMfileBtn.
+function writeMfileBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to writeMfileBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% get model
+model = get(handles.currentModelTxt, 'String');
+% get m-file name
+[filename, pathname, filteridx] = uiputfile('*.m', 'Save m-file as', [model '_mfile_.m']);
+
+if ~isempty(filename)
+  mfile = fullfile(pathname, filename);  
+  if sltpda_verify_model(model)
+    % parse model file
+    cmds = sltpda_parse_model(model);
+    % write m file
+    sltpda_cmds2m(model, cmds, mfile);
+    % edit
+    edit(mfile);
+  end
+end
+
+%--------------------------------------------------------------------------
+% set the current block parameters
+% 
+function setCurrentBlock(handles)
+
+bh  = get_param(gcb, 'handle');
+cmd = getCmdFromHandle(bh, handles);
+setappdata(handles.main, 'currentBlock', cmd)
+
+try
+  set(handles.parametersHeaderTxt, 'String', ['Parameters for ' gcb]);
+  
+  % get parameters from cmd structure
+  pl = cmd.plist;
+  plist = [];
+  for j=1:length(pl.params)
+    p = pl.params(j);
+    plist = [plist cellstr(p.key)];
+  end
+  set(handles.paramsList, 'String', plist);
+  
+catch
+  set(handles.parametersHeaderTxt, 'String', 'Parameters');
+end
+
+% --- Executes when user attempts to close main.
+function main_CloseRequestFcn(hObject, eventdata, handles)
+% hObject    handle to main (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% cbt = getappdata(handles.main, 'cbt');
+% stop(cbt);
+% delete(cbt);
+
+csyst = getappdata(handles.main, 'csyst');
+stop(csyst);
+delete(csyst);
+
+% Hint: delete(hObject) closes the figure
+delete(hObject);
+
+
+% --- Executes on button press in editLoopsBtn.
+function editLoopsBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to editLoopsBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+
+% --- Executes on selection change in paramsList.
+function paramsList_Callback(hObject, eventdata, handles)
+% hObject    handle to paramsList (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Hints: contents = get(hObject,'String') returns paramsList contents as cell array
+%        contents{get(hObject,'Value')} returns selected item from paramsList
+
+keys = get(hObject, 'String');
+key  = keys{get(hObject,'Value')};
+
+% get the current block
+cmd = getappdata(handles.main, 'currentBlock')
+
+p = find(cmd.plist, key)
+
+if isnumeric(p)
+  set(handles.paramEdit, 'String', num2str(p));
+elseif ischar(p)
+  set(handles.paramEdit, 'String', p);
+elseif isa(p, 'specwin')
+  set(handles.paramEdit, 'String', p.name)
+else
+  warning('!!! unknown parameter type.');
+end
+
+
+% --- Executes during object creation, after setting all properties.
+function paramsList_CreateFcn(hObject, eventdata, handles)
+% hObject    handle to paramsList (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    empty - handles not created until after all CreateFcns called
+
+% Hint: listbox controls usually have a white background on Windows.
+%       See ISPC and COMPUTER.
+if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
+    set(hObject,'BackgroundColor','white');
+end
+
+
+
+function paramEdit_Callback(hObject, eventdata, handles)
+% hObject    handle to paramEdit (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Hints: get(hObject,'String') returns contents of paramEdit as text
+%        str2double(get(hObject,'String')) returns contents of paramEdit as a double
+
+
+% --- Executes during object creation, after setting all properties.
+function paramEdit_CreateFcn(hObject, eventdata, handles)
+% hObject    handle to paramEdit (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    empty - handles not created until after all CreateFcns called
+
+% Hint: edit controls usually have a white background on Windows.
+%       See ISPC and COMPUTER.
+if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
+    set(hObject,'BackgroundColor','white');
+end
+
+
+% --- Executes on selection change in loopList.
+function loopList_Callback(hObject, eventdata, handles)
+% hObject    handle to loopList (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Hints: contents = get(hObject,'String') returns loopList contents as cell array
+%        contents{get(hObject,'Value')} returns selected item from loopList
+
+
+% --- Executes during object creation, after setting all properties.
+function loopList_CreateFcn(hObject, eventdata, handles)
+% hObject    handle to loopList (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    empty - handles not created until after all CreateFcns called
+
+% Hint: listbox controls usually have a white background on Windows.
+%       See ISPC and COMPUTER.
+if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
+    set(hObject,'BackgroundColor','white');
+end
+
+%--------------------------------------------------------------------------
+% get cmd from handle
+function cmd = getCmdFromHandle(blockhandle, handles)
+
+model = get(handles.currentModelTxt, 'String')
+if sltpda_verify_model(model)
+    % parse model file
+    cmds = sltpda_parse_model(model);
+    for j=1:length(cmds)
+      if cmds(j).handle == blockhandle
+        cmd = cmds(j);
+        break;
+      end
+    end
+end
+
+
+% --- Executes on button press in loadCurrentBlock.
+function loadCurrentBlock_Callback(hObject, eventdata, handles)
+% hObject    handle to loadCurrentBlock (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+setCurrentBlock(handles);
+
+
+% --- Executes on button press in addLoopBtn.
+function addLoopBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to addLoopBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+contents = get(handles.paramsList,'String');
+key = contents{get(handles.paramsList,'Value')};
+
+% Find this key in current block
+cmd = getappdata(handles.main, 'currentBlock')
+
+% make new loop
+loop.block  = cmd.name;
+loop.handle = cmd.handle;
+loop.key    = key;
+loop.values = get(handles.paramEdit, 'String');
+loop.on     = 1;
+
+% get existing loops
+loops = getappdata(handles.main, 'loops');
+
+% add this loop
+if ~isempty(loop.values)
+  loops = [loops loop];
+  setappdata(handles.main, 'loops', loops);
+end
+
+
+% set list
+setLoopList(handles);
+
+
+%--------------------------------------------------------------------------
+% set loops into list
+function setLoopList(handles)
+
+loops = getappdata(handles.main, 'loops');
+
+% build list of strings
+objlist = [];
+for j=1:length(loops)
+  l = loops(j);
+  if l.on
+    str    = [sprintf('%s: %s  ', l.block, l.key) num2str(l.values) ' on'];
+  else
+    str    = [sprintf('%s: %s  ', l.block, l.key) num2str(l.values) ' off'];
+  end
+  objlist = strvcat(objlist, str);
+
+end
+
+set(handles.loopList, 'String', objlist);
+set(handles.loopList, 'Value', 1);
+
+
+% --- Executes on button press in pzmodelGuiBtn.
+function pzmodelGuiBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to pzmodelGuiBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+pzmodel_helper;
+
+
+% --- Executes on button press in clearLoopsBtn.
+function clearLoopsBtn_Callback(hObject, eventdata, handles)
+% hObject    handle to clearLoopsBtn (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+setappdata(handles.main, 'loops', []);
+
+% set list
+setLoopList(handles);
+
+
+% --- Executes on button press in executeLoopsChk.
+function executeLoopsChk_Callback(hObject, eventdata, handles)
+% hObject    handle to executeLoopsChk (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+% Hint: get(hObject,'Value') returns toggle state of executeLoopsChk
+
+
+% --- Executes on button press in deleteLoops.
+function deleteLoops_Callback(hObject, eventdata, handles)
+% hObject    handle to deleteLoops (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+
+% --- Executes on button press in loopOnOff.
+function loopOnOff_Callback(hObject, eventdata, handles)
+% hObject    handle to loopOnOff (see GCBO)
+% eventdata  reserved - to be defined in a future version of MATLAB
+% handles    structure with handles and user data (see GUIDATA)
+
+loops    = getappdata(handles.main, 'loops');
+vals     = get(handles.loopList,'Value');
+
+for j=1:vals
+  if loops(j).on
+    loops(j).on = 0;
+  else
+    loops(j).on = 1;
+  end    
+end
+
+setappdata(handles.main, 'loops', loops);
+setLoopList(handles);