www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgtools/@lookup1editor/update.m

    function update(obj)
%UPDATE Called when table data has changed
%
%  UPDATE(OBJ) is called to update the display after the object has been
%  changed.

%  Copyright 2000-2013 The MathWorks, Inc. and Ford Global Technologies, Inc.


if isempty(obj.TablePtr) || isnull(obj.TablePtr) || isempty(obj.TablePtr.info)
    xName = '';
    v = [];
    breakpoints = [];
    locks = [];
    extrap = [];
    region = [];
else
    tbl = obj.TablePtr.info;
    
    % Values
    v = get(tbl, 'values');
    v = v(:);
    
    % Breakpoints
    if obj.HasNormaliser
        pNorm = get(tbl, 'x');
        norm = pNorm.info;
        pInput = get(norm, 'x');
        N = length(v);
        breakpoints = invert(norm, (0:N-1)');
    else
        breakpoints = get(tbl, 'breakpoints');
        pInput = get(tbl, 'x');
    end

    % Input name.  If the immediate input to the table is a source, use
    % it's name.  Otherwise use a generic "Breakpoints" label.
    if pInput.issource
        xName = pInput.getname;
    else
        xName = 'Breakpoints';
    end
    
    % Value locks
    locks = logical(get(tbl, 'vlocks'));
    if isempty(locks)
        locks = false(size(v));
    end

    % extrapolation mask
    extrap = getExtrapolationMask(tbl);
    region = getExtrapolationRegions(tbl);
end

% Start table update
if isempty(v)
    obj.Table.Peer.clearTable;
    Selected = zeros(0,2);
else

    old_sel = obj.Table.getSelectedRegions;
    obj.Table.Peer.setTableData(v, getname(tbl), breakpoints, locks, extrap, region);
    obj.Table.Peer.setCornerString(xName);
    for n = 1:size(old_sel, 1)
        obj.Table.addSelectedRegion(old_sel{n,1}(1), ...
            old_sel{n,2}(1), ...
            old_sel{n,1}(2)-old_sel{n,1}(1)+1, ...
            old_sel{n,2}(2)-old_sel{n,2}(1)+1);
    end
    Selected = obj.Table.getSelectedRows;
end


% Update graph
obj.Dragger.setTableData(breakpoints, v, locks,Selected);
set(obj.Axes, 'XLim', mbcmakelimits(breakpoints), ...
    'YLim', mbcmakelimits(v, 'loose'),'XTick',tickCalculation(breakpoints));
mbcxlabel(obj.Axes, xName);


function x = tickCalculation(x)

x = unique(x);
while length(x)>12
    if mod(length(x),2) == 1
        % odd length
        x = x(1:2:end);
    else
        % include end breakpoint
        x = [x(1:2:end-1);x(end)];
    end
end