www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@xregGui/@dialog/dialog.m

    function obj = dialog( varargin )
%xregGui.dialog Create a dialog with buttons and space for content.
%
%   Example:
%      d = xregGui.dialog( 'Owner', pFig,...
%                          'Name', dialogTitle,...
%                          'Size', [200, 300],...
%                          'Buttons', 'OK_CANCEL_HELP',...
%                          'DefaultAction', 'OK',...
%                          'CloseAction', 'CANCEL' );
%
%      d.Content = iCreateLayout( d.Figure );
%
%      % Does the waitfor
%      closeMode = d.showDialog(); 
%      
%      % The tag is set to either 'OK' or 'CANCEL'
%      switch closeMode
%         case 'OK'
%             ...
%         case 'CANCEL'
%             ...
%      end
%
%   See also xregGui.dialog.showDialog.

%  Copyright 2007-2013 The MathWorks, Inc.

% Is the first input argument a udd object derived from me? If it is then
% we are being called as a super class constructor and don't have to
% construct an object
if nargin && isa(varargin{1}, 'xregGui.dialog')
	obj = varargin{1};
	varargin(1) = [];
else
	obj = xregGui.dialog;
end

% Create the Actions
obj.Actions.OK     = iMakeAction( obj, @(s,e)obj.closeDialog('OK'),     'OK' );
obj.Actions.CANCEL = iMakeAction( obj, @(s,e)obj.closeDialog('CANCEL'), 'Cancel' );
obj.Actions.CLOSE  = iMakeAction( obj, @(s,e)obj.closeDialog('CLOSE'),  'Close' );
obj.Actions.HELP   = iMakeAction( obj, @(s,e)iShowHelp( obj ),          'Help' );

obj.Figure = xregdialog();
obj.addListeners( handle.listener( obj, 'ObjectBeingDestroyed', @(s,e)iDeleteFigure(obj) ) );

set( obj, varargin{:} );

% add a close dialog property
mbcgui.hgclassesutil.addprop(obj.Figure, 'CloseMode');


InfoProps = [obj.findprop('InfoTitle'), obj.findprop('InfoString'), obj.findprop('InfoHeight')];
obj.addListeners( handle.listener(obj, InfoProps, 'PropertyPostSet', @iUpdateInfo));
% Initialise dialog location here, before any contents are created.  This
% prevents a bug - ActiveX controls not appearing
obj.pSetDialogLocation;


function action = iMakeAction( dialog, callback, name )
action = xregGui.DialogAction( callback, name );
action.Dialog = dialog;

function iDeleteFigure( obj )
if isgraphics( obj.Figure )
    delete(obj.Figure)
end

function iShowHelp( obj )
mv_helptool( obj.HelpCode, obj.Figure );

function iUpdateInfo(src, evt)
obj = evt.AffectedObject;
PropName = src.Name;
pUpdateInfo(obj, PropName);