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