www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+project/DataList.m

    classdef DataList < mbcgui.multiview.View
    %DataList list of data sets for project view
    
    %  Copyright 2015-2016 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties (SetAccess=private)
        %List main list
        List
    end
    
    methods
        function obj = DataList(varargin)
        %DataList constructor
        
        obj@mbcgui.multiview.View(varargin{:});
        createLayout(obj)
        addMessageServiceListener(obj, 'NodeUpdated',@obj.onNodeUpdated)
        
        end
        
        function update(obj)
        %update update data list
        
        ms = obj.MessageService;
        dp = ms.Datasets;
        Data = cell(length(dp),4);
        Icon = cell(length(dp),1);
        for i = 1:length(dp)
            data = dp(i).info;
            sz = size(data);
            Data(i,:) = {get(data, 'label'), sz(1),sz(2),sz(3)};
            lockNode = isTestplanData(ms.Project, dp(i));
            if lockNode
                Icon{i}='testplandata.bmp';
            else
                Icon{i}='dataicon.bmp';
            end
        end
        obj.List.setData(Data,Icon);
        ind = find(ms.CurrentData == dp);
        if ~isempty(ind)
            selectRows(obj.List,ind);
        end
        
        end
    end
    
    methods (Access=private)
        function createLayout(obj)
        %createLayout create data list ui

        
        % Get imageList info for the List Control
        cols = {'Name' 'Records' 'Variables' 'Tests'};
        dataList = mbcwidgets.List('Parent',obj.Parent,...
            'UserData','dataList',...
            'ValueChangedCallback',@obj.onEditName,...
            'SelectionChangedCallback',@obj.onSelectData,...
            'ActionPerformedCallback',@obj.onEditData,...
            'KeyTypedCallback',@obj.onKeyTyped,...
            'Editable',true,...
            'EditableColumns',1,...
            'Grid',true,...
            'ColumnHeaders',cols,...
            'ColumnWidths',[300 75 75 75],...
            'IconLocation',xregrespath,...
            'IconTransparentColor',[0 255 0],...
            'UIContextMenu',[],...
            'SelectionMode','SingleCell');
        
        obj.List = dataList;
        
        obj.ContentHandle = dataList;
        end
        
        function onNodeUpdated(obj,~,~)
        %onNodeUpdated MessageService.NodeUpdated event handling
        update(obj)
        end
        
        function onEditName(obj,~,evt)
        %onEditName edit data set name
        
        newName = evt.data.NewValue;
        ms = obj.MessageService;
        pSSF =ms.CurrentData;
        if ~strcmp(get(pSSF.info,'label'),newName)
            % Change the label
            pSSF.info = pSSF.set('label', getValidDataName(ms.Project, newName));
            % Update the listbox
            update(ms)
        end
        
        end
        
        function onKeyTyped(obj,~,evt)
        %onKeyTyped key events for lists
        
        ms = obj.MessageService;
        if evt.data.Modifiers==0 
            switch evt.data.KeyCode
                case mbcgui.util.KeyCode.INSERT
                    ms.Actions.NewData.execute()
                case mbcgui.util.KeyCode.DELETE
                    if isscalar(evt.data.Rows)
                        ms.Actions.DeleteData.execute()
                    end
            end
        end
        
        end
        
        function onEditData(obj,~,~)
        %onEditData edit in Data Editor
        
        ms = obj.MessageService;
        ms.Actions.EditData.execute()
        
        end
        
        function onSelectData(obj,~,evt)
        %onSelectData select data set in list
        
        ms = obj.MessageService;
        newDataIndex = evt.data.SelectedRows;
        if ~isempty(newDataIndex)
            ms.CurrentData = ms.Datasets(newDataIndex);
        else
            ms.CurrentData = xregpointer;
        end
        end
        
    end
    
end