www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/@mdevtestplan/datawizard.m

    function [T,OK] = datawizard(T,hMainFig)
%DATAWIZARD GUI wizard for setting up a data in testplan
%
%   [T,OK] = DATAWIZARD(T) displays a wizard GUI for setting up options
%   and selecting data for the testplan.

%  Copyright 2000-2016 The MathWorks, Inc. and Ford Global Technologies, Inc.

if nargin<2
    hMainFig = [];
end

OldTP   = T;
if IsMatched(T)
    % copy old data
    oldTSSF = T.DataLink.info;
else
    oldTSSF= [];
end
dataPointers = dataptrs( info(project(T)) );

if T.DataLink == 0
    % try and select some data
    T= InitData(T);
end
    
% state for openning data editor
% main data selection wizard
LocalData.pointer = address(T);
tpObj = createModelData(T);
LocalData.ModelData = tpObj;

% invoke wizard
OK = xregwizard(hMainFig, 'Fit Models Wizard', {@DataCardOne},LocalData); 

% get update-to-date testplan object
T = info(T);
% don't delete data if it existed in datalist before starting wizard
DO_DELETE = ~any(T.DataLink==dataPointers);
if OK
    % setup test groups if required
    [T.DataLink.info,OK] = setupGroups(T,T.DataLink.info);
end
if OK
    % Process results from the wizard
    % check monitor plot variables
    T = checkMonitor(T);
    if tpObj.OpenDataEditor
        % open data editor and wait for data editor to close before
        % processing new data
        tpObj.FinalTestplan = info(T);
        sendToDataEditor(tpObj,T.DataLink,OldTP,oldTSSF,DO_DELETE);
    else
        % attachData requires pSSF~=T.DataLink;
        T.DataLink= xregpointer;
        xregpointer(T);
        try
            % process data immediately
            tpObj.FinalTestplan = info(T);
            fitmodels(tpObj);
            T  = info(T);
            if isempty( info(DataLinkPtr(T)) )
                % don't accept empty data.
                error(message('mbc:testplan:InvalidState'))
            end
        catch ME
            % restore data and display error message
            Restore(T, OldTP, oldTSSF,DO_DELETE);
            xregerror('Data Error',sprintf('Error updating test plan with new data: %s',ME.message));
            OK = false;
        end
    end
else
    % Cancel - restore data
    T = Restore(info(T),OldTP,oldTSSF,DO_DELETE);
end



function tpObj = createModelData(T)
%createModelData create tpsetup.ModelData for use by wizard 
tpObj = tpsetup.ModelData(root(T));
tpObj.SelectedIndex = 3+childindex(T);
tpObj.OpenDataEditor= false;
tpObj.UseDataRange = false;
pVal = getValDataPtr(T);
if ~isempty(pVal) && ~isnull(pVal) && any(pVal==tpObj.pValidationSets)
    % select current validation data if possible
    tpObj.ValidationType = 'data';
    tpObj.ValidationData = pVal;
end
dlist = tpObj.pDataList;
if T.Matched
    tpObj.pData = T.DataLink;
elseif ~isempty(dlist)
    tpObj.pData = dlist(1);
end