User input/Graphical: Difference between revisions

Content added Content deleted
(→‎{{header|REXX}}: added the REXX computer programming language.)
(Added Go)
Line 434: Line 434:


'''[http://cogier.com/gambas/User_input-Graphical.png Click here for a picture of the running program]'''
'''[http://cogier.com/gambas/User_input-Graphical.png Click here for a picture of the running program]'''

=={{header|Go}}==
{{libheader|gotk3}}
<lang go>package main

import (
"github.com/gotk3/gotk3/gtk"
"log"
"math/rand"
"strconv"
"time"
)

func validateInput(window *gtk.Window, str1, str2 string) bool {
n, err := strconv.ParseFloat(str2, 64)
if len(str1) == 0 || err != nil || n != 75000 {
dialog := gtk.MessageDialogNew(
window,
gtk.DIALOG_MODAL,
gtk.MESSAGE_ERROR,
gtk.BUTTONS_OK,
"Invalid input",
)
dialog.Run()
dialog.Destroy()
return false
}
return true
}

func check(err error, msg string) {
if err != nil {
log.Fatal(msg, err)
}
}

func main() {
rand.Seed(time.Now().UnixNano())
gtk.Init(nil)

window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
check(err, "Unable to create window:")
window.SetTitle("Rosetta Code")
window.SetPosition(gtk.WIN_POS_CENTER)
window.Connect("destroy", func() {
gtk.MainQuit()
})

vbox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 1)
check(err, "Unable to create vertical box:")
vbox.SetBorderWidth(1)

hbox1, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 1)
check(err, "Unable to create first horizontal box:")

hbox2, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 1)
check(err, "Unable to create second horizontal box:")

label, err := gtk.LabelNew("Enter a string and the number 75000 \n")
check(err, "Unable to create label:")

sel, err := gtk.LabelNew("String: ")
check(err, "Unable to create string entry label:")

nel, err := gtk.LabelNew("Number: ")
check(err, "Unable to create number entry label:")

se, err := gtk.EntryNew()
check(err, "Unable to create string entry:")

ne, err := gtk.EntryNew()
check(err, "Unable to create number entry:")

hbox1.PackStart(sel, false, false, 2)
hbox1.PackStart(se, false, false, 2)

hbox2.PackStart(nel, false, false, 2)
hbox2.PackStart(ne, false, false, 2)

// button to accept
ab, err := gtk.ButtonNewWithLabel("Accept")
check(err, "Unable to create accept button:")
ab.Connect("clicked", func() {
// read and validate the entered values
str1, _ := se.GetText()
str2, _ := ne.GetText()
if validateInput(window, str1, str2) {
window.Destroy() // close window if input is OK
}
})

vbox.Add(label)
vbox.Add(hbox1)
vbox.Add(hbox2)
vbox.Add(ab)
window.Add(vbox)

window.ShowAll()
gtk.Main()
}</lang>


=={{header|Groovy}}==
=={{header|Groovy}}==