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);