www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@cset_haltonset/propertypage.m

    function out = propertypage(obj,action,varargin)
%PROPERTYPAGE Create a property gui for the halton sequence
%
%   This should be overloaded by child classes
%
%   Interface:  Lyt=propertypage(cs,'layout',fig);
%               Lyt=propertypage(cs,'update',lyt,p_cs,model);
%               Lyt=propertypage(cs,'enable',lyt,enstate);

%  Copyright 2007-2015 The MathWorks, Inc.

switch lower(action)
    case 'layout'
        out=i_createlyt(obj, varargin{:});
    case 'update'
        out=i_update(varargin{:});
    case 'finalise'
        out=i_finalise(varargin{:});
    case 'enable'
        out=i_setenable(varargin{:});
end


function lyt = i_createlyt(obj, figh,varargin)

pUD = xregGui.RunTimePointer;

% create new layout in figure
ud.pointer = [];
ud.figure = figh;
ud.model = [];
ud.callback = '';
ud.editablePoints = true;

for n = 1:2:length(varargin)
    switch lower(varargin{n})
        case 'callback'
            ud.callback = varargin{n+1};
        case 'editablepoints'
            ud.editablePoints = varargin{n+1};
    end
end

if ud.editablePoints
    ud.Size = mbcgui.widget.Spinner('Parent', figh,...
        'Min',2,...
        'Max',2^53,...
        'ClickIncrement',10,...
        'Rule','int', ...
        'Callback',{@iNChange,pUD});
else
    ud.Size = uicontrol('Parent', figh, ...
        'Style', 'text', ...
        'String', '', ...
        'HorizontalAlignment','left');
end
ud.SizeLabel = xregGui.labelcontrol('parent',figh,...
    'string','Sequence size:',...
    'ControlSize', 70, ...
    'LabelSizeMode', 'absolute', ...
    'LabelSize', 90, ...
    'Control', ud.Size);
ud.Leap = uicontrol('Parent',figh,...
    'Style','checkbox',...
    'String','Leap sequence points using prime number',...
    'Callback',{@iLeapChange,pUD});
ud.Skip = uicontrol('Parent',figh,...
    'Style','checkbox',...
    'String','Skip zero point',...
    'Callback',{@iSkipChange,pUD});
ud.Scramble = uicontrol('Parent',figh,...
    'Style','checkbox',...
    'String','Apply RR2 scramble',...
    'Callback',{@iScrambleChange,pUD});

[ud.RangeTable, ud.RangeTableUpdate] = pRangeEditor(obj, figh, ...
    ud.pointer, ud.model, ud.callback);
ud.RangeLabel = uicontrol('Parent',figh, ...
    'Style', 'text', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Range of values:');

lyt = xreggridbaglayout(figh, ...
    'userdata', pUD, ...
    'dimension', [10 3], ...
    'rowsizes', [20 10 15 10 15 10 15 10 15 -1], ...
    'colsizes', [180 120 -1], ...
    'mergeblock', {[1 1], [1 2]}, ...
    'mergeblock', {[3 3], [1 2]}, ...
    'mergeblock', {[5 5], [1 2]}, ...
    'mergeblock', {[7 7], [1 2]}, ...
    'mergeblock', {[9 9], [1 2]}, ...
    'mergeblock', {[10 10], [1 3]}, ...
    'elements', {ud.SizeLabel, [], ud.Leap, [], ud.Skip, [], ...
    ud.Scramble, [], ud.RangeLabel, ud.RangeTable});

ud.layout = lyt;
pUD.info = ud;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% External update function.                          %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function lyt = i_update(lyt,p,m)
pUD = get(lyt, 'UserData');

% update current layout
ud = pUD.info;
ud.pointer = p;
ud.model = m;
ud = i_setvalues(ud);
pUD.info = ud;



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set all strings, values etc from data in ud  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function ud = i_setvalues(ud)
cs = ud.pointer.info;

% Set values from cs into the UI
if ud.editablePoints
    set(ud.Size,'Value',get(cs,'n'));
else
    set(ud.Size,'String',sprintf('%d', get(cs,'n')));
end
set(ud.Leap, 'Value', get(cs, 'PrimeLeap'));
set(ud.Skip, 'Value', get(cs, 'SkipZero'));
set(ud.Scramble, 'Value', ~isempty(get(cs, 'Scramble')));

% Set up the range table
ud.RangeTableUpdate(ud.pointer, ud.model);


function lyt=i_finalise(lyt)
pUD = get(lyt, 'UserData');
ud = pUD.info;
if ~isempty(ud.pointer)
    cs = ud.pointer.info;
    
    % Generate the object if it needs to be.
    if ~isGenerated(cs)
        cs = generate(cs);
    end
    
    ud.pointer.info = cs;
end


function lyt = i_setenable(lyt,state)
pUD = get(lyt,'UserData');
ud = pUD.info;
set(ud.Leap, 'Enable', state);
set(ud.Skip, 'Enable', state);
set(ud.SizeLabel, 'Enable', state);
set(ud.Scramble, 'Enable', state);
set(ud.RangeTable, 'Enable', state);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Callbacks from each object %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function iNChange(obj,nul,pUD)
ud = pUD.info;
val = get(ud.Size,'Value');
ud.pointer.info = set(ud.pointer.info,'N',val);
xregcallback(ud.callback,ud.layout,[]);


function iLeapChange(obj,nul,pUD)
ud = pUD.info;
val = get(ud.Leap,'Value');
ud.pointer.info = set(ud.pointer.info,'PrimeLeap', logical(val));
xregcallback(ud.callback,ud.layout,[]);


function iSkipChange(obj,nul,pUD)
ud = pUD.info;
val = get(ud.Skip,'Value');
ud.pointer.info = set(ud.pointer.info,'SkipZero', logical(val));
xregcallback(ud.callback,ud.layout,[]);


function iScrambleChange(obj,nul,pUD)
ud = pUD.info;
val = get(ud.Scramble,'Value');
cs = ud.pointer.info;
if val
    cs = set(cs, 'Scramble', 'RR2');
else
    cs = set(cs, 'Scramble', '');
end
ud.pointer.info = cs;
xregcallback(ud.callback,ud.layout,[]);