Modify choices for a ListBox Callback

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

 Accepted Answer

S = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};
set(hDeplb, 'String', S(setdiff(1:length(S),val)) );

1 Comment

@Walter Roberson: Thank you so much for your answer. It is exactly what I need.

Sign in to comment.

More Answers (1)

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: I am sorry. I mean how I can write the callback without having to repeat the same string in which I have eliminated manually the not corresponding value. Thank you for your solution. However, I would like to avoid an empty option in the listbox.
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.
@Alex: I suggest you to edit your answer to show the proper code.

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!