<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/237550</link>
    <title>MATLAB Central Newsreader - uitable - checkbox column callback</title>
    <description>Feed for thread: uitable - checkbox column callback</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Wed, 15 Oct 2008 03:39:01 -0400</pubDate>
      <title>uitable - checkbox column callback</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/237550#605308</link>
      <author>Nick Denman</author>
      <description>Hi&lt;br&gt;
&lt;br&gt;
I am trying to implement a logic between two columns in a uitable (R2007A - undocumented) where if the checkbox is clicked in one column, the checkbox in the other column is unchecked. I have tried implementing this using the DataChangedCallback and examples from Yair Altman on how to ensure that the callback does not enter an infinite loop. Unfortunately I have not been successful and the two checkboxes continually flicker when one is pressed and the callback does not end.&lt;br&gt;
&lt;br&gt;
I have included the function used in the uitable's DataChangedCallback below. The checkbox columns are columns 11 and 12 (java-based index). Any suggestions would be greatly appreciated.&lt;br&gt;
&lt;br&gt;
Cheers, Nick&lt;br&gt;
&lt;br&gt;
%-----------------------------------------------------------&lt;br&gt;
function checkboxCallback(mtable,eventdata)&lt;br&gt;
&lt;br&gt;
if ~ishandle(mtable)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
if ~isempty(getappdata(mtable,'inCallback'))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
setappdata(mtable,'inCallback',1);&lt;br&gt;
&lt;br&gt;
eventDetails = eventdata.getEvent;&lt;br&gt;
col = eventDetails.getColumn;&lt;br&gt;
row = eventDetails.getFirstRow;&lt;br&gt;
if row &amp;gt;= 0 &amp;&amp; col &amp;gt;= 11 &amp;&amp; col &amp;lt;= 12&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mtable.getTable.setValueAt(true,row,col);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mtable.getTable.setValueAt(false,row,11+doubl(col==11));&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
setappdata(mtable,'inCallback',[]);</description>
    </item>
    <item>
      <pubDate>Wed, 15 Oct 2008 07:55:55 -0400</pubDate>
      <title>Re: uitable - checkbox column callback</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/237550#605343</link>
      <author>SLt</author>
      <description>On Oct 15, 5:39 am, &quot;Nick Denman&quot;&lt;br&gt;
&amp;lt;ngdenmanNOS...@gmail.REMOVETHIS.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; Hi&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I am trying to implement a logic between two columns in a uitable (R2007A - undocumented) where if the checkbox is clicked in one column, the checkbox in the other column is unchecked. I have tried implementing this using the DataChangedCallback and examples from Yair Altman on how to ensure that the callback does not enter an infinite loop. Unfortunately I have not been successful and the two checkboxes continually flicker when one is pressed and the callback does not end.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I have included the function used in the uitable's DataChangedCallback below. The checkbox columns are columns 11 and 12 (java-based index). Any suggestions would be greatly appreciated.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Cheers, Nick&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; %-----------------------------------------------------------&lt;br&gt;
&amp;gt; function checkboxCallback(mtable,eventdata)&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; if ~ishandle(mtable)&lt;br&gt;
&amp;gt;     return;&lt;br&gt;
&amp;gt; end&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; if ~isempty(getappdata(mtable,'inCallback'))&lt;br&gt;
&amp;gt;     return;&lt;br&gt;
&amp;gt; end&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; setappdata(mtable,'inCallback',1);&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; eventDetails = eventdata.getEvent;&lt;br&gt;
&amp;gt; col = eventDetails.getColumn;&lt;br&gt;
&amp;gt; row = eventDetails.getFirstRow;&lt;br&gt;
&amp;gt; if row &amp;gt;= 0 &amp;&amp; col &amp;gt;= 11 &amp;&amp; col &amp;lt;= 12&lt;br&gt;
&amp;gt;     mtable.getTable.setValueAt(true,row,col);&lt;br&gt;
&amp;gt;     mtable.getTable.setValueAt(false,row,11+doubl(col==11));&lt;br&gt;
&amp;gt; end&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; setappdata(mtable,'inCallback',[]);&lt;br&gt;
&lt;br&gt;
Hi&lt;br&gt;
&lt;br&gt;
I've already code something like that. But instead of using a data&lt;br&gt;
application and setappdata to know if your are in the callbak or not,&lt;br&gt;
I reset the DataChangedCallback. And i was often forced to add some&lt;br&gt;
pause in order Matlab to take in account the reset.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
function checkboxCallback(mtable,eventdata)&lt;br&gt;
&lt;br&gt;
% Reset the DataChangedCallbak&lt;br&gt;
set(mtable, 'DataChangedCallback', '');&lt;br&gt;
&lt;br&gt;
pause(0.1) % To be sure the DataChangedCallback was changed&lt;br&gt;
&lt;br&gt;
% Make change using setValueAt&lt;br&gt;
...&lt;br&gt;
&lt;br&gt;
pause(0.1) % To be sure the setValueAt are finished&lt;br&gt;
&lt;br&gt;
% Set the DataChangedCallback&lt;br&gt;
set(mtable, 'DataChangedCallback', @checkboxCallback);&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
It's not very pretty but it works ...&lt;br&gt;
&lt;br&gt;
SLt</description>
    </item>
    <item>
      <pubDate>Fri, 17 Oct 2008 00:41:02 -0400</pubDate>
      <title>Re: uitable - checkbox column callback</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/237550#605804</link>
      <author>Nick Denman</author>
      <description>SLt &amp;lt;stephanie.lescarret@gmail.com&amp;gt; wrote in message &amp;lt;723eb209-547f-433a-9bdc-569ebb1d63e9@b38g2000prf.googlegroups.com&amp;gt;...&lt;br&gt;
&amp;gt; On Oct 15, 5:39 am, &quot;Nick Denman&quot;&lt;br&gt;
&amp;gt; &amp;lt;ngdenmanNOS...@gmail.REMOVETHIS.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &amp;gt; Hi&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I am trying to implement a logic between two columns in a uitable (R2007A - undocumented) where if the checkbox is clicked in one column, the checkbox in the other column is unchecked. I have tried implementing this using the DataChangedCallback and examples from Yair Altman on how to ensure that the callback does not enter an infinite loop. Unfortunately I have not been successful and the two checkboxes continually flicker when one is pressed and the callback does not end.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I have included the function used in the uitable's DataChangedCallback below. The checkbox columns are columns 11 and 12 (java-based index). Any suggestions would be greatly appreciated.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Cheers, Nick&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; %-----------------------------------------------------------&lt;br&gt;
&amp;gt; &amp;gt; function checkboxCallback(mtable,eventdata)&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; if ~ishandle(mtable)&lt;br&gt;
&amp;gt; &amp;gt;     return;&lt;br&gt;
&amp;gt; &amp;gt; end&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; if ~isempty(getappdata(mtable,'inCallback'))&lt;br&gt;
&amp;gt; &amp;gt;     return;&lt;br&gt;
&amp;gt; &amp;gt; end&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; setappdata(mtable,'inCallback',1);&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; eventDetails = eventdata.getEvent;&lt;br&gt;
&amp;gt; &amp;gt; col = eventDetails.getColumn;&lt;br&gt;
&amp;gt; &amp;gt; row = eventDetails.getFirstRow;&lt;br&gt;
&amp;gt; &amp;gt; if row &amp;gt;= 0 &amp;&amp; col &amp;gt;= 11 &amp;&amp; col &amp;lt;= 12&lt;br&gt;
&amp;gt; &amp;gt;     mtable.getTable.setValueAt(true,row,col);&lt;br&gt;
&amp;gt; &amp;gt;     mtable.getTable.setValueAt(false,row,11+doubl(col==11));&lt;br&gt;
&amp;gt; &amp;gt; end&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; setappdata(mtable,'inCallback',[]);&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Hi&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I've already code something like that. But instead of using a data&lt;br&gt;
&amp;gt; application and setappdata to know if your are in the callbak or not,&lt;br&gt;
&amp;gt; I reset the DataChangedCallback. And i was often forced to add some&lt;br&gt;
&amp;gt; pause in order Matlab to take in account the reset.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; function checkboxCallback(mtable,eventdata)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; % Reset the DataChangedCallbak&lt;br&gt;
&amp;gt; set(mtable, 'DataChangedCallback', '');&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; pause(0.1) % To be sure the DataChangedCallback was changed&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; % Make change using setValueAt&lt;br&gt;
&amp;gt; ...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; pause(0.1) % To be sure the setValueAt are finished&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; % Set the DataChangedCallback&lt;br&gt;
&amp;gt; set(mtable, 'DataChangedCallback', @checkboxCallback);&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; It's not very pretty but it works ...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; SLt&lt;br&gt;
&lt;br&gt;
Hi SLt&lt;br&gt;
&lt;br&gt;
Thank you for your suggestions. Unfortunately, it didn't fix the problem (now the callback is not firing) as I don't believe that the DataChangedCallback is being re-enabled during the call to the callback function.&lt;br&gt;
&lt;br&gt;
Cheers, Nick</description>
    </item>
  </channel>
</rss>

