www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@xregtable/xregtable.m

    function hnd = xregtable(varargin)
%XREGTABLE Constructor for xregtable object
%
%   TBL = XREGTABLE
%   TBL = XREGTABLE(FIG)
%   TBL = XREGTABLE('Property1',Value1,...)
%   TBL = XREGTABLE(FIG,'Property1',Value1,...)

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


% Use given figure handle or current figure by default (creates one if necessary)
if nargin>0 && ~ischar(varargin{1}) && ishandle(varargin{1})
    hnd.parent = varargin{1};
    varargin(1) = [];
else
    hnd.parent = gcf;
end

% need to know this before making frame
fud.position=[50 50 400 400];
fud.units='pixels';
fud.parent=hnd.parent;
fud.panel = uipanel('Parent',hnd.parent,...
    'BorderType', 'beveledin', ...
    'BackgroundColor',get(ancestor(hnd.parent,'figure'),'Color'),...
    'Units','pixels');
hnd.panel = fud.panel;
hnd.parent = fud.panel;


% ** Create frame and slider handles **
hnd.frame.handle=axes(...
   'Parent',hnd.panel,...
   'Visible', 'off',...
   'Units','pixels',...
   'Position',fud.position,...
   'XTick',[],...
   'YTick',[],...
   'Box','on',...
   'Color',get(0,'DefaultUicontrolBackgroundColor'),...
   'XColor',[0 0 0],...
   'YColor',[0 0 0],...
   'XLim',[0 1],'YLim',[0 1],...
   'HandleVisibility','off',...
   'HitTest','off');

%Sliders inherit units from object...??
hnd.hslider.handle=uicontrol('Parent', hnd.panel,...
   'Style','slider',...
   'Visible','off',...
   'Units',fud.units,...
   'Position',[0 0 1 1],...
   'Min',1,...
   'Max',2,...
   'Value',1);
hnd.vslider.handle=uicontrol('Parent', hnd.panel,...
   'Style','slider',...
   'Visible','off',...
   'Units',fud.units,...
   'Position',[0 0 1 1],...
   'Min', -2,...
   'Max',-1,...
   'Value',-1);
% Diagonal scrolling button
hnd.dslider.handle=uicontrol('Parent', hnd.panel,...
   'Style','togglebutton',...
   'Visible','off',...
   'Units',fud.units,...
   'Position',[0 0 1 1],...
   'Value',0,...
   'TooltipString','Enable diagonal scrolling');


% Set up data in frame ud
fud.cells.shandles=[];
fud.cells.flefthandles=[];
fud.cells.ftophandles=[];
fud.cells.fcornerhandles=[];
fud.cells.exist=false(0,0);
fud.cells.userprops=false(0,0);
fud.cells.uiprops={};
fud.userdata=[];
fud.cellchangecb='';

uip.callback='';

% new coded type matrix
% types are:
%              1   -   text
%              2   -   uitext
%              3   -   uiedit
%              4   -   uiradiobutton
%              5   -   uicheckbox
%              6   -   uitogglebutton
%              7   -   uipushbutton
%              8   -   uislider
%              9   -   uiframe
%              10  -   uilistbox
%              11  -   uipopupmenu
%              12  -   uiemuedit0
%              13  -   uiemuedit1
%                
fud.cells.ctype=[];
fud.cells.positions=[];
fud.cells.visible={};
fud.cells.value=[];
fud.cells.format={};
fud.cells.string={};

fud.cells.rowselection=[1 0];
fud.cells.colselection=[1 0];

fud.rows.number=0;
fud.rows.size=20;
fud.rows.fixed=0;
fud.rows.spacing=0;
fud.rows.autosize=0;
fud.rows.autosizenumber=20;
fud.rows.autosizeminsize=20;

fud.cols.number=0;
fud.cols.size=50;
fud.cols.fixed=0;
fud.cols.spacing=0;
fud.cols.autosize=0;
fud.cols.autosizenumber=8;
fud.cols.autosizeminsize=50;

fud.frame.visible='on';
fud.frame.hborder=[2 2];
fud.frame.vborder=[2 2];
fud.frame.handle=hnd.frame.handle;
fud.frame.boxcolor=[0 0 0];

fud.visible='on';
fud.defaultcelltype=3;
fud.defaultcellformat='%5.3f';
fud.zeroindex=[1 1];
fud.redrawmode=1;
fud.colormap=[];
fud.colorintervals=[];
fud.usecolors='off';

fud.vslider.width=17;
fud.vslider.visible='off';
fud.vslider.offset=0;      % drawing offset from table
fud.vslider.callback = []; % Callback to execute when a scroll occurs
fud.hslider.width=17;
fud.hslider.visible='off';
fud.hslider.offset=0;      % drawing offset from table
fud.hslider.callback = []; % Callback to execute when a scroll occurs
fud.hslider.handle=hnd.hslider.handle;
fud.vslider.handle=hnd.vslider.handle;
fud.dslider.handle=hnd.dslider.handle;
fud.dslider.visible='off';

fud.filters.type='none';
fud.filters.value=0;
fud.filters.tol=0;
fud.sliders=1;    % flag for turning sliders vis/invis permanently


% Set up link to frame and initialise slider steps property
% for scrolling
vslud.parent=hnd.frame.handle;
vslud.steps=[];

hslud.parent=hnd.frame.handle;
hslud.steps=[];

% Create table object
hnd=class(hnd,'xregtable');

% make up new name for hnd carrier frame
m=1;
n=0;
while m
   n=n+1;
   current=findobj('Type','axes','Tag',['tablehandle' sprintf('%d',n)]);
   if isempty(current)
      m=0;
   end
end

fud.objecthandle=axes('Parent',hnd.panel,'Visible','off','Units','pixels',...
   'Position',[0 0 1 1],'UserData',hnd,'Tag',['tablehandle' sprintf('%d',n)],...
   'HandleVisibility','off');

uip.callback = {@mbcgui.util.legacycallback,@cellcb,fud.objecthandle};
uip.enable = get(mbcgui.hgclassesutil.toNative(hnd.parent),'DefaultUicontrolEnable');
fud.cells.defaultuip = uip;


set(hnd.frame.handle,'UserData',fud);
set(hnd.vslider.handle,'UserData',vslud,'Callback',...
    {@mbcgui.util.legacycallback,@vsliderscroll,fud.objecthandle});
set(hnd.hslider.handle,'UserData',hslud,'Callback',...
    {@mbcgui.util.legacycallback,@hsliderscroll,fud.objecthandle});

% Call set function for any initial properties.  This will handle
% redraw if necessary.  If no arguments, then call redraw from here.
if ~isempty(varargin)
    % Set properties that are passed in
    set(hnd.frame.handle,'Visible','on');
    set(hnd,varargin{:});
else
    % For no inputs, sliders are not necessary, nor are values
    set(hnd.frame.handle,'Visible','on');
end