www.gusucode.com > mean-shift用于图像分割 Matlab程序 > Ms_segmenter/My_inputdlg.m

    function Answer=My_inputdlg(Prompt, Title, NumLines, DefAns)
%INPUTDLG Input dialog box.
%  Answer = inputdlg(Prompt) creates a modal dialog box that returns
%  user input for multiple prompts in the cell array Answer.  Prompt
%  is a cell array containing the Prompt strings.
%
%  Answer = inputdlg(Prompt,Title) specifies the Title for the dialog.
%
%  Answer = inputdlg(Prompt,Title,LineNo) specifies the number of lines
%  for each answer in LineNo.  LineNo may be a constant value or a 
%  vector having one element per Prompt.
%
%  Answer = inputdlg(Prompt,Title,LineNo,DefAns) specifies the default
%  answer to display for each Prompt.  DefAns must contain the same
%  number of elements as Prompt and must be a cell array.
%  Example:
%  prompt={'Enter the matrix size:','Enter the colormap name:'};
%  def={'20','hsv'};
%  title='Input for Peaks function';
%  lineNo=1;
%  answer=inputdlg(prompt,title,lineNo,def);
%
%  See also TEXTWRAP.

%  Loren Dean   May 24, 1995.
%  Copyright (c) 1984-97 by The MathWorks, Inc.
%  $Revision: 1.36 $

%%%%%%%%%%%%%%%%%%%%%
%%% General Info. %%%
%%%%%%%%%%%%%%%%%%%%%
Black      =[0       0        0      ]/255;
LightGray  =[192     192      192    ]/255;
LightGray2 =[160     160      164    ]/255;
MediumGray =[128     128      128    ]/255;
White      =[255     255      255    ]/255;

%%%%%%%%%%%%%%%%%%%%
%%% Nargin Check %%%
%%%%%%%%%%%%%%%%%%%%
if nargout~=1,error('Wrong number of output arguents for INPUTDLG');end
if nargin<1,error('Too few arguments for INPUTDLG');end

if nargin==1,Title=' ';end
if nargin<=2, NumLines=1;end

if ~iscell(Prompt),
  Prompt={Prompt};
end

NumQuest=prod(size(Prompt));    

if nargin<=3, 
  DefAns=cell(NumQuest,1);
  for lp=1:NumQuest, DefAns{lp}=''; end
end
if nargin>4,error('Too many input arguments');end

% Backwards Compatibility
if isstr(NumLines),
  warning(['Please see the INPUTDLG help for correct input syntax.' 10 ...
           '         OKCallback no longer supported.' ]);
  NumLines=1;
end

if length(NumLines)~=NumQuest,NumLines=ones(NumQuest,1)*NumLines(1);end

if ~iscell(DefAns),
  error('Default Answer must be a cell array in INPUTDLG.');  
end

%%%%%%%%%%%%%%%%%%%%%%%
%%% Create InputFig %%%
%%%%%%%%%%%%%%%%%%%%%%%
FigWidth=300;FigHeight=100;
FigPos(3:4)=[FigWidth FigHeight];
FigColor=get(0,'Defaultuicontrolbackgroundcolor');
InputFig=dialog(                            ...
               'Visible'         ,'off'   , ...
               'Name'            ,Title   , ...
               'Pointer'         ,'arrow' , ...
               'Units'           ,'points', ...
               'UserData'        ,''      , ...
               'Tag'             ,Title   , ...
               'HandleVisibility','on'    , ...               
               'Color'           ,FigColor, ...               
               'NextPlot'        ,'add'     ...
               );
  

%%%%%%%%%%%%%%%%%%%%%
%%% Set Positions %%%
%%%%%%%%%%%%%%%%%%%%%
DefOffset=5;
SmallOffset=2;

DefBtnWidth=50;
BtnHeight=20;
BtnYOffset=DefOffset;
BtnFontSize=get(0,'FactoryUIControlFontSize');
BtnWidth=DefBtnWidth;
TxtBackClr=FigColor;
TxtForeClr=Black;

StInfo.Style              ='text'     ;
StInfo.Units              ='points'   ;   
StInfo.FontSize           =BtnFontSize;
StInfo.HorizontalAlignment='left'     ;
StInfo.BackgroundColor    =TxtBackClr ;
StInfo.ForegroundColor    =TxtForeClr ;
StInfo.HandleVisibility   ='callback' ;


EdInfo=StInfo;
EdInfo.Style='edit';
EdInfo.BackgroundColor=White;

BtnInfo=StInfo;
BtnInfo.Style='pushbutton';
BtnInfo.HorizontalAlignment='center';

% Determine # of lines for all Prompts
ExtControl=uicontrol(StInfo, ...
                     'String'   ,''         , ...    
                     'Position' ,[DefOffset                  DefOffset  ...
                                 0.95*(FigWidth-2*DefOffset) BtnHeight  ...
                                ]            , ...
                     'Visible'  ,'off'         ...
                     );
                     
WrapQuest=cell(NumQuest,1);
QuestPos=zeros(NumQuest,4);

for ExtLp=1:NumQuest,
  [WrapQuest{ExtLp},QuestPos(ExtLp,1:4)]= ...
            textwrap(ExtControl,Prompt(ExtLp),75);
end % for ExtLp
delete(ExtControl);

QuestHeight=QuestPos(:,4);

TxtHeight=QuestHeight(1)/size(WrapQuest{1,1},1);
EditHeight=TxtHeight*NumLines;
EditHeight(NumLines==1)=EditHeight(NumLines==1)+4;

FigHeight=(NumQuest+2)*DefOffset    + ...
          BtnHeight+sum(EditHeight) + ...
          sum(QuestHeight);%          + ...
                           %NumQuest*SmallOffset;

FigWidth=max(175,max(QuestPos(:,3)))+2*DefOffset;
FigPos=get(InputFig,'Position');

Temp=get(0,'Units');
set(0,'Units','points');
ScreenSize=get(0,'ScreenSize');
set(0,'Units',Temp);

FigPos(1)=(ScreenSize(3)-FigWidth)/2;
FigPos(2)=(ScreenSize(4)-FigHeight)/2;
FigPos(3)=FigWidth;
FigPos(4)=FigHeight;
set(InputFig,'Position',FigPos);

TxtXOffset=DefOffset;
TxtWidth=FigWidth-2*DefOffset;
TxtForeClr=Black;
TxtBackClr=get(InputFig,'Color');

QuestYOffset=zeros(NumQuest,1);
EditYOffset=zeros(NumQuest,1);
QuestYOffset(1)=FigHeight-DefOffset-QuestHeight(1);
EditYOffset(1)=QuestYOffset(1)-EditHeight(1);% -SmallOffset;

for YOffLp=2:NumQuest,
  QuestYOffset(YOffLp)=EditYOffset(YOffLp-1)-QuestHeight(YOffLp)-DefOffset;
  EditYOffset(YOffLp)=QuestYOffset(YOffLp)-EditHeight(YOffLp); %-SmallOffset;
end % for YOffLp

QuestHandle=[];
EditHandle=[];
for lp=1:NumQuest,
  QuestTag=['Prompt' num2str(lp)];
  EditTag=['Edit' num2str(lp)];
  QuestHandle(lp)=uicontrol(InputFig  ,                         ...
                           StInfo     , ...
                           'Max'      ,size(Prompt{lp},1), ...
                           'Position' ,[ TxtXOffset QuestYOffset(lp) ...
                                         TxtWidth   QuestHeight(lp)  ...
                                       ]                      , ...
                           'String'   ,WrapQuest{lp}       , ...
                           'Tag'      ,QuestTag                 ...
                           );

  EditHandle(lp)=uicontrol(InputFig   ,                       ...
                           EdInfo     , ...
                          'Max'       ,NumLines(lp)         , ...
                          'Position'  ,[ TxtXOffset EditYOffset(lp) ...
                                         TxtWidth   EditHeight(lp)  ...
                                       ]                    , ...
                          'String'    ,DefAns{lp}           , ...
                          'Tag'       ,QuestTag               ...
                          );
                                   
end % for lp

CBString='set(gcf,''UserData'',''Cancel'');uiresume';

CancelHandle=uicontrol(InputFig   ,              ...
                      BtnInfo     , ...
                      'Position'  ,[ DefOffset DefOffset ...
                                    BtnWidth  BtnHeight  ...
                                   ]           , ...
                      'String'    ,'Cancel'    , ...
                      'Callback'  ,CBString    , ...
                      'Tag'       ,'Cancel'      ...
                      );
                                   
                                   
CBString='set(gcf,''UserData'',''OK'');uiresume';

OKHandle=uicontrol(InputFig    ,              ...
                   BtnInfo     , ...
                   'Position'  ,[ FigWidth-BtnWidth-DefOffset DefOffset ...
                                  BtnWidth                    BtnHeight ...
                                ]           , ...
                  'Callback'   ,CBString    , ...
                  'String'     ,'OK'        , ...
                  'Tag'        ,'OK'          ...
                  );
    
set(InputFig, 'KeyPressFcn', CBString);
set(InputFig ,'Visible','on');
set(findobj(InputFig),'Units','normalized','HandleVisibility','callback');
set(InputFig,'Units','points');

uiwait(InputFig);

TempHide=get(0,'ShowHiddenHandles');
set(0,'ShowHiddenHandles','on');

if any(get(0,'Children')==InputFig),
  Answer={};
  if strcmp(get(InputFig,'UserData'),'OK'),
    Answer=cell(NumQuest,1);
    for lp=1:NumQuest,
      Answer(lp)=get(EditHandle(lp),{'String'});
    end % for
  end % if strcmp
  delete(InputFig);
else,
  Answer={};
end % if any

set(0,'ShowHiddenHandles',TempHide);