Raspberry BASIC > Programming Challenges
GUI Login
John Spikowski:
8th Update (Jalih submission)
--- Code: Text ---requires gui var gui { guest: "pa$$w0rd!" } constant passwords : authenticate "edit1" g:child g:text? passwords swap m:@ nip null? if drop "lbl0" g:child "User not found!" g:text drop else swap "edit2" g:child g:text? rot s:= if "Authenticated!" . cr bye else "lbl0" g:child "Username and password don't match!" g:text drop then then ; { kind: "win", buttons: 0, native-title-bar: false, title: "Login", wide: 520, high: 200, resizable: false, center: true, init: ( gui ! ), children: [ { kind: "box", name: "frame", bounds: "0, 0, parent.width, parent.height", bg: "gray", children: [ { kind: "image", bounds: "parent.left+10, parent.top+10, left+128, top+128", img: "8thlogo.png", name: "logo" }, { kind: "label", fg: "blue", font: 20, label: "", bounds: "logo.right+20, parent.top+10, parent.width-10, top+24 ", justify: ["hcenter"], name: "lbl0" }, { kind: "label", label: "Username:", bounds: "logo.right+20, lbl0.bottom+20, left+80, top+24 ", name: "lbl1" }, { kind: "edit", bounds: "lbl1.right+10, lbl1.top, parent.width-20, top+24", name: "edit1", max-text: 32 }, { kind: "label", label: "Password:", bounds: "lbl1.left, lbl1.bottom+10, left+80, top+24", name: "lbl2" }, { kind: "edit", bounds: "edit1.left, lbl2.top, parent.width-20, top+24", name: "edit2", max-text: 32, password-char: "*" }, { kind: "btn", label: "Login", bg: "darkgray", bounds: "lbl2.left, lbl2.bottom+20, edit2.right, top+30", name: "button", tooltip: "Login to account", click: ' authenticate } ] } ]} var, gui-desc : app:main gui-desc @ g:new ;
John Spikowski:
ScriptBasic Update
Change Log
[*] Fixed hide/show password
[*] Skip Show Password? checkbox in ZORDER
[*] Removed dialog max / min titlebar buttons
[*] ENTER key clicks the Login button
[*] Optimize and tidy code.
[/list]
--- Code: Script BASIC ---' ScriptBasic / IUP - Login - JRS IMPORT iup.bas SUB login_clicked uid = Iup::GetAttribute(uidtxt,"VALUE") IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN pwd = Iup::GetAttribute(pwdtxt1,"VALUE") ELSE pwd = Iup::GetAttribute(pwdtxt2,"VALUE") END IF IF uid = "John" AND pwd = "Spikowski" THEN Iup::Hide errlbl Iup::Message "Login", "Login Successful" Iup::ExitLoop = TRUE ELSE Iup::Show errlbl Iup::SetFocus uidtxt END IFEND SUB SUB show_password IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN pwd2 = Iup::GetAttribute(pwdtxt2,"VALUE") Iup::SetAttribute pwdtxt1, "VALUE", pwd2 Iup::SetAttribute zbtxt, "VALUE", "pwdtxt1" ELSE pwd1 = Iup::GetAttribute(pwdtxt1,"VALUE") Iup::SetAttribute pwdtxt2, "VALUE", pwd1 Iup::SetAttribute zbtxt, "VALUE", "pwdtxt2" END IFEND SUB SUB Win_exit Iup::ExitLoop = TRUEEND SUB ' *** DIALOG ***Iup::Opendlg = Iup::Create("dialog")Iup::SetAttributes dlg, _ "TITLE=\"Login\", " & _ "SIZE=200x200, " & _ "MAXBOX=NO, " & _ "MINBOX=NO, " & _ "RESIZE=NO, " & _ "DEFAULTENTER=\"loginbut\"" ' *** CONTAINER ***vb = Iup::Create("vbox") ' *** IMAGE ***hb1 = Iup::Create("hbox")piclbl = Iup::Create("label")Iup::SetAttributes piclbl, _ "IMAGE=\"./login.png\", " & _ "EXPAND=HORIZONTAL, " & _ "ALIGNMENT=ACENTER:ATOP"Iup::Append hb1, piclblIup::Append vb, hb1 ' *** ERROR ***hb2 = Iup::Create("hbox")errlbl = Iup::Create("label")Iup::SetAttributes errlbl, _ "TITLE=\"User ID / Password Incorrect\", " & _ "FGCOLOR=\"#ff0000\", " & _ "EXPAND=HORIZONTAL, " & _ "ALIGNMENT=ACENTER"Iup::Hide errlblIup::Append hb2, errlblIup::Append vb, hb2 ' *** ENTRY ***hb3 = Iup::Create("hbox")Iup::SetAttributes hb3, _ "MARGIN=20x10, " & _ "GAP=5"vb1 = Iup::Create("vbox")Iup::SetAttribute vb1, "GAP", "15"uidlbl = Iup::Create("label")Iup::SetAttribute uidlbl, "TITLE", "User ID"Iup::Append vb1, uidlblpwdlbl = Iup::Create("label")Iup::SetAttribute pwdlbl, "TITLE", "Password"Iup::Append vb1, pwdlblIup::Append hb3, vb1vb2 = Iup::Create("vbox")uidtxt = Iup::Create("text")Iup::SetAttribute uidtxt, "SIZE", "85x"Iup::Append vb2, uidtxtpwdtxt1 = Iup::Create("text")Iup::SetAttributes pwdtxt1, _ "PASSWORD=YES, " & _ "SIZE=85x"pwdtxt2 = Iup::Create("text")Iup::SetAttribute pwdtxt2, "SIZE", "85x"Iup::SetHandle "pwdtxt1", pwdtxt1Iup::SetHandle "pwdtxt2", pwdtxt2zbtxt = Iup::Zbox(pwdtxt1, pwdtxt2)Iup::SetHandle "zbtxt", zbtxtIup::Append vb2, zbtxtIup::Append hb3, vb2Iup::Append vb, hb3 ' *** SHOW/HIDE ***hb4 = Iup::Create("hbox")Iup::SetAttribute hb4, "MARGIN", "35x"showpwd = Iup::Create("toggle")Iup::SetAttributes showpwd, _ "TITLE=\"Show Password?\", " & _ "CANFOCUS=NO"Iup::Append hb4, showpwdIup::Append vb, hb4 ' *** LOGIN ***hb5 = Iup::Create("hbox")Iup::SetAttribute hb5, "MARGIN", "40x10"loginbut = Iup::Create("button")Iup::SetAttributes loginbut, _ "TITLE=\"Login\", " & _ "EXPAND=HORIZONTAL"Iup::SetHandle "loginbut", loginbutiup::Append hb5, loginbutiup::Append vb, hb5 ' *** ATTACH CONTAINER ***iup::Append dlg, vb ' *** CALLBACKS ***Iup::SetCallback dlg,"CLOSE_CB",ADDRESS(Win_exit())Iup::SetCallback loginbut, "ACTION", ADDRESS(login_clicked())Iup::SetCallback showpwd, "ACTION", ADDRESS(show_password()) ' *** PROCESS ***Iup::Show dlgIup::MainLoopIup::Close
John Spikowski:
Nim / IUP Update
Change Log
[*] Used state of toggle from callback rather than using GetAttriute to obtain it.
[*] Defaulted the ENTER key to click the Login button.
[/list]
Note: I've attached the login.png used in the login program if someone would like to try the script on their system.
--- Code: Text ---# Nim 1.0.4 / IUP 3.28 - Login - JRS import niupimport niupext var uidtxt,showpwd,pwdtxt1,pwdtxt2,errlbl,zbtxt:PIhandle proc login_clicked(ih:PIhandle):cint {.cdecl.}= var uid,pswd:cstring uid = GetAttribute(uidtxt,"VALUE") if GetAttribute(showpwd, "VALUE") == "OFF": pswd = GetAttribute(pwdtxt1,"VALUE") else: pswd = GetAttribute(pwdtxt2,"VALUE") if uid == "John" and pswd == "Spikowski": Hide(errlbl) Message("Login", "Login Successful") return IUP_CLOSE else: Show(errlbl) SetFocus(uidtxt) return IUP_DEFAULT proc show_password(ih:PIhandle; state: bool):cint {.cdecl.}= var pwd1,pwd2:cstring if state: pwd1 = GetAttribute(pwdtxt1,"VALUE") SetAttribute(pwdtxt2, "VALUE", pwd1) SetAttribute(zbtxt, "VALUE", "pwdtxt2") else: pwd2 = GetAttribute(pwdtxt2,"VALUE") SetAttribute(pwdtxt1, "VALUE", pwd2) SetAttribute(zbtxt, "VALUE", "pwdtxt1") return IUP_DEFAULT # *** MAIN *** Open() # *** DIALOG ***var dlg = Create("dialog")SetAttributes(dlg, "TITLE=\"Login\", " & "SIZE=200x200, " & "MAXBOX=NO, " & "MINBOX=NO, " & "RESIZE=NO, " & "DEFAULTENTER=\"loginbut\"") # *** CONTAINER ***var vb = Create("vbox") # *** IMAGE ***var hb1 = Create("hbox")var piclbl = Create("label")SetAttributes(piclbl, "IMAGE=\"login.png\", " & "EXPAND=HORIZONTAL, " & "ALIGNMENT=ACENTER:ATOP")discard Append(hb1, piclbl)discard Append(vb, hb1) # *** ERROR ***var hb2 = Create("hbox")errlbl = Create("label")SetAttributes(errlbl, "TITLE=\"User ID / Password Incorrect\", " & "FGCOLOR=\"#ff0000\", " & "EXPAND=HORIZONTAL, " & "ALIGNMENT=ACENTER")Hide(errlbl)discard Append(hb2, errlbl)discard Append(vb, hb2) # *** ENTRY ***var hb3 = Create("hbox")SetAttributes(hb3, "MARGIN=20x10, " & "GAP=5")var vb1 = Create("vbox")SetAttribute(vb1, "GAP", "15")var uidlbl = Create("label")SetAttribute(uidlbl, "TITLE", "User ID")discard Append(vb1, uidlbl)var pwdlbl = Create("label")SetAttribute(pwdlbl, "TITLE", "Password")discard Append(vb1, pwdlbl)discard Append(hb3, vb1)var vb2 = Create("vbox")uidtxt = Create("text")SetAttribute(uidtxt, "SIZE", "85x")discard Append(vb2, uidtxt)pwdtxt1 = Create("text")SetAttributes(pwdtxt1, "PASSWORD=YES, " & "SIZE=85x")pwdtxt2 = Create("text")SetAttribute(pwdtxt2, "SIZE", "85x")SetHandle("pwdtxt1", pwdtxt1)SetHandle("pwdtxt2", pwdtxt2)zbtxt = Zbox(pwdtxt1, pwdtxt2, nil)SetHandle("zbtxt", zbtxt)discard Append(vb2, zbtxt)discard Append(hb3, vb2)discard Append(vb, hb3) # *** SHOW/HIDE ***var hb4 = Create("hbox")SetAttribute(hb4, "MARGIN", "35x")showpwd = Create("toggle")SetAttributes(showpwd, "TITLE=\"Show Password?\", " & "CANFOCUS=NO")discard Append(hb4, showpwd)discard Append(vb, hb4) # *** LOGIN ***var hb5 = Create("hbox")SetAttribute(hb5, "MARGIN", "40x10")var loginbut = Create("button")SetAttributes(loginbut, "TITLE=\"Login\", " & "EXPAND=HORIZONTAL")SetHandle("loginbut", loginbut)discard Append(hb5, loginbut)discard Append(vb, hb5) # *** ATTACH CONTAINER ***discard Append(dlg, vb) # *** CALLBACKS ***SetCallback(loginbut, "ACTION", login_clicked)SetCallback(showpwd, "ACTION", show_password) # *** PROCESS ***Show(dlg)MainLoop()Close()
The screen shots for Nim are identical to the ones posted for ScriptBasic.
John Spikowski:
This is how IUP sees its layout via the IupLayoutDialog() function.
John Spikowski:
You can create your dialog layout using the IupLayoutDialog() function in realtime. I use it to experiment with attributes (properties) without having to change/create any code. The function also will generate the code for your layout in C, Lua or LED.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version