MayoMan
MayoMan

Reputation: 4917

GWT Delaying an action after an event trigger

I want to have the user click a button, then they will see a "Toast" message popup, which fades away , then the action that the button click performs should happen. What is the best way to do this? Should I trigger a Timer on catching the click event and let it timeout (While the toast is being displayed ) and then call the handling code or is there any built in delay mechanism in event handling I can use? I don't want my toast to be involved at all in the event handling

Upvotes: 0

Views: 504

Answers (2)

gbazin
gbazin

Reputation: 91

If I really follow your requirements the following code should do:

// interface of the "Toast" no matter what the implementation actually is
public interface Toast
{
    void open( String message );
    void closeFadingAway();
}

// calling code
public class ClientCode
{
    private static final int myDelay = 1000; // 1 second in millis
    private Toast myToast;

    void onMyAction()
    {
        myToast.open( "Your action is being handled..." );
        Scheduler.get().scheduleFixedDelay( new RepeatingCommand()
        {
            @Override
            public boolean execute()
            {
                myToast.closeFadingAway();
                performAction();
                return false; // return false to stop the "repeating" = executed only once
            }
        }, myDelay );
    }

    void performAction()
    {
        // do something interesting
    }
}

Now, if you actually mean to be able to interrupt the action when the user presses some button in the toast this is a different story.

Upvotes: 1

Athanasios Kataras
Athanasios Kataras

Reputation: 26362

If you are using a popup panel you could use the addCloseHandler on the popup panel and from here call the method that would have otherwise been called by the button.

popUpPanel.addCloseHandler(new CloseHandler<PopupPanel>(){
@Override
public void onClose(CloseEvent<PopupPanel> event) {
    // TODO Do the closing stuff here

}
});

So when the PopupPanel disappears and the close event triggers you can do your magic there.

Upvotes: 0

Related Questions