rem ' Customer master file maintenance (BBj GUI user interface - objects)

sysgui = unt
open (sysgui)"X0"; rem ' ALIAS X0 SYSGUI

declare Sample Sample!
Sample! = new Sample()
Sample!.edit()
release

class public Sample

    field private BBjSysGui sysgui!
    field private BBjNumber CustFile
    field private BBjTemplatedString Customer!
    field private BBjTopLevelWindow Window!
    field private BBjEditBox ID!
    field private BBjEditBox Name!
    field private BBjEditBox Phone!
    field private BBjButton Update!
    field private BBjButton Delete!
    field private BBjButton Clear!

    method public Sample()
        #sysgui! = bbjapi().getSysGui()
    methodend

    method public void openFile()
        Template$ = "ID:c(6),name:c(32),phone:c(24)"
        #Customer! = bbjapi().makeTemplatedString(Template$)
        Filename$ = "Customer.dat"
        #CustFile = unt
        open (#CustFile,err=makefile)Filename$
        methodret
        makefile:
        mkeyed Filename$,[0:1:6],0,64
        open (#CustFile)Filename$
        dim Customer$:Template$
        while 1
           dread Customer.ID$,Customer.name$,Customer.phone$,err=eof
           write record(#CustFile)Customer$
           continue
        eof:
           break
        wend
        data "BASIS","BASIS International Ltd.","+1.505.345.5232"
        data "CHILE","Chile Company","+1.555.555.1212"
    methodend

    method public void initControls()
        #Window! = #sysgui!.addWindow(100,100,280,170,"Customers",$00010003$,$00c00000$)
        #Window!.addStaticText(101,10,10,80,30,"ID:",$8000$)
        #ID! = #Window!.addEditBox(102,100,10,70,30,$$,$$)
        #Window!.addStaticText(103,10,50,80,30,"Name:",$8000$)
        #Name! = #Window!.addEditBox(104,100,50,170,30,$$,$$)
        #Window!.addStaticText(105,10,90,80,30,"Phone:",$8000$)
        #Phone! = #Window!.addEditBox(106,100,90,170,30,$$,$$)
        #Update! = #Window!.addButton(201,10,130,80,30,"Update",$$)
        #Delete! = #Window!.addButton(202,100,130,80,30,"Delete",$$)
        #Clear! = #Window!.addButton(203,190,130,80,30,"Clear",$$)
    methodend

    method public void initEvents()
        #ID!.setCallback(#ID!.ON_EDIT_MODIFY,#this!,"doToggle")
        #ID!.setCallback(#ID!.ON_LOST_FOCUS,#this!,"doFetch")
        #Update!.setCallback(#Update!.ON_BUTTON_PUSH,#this!,"doUpdate")
        #Delete!.setCallback(#Delete!.ON_BUTTON_PUSH,#this!,"doDelete")
        #Clear!.setCallback(#Clear!.ON_BUTTON_PUSH,#this!,"doClear")
    methodend

    method public void initDemo()
        #ID!.setText("BASIS")
        #fetch()
        #ID!.focus()
    methodend

    method public void edit()
        #openFile()
        #initControls()
        #initEvents()
        #initDemo()
        #Window!.setCallback(#Window!.ON_CLOSE,"eoj")
        process_events
        eoj:
        #Window!.destroy()
    methodend
    
    method public void doToggle(BBjEditModifyEvent event!)
        ID$ = cvs(#ID!.getText(),7)
        #Update!.setEnabled(len(ID$))
        #Delete!.setEnabled(len(ID$))
    methodend

    method public void doFetch(BBjLostFocusEvent event!)
        #fetch()
    methodend

    method public void fetch()
        ID$ = pad(cvs(#ID!.getText(),7),6)
        if #Customer!.getFieldAsString("ID") = ID$ then methodret
        #Customer!.setFieldValue("ID",ID$)
        read record(#CustFile,key=ID$,dom=notfound)Customer$
        #Customer!.setString(Customer$)
        notfound:
        #display()
    methodend

    method public void doUpdate(BBjButtonPushEvent event!)
        #Customer!.setFieldValue("ID",#ID!.getText())
        #Customer!.setFieldValue("name",#Name!.getText())
        #Customer!.setFieldValue("phone",#Phone!.getText())
        write record (#CustFile)#Customer!.getString()
        i = msgbox("Customer "+#Customer!.getFieldAsString("ID")+" updated.",0,"Updated")
        #clear()
    methodend

    method public void doDelete(BBjButtonPushEvent event!)
        ID$ = #Customer!.getFieldAsString("ID")
        remove (#CustFile,key=ID$,dom=nodelete)
        i = msgbox("Customer "+ID$+" deleted.",0,"Deleted")
        nodelete:
        #clear()
    methodend

    method public void doClear(BBjButtonPushEvent event!)
        #clear()
    methodend

    method public void clear()
        #Customer! = bbjapi().makeTemplatedString(#Customer!.fattr())
        #display()
        #ID!.focus()
    methodend

    method public void display()
        #ID!.setText(cvs(#Customer!.getFieldAsString("ID"),3))
        #Name!.setText(cvs(#Customer!.getFieldAsString("name"),3))
        #Phone!.setText(cvs(#Customer!.getFieldAsString("phone"),3))
    methodend

classend
