83 lines
2.8 KiB
Nim
83 lines
2.8 KiB
Nim
import strutils
|
|
import gintro/[glib, gobject, gtk, gio]
|
|
|
|
type MainWindow = ref object of ApplicationWindow
|
|
strEntry: Entry
|
|
intEntry: SpinButton
|
|
|
|
#---------------------------------------------------------------------------------------------------
|
|
|
|
proc displayValues(strval: string; intval: int) =
|
|
## Display a dialog window with the values entered by the user.
|
|
|
|
let dialog = newDialog()
|
|
dialog.setModal(true)
|
|
let label1 = newLabel(" String value is “$1”.".format(strval))
|
|
label1.setHalign(Align.start)
|
|
dialog.contentArea.packStart(label1, true, true, 5)
|
|
let msg = " Integer value is $1 which is ".format(intval) &
|
|
(if intval == 75000: "right. " else: "wrong (expected 75000). ")
|
|
let label2 = newLabel(msg)
|
|
dialog.contentArea.packStart(label2, true, true, 5)
|
|
discard dialog.addButton("OK", ord(ResponseType.ok))
|
|
dialog.showAll()
|
|
discard dialog.run()
|
|
dialog.destroy()
|
|
|
|
#---------------------------------------------------------------------------------------------------
|
|
|
|
proc onOk(button: Button; window: MainWindow) =
|
|
## Callback executed when the OK button has been clicked.
|
|
let strval = window.strEntry.text()
|
|
let intval = window.intEntry.value().toInt
|
|
displayValues(strval, intval)
|
|
if intval == 75_000:
|
|
window.destroy()
|
|
|
|
#---------------------------------------------------------------------------------------------------
|
|
|
|
proc activate(app: Application) =
|
|
## Activate the application.
|
|
|
|
let window = newApplicationWindow(MainWindow, app)
|
|
window.setTitle("User input")
|
|
|
|
let content = newBox(Orientation.vertical, 10)
|
|
content.setHomogeneous(true)
|
|
let grid = newGrid()
|
|
grid.setColumnSpacing(30)
|
|
let bbox = newButtonBox(Orientation.horizontal)
|
|
bbox.setLayout(ButtonBoxStyle.spread)
|
|
|
|
let strLabel = newLabel("Enter some text")
|
|
strLabel.setHalign(Align.start)
|
|
window.strEntry = newEntry()
|
|
grid.attach(strLabel, 0, 0, 1, 1)
|
|
grid.attach(window.strEntry, 1, 0, 1, 1)
|
|
|
|
let intLabel = newLabel("Enter 75000")
|
|
intLabel.setHalign(Align.start)
|
|
window.intEntry = newSpinButtonWithRange(0, 80_000, 1)
|
|
grid.attach(intLabel, 0, 1, 1, 1)
|
|
grid.attach(window.intEntry, 1, 1, 1, 1)
|
|
|
|
let btnOk = newButton("OK")
|
|
|
|
bbox.add(btnOk)
|
|
|
|
content.packStart(grid, true, true, 0)
|
|
content.packEnd(bbox, true, true, 0)
|
|
|
|
window.setBorderWidth(5)
|
|
window.add(content)
|
|
|
|
discard btnOk.connect("clicked", onOk, window)
|
|
|
|
window.showAll()
|
|
|
|
#———————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
let app = newApplication(Application, "Rosetta.UserInput")
|
|
discard app.connect("activate", activate)
|
|
discard app.run()
|