www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+local/TestNavigator.m
classdef TestNavigator < mbcgui.multiview.View %TestNavigator test navigator for local views % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties(SetAccess=private) %EditTest edit box EditTest end methods function obj = TestNavigator(varargin) %TestNavigator - constructor obj@mbcgui.multiview.View(varargin{:}) create(obj) addMessageServiceListener(obj, 'NodeUpdated',@obj.onNodeUpdated) end function update(obj) %update main update method ms = obj.MessageService; TestNumberList= testnum(getdata(ms.ModelDev,'Y')); % update test spinner set(obj.EditTest,'String', TestNumberList(ms.CurrentTest)); end end methods function create(obj) % Sweep selector controls ViewParent = obj.Parent; scrollFrame = mbcgui.container.layoutpanel(... 'Parent', ViewParent, ... 'BorderType','etchedin',... 'Visible', 'off'); obj.EditTest = uicontrol('Parent',scrollFrame,... 'Style','edit',... 'Units','pixels',... 'Callback',@obj.onEditTest); % next and previous buttons are controlled by % mbcmodel.local.ViewActions. actions = obj.MessageService.Actions.View; PreviousTest = createButton(actions.PreviousTest,scrollFrame); NextTest = createButton(actions.NextTest,scrollFrame); SelectTest = createButton(actions.SelectTest,scrollFrame); seltext = uicontrol('Parent', scrollFrame,... 'Style','text',... 'FontWeight','demi',... 'HorizontalAlignment','left',... 'String','Test:'); % Page 1 % sweep selector g=xreggridbaglayout(scrollFrame,... '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,[],[],... PreviousTest,[],[],[],[],... [],obj.EditTest,[],[],[],... NextTest,[],[],[],[],... [],[],[],[],[],... SelectTest,[],[],[],[]},... 'border',[5 5 5 5]); set(scrollFrame, 'LayoutComponent', {g}); attachContentHandle(obj,scrollFrame); end end methods (Access=protected) function onNodeUpdated(obj,~,~) update(obj) end function onEditTest(obj,~,~) % edit box callback ms = obj.MessageService; NewTestNum = str2double(get(obj.EditTest,'String')); TestNumberList = testnum(getdata(ms.ModelDev,'Y')); if isfinite(NewTestNum) NewTest = find(NewTestNum==TestNumberList); if isempty(NewTest) % find closest test number [~,NewTest] = min( abs(TestNumberList-NewTestNum) ); end updateTest(ms, NewTest); else errordlg('Numeric test number required','Test Selection','modal') set(obj,'String',TestNumberList(ms.CurrentTest)); end end end end