www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgpreclookupfix/generateEditorPages.m

    function hInfo = generateEditorPages(obj, hPageGroup) %#ok<INUSL>
%GENERATEEDITORPAGES Generate a set of dialog pages for precision editing 
%
%  HINFO = GENERATEEDITORPAGES(OBJ, HPAGEGROUP) returns an array of
%  DialogPageInfo objects that describe a set a of panels for editing the
%  precision object.

%  Copyright 2006-2015 The MathWorks, Inc.


hInfo = mbcgui.dialog.PageInfo( ...
    'PageGroup', hPageGroup, ...
    'Name', 'General', ...
    'PreferredWidth', 380, ...
    'PreferredHeight', 420, ...
    'HelpHandler', 'cghelptool', ...
    'HelpCode', 'CGTABLEPROPSPRECISION', ...
    'CreateCallback', @i_createlyt);



function i_createlyt(hInfo, ~)

hParent = hInfo.Parent;
hGroup = hInfo.PageGroup;
SC = xregGui.SystemColorsDbl;

TableFrame = mbcgui.container.layoutpanel('Parent', hParent, ...
    'BorderType', 'etchedin', ...
    'Title', 'Look-up table data', ...
    'LayoutBorder', [10 0 10 5]);
ud.hPhysData = uicontrol('Parent', TableFrame, ...
    'Style', 'edit', ...
    'BackgroundColor', SC.WINDOW_BG, ...
    'HorizontalAlignment', 'right', ...
    'Callback', {@i_editphys, hInfo});
ud.hHWData = uicontrol('Parent', TableFrame, ...
    'Style', 'edit', ...
    'BackgroundColor', SC.WINDOW_BG, ...
    'HorizontalAlignment', 'right', ...
    'Callback', {@i_edithw, hInfo});
ud.hPhysLabel = xregGui.labelcontrol('Parent', TableFrame, ...
    'String', 'Physical data:', ...
    'LabelSizeMode', 'absolute', ...
    'ControlSizeMode', 'relative', ...
    'LabelSize', 130, ...
    'ControlSize', 1, ...
    'Control', ud.hPhysData);
ud.hHWLabel = xregGui.labelcontrol('Parent', TableFrame, ...
    'String', 'Hardware data:', ...
    'LabelSizeMode', 'absolute', ...
    'ControlSizeMode', 'relative', ...
    'LabelSize', 130, ...
    'ControlSize', 1, ...
    'Control', ud.hHWData);

TableLyt = xreggridbaglayout(TableFrame, ...
    'dimension', [2 1], ...
    'rowsizes', [20 20], ...
    'gap', 5, ...
    'elements', {ud.hPhysLabel, ud.hHWLabel});
set(TableFrame, 'LayoutComponent', {TableLyt});

BitFrame = pCreateFixedPointEditor(hInfo.getObject, hInfo);

DisplayLyt = pCreateResolutionDisplay(hInfo.getObject, hInfo);

lyt = xreggridbaglayout(hParent, ...
    'dimension', [3 1], ...
    'rowsizes', [-1 78 158], ...
    'gap', 10, ...
    'elements', {DisplayLyt, TableFrame, BitFrame});

ud.ObjList = event.listener(hGroup, 'ObjectChanged', @(h,evt) i_update(hInfo));
hInfo.UserData = ud;

i_update(hInfo);

hInfo.setUI(lyt);



function i_update(hInfo)
obj = hInfo.getObject;
ud = hInfo.UserData;

set(ud.hPhysData, 'String', num2str(get(obj, 'TablePhysData')));
set(ud.hHWData, 'String', num2str(get(obj, 'TableHWData')));
i_updatewritable(hInfo);


function i_updatewritable(hInfo)
obj = hInfo.getObject;
ud = hInfo.UserData;
if get(obj, 'writable')
    en = 'on';
else
    en = 'off';
end

ud.hPhysLabel.Enable = en;
ud.hHWLabel.Enable = en;


function i_editphys(src, ~, hInfo)
obj = hInfo.getObject;
ud = hInfo.UserData;
S = get(src, 'String');
[C, OK] = i_convertcoeffs(S);
if OK
    obj = set(obj, 'TablePhysdata', C);
    obj = i_fixdatalen(obj, 'TableHWData', length(C));
end
set(src, 'String', num2str(get(obj, 'TablePhysdata')));
set(ud.hHWData, 'String', num2str(get(obj, 'TableHWData')));
i_quietupdate(hInfo, obj)


function i_edithw(src, ~, hInfo)
obj = hInfo.getObject;
ud = hInfo.UserData;
S = get(src, 'String');
[C, OK] = i_convertcoeffs(S);
if OK
    obj = set(obj, 'TableHWData', C);
    obj = i_fixdatalen(obj, 'TablePhysdata', length(C));
end
set(src, 'String', num2str(get(obj, 'TableHWData')));
set(ud.hPhysData, 'String', num2str(get(obj, 'TablePhysData')));
i_quietupdate(hInfo, obj)


function obj = i_fixdatalen(obj, prop, N)
Data = get(obj, prop);
if length(Data)<N
    Data = [Data Data(end)+(1:N-length(Data))];
elseif length(Data)>N
    Data = Data(1:N);
end
obj = set(obj, prop, Data);


function [C, OK] = i_convertcoeffs(S)
C = str2num(S); %#ok<ST2NM>
OK = ~isempty(C) && size(C,1)==1 && ndims(C)<3; %#ok<ISMAT>


function i_quietupdate(hInfo, obj)
ud = hInfo.UserData;
ud.ObjList.Enabled = false;
hInfo.updateObject(obj);
ud.ObjList.Enabled = true;