Re: Test for dialog existence
- To: mathgroup at smc.vnet.net
- Subject: [mg112750] Re: Test for dialog existence
- From: John Fultz <jfultz at wolfram.com>
- Date: Wed, 29 Sep 2010 04:14:05 -0400 (EDT)
On Tue, 28 Sep 2010 06:01:47 -0400 (EDT), Chris Degnen wrote:
> Hi. Can anyone suggest how to test for the existence of a dialog?
>
> In the example below a dialog is created containing a plot which can
> be modified. However it seems to be difficult to test whether the
> dialog has been closed.
>
> This creates the dialog:
>
> BeginPackage["TestExample`TestDialog`"];
> CreateTestDialog::usage = "CreateTestDialog[] creates a test dialog";
> Begin["`Private`"];
> CreateTestDialog[] :=
> Module[{}, n = 4;
> CreateDialog[
> plot = Dynamic[
> ParametricPlot[{Sin[t], Sin[n t]}, {t, 0, 2 Pi}, Ticks -> None,
> ImageSize -> 100]]]];
> End[];
> EndPackage[];
>
> CreateTestDialog[];
>
>
> And the plot can be modified by various means:
>
> TestExample`TestDialog`Private`n = 8;
>
> TestExample`TestDialog`Private`n = 2;
>
>
> But how can I tell if the dialog has been closed? The dynamic plot
> object still shows as existing afterwards:
>
> NameQ["TestExample`TestDialog`Private`plot"]
Yes, the name and even the value remain because they aren't scoped in any way.
CreateDialog is not a variable scoping construct.
If you want to poll to test whether it's been closed, you can do this using the
NotebookObject returned by your CreateTestDialog function. I.e.,
nb=CreateTestDialog[];
NotebookInformation[nb]
This will return a list of values if the notebook is still open, and $Failed if
it's been closed. If you want to be notified as soon as the dialog closes, then
the best way to do this is to implement a dialog with a DefaultButton[] and/or a
CancelButton[].
Sincerely,
John Fultz
jfultz at wolfram.com
User Interface Group
Wolfram Research, Inc.