Modify choices for a ListBox Callback
    9 views (last 30 days)
  
       Show older comments
    
I would like know how I could simplify(modify) the hSelecVarIndCallback function. I want to avoid the repetition of the choices string for each case and be able to get an automatic choice of the string individual value.
function example
fh = figure;
hPan = uipanel(fh,'title','Main Panel','Units','characters',...
    'Position',[2.307 0 52 30],'FontSize',10,'FontWeight',...
    'bold','FontAngle','italic');
hInd = uipanel('Parent',hPan,'title','Variable(s)','Units',...
    'normalized','Position',[0 0.587 1 0.344],'FontSize',9,...
    'FontAngle','italic');
hSelecVarInd = uicontrol(hInd,'Style','popupmenu','Units','normalized',...
    'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'},...
    'Value',1,'Position',[0.25 0.275 0.5 0.5],'FontSize',9,'Callback',...
    @hSelecVarIndCallback,'BackgroundColor','white');
hDep = uipanel(hPan,'title','Variable(s) Dependiente(s)','Units',...
    'normalized','Position',[0 0 1 0.5],'FontSize',9,'FontAngle','italic');
hDeplb = uicontrol(hDep,'Style','listbox','Units','normalized',...
                'String',{'Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'},...
                'Max',2,'Min',0,'Value',1,...
                'Position',[0 0 1 1],'FontSize',9);
  function hSelecVarIndCallback(src,evt)
      val = get(hSelecVarInd,'Value');
  if (val == 1)
      set(hDeplb,'String',{'Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'});
  elseif (val == 2)
     set(hDeplb,'String',{'Time','Var 2','Var 3','Var 4','Var 5','Var 6'});
  elseif (val == 3)
     set(hDeplb,'String',{'Time','Var 1','Var 3','Var 4','Var 5','Var 6'});
  elseif (val == 4)
     set(hDeplb,'String',{'Time','Var 1','Var 2','Var 4','Var 5','Var 6'});
     elseif (val == 5)
  set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 5','Var 6'});
     elseif (val == 6)
  set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 6'});
  else
  set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 5'});   
  end
    end
  end
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 1 Nov 2011
        S = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};
set(hDeplb, 'String', S(setdiff(1:length(S),val)) );
More Answers (1)
  Alex
      
 on 1 Nov 2011
        I don't fully understand what you mean by your question, but I'll take a guess at a solution.
   function hSelecVarIndCallback(src,evt)
      val = get(hSelecVarInd,'Value');
       popup_contents = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};
      popup_contents(val) = [];
      set(hDeplb,'String',popup_contents);
  end
3 Comments
  Alex
      
 on 1 Nov 2011
				I made a mistake in my answer. I used {} instead of ().
using:
 popup_contents(val) = [];
instead will remove that element from the array completely, and not leave you with the empty element.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

