www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+testplan/FrameWork.m
classdef FrameWork < mbcmodelview.FrameWork %mbcmodelview.testplan.FrameWork framework for test plan % Copyright 2015-2016 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %CrossSectionView cross section plot CrossSectionView %BlockDiagram block diagram BlockDiagram %TabLayout tab to select BlockDiagram or CrossSectionView TabLayout end methods function show(obj,TP) %show show test plan view ms = obj.MessageService; obj.ForceReset = true; setNewTestPlan(ms, address(TP)); % restore any stored layout s = viewLayout(ms.Testplan,'Testplan'); deserializeView(obj,s) end function view(obj,TP) %#ok<INUSD> %view update test plan view obj.ForceReset = false; update(obj.MessageService) end function ok = hide(obj) %hide hide test plan view ms = obj.MessageService; if ~isnull(ms.Pointer) % ask message service to perform any tidy up actions if any(ms.ModelFitted) % store layout settings s = serializeView(obj); ms.Testplan = viewLayout(ms.Testplan,'Testplan',s); end ok = leaveNode(ms); else ok=1; end end function openDesignEditor(obj) %openDesignEditor open DoE editor obj.Actions.EditDesign.execute(); end function change(obj,pTestplan) %change change test plan state % change(obj,pTestplan) if nargin<2 pTestplan = obj.Pointer; end change(obj.MessageService,pTestplan) end function s = serializeView(obj) %SERIALIZEVIEW Get serializable setup data for the view % OUT = SERIALIZEVIEW(OBJ) retuns a MATLAB array that contains the setup % data that will allow this view to be recreated via the deserializeView % function in the future. ms = obj.MessageService; if ~isnull(ms.Pointer) && any(ms.ModelFitted) % store cross-section settings only if models are fitted s = serializeView(obj.CrossSectionView); currentCard = find(obj.TabLayout.SelectedTab == obj.TabLayout.Children); s.CardNumber = currentCard; else s = []; end end function deserializeView(obj,s) %DESERIALIZEVIEW Set saved state data % DESERIALIZEVIEW(OBJ, DATA) sets a copy of the serialized state of this % View. DATA is a MATLAB array that will have been created by a % previous call to SERIALIZEVIEW on this View object. if ~isempty(s) tabNumber = s.CardNumber; currentTab = find(obj.TabLayout.SelectedTab == obj.TabLayout.Children); deserializeView(obj.CrossSectionView,s); if currentTab~=tabNumber % set main tab and side layout view %synchronize info pane set(obj.TabLayout, 'SelectedTab', obj.TabLayout.Children(tabNumber)); selectView(obj.InfoPane,tabNumber) end end end end methods (Access=private) function obj = FrameWork(MBrowser,MessageService) %FrameWork private constructor if nargin<2 MessageService = mbcmodelview.testplan.MessageService; end obj@mbcmodelview.FrameWork(MBrowser,MessageService) addListeners(obj,event.listener(obj.MessageService,'NodeChanged',@obj.onNodeChanged)); end end methods (Access=protected) function create(obj,parentInfo) %create create graphical components % create(obj,parentInfo) if isstruct(parentInfo) % MBrowser provides a structure containing the parent panel and % the toolbar panel obj.ViewParent = parentInfo.ViewParent; obj.ToolbarParent = parentInfo.ToolbarParent; else obj.ViewParent = parentInfo; end testPlanMainPanel = mbcgui.container.layoutpanel('Parent',obj.ViewParent,... 'LayoutBorder',[0,0,0,0],... 'Tag', 'TestPlanMainPanel', ... 'BorderType', 'beveledin'); % create tab layout and add the block diagram and cross view tabLayout = uitabgroup('Parent',testPlanMainPanel,... 'SelectionChangedFcn', @obj.onTabChanged,... 'Units','pixels'); % block diagram tab blockDiagramTab = mbcgui.container.uitab('Parent',tabLayout,... 'Title','Test Plan'); obj.BlockDiagram = mbcmodelview.testplan.BlockDiagram('Parent',blockDiagramTab,... 'MessageService',obj.MessageService); blockDiagramTab.LayoutComponent = obj.BlockDiagram; % cross-section tab crossSectionTab = mbcgui.container.uitab('Parent',tabLayout,... 'Title','Response Models'); crossView = mbcmodelview.testplan.CrossSectionView('Parent',crossSectionTab, ... 'MessageService', obj.MessageService); crossSectionTab.LayoutComponent = crossView; obj.CrossSectionView = crossView; set(testPlanMainPanel,'LayoutComponent',{tabLayout}); obj.TabLayout = tabLayout; % Workfow and other summary info displayed in a separate splitter % to the right obj.Workflow = mbcWorkflowPanel(obj.ViewParent); obj.InfoPane = mbcmodelview.testplan.InfoPane('MessageService',obj.MessageService,... 'CrossSectionView',obj.CrossSectionView,... 'Parent',obj.ViewParent); lytRightPane = xreggridbaglayout(obj.ViewParent,... 'dimension',[2,1],... 'rowsizes',[150,-1],... 'gapy',5,... 'elements',{obj.Workflow,obj.InfoPane }); % put main view and info pane side-by-side obj.MainLayout = xregsnapsplitlayout(obj.ViewParent,... 'barstyle', 0,... 'orientation', 'lr',... 'left', testPlanMainPanel,... 'right', lytRightPane ,... 'minwidth',[400 250],... 'split',[0.98 0.02],... 'border',[-1 -1 -1 -1],... 'style','toright'); % create menus, toolbars, workflow controls Labels = {'&TestPlan';'&View'}; createControls(obj,Labels); % context menu for tree if ~isempty(obj.Browser) obj.NodeContextMenu = makeContextMenuBase(obj.Browser); createMenuItem(obj.Actions.MakeTemplate,obj.NodeContextMenu); end end function onTabChanged(obj,src,~) %onTabChanged change infopane view to match tab currentCard = find(src.SelectedTab == src.Children); selectView(obj.InfoPane,currentCard) end function onNodeChanged(obj,~,~) %onNodeChanged respond to NodeChanged event selectView(obj) if ~obj.ForceReset && isInBrowser(obj) % update list view listview(obj.Browser); end end function selectView(obj) %selectView select state of test plan view % select tab and synchronize info pane based on model fitted ms = obj.MessageService; s = viewLayout(ms.Testplan,'Testplan'); % selected tab currentTab = find(obj.TabLayout.SelectedTab == obj.TabLayout.Children); if isempty(s) % switch view if no layout stored (initial state). This causes % the layout to switch to the cross-section view when models % are fitted. if any(ms.ModelFitted) % show cross-section if models are fitted tabNumber = 2; else % block diagram tab tabNumber = 1; end if currentTab~=tabNumber % set main tab and side layout view set(obj.TabLayout, 'SelectedTab', obj.TabLayout.Children(tabNumber)); %synchronize info pane selectView(obj.InfoPane,tabNumber) end end end end methods (Static) function obj = createFigure(pNode) %createFigure make view in a separate figure for testing obj = mbcmodelview.testplan.FrameWork([]); figure(obj); set(obj.Figure,'Name','Test Plan'); drawnow update setNewTestPlan(obj.MessageService,pNode); selectView(obj) update(obj.MessageService); end function [lyt, tblyt, obj]=creategui(mdev,infoParent) %create view for inside the model browser MessageService = mbcmodelview.testplan.MessageService; setNewTestPlan(MessageService, address(mdev)); obj = mbcmodelview.testplan.FrameWork(MBrowser,MessageService); create(obj,infoParent); lyt = xreglayerlayout(obj.ViewParent,'elements',{obj.MainLayout}); tblyt = obj.Toolbar; end end end