www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+local/FrameWork.m
classdef FrameWork < mbcmodelview.FrameWork %mbcmodelview.local.FrameWork multiview GUI framework for local (two-stage) models % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %TestNavigator test navigator component TestNavigator %RMSEPlots RMSE Plots RMSEPlots end methods function show(obj,mdev) %show initialize node from Browser for showing % top node must be initalized if status(mdev)==0 obj.MessageService.NeedsUpdate=3; else obj.MessageService.NeedsUpdate=0; end if mle_NeedsUpdate(mdev) mledialog(mdev,'The MLE Model has changed and needs to be updated.'); end obj.ForceReset = true; % restore layout from testplan T = mdevtestplan(mdev); s = viewLayout(T,'Local'); if ~isempty(s) restoreViewLayout(obj.MultiView,obj.MultiView.ViewLayoutName,s.MultiView); end end function view(obj,mdev) % view update view from Browser T = mdevtestplan(mdev); s = viewLayout(T,'Local'); if obj.ForceReset && ~isempty(s) % use stored current test CurrentTest = s.CurrentTest; else CurrentTest = obj.MessageService.CurrentTest; end updateNode(obj.MessageService, address(mdev), CurrentTest,obj.ForceReset) obj.ForceReset = false; end function ok = hide(obj) %hide hide node from Browser ms = obj.MessageService; if ~isnull(ms.Pointer) ok = true; if ms.NeedsUpdate && ( numChildren(ms.ModelDev)>0 || ~isempty(covmodel(model(ms.ModelDev))) ) % must have response features or covariance model for anything to be required. resp = questdlg('Do you want to update all dependent model fits now?','Local Model Fit',... 'Yes','No','Cancel','Yes'); switch resp case 'Yes' UpdateLinks(ms.ModelDev,ms.NeedsUpdate); case 'No' % set status to 0 for all dependent nodes ClearLinks(ms.ModelDev); case {'Cancel',[]} % include ESC key % don't leave node ok = false; end if isInBrowser(obj) doDrawIcons(obj.Browser); end end % save layout to test plan T = mdevtestplan(obj.MessageService.ModelDev); s.MultiView = saveViewLayout(obj.MultiView); s.CurrentTest = obj.MessageService.CurrentTest; viewLayout(T,'Local',s); % ask message service to perform any tidy up actions ok = ok && leaveNode(ms); else ok = true; end end end methods(Access=protected) function create(obj,parentInfo) %create create graphical components if isstruct(parentInfo) obj.ViewParent = parentInfo.ViewParent; obj.ToolbarParent = parentInfo.ToolbarParent; else obj.ViewParent = parentInfo; end % test navigator and model description at top obj.TestNavigator = mbcmodelview.local.TestNavigator('MessageService',obj.MessageService,... 'Parent',obj.ViewParent); des = mbcmodelview.Description('MessageService',obj.MessageService,... 'Parent',obj.ViewParent); TopLyt = xreggridbaglayout(obj.ViewParent,... 'dimension',[1,2],... 'colsizes',[250,-1],... 'elements',{obj.TestNavigator,des}); % Multiview construction obj.MultiView = obj.createMultiView(obj.ViewParent,obj.MessageService); topLeft = xreggridbaglayout(obj.ViewParent,... 'dimension',[2,1],... 'rowsizes',[37,-1],... 'gapy',1,... 'elements',{TopLyt,obj.MultiView}); rmseContainer = mbcgui.container.titlebarpanel('Parent',obj.ViewParent,... 'BarTitle','RMSE Plots'); obj.RMSEPlots = mbcmodelview.local.RMSEPlots('Parent',rmseContainer,'MessageService',obj.MessageService); rmseContainer.ContentHandle = obj.RMSEPlots; MainPane = xregsplitlayout(obj.ViewParent,... 'Orientation','ud',... 'split',[0.9 0.1],... 'minwidth',[220,220],... 'DividerWidth',4,... 'DividerStyle','flat',... 'BottomInnerBorder',[2 0 0 0],... 'top',topLeft,... 'bottom',rmseContainer); % Workfow and other summary info displayed in a separate splitter obj.Workflow = mbcWorkflowPanel(obj.ViewParent); obj.InfoPane = mbcmodelview.local.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', MainPane,... '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 end methods(Access=private) function obj = FrameWork(Browser,MessageService) %FrameWork private constructor if nargin<2 MessageService = mbcmodelview.local.TwoStageMessageService; end obj@mbcmodelview.FrameWork(Browser,MessageService) addListeners(obj,[event.listener(obj.MessageService,'NodeUpdated',@obj.onNodeUpdated),... event.listener(obj.MessageService,'ModelChanged',@obj.onModelChanged)]); end function onNodeUpdated(obj,~,~) %onNodeUpdated update Browser when MessageService is updated ms = obj.MessageService; if ms.NeedsUpdate mdev = ms.ModelDev; if ~isempty(BestModel(mdev)) % deselect two-stage model mdev = BestModel(mdev,0); if isInBrowser(obj) % Browser interactions mbH = obj.Browser; mbH.doDrawTree(ms.Pointer); mbH.doDrawIcons; % lower listview listview(mbH); mbH.doDrawTree(children(mdev)); end end if isInBrowser(obj) doDrawText(obj.Browser); end end end function onModelChanged(obj,ms,evt) %onModelChanged model definition is changed OldP = evt.data.OldPointer; NewP = evt.data.NewPointer; if isInBrowser(obj) mbH = obj.Browser; mbH.treeview(OldP,'remove'); mbH.CurrentNode= xregpointer; Parent = OldP.delete; mbH.treeview(Parent,'add'); % select node mbH.GUILocked=false; % we deleted the tree node so we need to reselect mbH.SelectNode(NewP); else % delete old node OldP.delete; updateNode(ms,NewP); end end end methods (Static) function obj = createFigure(pNode) %createFigure make view in a separate figure for testing obj = mbcmodelview.local.FrameWork([]); updateNode(obj.MessageService, pNode); figure(obj); end function [lyt, tblyt, ViewData]=creategui(mdev,infoParent) %create view for inside the model browser ViewData = mbcmodelview.local.FrameWork(MBrowser); updateNode(ViewData.MessageService, address(mdev)); create(ViewData,infoParent); lyt = ViewData.MainLayout; tblyt = ViewData.Toolbar; end function MultiView = createMultiView(ViewParent,MessageService,LayoutName) %createMultiView multiview for plots if nargin<3 LayoutName = 'localModelViews'; end vl = mbcgui.multiview.ViewList; add(vl,mbcmodelview.local.PredObsPlot.ViewInfo); add(vl,mbcmodelview.ScatterPlot.ViewInfo); add(vl,mbcmodelview.local.DataPlots.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,'lr',2); MultiView.Visible = 'on'; end end end