www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/xreg_modeltemplates.m
function [mlist,ok] = xreg_modeltemplates(action,varargin) %XREG_MODELTEMPLATES Model template chooser gui % % [D,OK] = XREG_MODELTEMPLATES( 'CREATE', MODEL, NOBS ) creates a blocking % gui prompting the user to select a model template. % Copyright 2000-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. if ~strcmpi(action, 'create') error(message('mbc:xreg_modeltemplates:InvalidAction')); end [mlist,ok] = iCreateFigure(varargin{:}); %-------------------------------------------------------------------------- function [mlist,ok] = iCreateFigure(m,nobs,Title) if nargin<3 Title = 'Model Template'; end dlg = mbcgui.container.Dialog('Name', Title,... 'Size', [550 270], ... 'Buttons', 'OK_CANCEL_HELP', ... 'DefaultAction', 'OK', ... 'CloseAction', 'CANCEL', ... 'HelpCode', 'xreg_buildModels', ... 'Resize', 'off', ... 'Tag', 'ModelTemplates'); figh = dlg.Figure; [mainlyt,ud] = iCreateLayout(dlg,m,nobs); ud.figure=figh; dlg.Content = mainlyt; set(figh,'UserData',ud); displayList(ud) closeMode = dlg.showDialog(); mlist={}; if strcmp(closeMode, 'OK') ud=get(figh,'UserData'); ind= ud.listview.SelectedIndex; if ~isempty(ind) if ind<=ud.numbuiltin if ind>1 && strcmp(class(m),class(ud.Builtin{ind})) % use existing model bm = m; else % use model from builtin bm = copymodel(m, ud.Builtin{ind} ); end mlist= buildmodels(bm,nobs); else mlist= ud.Selected; end end end ok= ~isempty(mlist); delete(dlg); %-------------------------------------------------------------------------- function [mainlyt,ud] = iCreateLayout(dlg,m,nobs) figh = dlg.Figure; % objects templateFrame = mbcgui.container.layoutpanel(... 'Parent', figh, ... 'BorderType', 'etchedin', ... 'Title', 'Templates', ... 'LayoutBorder', [10 10 10 3]); ud.Icon = 'gloreg32.bmp'; ud.listview = mbcwidgets.JList('Parent',templateFrame,... 'BorderType', 'beveledin', ... 'ValueChangedCallback',{@iItemSelect, dlg},... 'KeyTypedCallback',{@iKeyPress,dlg},... 'ActionPerformedCallback',{@iDblClick, dlg}); % load templates and populate the listbox nf = nfactors(m); ud = iAddBuiltinTemplates( ud, m, nf ); ud.Dir = mbcGetPath('mbcmodel', 'Designs'); ud = iAddUserTemplates( ud, nf ); ud.Selected={}; set(templateFrame, 'LayoutComponent', {ud.listview}); infoFrame = mbcgui.container.layoutpanel(... 'Parent', figh, ... 'BorderType', 'etchedin', ... 'Title', 'Information', ... 'LayoutBorder', [10 10 10 5]); infobox=uicontrol('Style','edit',... 'Parent',infoFrame,... 'Enable','inactive',... 'Max',2,... 'Min',0,... 'HorizontalAlignment','left'); ud.info=infobox; set(infoFrame, 'LayoutComponent', infobox); % default is first builtin set(ud.info,'String','Pre-defined template'); browsebtn=uicontrol('Style','pushbutton',... 'Parent',figh,... 'String','Browse...',... 'Position',[0 0 65 25],... 'Callback',{@iBrowse,figh,nf}); mainlyt = xreggridbaglayout(figh,... 'dimension',[2, 3],... 'elements',{... templateFrame,[],... infoFrame,browsebtn,... [],[]},... 'mergeblock',{[1 2],[1 1]},...% for templates window 'mergeblock',{[1 1],[2 3]},...% for info 'rowsizes',[-1, 25],... 'colsizes',[-1 80 70],... 'border',[0 10 0 0],... 'gapy',10,... 'gapx',10); %-------------------------------------------------------------------------- function ud = iAddBuiltinTemplates( ud,m, nf ) templates = {'New...','Model Browser...','Polynomials...',... 'RBF...','Hybrid RBF...','Gaussian Process...'}; bms= {xregmulti('nfactors',nf),xregmodel('nfactors',nf),xregcubic('nfactors',nf) ... xregrbf('nfactors',nf) xreghybridrbf('nfactors',nf), xreggpr('nfactors',nf)}; if nf==1 templates= [templates {'Free Knot Splines'}]; bms= [bms {xregunispline}]; end if isa(m,'xregmultilin') templates= [templates {'Multi-linear'}]; bms= [bms {m}]; end ud.numbuiltin=length(templates); ud.Builtin= bms; ud.BuiltinNames = templates; %-------------------------------------------------------------------------- function iItemSelect(h,evt,d) % item click ind =evt.data.SelectedIndex; if isempty(ind) || ind<1 return end figh=d.Figure; ud=get(figh,'UserData'); if ind ==0 % Initiate a new callback to select the default item ud.ListView.SeletedIndex=1; return end set(figh,'Pointer','watch'); drawnow('update'); if ind<=ud.numbuiltin mlist= ud.Builtin{ind}; set(ud.info,'String', 'Pre-defined template' ); else i= ind-ud.numbuiltin; Ti=struct2cell(load('-mat',fullfile(ud.Dir,ud.userfiles(i).name))); mlist= Ti{1}; infostr = cell( size(mlist) ); for i=1:length(mlist) infostr{i}=sprintf('%s\n',name(mlist{i}) ); end set(ud.info,'String',[infostr{:}]); end ud.Selected = mlist; set(figh,'UserData',ud,... 'Pointer',get(0,'DefaultFigurePointer')); function iKeyPress(~, evt, d) % Capture Enter/Esc and forward these to dialog as close actions if evt.data.Modifiers==0 switch evt.data.KeyCode case mbcgui.util.KeyCode.ENTER d.closeDialog('OK'); case mbcgui.util.KeyCode.ESCAPE d.closeDialog('CANCEL'); end end function iDblClick(src, evt, d) % Close dialog on a double-click d.closeDialog('OK'); %-------------------------------------------------------------------------- function iBrowse(h,evt,figh,nf) ud = get(figh,'UserData'); pathname = uigetdir(ud.Dir, 'Select template directory:'); if ischar(pathname) pathname = [pathname filesep]; ud.Dir = pathname; ud = iAddUserTemplates( ud, nf ); set(figh,'UserData',ud); displayList(ud) end function displayList(ud) names = [ud.BuiltinNames(:);ud.mbmnames(:)]'; icons(1:length(names)) = {ud.Icon}; ud.listview.setListData(names,icons); ud.listview.SelectedIndex = 1; %-------------------------------------------------------------------------- function ud = iAddUserTemplates( ud, nf ) % add user defined templates to the listctrl ud.userfiles= dir(fullfile(ud.Dir, '*.MBM')); mok= false(1,length(ud.userfiles)); mbmname = cell(1,length(ud.userfiles)); for n=1:length(ud.userfiles) tmp= load('-mat',fullfile(ud.Dir, ud.userfiles(n).name)); if isfield(tmp,'mlist') && iscell(tmp.mlist) && ~isempty(tmp.mlist) mi= tmp.mlist{1}; mok(n)= nfactors(mi)==nf; [~,mbmname{n}] = fileparts(ud.userfiles(n).name); end end ud.userfiles= ud.userfiles(mok); ud.mbmnames = mbmname(mok);