www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+testplan/OperatingPointNavigator.m
classdef OperatingPointNavigator < mbcgui.multiview.View %OperatingPointNavigator contains test navigator and operating points table % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %EditTest test selector edit box EditTest; %NextTest Next test button NextTest; %PreviousTest Previous test button PreviousTest; %SelectTest Select test button SelectTest; %MaxTestNumber Maximum test value MaxTestNumber; %OperatingPointsTable Table displaying table of operating points OperatingPointsTable; %OperatingPointsPanel Panel that contains the operating points table OperatingPointsPanel; end methods function obj = OperatingPointNavigator(parent, ms) %OperatingPointNavigator - constructor obj@mbcgui.multiview.View('Parent', parent, ... 'MessageService', ms); testSelectorPanel = createTestNavigator(obj); addMessageServiceListener(obj, 'NodeChanged', @obj.onNodeChanged) obj.OperatingPointsPanel = createOperatingPointsTable(obj); testSelectorLayout= xreggridbaglayout(obj.Parent, ... 'dimension',[2 1],... 'elements',{testSelectorPanel, obj.OperatingPointsPanel},... 'Rowsizes',[37 -1],... 'gapy',5); update(obj) obj.ContentHandle = testSelectorLayout; end function updatePanelValuesFromMessageService(obj) %updatePanelValuesFromMessageService update the navigator panel % if the message service was updated update(obj); end function update(obj) %update main update method ms = obj.MessageService; if ms.IsPointByPoint && ms.Pointer.IsMatched testData = getdata(ms.Pointer.info,'Y'); obj.MaxTestNumber = size(testData, 3); TestNumberList= testnum(testData); % update test spinner set(obj.EditTest,'String', TestNumberList(ms.CurrentTest)); end %enable enable actions enableActions(obj); % Update the table showing operating points and their values header = {'Value'}; names = obj.MessageService.OperatingPointNames; values = obj.MessageService.OperatingPointValues; tableValues = values'; opPoints = obj.OperatingPointsTable; obj.OperatingPointsPanel.UserData = tableValues; % any NaN cells are invisible as well InvisibleIndex = isnan(tableValues); %store up the set calls so we only have to redraw the table once. opPoints.Peer.setStoreSwingCalls(true); opPoints.Peer.setRowData(names); if isempty(header) opPoints.Peer.setDisplayColumnHeaders(false); else opPoints.Peer.setDisplayColumnHeaders(true); opPoints.Peer.setColumnData(header); end opPoints.Peer.setTableData(tableValues); opPoints.Peer.setCellVisible(~InvisibleIndex); % flush all the set calls we have been storing. opPoints.Peer.setStoreSwingCalls(false); end end methods function createTestNavigatorActions(obj) %createTestNavigatorActions create actions for test navigation % controls obj.NextTest = mbcgui.actions.StatefulAction(@obj.onNextTest,... '&Next Test','Next test',xregrespath('arrow_move_right_lg.bmp')); obj.PreviousTest = mbcgui.actions.StatefulAction(@obj.onPreviousTest,... '&Previous Test','Previous test',xregrespath('arrow_move_left_lg.bmp')); obj.SelectTest = mbcgui.actions.StatefulAction(@obj.onSelectTest,... '&Select Test...','Select test',''); end function testSelectorPanel = createTestNavigator(obj) %createTestNavigator Create the panel that allows moving % between tests createTestNavigatorActions(obj) % Sweep selector controls testSelectorPanel = mbcgui.container.layoutpanel(... 'Parent', obj.Parent, ... 'BorderType', 'etchedin', ... 'Visible', 'on'); obj.EditTest = uicontrol('Parent',testSelectorPanel,... 'Style','edit',... 'Units','pixels',... 'Callback',@obj.onEditTest,... 'Tag', 'TestEdit'); % next and previous buttons are controlled by % mbcmodel.local.ViewActions. hPreviousTest = createButton(obj.PreviousTest,testSelectorPanel); hPreviousTest.Tag = 'PreviousTest'; hNextTest = createButton(obj.NextTest,testSelectorPanel); hNextTest.Tag = 'NextTest'; hSelectTest = createButton(obj.SelectTest,testSelectorPanel); hSelectTest.Tag = 'SelectTest'; seltext = uicontrol('Parent', testSelectorPanel,... 'Style','text',... 'FontWeight','demi',... 'HorizontalAlignment','left',... 'String','Test:'); % Page 1 % sweep selector g=xreggridbaglayout(testSelectorPanel,... 'dimension',[5 6],... 'rowsizes',[1 5 15 5 1],... 'colsizes',[30 25,60,25,2,85],... 'gapx',1,... 'mergeblock',{[1 5],[2 2]},... 'mergeblock',{[2 4],[3 3]},... 'mergeblock',{[1 5],[4 4]},... 'mergeblock',{[1 5],[6 6]},... 'elements',{[],[],seltext,[],[],... hPreviousTest,[],[],[],[],... [],obj.EditTest,[],[],[],... hNextTest,[],[],[],[],... [],[],[],[],[],... hSelectTest,[],[],[],[]},... 'border',[5 5 5 5]); set(testSelectorPanel, 'LayoutComponent', {g}); end function operatingPointsPanel = createOperatingPointsTable(obj) %createOperatingPointsTable Create the table that shows % operating points and their values operatingPointsPanel = mbcgui.container.layoutpanel(... 'Parent', obj.Parent, ... 'BorderType', 'etchedin', ... 'LayoutBorder', [5 5 5 5], ... 'Title', 'Operating Point',... 'Tag', 'OperatingPointTable'); obj.OperatingPointsTable = mbcwidgets.Table2D('extendednumeric',... 'Parent',operatingPointsPanel,... 'ShowHeaderSelection', false,... 'Editable', false); obj.OperatingPointsTable.Peer.setRowHeaderWidth( 100 ); obj.OperatingPointsTable.Peer.setCornerAsBlank(); set(operatingPointsPanel, 'LayoutComponent', {obj.OperatingPointsTable}); end end methods (Access=protected) function onNodeChanged(obj,~,~) %onNodeChanged Callback when the selected node in the tree % changes update(obj); end function onEditTest(obj,~,~) %onEditTest edit box callback ms = obj.MessageService; NewTestNum = str2double(get(obj.EditTest,'String')); TestNumberList = testnum(getdata(ms.Pointer.info,'Y')); if isfinite(NewTestNum) NewTest = find(NewTestNum==TestNumberList); if isempty(NewTest) % find closest test number [~,NewTest] = min( abs(TestNumberList-NewTestNum) ); end updateCurrentTest(ms, NewTest); else errordlg('Numeric test number required','Test Selection','modal') set(obj,'String',TestNumberList(ms.CurrentTest)); end end function onNextTest(obj,~,~) %onNextTest Callback for next test button ms = obj.MessageService; updateCurrentTest(ms, ms.CurrentTest+1) end function onPreviousTest(obj,~,~) %onPreviousTest Callback for previous test button ms = obj.MessageService; updateCurrentTest(ms, ms.CurrentTest-1) end function onSelectTest(obj, ~, ~) %onSelectTest Callback for the select test button that opens % the test chooser dialog ms = obj.MessageService; responses = children(ms.Pointer.info); if ~isempty(responses) NewTest = TestChooser(responses(1).info,ms.CurrentTest); OK= NewTest~=0; if OK updateCurrentTest(ms, NewTest); end end end function enableActions(obj) %enableActions Will enable/disable actions ms = obj.MessageService; if ~isnull(ms.Pointer) && ms.Pointer.IsMatched obj.PreviousTest.Enabled = (ms.CurrentTest>1); obj.NextTest.Enabled = (ms.CurrentTest<obj.MaxTestNumber); obj.EditTest.Enable = 'on'; obj.SelectTest.Enabled = true; else obj.PreviousTest.Enabled = false; obj.NextTest.Enabled = false; obj.EditTest.Enable = 'off'; obj.SelectTest.Enabled = false; end end end end