require(tcltk) || stop("tcltk support is absent")
require(stats)

local({
    have_ttk <- as.character(tcl("info", "tclversion")) >= "8.5"
    if(have_ttk) {
        tkbutton <- ttkbutton
        tkcheckbutton <- ttkcheckbutton
        tkentry <- ttkentry
        tkframe <- ttkframe
        tklabel <- ttklabel
        tkradiobutton <- ttkradiobutton
    }
    dialog.t.test <- function(){
        tt <- tktoplevel()
        tkwm.title(tt,"t test")
        x.entry <- tkentry(tt, textvariable=xvar)
        y.entry <- tkentry(tt, textvariable=yvar)
	alt <- tclVar("two.sided")
	done <- tclVar(0)
	eqvar <- tclVar(0)

        reset <- function()
        {
            tclvalue(xvar)<-""
            tclvalue(yvar)<-""
            tclvalue(alt)<-"two.sided"
            tclvalue(eqvar)<-"0"
        }
        reset.but <- tkbutton(tt, text="Reset", command=reset)
        submit.but <- tkbutton(tt, text="submit",
                               command=function()tclvalue(done)<-1)

        build <- function()
        {
            ## notice that tclvalue() is correct here, since it is the
            ## string representation of xvar and yvar that is being
            ## displayed in the entry fields

            x  <- parse(text=tclvalue(xvar))[[1]]
            y  <- parse(text=tclvalue(yvar))[[1]]
            a <- tclvalue(alt)
            vv <- as.logical(tclObj(eqvar))
            substitute(t.test(x,y,alternative=a,var.equal=vv))
        }
        var.cbut <- tkcheckbutton(tt, text="Equal variance", variable=eqvar)
        alt.rbuts <- tkframe(tt)

        tkpack(tklabel(alt.rbuts, text="Alternative"))
        for ( i in c("two.sided", "less", "greater")){
            tmp <- tkradiobutton(alt.rbuts, text=i, variable=alt, value=i)
            tkpack(tmp,anchor="w")
        }

        tkgrid(tklabel(tt,text="t-test"),columnspan=2)
        tkgrid(tklabel(tt,text="x variable"), x.entry)
        tkgrid(tklabel(tt,text="y variable"), y.entry)
        tkgrid(var.cbut, alt.rbuts)
        tkgrid(submit.but, reset.but)

        if (tclvalue(alt)=="") tclvalue(alt)<-"two.sided"

        ## capture destroy (e.g. from window controls
        ## otherwise the tkwait hangs with nowhere to go
        tkbind(tt, "<Destroy>", function()tclvalue(done)<-2)

        tkwait.variable(done)

        if(tclvalue(done)=="2") stop("aborted")

        tkdestroy(tt)
        cmd <- build()
        cat("### Command executed via Tk ###\n")
        cat(deparse(build()),sep="\n")
        cat("### -----\n")
        eval.parent(cmd)
    }

    cat("******************************************************\n",
        "The source for this demo can be found in the file:\n",
        file.path(system.file(package = "tcltk"), "demo", "tkttest.R"),
        "\n******************************************************\n")

    xvar <- tclVar("Ozone[Month==5]")
    yvar <- tclVar("Ozone[Month==8]")
    with(airquality, dialog.t.test())
})
