📄 pickfcn.m
字号:
function pickfcn(action,varargin)
%PICKFCN Handle callbacks for the current line selection.
% Assumes signal browser is the current figure.
% Copyright (c) 1988-98 by The MathWorks, Inc.
% $Revision: 1.14 $
% TPK 12/4/95
if nargin<1
error('pickfcn must have at least one argument')
end
if ~isstr(action)
%pickfcn(i,j)
% buttondownfcn of line object corresponding to ith variable and
% its jth column
%
% User has clicked on a line in the main axes.
fig = gcf;
ud = get(fig,'userdata');
if ud.pointer == 2 % help mode
sbhelp('pickfcn',action)
return
end
% cursor is custom
if ud.prefs.tool.ruler & strcmp(get(fig,'pointer'),'custom') & ...
(ud.pointer==0)
% means that cursor is on top of one of the ruler lines
ruldown(0)
return
end
if justzoom(fig), return, end
var_num = action;
col = varargin{1};
col = find(ud.lines(var_num).columns == col);
panpatch = [];
if ud.prefs.tool.panner
panpatch = ud.panner.panpatch;
end
invis = [];
if ud.prefs.tool.ruler
invis = [ud.ruler.lines ud.ruler.markers ud.ruler.hand.buttons]';
end
if strcmp(get(ud.hand.complexpopup,'enable'),'on')
switch get(ud.hand.complexpopup,'value')
case 1, xform = 'real';
case 2, xform = 'imag';
case 3, xform = 'abs';
case 4, xform = 'angle';
end
else
xform = 'real';
end
if panfcn('Ax',ud.mainaxes,...
'Bounds',ud.limits,...
'BorderAxes',ud.mainaxes_border,...
'PannerPatch',panpatch,...
'Data',ud.lines,...
'Immediate',0,...
'Transform',xform,...
'InterimPointer','fleur',...
'Invisible',invis)
if ud.prefs.tool.ruler
ruler('newlimits')
end
end
if ud.lines(var_num).h(col) == ud.focusline
return
end
else
switch action
case 'noMouse'
% pickfcn('nomouse',i,j)
% pickfcn('nomouse',i,j,fig)
% picks the j'th column of the i'th variable
if nargin < 4
fig = gcf;
else
fig = varargin{3};
end
ud = get(fig,'userdata');
var_num = varargin{1};
col = varargin{2};
end
end
% at this point we have col and var_num
%
% var_num == 0 ==> no variables selected
legendline = ud.legend.legendline;
if var_num == 0 | isempty(ud.lines)
set(legendline,'visible','off');
ud.focusline = [];
ud.focusIndex = [];
set(fig,'userdata',ud);
if ud.prefs.tool.ruler
ruler('showlines',fig)
ruler('newlimits',fig)
ruler('newsig',fig)
end
else
the_line = ud.lines(var_num).h(col);
num_cols = size(ud.lines(var_num).data,2);
ud.focusline = ud.lines(var_num).h(col);
ud.focusIndex = var_num;
ud.focusColumn = col;
set(fig,'userdata',ud);
% reorder children of ud.mainaxes here!
bringToFront(fig,ud.lines(var_num).h([col 1:col-1 col+1:end]))
if ud.prefs.tool.panner
bringToFront(fig,ud.lines(var_num).ph([col 1:col-1 col+1:end]))
end
defaultLineWidth = get(0,'defaultlinelinewidth');
for i=1:length(ud.sigs)
set(ud.lines(i).h,'linewidth',defaultLineWidth)
if ud.prefs.tool.panner
set(ud.lines(i).ph,'linewidth',defaultLineWidth)
end
end
if length(ud.lines(var_num).columns)>1
set(ud.lines(var_num).h(col),'linewidth',2)
if ud.prefs.tool.panner
set(ud.lines(var_num).ph(col),'linewidth',2)
end
end
sptlegend('setvalue',the_line,var_num,ud.sigs(var_num).lineinfo.columns(col),fig)
if ud.prefs.tool.ruler
ruler('showlines',fig)
ruler('newlimits',fig)
ruler('newsig',fig)
end
end
function bringToFront(fig,h)
%bringToFront
% reorders children of parent axis of h so that
% the objects with handles in h are just above all the objects
% except for the ruler lines
if isempty(h),
return
end
ud = get(fig,'userdata');
ax = get(h(1),'parent');
ch = get(ax,'children');
ch = ch(:);
if ud.prefs.tool.ruler & (ud.mainaxes == ax)
% make sure ruler lines are on top of stacking order
h = [ud.ruler.lines(:); ud.ruler.markers(:); h(:)];
elseif ud.prefs.tool.panner & (ud.panner.panaxes == ax)
% make sure panner patch is on top of stacking order
h = [ud.panner.panpatch; h(:)];
else
h = h(:);
end
ch1 = ch;
for i=1:length(h)
ch1(find(ch1==h(i))) = [];
end
ch1 = [h; ch1(:)];
if ~isequal(ch,ch1) % avoid redraw if child order hasn't changed
set(ax,'children',ch1(:))
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -