www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+xregdatagui/exportWorkspaceDialog.m

    function exportWorkspaceDialog(data,Owner)
%exportWorkspaceDialog export data to workspace

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

if nargin<2
    Owner = [];
else
    Owner = ancestor(Owner,'figure');
end

dlg = mbcgui.container.Dialog(...
    'Owner',Owner,...
    'Name','Export to Workspace',...
    'Size',[400 200],...
    'HelpCode','mbcExportData');

[dlg.Content,ud]= createLayout(dlg.Figure);

initialise(ud,data)
dlg.ValidationFcn = @() validateVariableName(ud);
closeMode = dlg.showDialog();
if strcmp(closeMode,'OK')
    % raw or processed data
    if ud.ExportRawData.Value
        % get original data
        ss = info(getOriginal(data));
    else
        ss = sweepset(data);
    end
    
    % export type
    switch ud.VariableType.Selected
        case 1
            d = exporttable(ss,ud.IncludeTestNumber.Value);
        case 2
            d = sweepset2struct(ss,ud.IncludeTestNumber.Value);
        otherwise
            error('Unknown format')
    end
    
    % assign variable to base workspace
    varname = ud.VariableName.String;
    assignin('base', varname, d);
    fprintf('Data set ''%s'' exported to workspace from MBC Model Fitting app.\n',varname);
    
end
delete(dlg);

function OK = validateVariableName(ud)
%validateVariableName check if the base variable is being overwritten

varname = ud.VariableName.String;
if evalin('base',sprintf('exist(''%s'',''var'')',varname))
    % check if variable exists in base workspace before stomping on it.
    resp = questdlg(sprintf('%s exists in the base workspace. Do you want to overwrite?',varname),...
        'Overwrite Variable',...
        'Yes','No','No');
    OK = strcmp(resp,'Yes');
else
    OK = true;
end
    

function [lyt,ud]=createLayout(Parent)
%createLayout create main layout

% project and data selector
ud.VariableName = uicontrol('Parent',Parent,...
    'Style','edit',...
    'Callback',@cbEditVarName,...
    'HorizontalAlignment','left');
VarNameLabel = xregGui.labelcontrol( 'Parent', Parent,...
    'String', 'Variable name: ',...
    'ControlSizeMode', 'relative',...
    'LabelSizeMode', 'absolute',...
    'LabelSize', 80,...
    'ControlSize', 1,...
    'Control', ud.VariableName );

% radio group to select data format
rbPanel = mbcgui.container.layoutpanel('Parent',Parent,...
    'BorderType','etchedin',...
    'LayoutBorder',[5 5 5 5],...
    'Title','Data Format');
rbGroup = xregGui.rbgroup('parent', rbPanel,...
    'nx', 1,...
    'ny', 2,...
    'String', {'Table'
    'MBC data structure'},...
    'Selected',1);
rbPanel.LayoutComponent = rbGroup;
ud.VariableType = rbGroup;

% check boxes for test number and raw data
ud.IncludeTestNumber = uicontrol('Parent',Parent,...
    'Style','checkbox',...
    'String','Include test number',...
    'Tag','IncludeTestNumber',...
    'HorizontalAlignment','left');
ud.ExportRawData = uicontrol('Parent',Parent,...
    'Style','checkbox',...
    'String','Export raw data',...
    'Tag','ExportRaw',...
    'HorizontalAlignment','left');

lyt = xreggridbaglayout(Parent,...
    'dimension',[4,1],...
    'rowsizes',[25 60 20 20],...
    'gapy',3,...
    'elements',{VarNameLabel,rbPanel,ud.IncludeTestNumber,ud.ExportRawData});


function initialise(ud,data)
%initialise initialise dialog
if isa(data,'sweepset')
    % no processing for sweepsets
    set(ud.ExportRawData,'Enable','off','Value',0);
    % hard code the variable name for sweepsets
    varname = 'data';
else
    varname = matlab.lang.makeValidName(get(data,'Label'));
end


set(ud.VariableName,'String',varname);
if isOneStage(data)
    % test numbers are only relevant for two-stage data
    set(ud.IncludeTestNumber,'Enable','off','Value',0);
end
   
if isa(data,'sweepset')
    % no processing for sweepsets
    set(ud.ExportRawData,'Enable','off','Value',0);
end

function cbEditVarName(h,~)
%cbEditVarName check for valid variable name in edit callback
[varname,modified] = matlab.lang.makeValidName(h.String);
if modified
    % change the variable name and warn user
    h.String = varname;
    warndlg(sprintf('Invalid MATLAB variable name. The variable name is modified to ''%s''.',varname),'Invalid Variable Name','modal')
end