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

    function moveitemcb(sl,action)
% MOVEITEMCB   Callback for moving items between listboxes
%
%   MOVEITEMCB(SL,TYPE) activates the moveitem callback
%   action can be 'ADDONE', 'REMONE', 'ADDALL', 'REMALL'.
%

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



% Created 3/2/2000

ud=get(sl.baselist,'UserData');
cb=0;
switch lower(action)
case 'addone'
   % get indices of selected items 
   ind=get(sl.baselist,'Value');
   if ~isempty(ud.unsel)
      % use ind to index into remaining objs'
      ind2=ud.unsel(ind);
      ud.unsel(ind)=[];
      ud.sel=union(ud.sel,ind2);
      ind = ind(ind<=length(ud.charlist(ud.unsel)));
      if isempty(ind)
         ind=max(1,length(ud.charlist(ud.unsel)));
      end
      set(sl.baselist,'Value',ind,'String',ud.charlist(ud.unsel));
      set(sl.sellist,'String',ud.charlist(ud.sel));
   end
   if ~isempty(ind)
      cb=1;
   end
case 'remone'
   % get indices of selected items 
   ind=get(sl.sellist,'Value');
   if ~isempty(ud.sel)
      % use ind to index into remaining objs'
      ind2=ud.sel(ind);
      ud.sel(ind)=[];
      ud.unsel=union(ud.unsel,ind2);
      ind = ind(ind<=length(ud.charlist(ud.sel)));
      if isempty(ind)
         ind=max(1,length(ud.charlist(ud.sel)));
      end
      set(sl.baselist,'String',ud.charlist(ud.unsel));
      set(sl.sellist,'Value',ind,'String',ud.charlist(ud.sel));
   end
   if ~isempty(ind)
      cb=1;
   end
case 'addall'
   if ~isempty(ud.unsel)
      cb=1;
   end
   ud.sel=[1:length(ud.reallist)];
   ud.unsel=[];
   set(sl.baselist,'Value',1,'String','');
   set(sl.sellist,'Value',1,'String',ud.charlist); 
case 'remall'
   if ~isempty(ud.sel)
      cb=1;
   end
   ud.unsel=[1:length(ud.reallist)];
   ud.sel=[];
   set(sl.sellist,'Value',1,'String','');
   set(sl.baselist,'Value',1,'String',ud.charlist);
end
set(sl.baselist,'UserData',ud);

h=[sl.remone;sl.remall; sl.addone;sl.addall];
en={'off';'off';'off';'off'};
if ~isempty(ud.sel)
   en(1:2)={'on'};
end
if ~isempty(ud.unsel)
   en(3:4)={'on'};
end
set(h,{'Enable'},en);

if cb & ~isempty(ud.callback)
   i_firecb(sl);
end
return



function i_firecb(sl)

ud=get(sl.baselist,'UserData');
cb=ud.callback;
if ~isempty(cb)
   if ischar(cb)
      evalin('base',cb);
   else
      if ~iscell(cb)
         cb={cb};
      end
      if length(cb)>1
         feval(cb{1},sl,[],cb{2:end});
      else
         feval(cb{1},sl,[]);
      end 
   end  
end
return