www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgprecpolyfix/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;

PolyFrame = mbcgui.container.layoutpanel('Parent', hParent, ...
    'BorderType', 'etchedin', ...
    'Title', 'Polynomial mapping', ...
    'LayoutBorder', [10 0 10 5]);
ud.hNumerator = uicontrol('Parent', PolyFrame, ...
    'Style', 'edit', ...
    'BackgroundColor', SC.WINDOW_BG, ...
    'HorizontalAlignment', 'right', ...
    'Callback', {@i_editnum, hInfo});
ud.hDenominator = uicontrol('Parent', PolyFrame, ...
    'Style', 'edit', ...
    'BackgroundColor', SC.WINDOW_BG, ...
    'HorizontalAlignment', 'right', ...
    'Callback', {@i_editden, hInfo});
ud.hNumLabel = xregGui.labelcontrol('Parent', PolyFrame, ...
    'String', 'Numerator coefficients:', ...
    'LabelSizeMode', 'absolute', ...
    'ControlSizeMode', 'absolute', ...
    'LabelSize', 130, ...
    'ControlSize', 100, ...
    'Control', ud.hNumerator);
ud.hDenLabel = xregGui.labelcontrol('Parent', PolyFrame, ...
    'String', 'Denominator coefficients:', ...
    'LabelSizeMode', 'absolute', ...
    'ControlSizeMode', 'absolute', ...
    'LabelSize', 130, ...
    'ControlSize', 100, ...
    'Control', ud.hDenominator);

PolyLyt = xreggridbaglayout(PolyFrame, ...
    'dimension', [2 1], ...
    'rowsizes', [20 20], ...
    'gap', 5, ...
    'elements', {ud.hNumLabel, ud.hDenLabel});
set(PolyFrame, 'LayoutComponent', {PolyLyt});

BitFrame = pCreateFixedPointEditor(hInfo.getObject, hInfo);

DisplayLyt = pCreateResolutionDisplay(hInfo.getObject, hInfo);

lyt = xreggridbaglayout(hParent, ...
    'dimension', [3 1], ...
    'rowsizes', [-1 78 158], ...
    'gap', 10, ...
    'elements', {DisplayLyt, PolyFrame, 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.hNumerator, 'String', num2str(get(obj, 'NumCoeff')));
set(ud.hDenominator, 'String', num2str(get(obj, 'DenCoeff')));
i_updatewritable(hInfo);


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

ud.hNumLabel.Enable = en;
ud.hDenLabel.Enable = en;


function i_editnum(src, ~, hInfo)
obj = hInfo.getObject;
S = get(src, 'String');
[C, OK] = i_convertcoeffs(S);
if OK
    obj = set(obj, 'NumCoeff', C);
end
set(src, 'String', num2str(get(obj, 'NumCoeff')));
i_quietupdate(hInfo, obj)


function i_editden(src, ~, hInfo)
obj = hInfo.getObject;
S = get(src, 'String');
[C, OK] = i_convertcoeffs(S);
if OK
    obj = set(obj, 'DenCoeff', C);
end
set(src, 'String', num2str(get(obj, 'DenCoeff')));
i_quietupdate(hInfo, obj)


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;