www.gusucode.com > sloptim工具箱matlab源码程序 > sloptim/sloptguis/@srocsdgui/@newrequirementdlg/newrequirementdlg.m
function hout = newrequirementdlg(rData,ParentFig) %NEWREQUIREMENTDLG Constructor for @newrequirementdlg % (dialog for creating a new requirement). % Authors: A. Stothert % Copyright 1986-2009 The MathWorks, Inc. % Create class instance h = srocsdgui.newrequirementdlg; % Build GUI frame h.Handles = h.build; % Listeners h.Listeners = handle.listener(h,h.findprop('Requirement'),'PropertyPostSet',... {@localUpdateDialog}); % Store handle to sisotool h.rData = rData; %Store parent figure handle h.hParentFig = ParentFig; % Listen to figure being destroyed % f = handle(ParentFig); % DestroyL = handle.listener(f.Peer,'ObjectBeingDestroyed',@close); % DestroyL.CallbackTarget = h; % h.Listeners = [h.Listeners(1) ; DestroyL]; % Get list of available requirements and update popup ReqList = h.newRequirement; PopUp = h.Handles.TypeSelect; awtinvoke(PopUp,'removeAllItems()'); for ct=1:length(ReqList) awtinvoke(PopUp,'addItem(Ljava.lang.Object;)',sprintf(ReqList{ct})); end % Get list of available responses and update popup h.updateResponseList; %Listen to changes in the response list L = handle.listener(h.rData,'ResponseListChanged', ... {@localUpdateResponseList h}); h.Listeners = [h.Listeners; L]; % Make frame visible Frame = h.Handles.Frame; if ~Frame.isVisible % Bring it up centered awtinvoke(Frame,'setLocationRelativeTo(Ljava.awt.Component;)',ParentFig); end awtinvoke(Frame,'setMinimized(Z)',false); awtinvoke(Frame,'pack()'); awtinvoke(Frame,'setResizable(Z)',false); % Initialize dialog for first type in list h.setType(ReqList{1}); awtinvoke(Frame,'setVisible(Z)',true); %Return object hout = h; end %% Manage changes in the requirement combobox selection or targeted % constraint changes function localUpdateDialog(eventSrc,eventData) % Updates "Requirement Parameters" groupbox when constraint handle changes h = eventData.AffectedObject; NewReq = eventData.NewValue; if ~isempty(NewReq) h.Handles.Frame.setDone(false); if ~isempty(h.ParamEditor) % Clean up current editor settings if ishandle(h.ParamEditor.Listeners) delete(h.ParamEditor.Listeners); end h.ParamEditor = []; end p = h.Handles.ParamBox; awtinvoke(p,'removeAll'); %h.ParamEditor = NewReq.edit(h.Handles.ParamBox); h.ParamEditor = NewReq.getWidgets(h.Handles.ParamBox); %Set tab order editorTabOrder = h.ParamEditor.tabOrder; nTabOrder = numel(editorTabOrder); tabOrder = javaArray('java.awt.Component',5+nTabOrder); tabOrder(1) = h.Handles.TypeSelect; tabOrder(2) = h.Handles.RespSelect; for ct = 3:3+nTabOrder-1 tabOrder(ct) = editorTabOrder(ct-2); end tabOrder(2+nTabOrder+1) = h.Handles.Handles{4}; tabOrder(2+nTabOrder+2) = h.Handles.Handles{5}; tabOrder(2+nTabOrder+3) = h.Handles.Handles{6}; focusTraversal = com.mathworks.toolbox.control.util.MJGenericFocusTraversal(tabOrder); awtinvoke(h.Handles.Frame,'setFocusTraversalPolicy(Ljava.awt.FocusTraversalPolicy;)',focusTraversal); %Ready to repack awtinvoke(h.Handles.Frame,'pack()'); else %No constraint to show, clean up editor contents if ~isempty(h.ParamEditor) delete(h.ParamEditor.Listeners); end h.ParamEditor = []; if ~isempty(h.Handles.ParamBox) ParamBox = h.Handles.ParamBox; awtinvoke(ParamBox,'removeAll'); awtinvoke(ParamBox,'revalidate()'); awtinvoke(ParamBox,'repaint()'); end tabOrder = javaArray('java.awt.Component',3); tabOrder(1) = h.Handles.TypeSelect; tabOrder(2) = h.Handles.Handles{4}; tabOrder(3) = h.Handles.Handles{5}; focusTraversal = com.mathworks.toolbox.control.util.MJGenericFocusTraversal(tabOrder); awtinvoke(h.Handles.Frame,'setFocusTraversalPolicy(Ljava.awt.FocusTraversalPolicy;)',focusTraversal) end end %% Manage changes in the known responses list function localUpdateResponseList(es,ed,this) %Callback to handle changes in the known responses this.updateResponseList; end