www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@contwostage/guiTypeLayout.m

    function lyt = guiTypeLayout(con, figh,p,TypeString)
%GUITYPELAYOUT
%
% [lyt, udp] = guiTypeLayout(con, figh,p)

%  Copyright 2008-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.

if isa(figh,'xregcontainer')
    lyt = figh;
    udp = get(lyt,'UserData');
else
    udp = xregGui.RunTimePointer;
    udp.LinkToObject( figh );
    
    ud.popupLocal = uicontrol( 'Parent', figh,...
        'Style','popupmenu',...
        'Callback',{@i_local,udp},...
        'Visible','off',...
        'Interruptible','off',...
        'HorizontalAlignment','left',...
        'BackgroundColor','w');
    ud.lctrlLocal = i_labelcontrol( figh, 'Local boundary:', ud.popupLocal );
    
    ud.fitOptsButton = xregGui.iconuicontrol( ...
        'Parent', figh, ...
        'Visible', 'off', ...
        'Style', 'pushbutton', ...
        'String','Fit Options...',...
        'callback',{@i_setFitOptions,udp});
    
    ud.popupGlobal = uicontrol( 'Parent', figh,...
        'Style','popupmenu',...
        'Callback',{@i_global,udp},...
        'Visible','off',...
        'Interruptible','off',...
        'HorizontalAlignment','left',...
        'BackgroundColor','w');
    ud.lctrlGlobal = i_labelcontrol( figh, 'Global model:', ud.popupGlobal );
    
    ud.btnGlobal = uicontrol(...
        'Parent', figh,...
        'Style', 'pushbutton',...
        'String', 'Set up...',...
        'Interruptible','off',...
        'Callback',{@i_setup,udp});
    
    lyt = xreggridbaglayout(figh,...
        'dimension',[4, 3],...
        'rowsizes',[20, 20, 25, -1],...
        'colsizes',[220, 10 80],...
        'gapy',5, 'gapx',7,...
        'border',[0 0 0 0],...
        'elements',{... ...
        ud.lctrlLocal,  [],ud.fitOptsButton; ...
        ud.lctrlGlobal, [],ud.btnGlobal; ...
        [],             [],[]; ...
        [],             [],[] } );
    
    ud.Changed = false;
    ud.pointer = p;
    ud.pointer.info.constraint = con;
    udp.info = ud;
    
    set(lyt,'UserData',udp);
end
iSetValues(con,udp)


function iSetValues(con,udp)

ud =udp.info;

local_list  = localclasses( con );
lval = find( strcmpi( class( con.Local ), {local_list.Class} ) );
set(ud.popupLocal,'String',{local_list.Name},'Value',lval);

global_list = globalclasses( con );
gval = find( strcmpi( class( con.Global{1} ), {global_list.Class} ) );
set(ud.popupGlobal,'String',{global_list.Name},'Value',gval);

fitOptions = ud.pointer.info.fitOptions;
if isnull(fitOptions)
    set(ud.fitOptsButton,'Enable','off');
else
    set(ud.fitOptsButton,'Enable','on');
end


%------------------------------------------------------------------------------|
function lctrl = i_labelcontrol( figh, string, control )
lctrl = xregGui.labelcontrol( ...
    'parent',figh,...
    'Control', control,...
    'String',string,...
    'Enable','on', ...
    'ControlSize', 120, ...
    'ControlSizeMode', 'absolute',...
    'LabelSize', 90, ...
    'LabelSizeMode', 'absolute');

%------------------------------------------------------------------------------|
function i_local( h, evt, udp )

ud = udp.info;
T = ud.pointer.info;
con = T.constraint;

local_list = localclasses( con );
value = get( ud.popupLocal, 'Value' );

if ~isa( con.Local, local_list(value).Class ),
    cif = getlocalfactors( con );
    con.Local = feval( local_list(value).Class, cif );
    
    % ensure that the number of global models is correct.
    gm = con.Global{1};
    con.Global = cell( 1, nFeatures( con.Local ) );
    [con.Global{:}] = deal( gm );
    con.LocalFriend = [];
    T.constraint = con;
    
    T.fitOptions = getFitOptions(con,'all');
    if isnull(T.fitOptions)
       set(ud.fitOptsButton,'Enable','off'); 
    else
       set(ud.fitOptsButton,'Enable','on'); 
    end
    ud.pointer.info = T;
    ud.Changed = true;
    udp.info = ud;
    
end

iSetValues(con,udp);


function i_setFitOptions(h, evt, udp)

ud = udp.info;
T = ud.pointer.info;
con = T.constraint;
fitOptions = T.fitOptions;

[obj, ok,opts] = guiSetFitOptions(con, 'all',fitOptions);
if ok
    fitOptions = opts;
    T.fitOptions = fitOptions;
    ud.pointer.info = T;
end

%------------------------------------------------------------------------------|
function i_global( h, evt, udp )

ud = udp.info;
con = ud.pointer.info.constraint;

global_list = globalclasses( con );
value = get( ud.popupGlobal, 'Value' );

if ~isa( con.Global{1}, global_list(value).Class ),
    nf = nfactors( con.Global{1} );
    [con.Global{:}] = deal( feval( global_list(value).Class, nf ) );
    con.LocalFriend = [];
    ud.pointer.info.constraint = con;
    ud.Changed = true;
    udp.info = ud;
end

%------------------------------------------------------------------------------|
function i_setup( h, evt, udp )

ud = udp.info;
con = ud.pointer.info.constraint;

[new, ok] = gui_globalmodsetup( con.Global{1} );
if ok,
    [con.Global{:}] = deal( new );
    con.LocalFriend = [];
    ud.pointer.info.constraint = con;
    ud.Changed = true;
    udp.info = ud;
end

%------------------------------------------------------------------------------|
% EOF
%------------------------------------------------------------------------------|