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; ];

Sable
github-repos/MATLAB/Sable-mcbench-benchmarks/mcbench-benchmarks-ba13b2f0296ef49491b95e3f984c7c41fccdb6d8/18136-addreorderbuttons/AddReorderButtons.m
mcbench-benchmarks
github-repos/MATLAB/Sable-mcbench-benchmarks
ba13b2f0296ef49491b95e3f984c7c41fccdb6d8