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
- References:
- Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)
- From: Albert Retey <awnl@gmx-topmail.de>
- Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)