www.gusucode.com > 多个界面的操作,m文件构造复杂界面,存取文件,多个axes > code/DisplayResult.m

    function  varargout = DisplayResult( varargin )
% this module display the results .

%  February 2004
%  $Revision: 1.00 $  



if (nargin == 0) | isstruct( varargin{1} )     %  LAUNCH GUI
    
    if nargin == 1
        ArcSimulationData = varargin{1} ;
    else
        ArcSimulationData = [] ;
    end
    
    
    % find if have the same figure, and close it .
    OldFigure = findobj( 'type', 'figure', 'Tag', 'DisplayResult' ) ;
    if ishandle( OldFigure )
        close( OldFigure ) ;
    end
    

    % generate a new figure .
    FigureHandle = figure( 'Visible', 'off' ) ;
    set( FigureHandle, 'Units' , 'pixels', 'Position', [150 150 500 300], ...
        'Name', '电弧炉对电网影响仿真软件', ...
        'Tag', 'DisplayResult', ...
        'FileName' , '' ,...
        'MenuBar' , 'none' ,...
        'NumberTitle' , 'off' ,...
        'Resize', 'on', ...
        'windowstyle', 'normal', ...
        'Visible', 'off' ) ;
    
    % generate the menu .
    generate_MenuContent( FigureHandle ) ;
    
    % generate the uicontrols .
    generate_FigureContent( FigureHandle ) ;
  
    % save the ArcSimulationData .
    setappdata( FigureHandle, 'ArcSimulationData', ArcSimulationData ) ;
    
    
    % display the figure .
    movegui( FigureHandle, 'center' ) ;
    
%     set( findobj( FigureHandle, 'Type', 'uicontrol' ), 'Units', 'normalized' ) ;

    set( FigureHandle, 'Visible', 'on', ...
        'ResizeFcn', ['DisplayResult( ''ResizeDisplayResult'', gcbf)'] ) ;
    
    % init the data .
    init_FigureContent( FigureHandle ) ;
    
    
    if nargout > 0
        varargout{1} = FigureHandle;
    end
    
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
    
    global  SET_DEBUG_VALUE_IN_SIMULATOR ;
    if isempty( SET_DEBUG_VALUE_IN_SIMULATOR ) | ~isnumeric( SET_DEBUG_VALUE_IN_SIMULATOR )
        SET_DEBUG_VALUE_IN_SIMULATOR = 0 ;
    else
    end
    
    if  SET_DEBUG_VALUE_IN_SIMULATOR == 1 ; 
        
        if (nargout)
            [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
        else
            feval(varargin{:}); % FEVAL switchyard
        end             
        
    else        
        
        try
            if (nargout)
                [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
            else
                feval(varargin{:}); % FEVAL switchyard
            end
        catch            
            disp(lasterr);
        end
        
    end

    
end



% ------------------------------------------------------------
function  generate_MenuContent( FigureHandle ) ;


% generate the file menu .
% ------------------------------------------------------------
MenuHandle = uimenu( 'Parent', FigureHandle, 'Label', '文件(&F)' ) ;

% define the parameters of the menus .
MenuLabel = { '打开(&O)'; '保存(&S)'; '退出(&E)' } ;

% add Polygon at 2003.10.13 .
MenuTag = { 'MenuOpenResult'; 'MenuSaveResult'; 'MenuClose' } ;
MenuCallback = { ['ArcSimulationSoft( ''MenuOpenHistory_Callback'', gcbf)']; ...
        ['DisplayResult( ''SaveResult_Callback'', gcbf)']; ...
        ['close all;'] } ;
SeparatorGroup = { 'off'; 'off'; 'on' } ;

% generate the uimenus of file .
for num = 1: length( MenuTag )
% for num = 3
    UimenuHandle(num) = uimenu( MenuHandle ) ;
    set( UimenuHandle(num), 'Tag' , MenuTag{num} , ...
        'Callback' , MenuCallback{num} , ...
        'Label' , MenuLabel{num} , ...
        'Separator', SeparatorGroup{num} ) ;
end

% generate the parameter menu .
% ------------------------------------------------------------
MenuHandle = uimenu( FigureHandle, 'Label', '参数(&P)' ) ;

% define the parameters of the menus .
MenuLabel = { '查看(&L)'; } ;

% add Polygon at 2003.10.13 .
MenuTag = { 'MenuDisplayParameter';  } ;
MenuCallback = { ...
    ['DisplayResult( ''DisplayParameter_Callback'', gcbo)']; } ;
SeparatorGroup = { 'off'; } ;

% generate the uimenus of file .
for num = 1: length( MenuTag )
    UimenuHandle(num) = uimenu( MenuHandle ) ;
    set( UimenuHandle(num), 'Tag' , MenuTag{num} , ...
        'Callback' , MenuCallback{num} , ...
        'Label' , MenuLabel{num} , ...
        'Separator', SeparatorGroup{num} ) ;
end


% generate the formula menu .
% ------------------------------------------------------------
MenuHandle = uimenu( FigureHandle, 'Label', '公式(&m)' ) ;

% define the parameters of the menus .
MenuLabel = { '电路图(&C)'; '状态方程(&L)'; '电弧电阻公式(&E)' } ;

% add Polygon at 2003.10.13 .
MenuTag = { 'MenuCircuitDiagram'; 'MenuMainCircuitFormula'; 'MenuArcResistanceFormula' } ;
MenuCallback = { ...
    ['DisplayResult( ''CircuitDiagram_Callback'', gcbo)']; ...
    ['EditParameter( ''MainCircuitFormula_Callback'', gcbo)']; ...
    ['EditParameter( ''ArcResistanceFormula_Callback'', gcbo)']; } ;
SeparatorGroup = { 'off'; 'on'; 'off' } ;

% generate the uimenus of file .
for num = 1: 3
    UimenuHandle(num) = uimenu( MenuHandle ) ;
    set( UimenuHandle(num), 'Tag' , MenuTag{num} , ...
        'Callback' , MenuCallback{num} , ...
        'Label' , MenuLabel{num} , ...
        'Separator', SeparatorGroup{num} ) ;
end


% generate the parameter menu .
% ------------------------------------------------------------
MenuHandle = uimenu( FigureHandle, 'Label', '帮助(&H)', 'Enable', 'on' ) ;

% define the parameters of the menus .
MenuLabel = { '帮助(&O)'; '演示(&E)'; '关于' } ;

% add Polygon at 2003.10.13 .
MenuTag = { 'MenuHelp'; 'MenuDemo'; 'MenuAbout' } ;
MenuCallback = { ...
    ['ArcSimulationSoft( ''MenuHelp_Callback'', gcbo)']; ...
    ['ArcSimulationSoft( ''MenuDemo_Callback'', gcbo)']; ...
    ['ArcSimulationSoft( ''MenuAbout_Callback'', gcbo)']; } ;
SeparatorGroup = { 'off'; 'on'; 'on' } ;

% generate the uimenus of file .
for num = 1: length( MenuTag )
    UimenuHandle(num) = uimenu( MenuHandle ) ;
    set( UimenuHandle(num), 'Tag' , MenuTag{num} , ...
        'Callback' , MenuCallback{num} , ...
        'Label' , MenuLabel{num} , ...
        'Separator', SeparatorGroup{num} ) ;
end





% ------------------------------------------------------------
function  generate_FigureContent( FigureHandle )
% generate the uicontrols .


% init the variables .
FigureWidth = 600 ;
FigureHeight = 400 ;
TabSpace = 10 ;
TextHeight = 22 ;
ChangeYPos = 30 ;


% reset the figure's size .
set( FigureHandle, 'Units', 'pixels', ...
    'Position', [150 150  FigureWidth  FigureHeight], ...
    'DoubleBuffer', 'on' ) ;

% generate the axes to plot lines .
AxesHandle = axes( 'Parent', FigureHandle, 'Units' , 'pixels' ,  ...
    'Position', [0  0  FigureWidth  FigureHeight], 'Visible', 'off', ...
    'Tag', 'BackgroundAxes', ...
    'Xlim', [0  FigureWidth], 'Ylim', [0  FigureHeight] ) ;

% get the color of the figure .
FigureColor = get( FigureHandle, 'Color' ) ;
% reset the default value of the uicontrols .
set(FigureHandle,'defaultuicontrolunits','normalized');
set(FigureHandle,'defaultuicontrolfontname','隶书');
set(FigureHandle,'defaultuicontrolBackgroundColor', FigureColor );



% generate the parameters of the Analyze .
% -----------------------------------------------------------------------------
% define the first frame .
% FrameXPos = Frame1Position(1) + Frame1Position(3) + TabSpace * 1.5 ;
FrameXPos = TabSpace * 1.5 ;
FrameWidth = FigureWidth - TabSpace * 3 ;
FrameHeight = FigureHeight - TabSpace * (8 + 5) ;
FrameYPos = FigureHeight - FrameHeight - TabSpace * 1.5 ;
Frame1Position = [FrameXPos  FrameYPos  FrameWidth  FrameHeight] ;
% generate a frame .
LineXData = [FrameXPos  FrameXPos  (FrameXPos + FrameWidth)  (FrameXPos + FrameWidth)  FrameXPos] ;
LineYData = [FrameYPos  (FrameYPos + FrameHeight)  (FrameYPos + FrameHeight)  FrameYPos  FrameYPos] ;
LineHandle = line ( 'Parent', AxesHandle, 'XData', LineXData, 'YData', LineYData,...
    'Tag', 'FrameLine1', 'LineStyle', '-', 'Color', [0  0  0], 'Marker', 'none'  );


TextXPos = Frame1Position(1) + 15 ;
TextYPos = Frame1Position(2) + Frame1Position(4) - 12 ;
TextWidth = 50 ;
TextPosition = [TextXPos  TextYPos  TextWidth  TextHeight] ;
% subtitle: 分析
SubtitleHandle = uicontrol(FigureHandle, 'Style','text', 'Units','pixels',...
    'Position',TextPosition,'horizontal','center',...
    'Tag', 'AnalyzeText', 'String', '结果', 'fontsize',13 );

% get the position of the axeses .
AxesXPos = Frame1Position(1) + TabSpace * 5.5 ;
AxesWidth = (Frame1Position(3) - TabSpace * 17) / 3 ;
AxesHeight = (Frame1Position(4) - TabSpace * 15) / 2 ;
AxesYPos = Frame1Position(2) + Frame1Position(4) - AxesHeight - TabSpace * 3 ;
AxesPosition = [AxesXPos  AxesYPos  AxesWidth  AxesHeight] ;

TagIndex = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ;

for num = 1: 6
    TempAxesPosition = AxesPosition ;
    if num <= 3
        TempAxesPosition(1) = TempAxesPosition(1) + (num - 1) * (AxesWidth + TabSpace * 5) ;
    else
        TempAxesPosition(1) = TempAxesPosition(1) + (num - 4) * (AxesWidth + TabSpace * 5) ;
        TempAxesPosition(2) = TempAxesPosition(2) - (AxesHeight + TabSpace * 8) ;
    end
    % generate the axes to plot lines .
    AxesHandle = axes( 'Parent', FigureHandle, 'Units' , 'Pixels' ,  ...
        'Position', TempAxesPosition, 'Visible', 'on', ...
        'Tag', ['AnalyzeAxes', TagIndex(num)] ) ;
    
end


% display the formula .
% -----------------------------------------------------------------------------
% define the second frame .
FrameXPos = TabSpace * 1.5 ;
FrameWidth = FigureWidth - TabSpace * 3 ;
FrameHeight = 42 ;
FrameYPos = TabSpace * 6 ;
Frame2Position = [FrameXPos  FrameYPos  FrameWidth  FrameHeight] ;
% generate a frame .
TitleHandle = uicontrol(FigureHandle,'style','frame', 'Units','pixels',...
    'Position',Frame2Position, 'Tag', 'FrameLine2'  );


% get the position of buttons .
ButtonXPos = Frame2Position(1) + TabSpace ;
ButtonYPos = Frame2Position(2) + Frame2Position(4) - TextHeight - TabSpace * 1 ;
ButtonWidth = (Frame2Position(3) - TabSpace * 5) * 0.25 ;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  TextHeight] ;


% define the parameters of the buttons .
ButtonString = { '显示参数'; '电路图'; '状态方程'; '电弧电阻公式' } ; 
ButtonTag = { 'DisplayParameter'; 'CircuitDiagram'; 'MainCircuitFormula'; 'ArcResistanceFormula' } ;
ButtonCallback = { ['DisplayResult(''DisplayParameter_Callback'',gcbo)']; ...
        ['DisplayResult(''CircuitDiagram_Callback'',gcbo)']; ...
        ['EditParameter(''MainCircuitFormula_Callback'',gcbo)']; ...
        ['EditParameter(''ArcResistanceFormula_Callback'',gcbo)'] } ;

for num = 1: 4
    TempButtonPosition = ButtonPosition ;
    TempButtonPosition(1) = TempButtonPosition(1) + (num - 1) * (ButtonWidth + TabSpace * 1) ;
    % generate the pushbutton: OK .
    ButtonHandle = uicontrol( 'Parent', FigureHandle, 'Units', 'Pixels', 'Position', TempButtonPosition, ...
        'Style', 'pushbutton', 'Tag',ButtonTag{num}, 'string', ButtonString{num}, 'Fontsize',12, ...
        'Callback', ButtonCallback{num} ) ;
    
end



% define the parameters of the buttons .
ButtonString = { '上一步'; ...
        '打开'; ...
        '保存'; ...
        '下一步' } ; 
ButtonTag = { 'PreviousButton'; ...
        'LoadResultButton'; ...
        'SaveResultButton'; ...
        'NextButton' } ;
ButtonCallback = { ['DisplayResult(''PreviousButton_Callback'',gcbo)']; ...
        ['ArcSimulationSoft( ''MenuOpenHistory_Callback'', gcbf)']; ...
        ['DisplayResult(''SaveResult_Callback'',gcbo)']; ...
        ['DisplayResult(''NextButton_Callback'',gcbo)'] } ;

ButtonWidth = 80 ;
ButtonHeight = 25 ;
ButtonXPos = FigureWidth - ButtonWidth * 4 - TabSpace * 5 ;
ButtonYPos = TabSpace * 2 ;;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  ButtonHeight] ;
for num = 1: 4
    TempButtonPosition = ButtonPosition ;
    TempButtonPosition(1) = TempButtonPosition(1) + (num - 1) * (ButtonWidth + TabSpace) ;
    % generate the pushbutton: OK .
    ButtonHandle = uicontrol( 'Parent', FigureHandle, 'Units', 'Pixels', 'Position', TempButtonPosition, ...
        'Style', 'pushbutton', 'Tag',ButtonTag{num}, 'string', ButtonString{num}, 'Fontsize',12, ...
        'Callback', ButtonCallback{num} ) ;
    
end


handles = guihandles( FigureHandle ) ;
guidata( FigureHandle, handles ) ;




% --------------------------------------------------------------------------
function  ResizeDisplayResult( h )
% update the position of the uicontrols .


handles = guihandles( h ) ;
if isempty( handles ) ;
    return ;
end

% get the new size of the figure .
FigureSize = get( handles.DisplayResult, 'Position' ) ;

FigureWidth = FigureSize(3) ;
FigureHeight = FigureSize(4) ;

if FigureWidth < 600 ;
    FigureWidth = 600 ;
end

if FigureHeight < 400 ;
    FigureHeight = 400 ;
end

% init the variables .
TabSpace = 10 ;
TextHeight = 22 ;


% generate the axes to plot lines .
set( handles.BackgroundAxes, 'Units' , 'pixels' ,  ...
    'Position', [0  0  FigureWidth  FigureHeight], ...
    'Xlim', [0  FigureWidth], 'Ylim', [0  FigureHeight] ) ;



% generate the parameters of the Analyze .
% -----------------------------------------------------------------------------
% define the first frame .
% FrameXPos = Frame1Position(1) + Frame1Position(3) + TabSpace * 1.5 ;
FrameXPos = TabSpace * 1.5 ;
FrameWidth = FigureWidth - TabSpace * 3 ;
FrameHeight = FigureHeight - TabSpace * (8 + 5) ;
FrameYPos = FigureHeight - FrameHeight - TabSpace * 1.5 ;
Frame1Position = [FrameXPos  FrameYPos  FrameWidth  FrameHeight] ;
% generate a frame .
LineXData = [FrameXPos  FrameXPos  (FrameXPos + FrameWidth)  (FrameXPos + FrameWidth)  FrameXPos] ;
LineYData = [FrameYPos  (FrameYPos + FrameHeight)  (FrameYPos + FrameHeight)  FrameYPos  FrameYPos] ;
set( handles.FrameLine1, 'XData', LineXData, 'YData', LineYData );


TextXPos = Frame1Position(1) + 15 ;
TextYPos = Frame1Position(2) + Frame1Position(4) - 12 ;
TextWidth = 50 ;
TextPosition = [TextXPos  TextYPos  TextWidth  TextHeight] ;
% subtitle: 分析
set( handles.AnalyzeText, 'Position', TextPosition ) ;

% get the position of the axeses .
AxesXPos = Frame1Position(1) + TabSpace * 5.5 ;
AxesWidth = (Frame1Position(3) - TabSpace * 17) / 3 ;
AxesHeight = (Frame1Position(4) - TabSpace * 15) / 2 ;
AxesYPos = Frame1Position(2) + Frame1Position(4) - AxesHeight - TabSpace * 3 ;
AxesPosition = [AxesXPos  AxesYPos  AxesWidth  AxesHeight] ;

TagIndex = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ;

for num = 1: 6
    TempAxesPosition = AxesPosition ;
    if num <= 3
        TempAxesPosition(1) = TempAxesPosition(1) + (num - 1) * (AxesWidth + TabSpace * 5) ;
    else
        TempAxesPosition(1) = TempAxesPosition(1) + (num - 4) * (AxesWidth + TabSpace * 5) ;
        TempAxesPosition(2) = TempAxesPosition(2) - (AxesHeight + TabSpace * 8) ;
    end
    % generate the axes to plot lines .
    AxesHandle = getfield( handles, ['AnalyzeAxes', TagIndex(num)] ) ;
    set( AxesHandle, 'Units' , 'Pixels' , 'Position', TempAxesPosition ) ;    
end


% display the formula .
% -----------------------------------------------------------------------------
% define the second frame .
FrameXPos = TabSpace * 1.5 ;
FrameWidth = FigureWidth - TabSpace * 3 ;
FrameHeight = 42 ;
FrameYPos = TabSpace * 6 ;
Frame2Position = [FrameXPos  FrameYPos  FrameWidth  FrameHeight] ;
% generate a frame .
set( handles.FrameLine2, 'Position', Frame2Position ) ;


% get the position of buttons .
ButtonXPos = Frame2Position(1) + TabSpace ;
ButtonYPos = Frame2Position(2) + Frame2Position(4) - TextHeight - TabSpace * 1 ;
ButtonWidth = (Frame2Position(3) - TabSpace * 5) * 0.25 ;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  TextHeight] ;
 
% define the parameters of the buttons .
ButtonTag = { 'DisplayParameter'; 'CircuitDiagram'; 'MainCircuitFormula'; 'ArcResistanceFormula' } ;
 
for num = 1: 4
    TempButtonPosition = ButtonPosition ;
    TempButtonPosition(1) = TempButtonPosition(1) + (num - 1) * (ButtonWidth + TabSpace * 1) ;
    % generate the pushbutton: OK .
    ButtonHandle = getfield( handles, ButtonTag{num} ) ;
    set( ButtonHandle, 'Position', TempButtonPosition ) ;
end


% define the bottom buttons .
ButtonTag = { 'PreviousButton'; ...
        'LoadResultButton'; ...
        'SaveResultButton'; ...
        'NextButton' } ;

ButtonWidth = 80 ;
ButtonHeight = 25 ;
ButtonXPos = FigureWidth - ButtonWidth * 4 - TabSpace * 5 ;
ButtonYPos = TabSpace * 2 ;;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  ButtonHeight] ;
for num = 1: 4
    TempButtonPosition = ButtonPosition ;
    TempButtonPosition(1) = TempButtonPosition(1) + (num - 1) * (ButtonWidth + TabSpace) ;
    % generate the pushbutton: OK .
    ButtonHandle = getfield( handles, ButtonTag{num} ) ;
    set( ButtonHandle, 'Position', TempButtonPosition ) ;
end



% --------------------------------------------------------------------------
function  init_FigureContent( h )
       
handles = guihandles( h ) ;

% get the ArcSimulationData .
ArcSimulationData = getappdata( handles.DisplayResult, 'ArcSimulationData' ) ;
if isempty( ArcSimulationData )
    ArcSimulationData = ArcSimulationSoft( 'Get_DefaultArcSimulationData' ) ;    
    % save the data .
    setappdata( handles.DisplayResult, 'ArcSimulationData', ArcSimulationData ) ;
end



if ~isfield( ArcSimulationData, 'ArcSimulationResult' )
    % none data .
    return ;
end

% get the ArcSimulationData .
ArcSimulationResult = ArcSimulationData.ArcSimulationResult ;
if isempty( ArcSimulationResult )
    % save the data .
    setappdata( handles.DisplayResult, 'ArcSimulationResult', ArcSimulationResult ) ;
end

% get the data .
DataFieldName = ArcSimulationResult.DataFieldName ;
DataFieldKanaName = ArcSimulationResult.DataFieldKanaName ;
XLabel = ArcSimulationResult.XLabel ;
YLabel = ArcSimulationResult.YLabel ;
LineColor = ArcSimulationResult.LineColor ;

TagIndex = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ;


for num = 1: 6
    
    CurveData = getfield( ArcSimulationResult, DataFieldName{num} ) ;    
    DataLength = length( CurveData ) ;
    
    % generate the axes to plot lines .
    AxesHandle = getfield( handles, ['AnalyzeAxes', TagIndex(num)] ) ;
    % plot line .
    LineHandle = line( 'Parent', AxesHandle, 'XData', [1: DataLength], ...
        'YData', CurveData, 'Color', LineColor{num} ) ;
    
    set( get(AxesHandle,'Title'), 'String', DataFieldKanaName{num} )
    set( get(AxesHandle,'XLabel'), 'String', XLabel{num} )
    set( get(AxesHandle,'YLabel'), 'String', YLabel{num} )
    
end








% --------------------------------------------------------------------------
function  DisplayParameter_Callback( h )
       
handles = guihandles( h ) ;


% get the string of the parameters .
[MainCircuitString, ArcResistanceString] = Get_DisplayParamterString( h ) ;

% find if have the same figure, and close it .
OldFigure = findobj( 'type', 'figure', 'Tag', 'DisplayParameter' ) ;
if ishandle( OldFigure )
    close( OldFigure ) ;
end

% init the variables .
FigureWidth = 500 ;
FigureHeight = 400 ;
TabSpace = 10 ;
TextHeight = 20 ;

% generate a new figure .
FigureHandle = figure( 'Visible', 'off' ) ;
set( FigureHandle, 'Units' , 'pixels', 'Position', [150  150  FigureWidth  FigureHeight], ...
    'Name', '显示输入参数', 'Tag', 'DisplayParameter', 'FileName' , '' ,...
    'MenuBar' , 'none', 'NumberTitle' , 'off' ,...
    'Resize', 'off', 'windowstyle', 'normal', 'Visible', 'off' ) ;
movegui( FigureHandle, 'center' )

% get the color of the figure .
FigureColor = get( FigureHandle, 'Color' ) ;
% reset the default value of the uicontrols .
set(FigureHandle,'defaultuicontrolunits','normalized');
set(FigureHandle,'defaultuicontrolfontname','隶书');
set(FigureHandle,'defaultuicontrolBackgroundColor', FigureColor );


% generate the parameters of the MainCircuitParameter .
% -----------------------------------------------------------------------------
% define the first frame .
FrameXPos = TabSpace * 2 ;
FrameWidth = FigureWidth - TabSpace * 4  ;
FrameHeight = FigureHeight - TabSpace * 8 ;
FrameYPos = FigureHeight - FrameHeight - TabSpace * 2 ;
Frame1Position = [FrameXPos  FrameYPos  FrameWidth  FrameHeight] ;
% generate a frame .
TitleHandle = uicontrol(FigureHandle,'style','frame', 'Units','pixels',...
    'position',Frame1Position  );


TextXPos = Frame1Position(1) + TabSpace * 1.5 ;
TextYPos = Frame1Position(2) + Frame1Position(4) - TextHeight - TabSpace ;
TextWidth = (Frame1Position(3) - TabSpace * 4.5) / 2 ;
TextPosition = [TextXPos  TextYPos  TextWidth  TextHeight] ;
% subtitle: 主电路参数
TextHandle = uicontrol(FigureHandle, 'Style','text', 'Units','pixels',...
    'position',TextPosition, 'Horizontal','center',...
    'string', '  主电路参数', 'fontsize',12 );

ListboxXPos = Frame1Position(1) + TabSpace * 1.5 ;
ListboxYPos = Frame1Position(2) + TabSpace * 1.5;
ListboxWidth = (Frame1Position(3) - TabSpace * 4.5) / 2 ;
ListboxHeight = Frame1Position(4) - TextHeight - TabSpace * 2.5 ;
ListboxPosition = [ListboxXPos  ListboxYPos  ListboxWidth  ListboxHeight] ;
% subtitle: 显示参数
ListboxHandle = uicontrol(FigureHandle, 'Style', 'listbox', 'Units','pixels',...
    'Position', ListboxPosition, 'Max', 2, 'BackgroundColor', [1  1  1], ...
    'string', MainCircuitString, 'fontsize',11 );


TextXPos = TextPosition(1) + TextPosition(3) + TabSpace * 1.5 ;
TextYPos = Frame1Position(2) + Frame1Position(4) - TextHeight - TabSpace ;
TextWidth = (Frame1Position(3) - TabSpace * 4.5) / 2 ;
TextPosition = [TextXPos  TextYPos  TextWidth  TextHeight] ;
% subtitle: 电弧电阻参数
TextHandle = uicontrol(FigureHandle, 'Style','text', 'Units','pixels',...
    'position',TextPosition, 'Horizontal','center',...
    'string', '  电弧电阻参数', 'fontsize',12 );

ListboxXPos = ListboxPosition(1) + ListboxPosition(3) + TabSpace * 1.5 ;
ListboxYPos = Frame1Position(2) + TabSpace * 1.5;
ListboxWidth = (Frame1Position(3) - TabSpace * 4.5) / 2 ;
ListboxHeight = Frame1Position(4) - TextHeight - TabSpace * 2.5 ;
ListboxPosition = [ListboxXPos  ListboxYPos  ListboxWidth  ListboxHeight] ;
% subtitle: 显示参数
ListboxHandle = uicontrol(FigureHandle, 'Style', 'listbox', 'Units','pixels',...
    'Position', ListboxPosition, 'Max', 2, 'BackgroundColor', [1  1  1], ...
    'string', ArcResistanceString, 'fontsize',11 );



ButtonWidth = 80 ;
ButtonHeight = 25 ;
ButtonXPos = FigureWidth - ButtonWidth - TabSpace * 2 ;
ButtonYPos = TabSpace * 2 ;;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  ButtonHeight] ;
% generate the pushbutton: Close .
ButtonHandle = uicontrol( 'Parent', FigureHandle, 'Units', 'Pixels', 'Position', ButtonPosition, ...
    'Style', 'pushbutton', 'string', '关闭', 'Fontsize',12, 'Callback', ['close(gcbf) ;'] ) ;

% display the figure .
set( FigureHandle, 'Visible', 'on' ) ;




% -------------------------------------------------------
function [MainCircuitString, ArcResistanceString] = Get_DisplayParamterString( h ) ;

handles = guihandles( h ) ;

% get the ArcSimulationData .
ArcSimulationData = getappdata( handles.DisplayResult, 'ArcSimulationData' ) ;


% define the string of the MainCircuitParameterText .
Text1String = { 'L21'; 'L22'; 'M1'; 'M2'; 'R21'; 'R22'; ...
        'R1'; 'L1'; 'C'; 'ea'; 'eb'; 'ec' } ;
ParameterName = { 'L21'; 'L22'; 'M1'; 'M2'; 'R21'; 'R22'; ...
        'R1'; 'L1'; 'C'; 'ea'; 'eb'; 'ec' } ;

MainCircuitString{1} = '主电路参数:' ;
for num = 1: 12
    ParameterValue = getfield( ArcSimulationData.MainCircuitParameter, ParameterName{num} ) ;
    MainCircuitString{num + 1} = ['    ', Text1String{num}, ' :  ', num2str(ParameterValue)] ;    
end

% define the string of the ArcResistanceParameterText .
Text2String = { 'A'; 'B'; 'C'; 'D'; 'L'; 'ω'; 'θ' } ;
ParameterName = { 'A'; 'B'; 'C'; 'D'; 'L'; 'Angle1'; 'Angle2' } ; ;

ArcResistanceString{1} = '电弧电阻参数:' ;
for num = 1: 7
    ParameterValue = getfield( ArcSimulationData.ArcResistanceParameter, ParameterName{num} ) ;
    ArcResistanceString{num + 1} = ['    ', Text2String{num}, ' :  ', num2str(ParameterValue)] ;    
end





% --------------------------------------------------------------------------
function  CircuitDiagram_Callback( h )
       
handles = guihandles( h ) ;


% find if have the same figure, and close it .
OldFigure = findobj( 'type', 'figure', 'Tag', 'CircuitDiagram' ) ;
if ishandle( OldFigure )
    close( OldFigure ) ;
end


% generate a new figure .
FigureHandle = figure( 'Visible', 'off' ) ;
set( FigureHandle, 'Units' , 'pixels', 'Position', [150 150 500 300], ...
    'Name', '电路图', 'Tag', 'CircuitDiagram', 'FileName' , '' ,...
    'MenuBar' , 'none', 'NumberTitle' , 'off' ,...
    'Resize', 'off', 'windowstyle', 'normal', 'Visible', 'off' ) ;

% get the color of the figure .
FigureColor = get( FigureHandle, 'Color' ) ;
% reset the default value of the uicontrols .
set(FigureHandle,'defaultuicontrolunits','normalized');
set(FigureHandle,'defaultuicontrolfontname','隶书');
set(FigureHandle,'defaultuicontrolBackgroundColor', FigureColor );


% init the variables .
FigureWidth = 520 ;
FigureHeight = 420 ;
TabSpace = 10 ;
TextHeight = 20 ;


try
    % read the image data .
    ImageData = imread( 'CircuitDiagram.bmp' ) ;
    ImageSize = size( ImageData ) ;
catch
    warndlg( ['Lost File: CircuitDiagram.bmp'], 'modal' ) ;
    close( FigureHandle ) ;
    return ;
end


% define the position of the Axes .
AxesXPos = TabSpace * 2 ;
AxesYPos = TabSpace * 6 ;
AxesWidth = ImageSize(2) ;
AxesHeight = ImageSize(1) ;
AxesPosition = [AxesXPos  AxesYPos  AxesWidth  AxesHeight] ;

FigureWidth = AxesWidth + TabSpace * 4 ;
FigureHeight = AxesHeight + TabSpace * (2 + 6) ;

% reset the figure's size . 
set( FigureHandle, 'Units', 'pixels', 'Position', [100  250  FigureWidth  FigureHeight] ) ;
movegui( FigureHandle, 'center' )


% generate the axes to plot lines .
AxesHandle = axes( 'Parent', FigureHandle, 'Units' , 'pixels' ,  ...
    'Position', AxesPosition, 'Visible', 'off', 'YDir', 'reverse', ...
    'Xlim', [0  AxesWidth], 'Ylim', [0  AxesHeight] ) ;

% draw the image .
ImageHandle = image( 'Parent', AxesHandle, 'CData', ImageData ) ;


ButtonWidth = 80 ;
ButtonHeight = 25 ;
ButtonXPos = FigureWidth - ButtonWidth - TabSpace * 3 ;
ButtonYPos = TabSpace * 2 ;;
ButtonPosition = [ButtonXPos  ButtonYPos  ButtonWidth  ButtonHeight] ;
% generate the pushbutton: Close .
ButtonHandle = uicontrol( 'Parent', FigureHandle, 'Units', 'Pixels', 'Position', ButtonPosition, ...
    'Style', 'pushbutton', 'string', '关闭', 'Fontsize',12, 'Callback', ['close(gcbf) ;'] ) ;

% display the figure .
set( FigureHandle, 'Visible', 'on' ) ;





% --------------------------------------------------------------------------
function  PreviousButton_Callback( h )
       
handles = guihandles( h ) ;

% get the ArcSimulationData .
ArcSimulationData = getappdata( handles.DisplayResult, 'ArcSimulationData' ) ;

% return the simulate figure .
SimulateFigure( ArcSimulationData ) ;


% close the current figure .
pause(0) ;
close( handles.DisplayResult ) ;



% --------------------------------------------------------------------------
function  SaveResult_Callback( h )
       
handles = guihandles( h ) ;


PromptString = '保存结果文件.' ;
MessageString = '保存结果文件成功。 ' ;

[ FileName , PathName ] = uiputfile( {'*.fig','结果文件(*.fig)'}, PromptString ) ;


if FileName == 0
    return ;    
else
    
    [TempPathName, FileName, FileTypeName, Version] = fileparts( FileName ) ;

    if ~strcmp( FileTypeName, '.fig' ) ;
        FileTypeName = '.fig' ;
    else
    end
    SaveFile = fullfile( PathName, [FileName, FileTypeName, Version] ) ;
end


if strcmp( lower( FileName ), 'figuremenubar' )
    warndlg( '不能覆盖系统文件:FigureMenuBar.fig。', '警告', 'modal' ) ;
    return ;    
    
elseif strcmp( lower( FileName ), 'figuretoolbar' ) ;
    warndlg( '不能覆盖系统文件:FigureToolBar.fig。', '警告', 'modal' ) ;
    return ;    
else
end


% save the result  file .
hgsave( handles.DisplayResult, SaveFile ) ;


msgbox( MessageString ) ;



% --------------------------------------------------------------------------
function  NextButton_Callback( h )
       
handles = guihandles( h ) ;

% get the ArcSimulationData .
ArcSimulationData = getappdata( handles.DisplayResult, 'ArcSimulationData' ) ;

% open the next figure ,
DisplayFFTResult( ArcSimulationData ) ;


% close the current figure .
pause(0) ;
close( handles.DisplayResult ) ;