www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+global/FrameWork.m
classdef FrameWork < mbcmodelview.FrameWork %mbcmodelview.global.FrameWork multiview GUI framework for global models % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %ListSplit snapsplit layout for alternative models % FrameWork will show or hide List depending on the number of % alternative model ListSplit %ListView listview for alternative models ListView end methods function show(obj,mdev) %show initialize node from MBrowser for showing % top node must be initalized InitModel(mdev); pSelected = iBestAlternative(mdev); if pSelected ~=address(mdev) % model must be initialised InitModel(info(pSelected)); mdev= info(info(pSelected)); end % model fit has been deferred - can we refit now [Deferred,~,CanUpdate]=isDeferred(mdev); if Deferred && CanUpdate % refit model refit(mdev); end % causes reset of all views the first time that the FrameWork is % viewed obj.ForceReset = true; % restore layout from testplan T = mdevtestplan(mdev); s = viewLayout(T,'Global'); if ~isempty(s) restoreViewLayout(obj.MultiView,obj.MultiView.ViewLayoutName,s); end end function view(obj,mdev) %view update with correct node from MBrowser updateNode(obj.MessageService, iBestAlternative(mdev),address(mdev),obj.ForceReset ) %subsequent calls to view will not force a reset obj.ForceReset = false; end function ok = hide(obj) %hide hide node from MBrowser ms = obj.MessageService; if ~isnull(ms.Pointer) % save layout to test plan T = mdevtestplan(obj.MessageService.ModelDev); s = saveViewLayout(obj.MultiView); if ~isempty(s) viewLayout(T,'Global',s); end % ask message service to perform any tidy up actions ok = leaveNode(obj.MessageService); else ok = true; end end end methods(Access=private) function obj = FrameWork(MBrowser,MessageService) %FrameWork private constructor if nargin<2 MessageService = mbcmodelview.global.MessageService; end obj@mbcmodelview.FrameWork(MBrowser,MessageService) addListeners(obj,[event.listener(obj.MessageService,'NodeChanged',@obj.onNodeChanged),... event.listener(obj.MessageService,'NodeUpdated',@obj.onNodeUpdated)]); end function onNodeChanged(obj,~,~) %onNodeChanged update utility functions when node is changed % restore multiview layout if ~isempty(obj.Toolbar) % update utility functions in toolbar createUtilityFunctions(obj.MessageService.Actions,obj.Toolbar) end end function onNodeUpdated(obj,~,~) %onNodeUpdated update model browser text when node is updated if isInBrowser(obj) doDrawText(obj.Browser); end % determine whether to display the list or not if iShowList(info(obj.MessageService.CurrentNode) ) if strcmpi(get(obj.ListSplit,'splitenable'),'off') % set default list position and enable set(obj.ListSplit,'splitenable','on','state','center','split',[0.02,0.98]); end else % close listsplitier and disable set(obj.ListSplit,'splitenable','off','state','top'); end 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 des = mbcmodelview.Description('Parent', obj.ViewParent, ... 'MessageService', obj.MessageService); % multiview plots obj.MultiView = obj.createMultiView(obj.ViewParent,obj.MessageService); % model selection listview obj.ListView = mbcmodelview.ListView('Parent', obj.ViewParent, ... 'MessageService', obj.MessageService); % splitter for multiview and list so the list can be hidden obj.ListSplit = xregsnapsplitlayout(obj.ViewParent,... 'orientation','ud',... 'barstyle', 1,... 'top',obj.ListView,... 'bottom',obj.MultiView,... 'minwidth',[100 435],... 'split',[0.02,0.98],... 'style','totop',... 'splitenable','off',... 'state','top'); lytLeftPane = xreggridbaglayout(obj.ViewParent,... 'dimension',[2,1],... 'rowsizes',[37,-1],... 'gapy',1,... 'elements',{des,obj.ListSplit}); % Workfow and other summary info displayed in a separate splitter % to the right obj.Workflow = mbcWorkflowPanel(obj.ViewParent); obj.InfoPane = mbcmodelview.global.InfoPane('MessageService',obj.MessageService,... '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', lytLeftPane,... 'right', lytRightPane ,... 'minwidth',[400 250],... 'split',[0.98 0.02],... 'border',[-1 -1 -1 -1],... 'style','toright'); % create menus, toolbars, workflow controls createControls(obj); end function createControls(obj) %createControls create controls for framework actions % The message service has the actions createControls@mbcmodelview.FrameWork(obj); % add utility function controls createUtilityFunctions(obj.MessageService.Actions,obj.Toolbar); end end methods (Static) function obj = createFigure(pNode) %createFigure make view in a separate figure for testing obj = mbcmodelview.global.FrameWork([]); updateNode(obj.MessageService, pNode); figure(obj); end function [lyt, tblyt, View]=creategui(mdev,infoParent) %create view for inside the model browser View = mbcmodelview.global.FrameWork(MBrowser); updateNode(View.MessageService, address(mdev)); create(View,infoParent); lyt = View.MainLayout; tblyt = View.Toolbar; end function MultiView = createMultiView(ViewParent,MessageService,LayoutName) %createMultiView create multiview panel % MultiView = createMultiView(ViewParent,MessageService,LayoutName) % % The multiview can be created independently of the rest of the % FrameWork/Model Browser for testing if nargin<3 %The default layout name is stored in preferences to give a %surface viewer and scatter plot by default LayoutName = 'GlobalModelViews'; end vl = mbcgui.multiview.ViewList; add(vl,mbcmodelview.SurfaceViewer.ViewInfo); add(vl,mbcmodelview.ScatterPlot.ViewInfo); add(vl,mbcmodelview.global.PredictedObservedPlot.ViewInfo); add(vl,mbcmodelview.NormalPlot.ViewInfo); add(vl,mbcmodelview.ValidationData.ViewInfo); add(vl,mbcmodelview.ModelViewer.ViewInfo); MultiView = mbcgui.multiview.MultiViewPanel('Parent', ViewParent, ... 'Visible','off',... 'MessageService', MessageService, ... 'ViewLayoutName', LayoutName, ... 'ViewList', vl); splitView(MultiView,[],2); MultiView.Visible = 'on'; end end end function OK = iShowList(mdev) %iShowList show list when more than 1 alternative model and not a mdevmlerf OK = ~isa(mdev,'mdevmlerf') && numChildren(mdev)>0; end function p = iBestAlternative(mdev) %iBestAlternative if isa(mdev,'mdevmlerf') p = address(mdev); else pBest = bestmdev(mdev); if isa(pBest,'xregpointer') && ~isnull(pBest) && pBest~=address(mdev) % view best model p = pBest; else % best alternative is the same as self p = address(mdev); end end end