MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107779] Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)
  • From: Albert Retey <awnl at gmx-topmail.de>
  • Date: Thu, 25 Feb 2010 17:37:53 -0500 (EST)
  • References: <hm573n$kge$1@smc.vnet.net>

Hi,

> suppose you wanna to display an alert to the user before to continue the 
> execution of your code when some conditions occur : probably you'll use 
> ChoiceDialog[], the useful function that "puts up a standard choice 
> dialog that displays  expr together with OK and Cancel buttons, and 
> returns  True if OK is clicked, and  False if Cancel is clicked.".
> 
> But if you use this function inside some Dynamic[] object, it hangs the 
> kernel. I've tried to find in the documentation some references to this 
> bad combination without any luck, so I don't understand if this is a bug 
> or there is something missing in the code.
> 
> To better explain the problem here is a very basic example:
> 
> (* just a silly example *)
> Grid[{
>   {"Choose a dividend: ",
>    PopupMenu[Dynamic[dividend], Table[i, {i, 0, 10}]]},
>   {"Choose a divisor : ", PopupMenu[Dynamic[divisor], Table[i, {i, 0, 10}]]},
>   {"Quotient: ", Dynamic[dividend / divisor]}
>   }, Frame -> All]
> Dynamic[
> If[divisor == 0,
>    ChoiceDialog["Uh-oh, you are going to do a division by zero! Please select a different divisor.", {"Ok"}];
> ]];

It's a deficiency of how the modal dialogs behave. I have encountered
this about a year ago or more and reported here, but have not yet
received any answers. You have the same problem when you try to nest
modal dialogs. In the meantime I just try to avoid modal dialogs where I
can, which is often possible, but of course not always.

> Instead, if you use the MessageDialog[] function to show a message window, all works well, but of course the execution will continue without waiting for the user action (that is not what I want).
> 
> Same situation if you try to use ChoiceDialog[] inside a TabView, or other kind of Views:
> 
> (* another silly example *)
> TabView[{
>   "Tab1" -> Button["Show ChoiceDialog", result = ChoiceDialog["This hangs.. :-(."];],
>   "Tab2" -> Button["Show MessageDialog", MessageDialog["This works!"];]
>   }]

In some cases like your second example, where a modal dialog is started
by a button, the Method->"Queued" trick helps:

TabView[{
  "Tab1" -> Button["Show ChoiceDialog",
     result = ChoiceDialog["This is ok:-)."],
     Method->"Queued"
  ],
  "Tab2" -> Button["Show MessageDialog",
     MessageDialog["This works!"];
  ]
}]


hth,

albert


  • Prev by Date: Re: NDSolve with Boundary Condition
  • Next by Date: Re: Problems with ChoiceDialog inside a Dynamic: Bug or
  • Previous by thread: Re: Manipulate with variable number of controls
  • Next by thread: Re: Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)