<div dir="ltr">Hi Felix, Jan and everyone,<div><br></div><div><div>> I couldn’t find any hint that it is possible to update the choices of</div><div>> a parameter (declared with the annotator) in a callback that for</div><div>> another parameter.</div></div><div><br></div><div>It is possible to dynamically adjust parameters from Java code [1]. You can also dynamically add and remove parameters. Such commands extend the DynamicCommand class.</div><div><br></div><div>There are many examples currently in the imagej-plugins-commands project; e.g.:</div><div><a href="https://github.com/imagej/imagej-plugins-commands/blob/imagej-plugins-commands-0.5.1/src/main/java/net/imagej/plugins/commands/restructure/AddAxis.java">https://github.com/imagej/imagej-plugins-commands/blob/imagej-plugins-commands-0.5.1/src/main/java/net/imagej/plugins/commands/restructure/AddAxis.java</a><br></div><div><br></div><div>However, a couple of notes:</div><div><br></div><div>- This pattern makes the command less reusable from other contexts, because some contexts require a priori knowledge about the number and types of input and output parameters.</div><div><br></div><div>- The user interface currently does not properly refresh the input harvester dialog if changes are made to parameters from a callback. So while you can technically do things like change the choices array of a multiple-choice input, the user will not actually see it.</div><div><br></div><div>- What does work currently is to determine the multiple-choice values at initialization time, based on the values of parameters which have already been populated earlier, such as an active dataset. This is what many of the DynamicCommand implementations in imagej-plugins-commands do.</div><div><br></div><div>Really, there are _five_ different classes of commands here:</div><div><br></div><div>1) Totally fixed, with inputs and outputs known in advance.</div><div>2) Updates parameter attributes (such as choices—but not # or type of inputs/outputs) once during initialization.</div><div>3) Updates parameter number and type (i.e., adding/removing inputs/outputs) once during initialization.<br></div><div>4) Updates parameter attributes repeatedly e.g. during callbacks.</div><div>5) Updates parameter number and type repeatedly e.g. during callbacks.</div><div><br></div><div>Of these, type #1 is most desirable for a variety of reasons. Failing that, types #2 and #3 can be done right now using DynamicCommand and it works properly from the ImageJ UI—but not from other contexts like CellProfiler, KNIME, etc. Types #4 and #5 can also be coded but will not work properly from the UI in ImageJ because the input harvester is not rebuilt on callbacks.</div><div><br></div><div>See also:</div><div>* <a href="https://github.com/scijava/scijava-common/issues/42">https://github.com/scijava/scijava-common/issues/42</a></div><div>* <a href="https://github.com/scijava/scijava-common/issues/43">https://github.com/scijava/scijava-common/issues/43</a></div><div>* <a href="https://github.com/CellProfiler/CellProfiler/issues/647">https://github.com/CellProfiler/CellProfiler/issues/647</a></div><div><br></div><div>Regards,</div><div>Curtis</div><div><br></div><div>[1] Dynamically updating parameters from scripts would be a different story. No plans to do that any time soon...</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 20, 2015 at 6:50 AM, Jan Eglinger <span dir="ltr"><<a href="mailto:jan.eglinger@gmail.com" target="_blank">jan.eglinger@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Felix and all,<span class=""><br>
<br>
On 20.08.2015 10:06, MEYENHOFER Felix wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I couldn’t find any hint that it is possible to update the choices of a parameter (declared with the annotator) in a callback that for another parameter. For example; I have a file chooser and once a file hase been chosen, I want to read some file metadata and then update the choices of the combobox that allows to select the images series.<br>
Since I could not figure a way to do it, I wanted to ask here if it is possible at all?<br>
<br>
</blockquote>
<br></span>
I think dynamic adjustment of parameters isn't possible currently, but I agree that it would be a great thing to have.<br>
<br>
I know quite some use cases where either a DialogListener or a series of subsequent dialogs are used in ImageJ 1.x plugins to adjust parameter choice to previously harvested input.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Furthermore, is it possible to get a directory chooser instead of a file chooser in the configuration dialog of a command using the @Parameter annotation?<br>
<br>
</blockquote>
<br></span>
Yes, by using the<br>
    style = "directory"<br>
attribute. See *Templates > Python > Process Folder* in the script editor, and this related discussion:<br>
  <a href="https://github.com/imagej/imagej-legacy/pull/114" rel="noreferrer" target="_blank">https://github.com/imagej/imagej-legacy/pull/114</a><br>
<br>
Best,<br>
Jan<div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
ImageJ-devel mailing list<br>
<a href="mailto:ImageJ-devel@imagej.net" target="_blank">ImageJ-devel@imagej.net</a><br>
<a href="http://imagej.net/mailman/listinfo/imagej-devel" rel="noreferrer" target="_blank">http://imagej.net/mailman/listinfo/imagej-devel</a><br>
</div></div></blockquote></div><br></div>