Mercurial > hg > ltpda
diff m-toolbox/sltpda/loopgui.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/loopgui.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,458 @@ +function varargout = loopgui(varargin) +% LOOPGUI M-file for loopgui.fig +% LOOPGUI, by itself, creates a new LOOPGUI or raises the existing +% singleton*. +% +% H = LOOPGUI returns the handle to a new LOOPGUI or the handle to +% the existing singleton*. +% +% LOOPGUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in LOOPGUI.M with the given input arguments. +% +% LOOPGUI('Property','Value',...) creates a new LOOPGUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before loopgui_OpeningFunction gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to loopgui_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 loopgui + +% Last Modified by GUIDE v2.5 12-Jun-2007 20:24:04 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 0; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @loopgui_OpeningFcn, ... + 'gui_OutputFcn', @loopgui_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 loopgui is made visible. +function loopgui_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 loopgui (see VARARGIN) + +% Choose default command line output for loopgui +handles.output = hObject; + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes loopgui wait for user response (see UIRESUME) +% uiwait(handles.main); + +set(handles.loopLevelSelect, 'String', {'1','2','3','4','5'}); +set(handles.loopLevelSelect, 'Value', 1); + +% get my block handles +myh = get_param(gcb, 'handle'); +setappdata(handles.main, 'loopBlockHandle', myh); + + +% parse model elements and get block list that +% have parameters that can be looped over +blockhandles = find_system(gcs, 'FindAll', 'on', 'type', 'block'); +blocks = []; +k = 1; +for j=1:length(blockhandles) + b = blockhandles(j); + maskType = get(b, 'MaskType'); + if ~strcmp(maskType, 'loop') + maskParams = get(b, 'MaskNames'); + get(b) + if ~isempty(maskParams) + name = get(b, 'Name'); + if ~strcmp(name, 'variable') + parent = get(b, 'Parent'); + name = [parent '/' name]; + blocks(k).handle = b; + blocks(k).name = name; + k = k+1; + end + end + end +end + +setappdata(handles.main, 'blocks', blocks); + +% Fill list +bnames = []; +for j=1:length(blocks) + bnames = [bnames cellstr(blocks(j).name)]; +end +set(handles.blockList, 'String', bnames) + +% get current loop +getLoop(handles); + +% set current value for selected block/param +setCurrentValues(handles) + +% show current block settings +showBlockSettings(handles) + + +%-------------------------------------------------------------------------- +% get the current loop and set lists accordingly +% +function getLoop(handles) + +myh = getappdata(handles.main, 'loopBlockHandle'); +blocks = getappdata(handles.main, 'blocks'); + +set(handles.main, 'Name', get(myh, 'Name')) + +%--------- Set indices for lists +% get mask values +maskVals = get(myh, 'MaskValues'); +bname = maskVals{1}; +% find block in list which matches the current loop settings +blistIdx = 1; +for j=1:length(blocks) + b = blocks(j); + if strcmp(b.name, bname) + blistIdx = j; + end +end +set(handles.blockList, 'Value', blistIdx) +% set params list +setParamsList(handles) + +% set param to the key in loop block +params = get(handles.paramList, 'String'); +param = maskVals{3}; +pidx = 1; +for j=1:length(params) + if strcmp(params{j}, param) + pidx = j; + end +end +set(handles.paramList, 'Value', pidx); + +%-------------------------------------------------------------------------- +% set parameters list from currently selected block +% +function setParamsList(handles) + +% get block handle +bhandle = getblockhandle(handles); + +% get mask params for this block +maskparams = get(bhandle, 'MaskNames'); +set(handles.paramList, 'String', maskparams); + + +% --- Outputs from this function are returned to the command line. +function varargout = loopgui_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 on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (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 popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu 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 blockList. +function blockList_Callback(hObject, eventdata, handles) +% hObject handle to blockList (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 blockList contents as cell array +% contents{get(hObject,'Value')} returns selected item from blockList + +set(handles.paramList, 'Value', 1); +setParamsList(handles) +setCurrentValues(handles) + +% --- Executes during object creation, after setting all properties. +function blockList_CreateFcn(hObject, eventdata, handles) +% hObject handle to blockList (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 + + +% --- Executes on selection change in paramList. +function paramList_Callback(hObject, eventdata, handles) +% hObject handle to paramList (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 paramList contents as cell array +% contents{get(hObject,'Value')} returns selected item from paramList + +setCurrentValues(handles) + +%-------------------------------------------------------------------------- +% Set values edit box to current value +function setCurrentValues(handles) + +param = getparam(handles); +bh = getblockhandle(handles); +blocks = getappdata(handles.main, 'blocks'); + +% find relevant block +for j=1:length(blocks) + b = blocks(j); + if b.handle == bh + % get maskNames + maskparams = get(bh, 'MaskNames'); + for k=1:length(maskparams) + if strcmp(maskparams{k}, param) + validx = k; + end + end + end +end + +% get mask values +maskvals = get(bh, 'MaskValues'); +set(handles.paramValsEdit, 'String', maskvals{validx}) + + +% --- Executes during object creation, after setting all properties. +function paramList_CreateFcn(hObject, eventdata, handles) +% hObject handle to paramList (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 paramValsEdit_Callback(hObject, eventdata, handles) +% hObject handle to paramValsEdit (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 paramValsEdit as text +% str2double(get(hObject,'String')) returns contents of paramValsEdit as a double + + +% --- Executes during object creation, after setting all properties. +function paramValsEdit_CreateFcn(hObject, eventdata, handles) +% hObject handle to paramValsEdit (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 button press in setLoopBtn. +function setLoopBtn_Callback(hObject, eventdata, handles) +% hObject handle to setLoopBtn (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% get block +bh = getblockhandle(handles); +bname = getblockname(handles); + +% get param +param = getparam(handles); + +% get values +vals = cellstr(get(handles.paramValsEdit, 'String')); + +level = get(handles.loopLevelSelect, 'Value'); + +setBlockSettings(handles, bh, bname, param, vals, 'on', level) + +%-------------------------------------------------------------------------- +% get name of currently selected param +function param = getparam(handles) + +params = get(handles.paramList, 'String'); +param = params{get(handles.paramList, 'Value')}; + + +%-------------------------------------------------------------------------- +% get block name of currently selected block +function bname = getblockname(handles) + +bnames = get(handles.blockList, 'String'); +bname = bnames{get(handles.blockList, 'Value')}; + +%-------------------------------------------------------------------------- +% get block handle of currently selected block +function bh = getblockhandle(handles) + +% get possible blocks +blocks = getappdata(handles.main, 'blocks'); + +% which block is selected +blist = get(handles.blockList, 'String'); +bsel = blist{get(handles.blockList, 'Value')}; + +% get handle for selected block +for j=1:length(blocks) + if strcmp(blocks(j).name, bsel) + bh = blocks(j).handle; + return + end +end + +%-------------------------------------------------------------------------- +% Show current setting on GUI +function showBlockSettings(handles) + +% get settings from block +myh = getappdata(handles.main, 'loopBlockHandle'); + +% get mask values +maskVals = get(myh, 'MaskValues') + +% set fields on gui +set(handles.blockname, 'String', maskVals{1}); +set(handles.blockhandle, 'String', maskVals{2}); +set(handles.blockkey, 'String', maskVals{3}); +set(handles.blockvals, 'String', maskVals{4}); +level = str2num(maskVals{6}) +if isempty(level) + level = 1; +end +if level < 1 + level = 1; +end +if level > 5 + level = 5; +end +set(handles.loopLevelSelect, 'value', level); +set(handles.blocklevel, 'String', maskVals{6}); + +%-------------------------------------------------------------------------- +% Set current block settings to those selected +function setBlockSettings(handles, bh, bname, key, vals, state, level) + +% get settings from block +myh = getappdata(handles.main, 'loopBlockHandle'); + +maskvals = {bname num2str(bh,20) key cell2str(vals) state num2str(level)}; + +set(myh, 'MaskValues', maskvals); +showBlockSettings(handles) + +%-------------------------------------------------------------------------- +% Convert a cell array to a space separated list of strings +function str = cell2str(c) + +str = []; +for j=1:length(c) + str = [str ' ' c{j}]; +end +str = strtrim(str); + + +% --- Executes on button press in getLoopBtn. +function getLoopBtn_Callback(hObject, eventdata, handles) +% hObject handle to getLoopBtn (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +getLoop(handles); + + +% --- Executes on selection change in loopLevelSelect. +function loopLevelSelect_Callback(hObject, eventdata, handles) +% hObject handle to loopLevelSelect (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 loopLevelSelect contents as cell array +% contents{get(hObject,'Value')} returns selected item from loopLevelSelect + + +% --- Executes during object creation, after setting all properties. +function loopLevelSelect_CreateFcn(hObject, eventdata, handles) +% hObject handle to loopLevelSelect (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu 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 loopLevelSelect. +function popupmenu4_Callback(hObject, eventdata, handles) +% hObject handle to loopLevelSelect (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 loopLevelSelect contents as cell array +% contents{get(hObject,'Value')} returns selected item from loopLevelSelect + + +% --- Executes during object creation, after setting all properties. +function popupmenu4_CreateFcn(hObject, eventdata, handles) +% hObject handle to loopLevelSelect (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu 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 + +