title: matlab: close the gui if the user presses the close button
body: <p>I made a GUI that gets 2 elements: files (list of files) and options (I will explain later).</p>
  
  <p>there is a function that calls the function below:</p>
  
  <pre><code>// asume that this is my 'options'
  options{1} = {'Treatment', 't1', 't2'};
  options{2} = {'Tree', '1', '2'};
  options{3} = {'Replica', 'r1', 'r2', 'r3'};
  
  // asume that this is my 'files' (may be more than 2 images
  files{1} = 'C:\Documents and Settings\erezalon\Desktop\gib_proj_02.10.12\fina3_32bit\IMG_4640.JPG';
  files{2} = 'C:\Documents and Settings\erezalon\Desktop\gib_proj_02.10.12\fina3_32bit\grapes03.jpg';
  
  
  mydata = mainGUI(options, files).
  
  // here I want to check 'mydata'. if it is equal to zero or not.
  </code></pre>
  
  <p>for each image, the GUI is created in the function 'mainGUI' (but each time, one GUI is showed till the user presses 'next').</p>
  
  <p>I want to do the next thing:</p>
  
  <p>if the user presses the close button in the GUI, I want to stop the displaying of the other GUI-s and set 'data = 0'. then, I will check what is the returned element ('mydata') and if it's equal to 0, I will know that the user closed the GUI and I will act as needed.</p>
  
  <p>I tried to do this by the 'cmdClose_Callback' but it doesn't work.</p>
  
  <p>assume that 'files' = two images, so this is the GUI of the first image.</p>
  
  <p>I press the close button:</p>
  
  <p><img src="https://i.stack.imgur.com/33Pxf.jpg" alt="enter image description here"></p>
  
  <p>and got the GUI of the second image despite of closing the GUI of the first image.</p>
  
  <p><img src="https://i.stack.imgur.com/hNDmQ.jpg" alt="enter image description here"></p>
  
  <p>I want that when I close the GUI, the other GUI-s don't appear.</p>
  
  <p>this is my code:</p>
  
  <pre><code>function  data = mainGUI(options, files)
   %# current options
   j = 1;
   ops = cellfun(@(c) c(1), options, 'Uniform',false);
   data{j} =  [ops{1:length(ops)}];
   j = j + 1;
  
  
   options = cellfun(@(c) c(2:1:end), options, 'Uniform',false);
   clear ops;
   ops = cellfun(@(c) c(1), options, 'Uniform',false);
   opts =  [ops{1:length(ops)}];
  
  %# create main figure, with plot and options button
  hFig = figure('Name','window 1','Visible','Off');
  a = 1
  callback
  
  %# options button callback function
  function callback(o,e)
      a = 2
      %# save current options (sharing data between the two GUIs)
      setappdata(hFig, 'opts',opts);
  
      %# display options dialog and wait for it
  
      for k=1: length(files)
  
              hOptsGUI = secondaryGUI(hFig, options, k, length(files));
  
              img = imread(files{k});  %# Read the data from image file data
              hAxes = axes('Parent',hOptsGUI,'Units','pixels','Position',[362 242 424 359]);  %#   so the position is easy to define
              image(img,'Parent',hAxes);  %# Plot the image
              set(hAxes,'Visible','off');          %# Turn the axes visibility off
  
              a = 3
  
              waitfor(hOptsGUI);
  
              a = 4
              %# get new options, and update plot accordingly
              opts = getappdata(hFig, 'opts');
               data{j} = opts;
               j = j + 1;
      end
  end
  
  end
  
  function hFig = secondaryGUI(hParentFig, options, k, num_files)
  %# create figure
  
  a = 5
  
  
  hFig = figure('Name','Step 3 of 4: Choose data for each image','Menubar','none', 'Resize','off', ...
      'WindowStyle','modal', 'Position',[300 300 1150 600], 'CloseRequestFcn',@cmdClose_Callback);
  set(gcf,'NumberTitle','off')
  movegui(hFig, 'center');
  
  
  
  options = cellfun(@(c) c(end:-1:1), options, 'Uniform',false);
  num = length(options);
  
  %# get saved settings
  selected = getappdata(hParentFig, 'opts');
  a = 6
  %# top/bottom panels
  hPanBot = uipanel('Parent',hFig, 'BorderType','none', ...
      'Units','normalized', 'Position',[0 0.0 1 0.2]);
  
  hPanTop = uipanel('Parent',hFig, 'BorderType','none', ...
      'Units','normalized', 'Position',[0 0.2 1 0.2]);
  
  
  
  %# buttongroups in top panel
  hBtnGrp = zeros(1,num);
  width = 1/num;
  for i=1:num
      %# create button group
      hBtnGrp(i) = uibuttongroup('Parent',hPanTop, ...
          'Units','normalized', 'Position',[(i-1)*width 0 width 1]);
      %# populate it with radio buttons
      height = 1./numel(options{i});
      for j=1:numel(options{i})
          h = uicontrol('Parent',hBtnGrp(i), 'Style','Radio', ...
              'Units','normalized', 'Position',[0.05 (j-1)*height 0.9 height], ...
              'String',options{i}{j});
          %# set initially selected values
          if strcmp(selected{i},options{i}{j})
              set(hBtnGrp(i), 'SelectedObject',h)
          end
      end
  end
  
  if k ~= num_files
  %# save button in bottom panel
  uicontrol('Parent',hPanBot, 'Style','pushbutton', ...
      'Units','normalized', 'Position',[0.3 0.2 0.4 0.2], ...
      'String','next', 'Callback',@callback);
  
  else
      uicontrol('Parent',hPanBot, 'Style','pushbutton', ...
      'Units','normalized', 'Position',[0.3 0.2 0.4 0.2], ...
      'String','start', 'Callback',@callback);
  end
  
  
  %# save button callback function
  function callback(o,e)
      a = 7
      %# get selected values
      hObjs = get(hBtnGrp(:), 'SelectedObject');
      vals = get(cell2mat(hObjs),{'String'});
  
      %# update settings
      setappdata(hParentFig, 'opts',vals);
  
  
      close(hFig)
      a = 8
  end
  
   function cmdClose_Callback(hObject,varargin)
      disp(['Close Request coming from: ',get(hObject,'Type')]);
      a = 9
  
      %do cleanup here
      delete(hFig);
      a = 10
  
   end
  end
  </code></pre>
  
  <p>if 'files' has two images, I push the 'next' button for the first figure, and in the second figure I close, I get:</p>
  
  <pre><code>a = 1
  a = 2
  a = 5
  a = 6
  a = 3
  a = 7
  Close Request coming from: figure
  a = 9
  a = 10
  a = 8
  a = 4
  a = 5
  a = 6
  a = 3
  Close Request coming from: figure
  a = 9
  a = 10
  a = 4
  </code></pre>
  
  <p>above the line: hOptsGUI = secondaryGUI(hFig, options, k, length(files));
  I tried to put some lines. In order to testthe lines, I print a fit message:</p>
  
  <pre><code>if (ishandle(hFig))
       disp('exists');
  else disp('was closed');
  end;
  </code></pre>
  
  <p>but it doesn't work :/</p>
  
  <p><strong>for each GUI that the user will close, the next callback will called:</strong></p>
  
  <pre><code>function callback(o,e)
  
      %# get selected values
      hObjs = get(hBtnGrp(:), 'SelectedObject');
      vals = get(cell2mat(hObjs),{'String'});
  
      %# update settings
      setappdata(hParentFig, 'opts',vals);
  
      %# close options dialog
      close(hFig)
  
  end
  </code></pre>
  
  <p><strong>so I just need to know in the next 'for loop' if this callback was called:</strong></p>
  
  <pre><code>for k=1: length(files)
  </code></pre>
  
  <p><strong>how can I do that?</strong></p>