function AddReorderButtons(fighand)
% ADDREORDERBUTTONS Add buttons to the toolbar to reorder plot objects
% Usage:
% AddReorderButtons
% AddReorderButtons(fighand)
% ADDREORDERBUTTONS adds two buttons to the top toolbar of the figure whose
% handle is fighand. One button, if clicked while a plot object is
% selected, moves that object forward in the plot ordering; the other moves
% the object backwards. This is useful primarily for figures with
% 2-dimensional axes containing several plots. If called with no arguments,
% ADDREORDERBUTTONS works on the current figure.
%
% Example:
% fh = figure;
% AddReorderButtons(fh);
%
% ADDREORDERBUTTONS may be most useful as part of a callback for the root
% object's DefaultFigureCreateFcn property.
%
% Geoffrey K. Adams, November 2007
if nargin == 0
fighand = gcf;
end
% Get a handle for the figure toolbar:
tb = findall(fighand,'Type','uitoolbar');
if ~isempty(tb)
% Add pushbuttons to the top toolbar:
uipushtool(tb(1), ...
'Tag', 'MoveForwardTool', ...
'HandleVisibility', 'off', ...
'Separator', 'on', ...
'TooltipString', 'Move Current Plot Object Forward', ...
'CData', forward_cdata, ...
'ClickedCallback', @MoveObjForward);
uipushtool(tb(1), ...
'Tag', 'MoveBackwardTool', ...
'HandleVisibility', 'off', ...
'Separator', 'off', ...
'TooltipString', 'Move Current Plot Object Backward', ...
'CData', backward_cdata, ...
'ClickedCallback', @MoveObjBackward);
end
function MoveObjForward(src,event)
% Move a plot object forward in the ordering, so that it lies on top of
% other plot objects.
obj = gco; % The object to move is the currently selected object.
parent = get(obj,'Parent');
if parent==0 % This means the object is probably the figure; we can't
return; % reorder figures, so just ignore.
end
siblings = get(parent,'Children'); % Get all children of the object's
objind = find(obj==siblings); % parent, and find out this object's
if objind==1 % index number. If it is already first,
return; % it can't be moved forward any more.
end
% Swap the current object with the next one forward in the list:
siblings([objind-1, objind]) = siblings([objind, objind-1]);
set(parent,'Children',siblings);
function MoveObjBackward(src,event)
% Move a plot object backward in the ordering, so that it lies underneath
% other plot objects.
obj = gco;
parent = get(obj,'Parent');
if parent==0
return;
end
siblings = get(parent,'Children');
objind = find(obj==siblings);
if objind==numel(siblings); % Just as before, but if the object is already
return; % last, then it can't be moved backward.
end
% Swap the current object with the next one behind in the list:
siblings([objind, objind+1]) = siblings([objind+1, objind]);
set(parent,'Children',siblings);
% The remaining two functions just generate the icons for the buttons:
function c = forward_cdata
c(:,:,1) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 .75 .75 .75 .75 .75 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 .75 .75 .75 .75 .75 0 NaN; ...
NaN NaN 0 NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
NaN 0 NaN NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
0 NaN NaN NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN 0 NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];
c(:,:,2) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
NaN NaN 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
NaN 0 NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
0 NaN NaN NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN 0 NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];
c(:,:,3) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
NaN NaN 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
NaN 0 NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
0 NaN NaN NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN 0 NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];
function c = backward_cdata
c(:,:,1) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 .75 .75 .75 .75 .75 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 .75 .75 .75 .75 .75 0 NaN; ...
0 0 0 NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
NaN 0 0 NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
0 NaN 0 NaN NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN NaN NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];
c(:,:,2) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 .25 .25 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 .25 .25 .25 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
0 0 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
NaN 0 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN NaN NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];
c(:,:,3) = [ ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 .75 .75 0 NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 .75 .75 .75 0 0 0 0 0 0 0 NaN; ...
NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 NaN; ...
0 0 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
NaN 0 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN 0 NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 NaN; ...
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN 0 NaN NaN NaN NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN 0 0 0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ...
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN; ];