Hi Lee,<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">So call depth = 1, respect the user&#39;s choice of parameters (which may be
 transitory if they are editing several at once) and indicate, but not 
prevent misconfiguration.<br></blockquote><font color="#888888">
</font><br>I agree that often it is best to err on the side of simply reporting 
invalid inputs, rather than using convoluted schemes to prevent certain 
inputs altogether.<br>
<br>However, in general we probably need to allow slightly more flexibility. The example Johannes gave is a &quot;Constrain aspect ratio&quot; checkbox that forces the width and height to retain a particular ratio. So all three parameters (width, height and the aspect ratio checkbox) would need callback methods that adjust either the width or the height depending on the checkbox&#39;s status.<br>

<br>-Curtis<br><br><div class="gmail_quote">On Tue, Oct 12, 2010 at 9:56 AM, Lee Kamentsky <span dir="ltr">&lt;<a href="mailto:leek@broadinstitute.org">leek@broadinstitute.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

 On 10/12/2010 10:07 AM, Curtis Rueden wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi Lee,<br>
<br>
<br>
</blockquote>
...<div class="im"><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
The only tricky thing about this approach is how to handle programmatically generated changes. For example, if widget A&#39;s value depends on widget B, and both have callbacks... when user changes B, callbackB is called, which programmatically changes A... should callbackA then be invoked? Either way works—but if so, you have to be careful not to code mutual dependencies in a way that generates infinite recursion.<br>


<br>
</blockquote></div>
I&#39;ll use CellProfiler as an example here: the UI repaints itself after any change, with the validation callbacks fired, but the validation callbacks aren&#39;t allowed to change parameter values. The exception that they throw indicates the parameter that&#39;s most at fault for the problem, and some hopefully informative message about why.<br>


<br>
So call depth = 1, respect the user&#39;s choice of parameters (which may be transitory if they are editing several at once) and indicate, but not prevent misconfiguration.<br><font color="#888888">
<br>
---Lee<br>
<br>
</font></blockquote></div><br>