/* 
 * Smart GWT (GWT for SmartClient) 
 * Copyright 2008 and beyond, Isomorphic Software, Inc. 
 * 
 * Smart GWT is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License version 3 
 * as published by the Free Software Foundation.  Smart GWT is also 
 * available under typical commercial license terms - see 
 * http://smartclient.com/license 
 * 
 * This software is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
 * Lesser General Public License for more details. 
 */

import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Dialog;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;

public class DialogsSample implements EntryPoint
{

    @Override
    public void onModuleLoad()
    {

        final Label labelAnswer = new Label("Your answer here...");
        labelAnswer.setTop(50);
        labelAnswer.setWidth(300);

        IButton buttonConfirm = new IButton("Confirm");
        buttonConfirm.addClickHandler(new ClickHandler()
        {
            @Override
            public void onClick(ClickEvent event)
            {
                SC.confirm("Proceed with Operation get AJAX?", new BooleanCallback()
                {
                    @Override
                    public void execute(Boolean value)
                    {
                        if (value != null && value)
                        {
                            labelAnswer.setContents("OK");
                        }
                        else
                        {
                            labelAnswer.setContents("Cancel");
                        }
                    }
                });
            }
        });

        IButton buttonCustom = new IButton("Custom");
        buttonCustom.setLeft(150);
        buttonCustom.addClickHandler(new ClickHandler()
        {
            @Override
            public void onClick(ClickEvent event)
            {
                CustomDialog customDialog = new CustomDialog(new BooleanCallback()
                {
                    @Override
                    public void execute(Boolean value)
                    {
                        if (value != null && value)
                        {
                            labelAnswer.setContents("YES");
                        }
                        else
                        {
                            labelAnswer.setContents("NO");
                        }
                    }
                });

                customDialog.show();
            }
        });

        Canvas main = new Canvas();
        main.addChild(labelAnswer);
        main.addChild(buttonConfirm);
        main.addChild(buttonCustom);

        main.draw();
    }

    private class CustomDialog extends Dialog
    {
        BooleanCallback callback;

        public CustomDialog(BooleanCallback callback)
        {
            this.callback = callback;
            setButtons(Dialog.YES, Dialog.NO);
        }

		// THIS IS NEVER FIRED
        @Override
        public void yesClick()
        {
            callback.execute(true);
        }

		// THIS IS NEVER FIRED
        @Override
        public void noClick()
        {
            callback.execute(false);
        }
    }
}