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);