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