-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yeah, that's the behavior I saw when I tried a solution like Andreas's
using a CountDownLatch or a Lock/Condition pair. :(

Todd Volkert wrote:
> But the dialog is opened on the EDT, meaning that you'll lock up the UI 
> thread, and the UI will appear to hang.
> 
> -T
> 
> On Tue, Jan 26, 2010 at 12:43 PM, Andreas Siegrist 
> <[email protected]<mailto:[email protected]>> wrote:
> I'm sorry I think I've misunderstood your questions.
> So if you want to do that:
> new Dialog("ajsdfoj");
> System.out.println("I'm 100% sure that the Dialog is closed now!");
> 
> try it with this class:
> 
> import java.util.concurrent.Semaphore;
> 
> import org.apache.pivot.wtk.Dialog;
> import org.apache.pivot.wtk.DialogCloseListener;
> import org.apache.pivot.wtk.Display;
> import org.apache.pivot.wtk.Window;
> 
> public class BlockingDialog extends Dialog {
>        static Semaphore lock = new Semaphore(0);
> 
>        public void open(Display display, Window owner, boolean modal) {
>                        DialogCloseListener closeListener = new 
> DialogCloseListener() {
>                                @Override
>                                public void dialogClosed(Dialog arg0, boolean 
> arg1) {
>                                        lock.release();
>                                }
>                        };
>                        open(display, owner, modal, closeListener);
> 
>                        try {
>                                lock.acquire();
>                        } catch (InterruptedException e) {
>                                e.printStackTrace();
>                        }
>        }
> }
> 
> 
> On Jan 26, 2010, at 6:13 PM, Clint Gilbert wrote:
> 
> Thanks very much, I'll try this out later.  I tried similar strategies
> with different util.concurrent primitives, but never with a Semaphore in
> this way.
> 
> Andreas Siegrist wrote:
>>>> like that:
>>>>
>>>> import java.util.concurrent.Semaphore;
>>>>
>>>> import org.apache.pivot.wtk.Dialog;
>>>> import org.apache.pivot.wtk.DialogCloseListener;
>>>> import org.apache.pivot.wtk.Display;
>>>> import org.apache.pivot.wtk.Window;
>>>>
>>>> public class DialogProxy extends Dialog {
>>>>      static Semaphore lock = new Semaphore(1);
>>>>
>>>>      public void open(Display display, Window owner, boolean modal) {
>>>>              try {
>>>>                      lock.acquire();
>>>>                      DialogCloseListener closeListener = new 
>>>> DialogCloseListener() {
>>>>                              @Override
>>>>                              public void dialogClosed(Dialog arg0, boolean 
>>>> arg1) {
>>>>                                      lock.release();
>>>>                              }
>>>>                      };
>>>>                      open(display, owner, modal, closeListener);
>>>>
>>>>              } catch (InterruptedException e) {
>>>>                      e.printStackTrace();
>>>>              }
>>>>      }
>>>> }
>>>>
>>>>
>>>> On Jan 26, 2010, at 5:51 PM, Clint Gilbert wrote:
>>>>
>>>> Could you elaborate on this please?
>>>>
>>>> Andreas Siegrist wrote:
>>>>>>> Hi there
>>>>>>>
>>>>>>> I also did something like that
>>>>>>> All I needed to do is making a Proxy class with a synchronized method.
>>>>>>>
>>>>>>> Andreas
>>>>>>>
>>>>>>> On Jan 26, 2010, at 3:06 PM, Christopher Brind wrote:
>>>>>>>
>>>>>>>> Hi Bob,
>>>>>>>>
>>>>>>>> This isn't really about being modal, but about stopping the flow of 
>>>>>>>> execution.  For example, in Javascript:
>>>>>>>>
>>>>>>>> Alert.show("hello");
>>>>>>>> Alert.show("world");
>>>>>>>>
>>>>>>>> The second alert doesn't appear until you press OK on the first.
>>>>>>>>
>>>>>>>> In Pivot or Swing (and every other UI framework?) if you popup an 
>>>>>>>> Alert processing continues, for instance in Flex:
>>>>>>>>
>>>>>>>> Alert.show("hello");
>>>>>>>> Alert.show("world");
>>>>>>>>
>>>>>>>> The second alert appears immediately and on top of the previous one.
>>>>>>>>
>>>>>>>> Clint wants to achieve the first scenario, but this is not possible 
>>>>>>>> with Pivot.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Chris
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> 2010/1/26 Bob Santos 
>>>>>>>> <[email protected]<mailto:[email protected]>>
>>>>>>>> If I'm not mistaken, in Swing, you can create confirm dialogs(Yes/No), 
>>>>>>>> message dialogs or option dialogs by using JOptionPane and also I 
>>>>>>>> think they are by default modal(?), which means access to other part 
>>>>>>>> of the application is not allowed until interaction with the active 
>>>>>>>> dialog is done.
>>>>>>>>
>>>>>>>> You can also create your custom dialog by extending Dialog and 
>>>>>>>> specifying the modality.
>>>>>>>>
>>>>>>>> And yes it helps to know that everything you want to do with the UI 
>>>>>>>> should be done within the EDT as Greg stated.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jan 26, 2010 at 9:40 PM, Greg Brown 
>>>>>>>> <[email protected]<mailto:[email protected]>> wrote:
>>>>>>>> Hi Clint,
>>>>>>>>
>>>>>>>>> Now, my question: Is it possible to achieve behavior like the
>>>>>>>>> Javascript's alert() function with Pivot?  That is, I'd like to put 
>>>>>>>>> up a
>>>>>>>>> simple yes/no "do something"/"please don't" popup on the screen, and
>>>>>>>>> have the app block - the alert doesn't just block input to other
>>>>>>>>> elements - until the user chooses an option, or closes the popup.  
>>>>>>>>> This
>>>>>>>>> is possible in SWT, I don't know about Swing.
>>>>>>>> Sorry, it is not possible - as you noted, Window#open() is not a 
>>>>>>>> blocking call in WTK. Pivot is ultimately based on AWT, which uses a 
>>>>>>>> push model for event notifications (vs. pull). If you were to call a 
>>>>>>>> blocking method from a user input event such as a button press, no 
>>>>>>>> further event processing could occur until that method had returned, 
>>>>>>>> and the entire UI would appear to freeze.
>>>>>>>>
>>>>>>>> I personally don't mind the anonymous inner class syntax:
>>>>>>>>
>>>>>>>>  dialog.open(owner, new DialogCloseListener() {
>>>>>>>>      @Override
>>>>>>>>      public void dialogClosed(Dialog dialog, boolean modal) {
>>>>>>>>          // Get selected option and act on it
>>>>>>>>      }
>>>>>>>>  });
>>>>>>>>
>>>>>>>> I actually think this reflects a pretty consistent design - you open 
>>>>>>>> the dialog in response to one event (e.g. "button pressed"), and you 
>>>>>>>> handle the dialog's result in response to another event (e.g. "dialog 
>>>>>>>> closed").
>>>>>>>>
>>>>>>>>> Making the call to Dialog.open() from another thread doesn't have any 
>>>>>>>>> effect.
>>>>>>>> Note that, as in Swing, multi-threaded access to UI elements is not 
>>>>>>>> supported. All UI operations must be performed on the EDT.
>>>>>>>>
>>>>>>>> Hope this helps,
>>>>>>>> Greg
>>>>>>>>
>>>>>>>>
>>>>>>>>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAktfK0oACgkQ5IyIbnMUeTuAqQCeOW6N30B02+lbxrC1NZPTeabs
d1UAn3kkJ8ihtRhF+8Q6Tl4G9N0diW9m
=p74V
-----END PGP SIGNATURE-----

Reply via email to