Modify choices for a ListBox Callback in Matlab

3.3k Views Asked by At

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
1

There are 1 best solutions below

0
On BEST ANSWER

Maybe you can do something like the following:

function example
    %# list of all values
    varNames = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};

    %# create GUI
    fh = figure;
    hSelecVarInd = uicontrol(hInd, 'Style','popupmenu', ...
        'Units','normalized', 'Position',[0.25 0.275 0.5 0.5], ...
        'String',varNames, 'Value',1, 'Callback',@hSelecVarIndCallback, ...
        'FontSize',9, 'BackgroundColor','white');
    %# ... the rest here ...

    function hSelecVarIndCallback(src,evt)
        %# get selected value
        val = get(src, 'Value');

        %# all but the current value (logical mask)
        idx = true( size(varNames) );
        idx(val) = false;

        %# set the listbox
        set(hDeplb, 'String',varNames(idx));
    end
end

screenshot