MathGroup Archive 2010

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

Search the Archive

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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107809] [mg107809] Re: [mg107779] Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)
  • From: Guido Tripaldi <guido at gtripaldi.it>
  • Date: Sat, 27 Feb 2010 03:12:37 -0500 (EST)
  • References: <hm573n$kge$1@smc.vnet.net> <201002252237.RAA17081@smc.vnet.net>

mmh, I've said "problem solved" too soon in the previous message! So it 
is NOT possible to use ChoiceDialog inside a Manipulate or more in 
general inside a Dynamic object, or in nested modal dialogs: very bad! 
This certainly limits the grade of interactivity with the user that we 
can put in a program, think for example in cases where it's needed to 
stop and alert the user before a potentially destructive operations 
(i.e. deleting data, etc..).
Hoping, as usual, in the next version...
Anyway, thank you Adam and Albert for your hints!

   G

Il giorno 25/feb/2010, alle ore 23.37, Albert Retey ha scritto:

> 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
>

---
Guido Tripaldi





  • Prev by Date: Re: Pass argument name to plot label
  • Next by Date: Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well) documented limitation?
  • Previous by thread: Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)
  • Next by thread: Re: Re: Problems with ChoiceDialog inside a Dynamic: Bug