fully featured address book is complete
This commit is contained in:
		
							parent
							
								
									ab9b3c208a
								
							
						
					
					
						commit
						e10a6aeb5a
					
				@ -88,7 +88,7 @@
 | 
			
		||||
      self~addPhoneNumber(contactId, contactDict["PHONE_TYPE"], contactDict["PHONE_NUMBER"])
 | 
			
		||||
      self~addEmailAddress(contactId, contactDict["EMAIL_TYPE"], contactDict["EMAIL_ADDRESS"])
 | 
			
		||||
      /* contactId, addressType, street, city, state, postalCode, country */
 | 
			
		||||
      self~addRealAddress(contactId, "NA", contactDict~street, contactDict~city, contactDict~state, contactDict~postCode, "NA")
 | 
			
		||||
      self~addRealAddress(contactId, "NA", contactDict~street, contactDict~city, contactDict~state, contactDict~postCode, contactDict~country)
 | 
			
		||||
    return contactId
 | 
			
		||||
 | 
			
		||||
    ::METHOD getContact
 | 
			
		||||
@ -213,13 +213,16 @@
 | 
			
		||||
     ***********************/
 | 
			
		||||
    ::METHOD updateContact
 | 
			
		||||
        expose db
 | 
			
		||||
        use arg contactId, firstName, lastName
 | 
			
		||||
        sql = "UPDATE contacts SET first_name = '"firstName"', last_name = '"lastName"' WHERE id = "contactId
 | 
			
		||||
        rc = db~exec(sql)
 | 
			
		||||
        if rc \= 0 then do
 | 
			
		||||
          say "Error updating contact:" db~errMsg()
 | 
			
		||||
          return -1
 | 
			
		||||
        end
 | 
			
		||||
        use arg contactId, contactDict
 | 
			
		||||
        rc = 0
 | 
			
		||||
        sql1 = "UPDATE contacts SET first_name = '"contactDict~first_Name"', last_name = '"contactDict~last_Name"' WHERE id = "contactId
 | 
			
		||||
        rc = db~exec(sql1)
 | 
			
		||||
        sql2 = "UPDATE phone_numbers SET number = '"contactDict~phone_number"', type = '"contactDict~phone_type"' WHERE contact_id = "contactId
 | 
			
		||||
        rc = db~exec(sql2)
 | 
			
		||||
        sql3 = "UPDATE email_addresses SET email = '"contactDict~email_address"', type = '"contactDict~email_type"' WHERE contact_id = "contactId
 | 
			
		||||
        rc = db~exec(sql3)
 | 
			
		||||
        sql4 = "UPDATE addresses SET street = '"contactDict~street"', city = '"contactDict~city"', state = '"contactDict~state"', postal_code = '"contactDict~postcode"', country = '"contactDict~country"' WHERE contact_id = "contactId
 | 
			
		||||
        rc = db~exec(sql4)
 | 
			
		||||
    return rc
 | 
			
		||||
 | 
			
		||||
    /**************************
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										313
									
								
								app/appui.cls
									
									
									
									
									
								
							
							
						
						
									
										313
									
								
								app/appui.cls
									
									
									
									
									
								
							@ -13,7 +13,7 @@
 | 
			
		||||
    ::method initialize
 | 
			
		||||
      expose win mainMenu db
 | 
			
		||||
 | 
			
		||||
      win = self~DrawMainPanel(0, .true) /* default colour, draw border box */
 | 
			
		||||
      win = self~DrawMainPanel(0, .false) /* default colour, no main border */
 | 
			
		||||
      self~setupMainMenu(win)
 | 
			
		||||
      return
 | 
			
		||||
 | 
			
		||||
@ -79,6 +79,10 @@
 | 
			
		||||
            when clrset = 9 then panel~init_pair(10, panel~COLOR_BLACK, panel~COLOR_BLACK)
 | 
			
		||||
            /* red on black */
 | 
			
		||||
            when clrset = 10 then panel~init_pair(11, panel~COLOR_RED, panel~COLOR_BLACK)
 | 
			
		||||
            /* yellow on black */
 | 
			
		||||
            when clrset = 11 then panel~init_pair(12, panel~COLOR_YELLOW, panel~COLOR_BLACK)
 | 
			
		||||
            /* green on black */
 | 
			
		||||
            when clrset = 12 then panel~init_pair(13, panel~COLOR_GREEN, panel~COLOR_BLACK)
 | 
			
		||||
            /* Default to white text on black background */
 | 
			
		||||
            OTHERWISE DO
 | 
			
		||||
                clrset=0
 | 
			
		||||
@ -152,8 +156,9 @@
 | 
			
		||||
        menuwin~refresh()
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
     /**********************
 | 
			
		||||
     * Add new contact     *
 | 
			
		||||
    /************************************* ADD CONTACT **************************************/
 | 
			
		||||
    /**********************
 | 
			
		||||
     * Add new contact    *
 | 
			
		||||
     **********************/
 | 
			
		||||
    ::method addContactPanel
 | 
			
		||||
        expose win db menuwin formwin
 | 
			
		||||
@ -165,7 +170,7 @@
 | 
			
		||||
        form_width = 60
 | 
			
		||||
        start_y = (max_y - form_height) % 2
 | 
			
		||||
        start_x = (max_x - form_width) % 2
 | 
			
		||||
        formwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 0, "Add New Contact", .true)
 | 
			
		||||
        formwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 12, "Add New Contact", .true)
 | 
			
		||||
 | 
			
		||||
        /* Create form fields */
 | 
			
		||||
        formwin~mvaddstr(3, 2, "First Name: ")
 | 
			
		||||
@ -174,61 +179,67 @@
 | 
			
		||||
        formwin~mvaddstr(6, 2, "Email: "); formwin~mvaddstr(6, 42, "Type: ");
 | 
			
		||||
        formwin~mvaddstr(7, 2, "Street: ")
 | 
			
		||||
        formwin~mvaddstr(8, 2, "City: "); formwin~mvaddstr(8, 28, "State: "); formwin~mvaddstr(8, 40, "PostCode: ")
 | 
			
		||||
        formwin~mvaddstr(9, 2, "Country: ")
 | 
			
		||||
        formwin~mvaddstr(form_height-2, 2, "[Enter] to save, [Esc] to cancel")
 | 
			
		||||
        formwin~refresh()
 | 
			
		||||
 | 
			
		||||
        /* Input fields */
 | 
			
		||||
        firstName = self~getInputField(formwin, 3, 14, 30)
 | 
			
		||||
        firstName = self~getInputField(formwin, 3, 14, 30, '')
 | 
			
		||||
        if firstName = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        lastName = self~getInputField(formwin, 4, 14, 30)
 | 
			
		||||
        lastName = self~getInputField(formwin, 4, 14, 30, '')
 | 
			
		||||
        if lastName = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        phone = self~getInputField(formwin, 5, 10, 15)
 | 
			
		||||
        phone = self~getInputField(formwin, 5, 10, 15, '')
 | 
			
		||||
        if phone = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        phone_type = self~getInputField(formwin, 5, 48, 15)
 | 
			
		||||
        phone_type = self~getInputField(formwin, 5, 48, 15, '')
 | 
			
		||||
        if phone_type = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        email = self~getInputField(formwin, 6, 10, 30)
 | 
			
		||||
        email = self~getInputField(formwin, 6, 10, 30, '')
 | 
			
		||||
        if email = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        email_type = self~getInputField(formwin, 6, 48, 15)
 | 
			
		||||
        email_type = self~getInputField(formwin, 6, 48, 15, '')
 | 
			
		||||
        if email_type = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        street = self~getInputField(formwin, 7, 10, 25)
 | 
			
		||||
        street = self~getInputField(formwin, 7, 10, 25, '')
 | 
			
		||||
        if street = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        city = self~getInputField(formwin, 8, 10, 15)
 | 
			
		||||
        city = self~getInputField(formwin, 8, 10, 15, '')
 | 
			
		||||
        if city = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        state = self~getInputField(formwin, 8, 35, 2)
 | 
			
		||||
        state = self~getInputField(formwin, 8, 35, 2, '')
 | 
			
		||||
        if state = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        postCode = self~getInputField(formwin, 8, 50, 10)
 | 
			
		||||
        postCode = self~getInputField(formwin, 8, 50, 10, '')
 | 
			
		||||
        if postCode = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        country = self~getInputField(formwin, 9, 10, 15, '')
 | 
			
		||||
        if country = .nil then do
 | 
			
		||||
            self~dropWindow(formwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        if firstname = "" | lastname = "" then do
 | 
			
		||||
            formwin~mvaddstr(8, 2, "First and Last names are required.")
 | 
			
		||||
@ -248,6 +259,7 @@
 | 
			
		||||
            contactDict["CITY"] = city
 | 
			
		||||
            contactDict["STATE"] = state
 | 
			
		||||
            contactDict["POSTCODE"] = postCode
 | 
			
		||||
            contactDict["COUNTRY"] = country
 | 
			
		||||
            result = db~addContact(contactDict)
 | 
			
		||||
 | 
			
		||||
            /* Display result message */
 | 
			
		||||
@ -265,6 +277,202 @@
 | 
			
		||||
        self~dropWindow(formwin)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************************* EDIT CONTACT **************************************/
 | 
			
		||||
 | 
			
		||||
    /*****************************
 | 
			
		||||
     * Edit Contact Select Panel *
 | 
			
		||||
     *****************************/
 | 
			
		||||
    ::METHOD editContactSelectPanel
 | 
			
		||||
        expose win db menuwin ewin
 | 
			
		||||
 | 
			
		||||
        /* Create a form panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        form_height = 12
 | 
			
		||||
        form_width = 35
 | 
			
		||||
        start_y = (max_y - form_height) % 2
 | 
			
		||||
        start_x = (max_x - form_width) % 2
 | 
			
		||||
        ewin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 11, "Select A Contact To Edit", .true)
 | 
			
		||||
 | 
			
		||||
        ewin~mvaddstr(4, 2, "Contact ID: ")
 | 
			
		||||
        ewin~mvaddstr(form_height-1, 2, "[Enter] to edit, [Esc] to cancel")
 | 
			
		||||
        ewin~refresh()
 | 
			
		||||
 | 
			
		||||
        contactId = self~getInputField(ewin, 4, 14, 10, '')
 | 
			
		||||
        if contactId = .nil then do
 | 
			
		||||
            self~dropWindow(ewin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        result = db~getContact(contactId)
 | 
			
		||||
 | 
			
		||||
        if result = .nil then do /* should be a result id number */
 | 
			
		||||
            ewin~mvaddstr(8, 2, "Contact not found.")
 | 
			
		||||
            ewin~refresh()
 | 
			
		||||
            call SysWait 0.5
 | 
			
		||||
            self~dropWindow(ewin)
 | 
			
		||||
            RETURN
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        /* launch a view panel with full contact details */
 | 
			
		||||
        self~dropWindow(ewin)
 | 
			
		||||
        self~editContactDetailsPanel(contactId)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /*************************
 | 
			
		||||
     * Edit Existing Contact *
 | 
			
		||||
     *************************/
 | 
			
		||||
    ::METHOD editContactDetailsPanel
 | 
			
		||||
        expose win db menuwin editwin
 | 
			
		||||
        use arg contactId
 | 
			
		||||
 | 
			
		||||
        /* Create a form panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        form_height = 15
 | 
			
		||||
        form_width = 60
 | 
			
		||||
        start_y = (max_y - form_height) % 2
 | 
			
		||||
        start_x = (max_x - form_width) % 2
 | 
			
		||||
        editwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 11, "Edit Contact Details", .true)
 | 
			
		||||
 | 
			
		||||
        /* Create form fields */
 | 
			
		||||
        editwin~mvaddstr(3, 2, "First Name: ")
 | 
			
		||||
        editwin~mvaddstr(4, 2, "Last Name: ")
 | 
			
		||||
        editwin~mvaddstr(5, 2, "Phone: "); editwin~mvaddstr(5, 42, "Type: ");
 | 
			
		||||
        editwin~mvaddstr(6, 2, "Email: "); editwin~mvaddstr(6, 42, "Type: ");
 | 
			
		||||
        editwin~mvaddstr(7, 2, "Street: ")
 | 
			
		||||
        editwin~mvaddstr(8, 2, "City: "); editwin~mvaddstr(8, 28, "State: "); editwin~mvaddstr(8, 40, "PostCode: ")
 | 
			
		||||
        editwin~mvaddstr(9, 2, "Country: ")
 | 
			
		||||
        editwin~mvaddstr(form_height-1, 2, "[Enter] to save, [Esc] to cancel")
 | 
			
		||||
        editwin~refresh()
 | 
			
		||||
 | 
			
		||||
        /* Get existing details */
 | 
			
		||||
        contactDetails = db~getContactDetails(contactId)
 | 
			
		||||
 | 
			
		||||
        editwin~mvaddstr(3, 14, contactDetails~first_name);
 | 
			
		||||
        editwin~mvaddstr(4, 14, contactDetails~last_name);
 | 
			
		||||
        editwin~mvaddstr(5, 10, contactDetails~phone_number);
 | 
			
		||||
        editwin~mvaddstr(5, 48, contactDetails~phone_type);
 | 
			
		||||
        editwin~mvaddstr(6, 10, contactDetails~email_address);
 | 
			
		||||
        editwin~mvaddstr(6, 48, contactDetails~email_type);
 | 
			
		||||
        editwin~mvaddstr(7, 10, contactDetails~street);
 | 
			
		||||
        editwin~mvaddstr(8, 10, contactDetails~city);
 | 
			
		||||
        editwin~mvaddstr(8, 35, contactDetails~state);
 | 
			
		||||
        editwin~mvaddstr(8, 50, contactDetails~postal_code);
 | 
			
		||||
        editwin~mvaddstr(9, 10, contactDetails~country);
 | 
			
		||||
 | 
			
		||||
        /* Prepopulate the input fields */
 | 
			
		||||
        firstNameInit = contactDetails~first_name
 | 
			
		||||
        lastNameInit = contactDetails~last_name
 | 
			
		||||
        phoneInit = contactDetails~phone_number
 | 
			
		||||
        phone_typeInit = contactDetails~phone_type
 | 
			
		||||
        emailInit = contactDetails~email_address
 | 
			
		||||
        email_typeInit = contactDetails~email_type
 | 
			
		||||
        streetInit = contactDetails~street
 | 
			
		||||
        cityInit = contactDetails~city
 | 
			
		||||
        stateInit = contactDetails~state
 | 
			
		||||
        postCodeInit = contactDetails~postal_code
 | 
			
		||||
        countryInit = contactDetails~country
 | 
			
		||||
 | 
			
		||||
        /* Input fields */
 | 
			
		||||
        firstName = self~getInputField(editwin, 3, 14, 30, firstNameInit)
 | 
			
		||||
        if firstName = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        lastName = self~getInputField(editwin, 4, 14, 30, lastNameInit)
 | 
			
		||||
        if lastName = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        phone = self~getInputField(editwin, 5, 10, 15, phoneInit)
 | 
			
		||||
        if phone = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        phone_type = self~getInputField(editwin, 5, 48, 15, phone_typeInit)
 | 
			
		||||
        if phone_type = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        email = self~getInputField(editwin, 6, 10, 30, emailInit)
 | 
			
		||||
        if email = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        email_type = self~getInputField(editwin, 6, 48, 15, email_typeInit)
 | 
			
		||||
        if email_type = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        street = self~getInputField(editwin, 7, 10, 30, streetInit)
 | 
			
		||||
        if street = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        city = self~getInputField(editwin, 8, 10, 15, cityInit)
 | 
			
		||||
        if city = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        state = self~getInputField(editwin, 8, 35, 2, stateInit)
 | 
			
		||||
        if state = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        postCode = self~getInputField(editwin, 8, 50, 10, postCodeInit)
 | 
			
		||||
        if postCode = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        country = self~getInputField(editwin, 9, 10, 15, countryInit)
 | 
			
		||||
        if country = .nil then do
 | 
			
		||||
            self~dropWindow(editwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        /* Add to database */
 | 
			
		||||
        contactDict = .Directory~new()
 | 
			
		||||
        contactDict["FIRST_NAME"] = firstName
 | 
			
		||||
        contactDict["LAST_NAME"] = lastName
 | 
			
		||||
        contactDict["PHONE_NUMBER"] = phone
 | 
			
		||||
        contactDict["PHONE_TYPE"] = phone_type
 | 
			
		||||
        contactDict["EMAIL_ADDRESS"] = email
 | 
			
		||||
        contactDict["EMAIL_TYPE"] = email_type
 | 
			
		||||
        contactDict["STREET"] = street
 | 
			
		||||
        contactDict["CITY"] = city
 | 
			
		||||
        contactDict["STATE"] = state
 | 
			
		||||
        contactDict["POSTCODE"] = postCode
 | 
			
		||||
        contactDict["COUNTRY"] = country
 | 
			
		||||
 | 
			
		||||
        result = db~updateContact(contactId, contactDict)
 | 
			
		||||
 | 
			
		||||
        /* Display result message */
 | 
			
		||||
        if result = 0 then do /* should be a result id number */
 | 
			
		||||
            editwin~mvaddstr(11, 2, "Contact ID ["result"] edited successfully!")
 | 
			
		||||
            editwin~refresh()
 | 
			
		||||
            call SysWait 1.5
 | 
			
		||||
        end
 | 
			
		||||
        else do
 | 
			
		||||
            editwin~mvaddstr(11, 2, "Failed to edit contact.")
 | 
			
		||||
            editwin~refresh()
 | 
			
		||||
            call SysWait 1.5
 | 
			
		||||
        end
 | 
			
		||||
        self~dropWindow(editwin)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************************* DELETE CONTACT **************************************/
 | 
			
		||||
 | 
			
		||||
    /****************************
 | 
			
		||||
     * Delete Contact Panel     *
 | 
			
		||||
     ****************************/
 | 
			
		||||
@ -284,7 +492,7 @@
 | 
			
		||||
        delwin~mvaddstr(form_height-1, 2, "[Enter] to del, [Esc] to cancel")
 | 
			
		||||
        delwin~refresh()
 | 
			
		||||
 | 
			
		||||
        contactId = self~getInputField(delwin, 4, 14, 10)
 | 
			
		||||
        contactId = self~getInputField(delwin, 4, 14, 10, '')
 | 
			
		||||
        if contactId = .nil then do
 | 
			
		||||
            self~dropWindow(delwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
@ -305,6 +513,8 @@
 | 
			
		||||
        self~dropWindow(delwin)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************************* VIEW CONTACT **************************************/
 | 
			
		||||
 | 
			
		||||
    /********************************
 | 
			
		||||
     * View Contact Selection Panel *
 | 
			
		||||
     ********************************/
 | 
			
		||||
@ -324,7 +534,7 @@
 | 
			
		||||
        viewselectwin~mvaddstr(form_height-1, 2, "[Enter] to sel., [Esc] to cancel")
 | 
			
		||||
        viewselectwin~refresh()
 | 
			
		||||
 | 
			
		||||
        contactId = self~getInputField(viewselectwin, 4, 14, 10)
 | 
			
		||||
        contactId = self~getInputField(viewselectwin, 4, 14, 10, '')
 | 
			
		||||
        if contactId = .nil then do
 | 
			
		||||
            self~dropWindow(viewselectwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
@ -383,6 +593,8 @@
 | 
			
		||||
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************************* VIEW ALL CONTACTS **********************************/
 | 
			
		||||
 | 
			
		||||
    /****************************
 | 
			
		||||
     * List all contacts        *
 | 
			
		||||
     ****************************/
 | 
			
		||||
@ -393,7 +605,7 @@
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        list_height = max_y - 10
 | 
			
		||||
        list_width = max_x - 30
 | 
			
		||||
        list_width = max_x - 18
 | 
			
		||||
        start_y = (max_y - list_height) % 2
 | 
			
		||||
        start_x = (max_x - list_width) % 2
 | 
			
		||||
 | 
			
		||||
@ -404,11 +616,11 @@
 | 
			
		||||
        /* Display column headers */
 | 
			
		||||
        listwin~attron(listwin~A_BOLD)
 | 
			
		||||
        listwin~mvaddstr(4, 2, "ID")
 | 
			
		||||
        listwin~mvaddstr(4, 5, "First Name")
 | 
			
		||||
        listwin~mvaddstr(4, 17, "Last Name")
 | 
			
		||||
        listwin~mvaddstr(4, 29, "Phone")
 | 
			
		||||
        listwin~mvaddstr(4, 45, "Email")
 | 
			
		||||
        listwin~mvaddstr(5, 2, "-- ----------  ---------   --------------- -------------------------")
 | 
			
		||||
        listwin~mvaddstr(4, 7, "First Name")
 | 
			
		||||
        listwin~mvaddstr(4, 21, "Last Name")
 | 
			
		||||
        listwin~mvaddstr(4, 36, "Phone")
 | 
			
		||||
        listwin~mvaddstr(4, 52, "Email")
 | 
			
		||||
        listwin~mvaddstr(5, 2, "---- ----------    ------------   --------------- -------------------------")
 | 
			
		||||
        listwin~attroff(listwin~A_BOLD)
 | 
			
		||||
 | 
			
		||||
        contacts = db~getAllContacts()
 | 
			
		||||
@ -418,10 +630,10 @@
 | 
			
		||||
            do i = 1 to contacts~items
 | 
			
		||||
                contact = contacts[i]
 | 
			
		||||
                listwin~mvaddstr(i+5, 2, contact['ID'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 5, contact['FIRST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 17, contact['LAST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 29, contact['PHONE_NUMBER'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 45, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 7, contact['FIRST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 21, contact['LAST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 36, contact['PHONE_NUMBER'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 52, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                /* Break if we run out of screen space */
 | 
			
		||||
                if i > list_height-7 then LEAVE
 | 
			
		||||
            end
 | 
			
		||||
@ -435,6 +647,8 @@
 | 
			
		||||
        RETURN
 | 
			
		||||
    Return
 | 
			
		||||
 | 
			
		||||
    /************************************* SEARCH ALL CONTACTS ***********************************/
 | 
			
		||||
 | 
			
		||||
    /****************************
 | 
			
		||||
     * Search for contact       *
 | 
			
		||||
     ****************************/
 | 
			
		||||
@ -454,7 +668,7 @@
 | 
			
		||||
        searchwin~refresh()
 | 
			
		||||
 | 
			
		||||
        /* Get search term */
 | 
			
		||||
        term = self~getInputField(searchwin, 3, 15, 30)
 | 
			
		||||
        term = self~getInputField(searchwin, 3, 15, 30, '')
 | 
			
		||||
 | 
			
		||||
        /* If canceled, return to main menu */
 | 
			
		||||
        if term = .nil then do
 | 
			
		||||
@ -482,7 +696,7 @@
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        list_height = max_y - 15
 | 
			
		||||
        list_width = max_x - 30
 | 
			
		||||
        list_width = max_x - 18
 | 
			
		||||
        start_y = (max_y - list_height) % 2
 | 
			
		||||
        start_x = (max_x - list_width) % 2
 | 
			
		||||
 | 
			
		||||
@ -493,11 +707,11 @@
 | 
			
		||||
        /* Display column headers */
 | 
			
		||||
        searchoutwin~attron(searchoutwin~A_BOLD)
 | 
			
		||||
        searchoutwin~mvaddstr(4, 2, "ID")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 5, "First Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 17, "Last Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 29, "Phone")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 45, "Email")
 | 
			
		||||
        searchoutwin~mvaddstr(5, 2, "-- ----------  ---------   --------------- -------------------------")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 7, "First Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 21, "Last Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 36, "Phone")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 52, "Email")
 | 
			
		||||
        searchoutwin~mvaddstr(5, 2, "---- ----------    ------------   --------------- -------------------------")
 | 
			
		||||
        searchoutwin~attroff(searchoutwin~A_BOLD)
 | 
			
		||||
 | 
			
		||||
        contacts = db~searchContacts(term)
 | 
			
		||||
@ -507,10 +721,10 @@
 | 
			
		||||
            do i = 1 to contacts~items
 | 
			
		||||
                contact = contacts[i]
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 2, contact['ID'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 5, contact['FIRST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 17, contact['LAST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 29, contact['PHONE_NUMBER'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 45, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 7, contact['FIRST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 21, contact['LAST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 36, contact['PHONE_NUMBER'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 52, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                /* Break if we run out of screen space */
 | 
			
		||||
                if i > list_height-7 then LEAVE
 | 
			
		||||
            end
 | 
			
		||||
@ -524,29 +738,33 @@
 | 
			
		||||
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************************* UTILITIY METHODS **************************************/
 | 
			
		||||
 | 
			
		||||
    /************************
 | 
			
		||||
     * Get Input From Field *
 | 
			
		||||
     ************************/
 | 
			
		||||
    ::method getInputField
 | 
			
		||||
        use arg win, y, x, maxlen
 | 
			
		||||
        use arg win, y, x, maxlen, bufferContent
 | 
			
		||||
 | 
			
		||||
        win~move(y, x)
 | 
			
		||||
        win~curs_set(1)  /* Show cursor */
 | 
			
		||||
        win~keypad(1)    /* Enable function keys and arrow keys            */
 | 
			
		||||
        win~echo()       /* Show typed characters */
 | 
			
		||||
        win~raw
 | 
			
		||||
 | 
			
		||||
        buffer = ""
 | 
			
		||||
        if LENGTH(bufferContent) > 0 then DO
 | 
			
		||||
            buffer = bufferContent
 | 
			
		||||
            win~move(y, x + buffer~length)
 | 
			
		||||
        END
 | 
			
		||||
        Else DO
 | 
			
		||||
            buffer = ""
 | 
			
		||||
            win~move(y, x)
 | 
			
		||||
        END
 | 
			
		||||
 | 
			
		||||
        blank_line = copies(" ", maxlen)  /* String of spaces for clearing the line */
 | 
			
		||||
 | 
			
		||||
        do forever
 | 
			
		||||
            key = win~getch()
 | 
			
		||||
 | 
			
		||||
           decimalKey = C2D(key)
 | 
			
		||||
            /* Debug: Display key decimal value */
 | 
			
		||||
            /* win~mvaddstr(12, 2, "Key pressed (decimal): " || decimalKey || "   ") */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            decimalKey = C2D(key)
 | 
			
		||||
            select
 | 
			
		||||
                when key = D2C(27) then do  /* ESC key */
 | 
			
		||||
                    win~curs_set(0)    /* Hide cursor */
 | 
			
		||||
@ -646,8 +864,7 @@
 | 
			
		||||
                self~deleteContactPanel()
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 'e' then do
 | 
			
		||||
                menuwin~mvaddstr(menuwin~lines-15, 3, "TODO: Create Edit Panel");
 | 
			
		||||
                menuwin~refresh
 | 
			
		||||
                self~editContactSelectPanel()
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 's' then do
 | 
			
		||||
                self~searchContactPanel()
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user