Raspberry BASIC > Programming Challenges

GUI Login

<< < (2/4) > >>

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