add view details panel; clean up other panels
This commit is contained in:
		
							parent
							
								
									f7a2ca070f
								
							
						
					
					
						commit
						ab9b3c208a
					
				@ -108,6 +108,7 @@
 | 
			
		||||
          Say 'NO CONTACT FOUND'
 | 
			
		||||
          return
 | 
			
		||||
      END
 | 
			
		||||
 | 
			
		||||
      return contacts[1] /* Rexx is 1-indexed */
 | 
			
		||||
 | 
			
		||||
    /***************************
 | 
			
		||||
@ -135,6 +136,46 @@
 | 
			
		||||
        END
 | 
			
		||||
    return contacts
 | 
			
		||||
 | 
			
		||||
    /***********************
 | 
			
		||||
     * Get Contact Details *
 | 
			
		||||
     ***********************/
 | 
			
		||||
    ::METHOD getContactDetails
 | 
			
		||||
        expose db
 | 
			
		||||
        use arg contactID
 | 
			
		||||
 | 
			
		||||
        contact = self~getContact(contactId)
 | 
			
		||||
        if contact \= .nil then do
 | 
			
		||||
                /* Get Phone Numbers */
 | 
			
		||||
                psql = "SELECT * FROM phone_numbers WHERE contact_id = "contact["ID"]
 | 
			
		||||
                phones = db~exec(psql,.true,.ooSQLite~OO_ARRAY_OF_DIRECTORIES)
 | 
			
		||||
                phone = phones[1] /* just grab the first phone */
 | 
			
		||||
                contact["PHONE_NUMBER"] = phone["NUMBER"]
 | 
			
		||||
                contact["PHONE_TYPE"] = phone["TYPE"]
 | 
			
		||||
 | 
			
		||||
                /* Now get email addresses */
 | 
			
		||||
                esql = "SELECT * FROM email_addresses WHERE contact_id = "contact["ID"]
 | 
			
		||||
                emails = db~exec(esql,.true,.ooSQLite~OO_ARRAY_OF_DIRECTORIES)
 | 
			
		||||
                email = emails[1]
 | 
			
		||||
                contact["EMAIL_ADDRESS"] = email["EMAIL"]
 | 
			
		||||
                contact["EMAIL_TYPE"] = email["TYPE"]
 | 
			
		||||
 | 
			
		||||
                /* Now get real physical address */
 | 
			
		||||
                asql = "SELECT * FROM addresses WHERE contact_id = "contact["ID"]
 | 
			
		||||
                addresses = db~exec(asql,.true,.ooSQLite~OO_ARRAY_OF_DIRECTORIES)
 | 
			
		||||
                address = addresses[1]
 | 
			
		||||
                contact["STREET"] = address["STREET"]
 | 
			
		||||
                contact["CITY"] = address["CITY"]
 | 
			
		||||
                contact["STATE"] = address["STATE"]
 | 
			
		||||
                contact["POSTAL_CODE"] = address["POSTAL_CODE"]
 | 
			
		||||
                contact["COUNTRY"] = address["COUNTRY"]
 | 
			
		||||
 | 
			
		||||
                end /* add contact details */
 | 
			
		||||
    RETURN contact
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /***********************
 | 
			
		||||
     * Search All Contacts *
 | 
			
		||||
     ***********************/
 | 
			
		||||
    ::METHOD searchContacts
 | 
			
		||||
      expose db
 | 
			
		||||
      use arg searchTerm
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										164
									
								
								app/appui.cls
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								app/appui.cls
									
									
									
									
									
								
							@ -77,6 +77,8 @@
 | 
			
		||||
            when clrset = 8 then panel~init_pair(9, panel~COLOR_CYAN, panel~COLOR_BLACK)
 | 
			
		||||
            /* blacken everything to give the appearance of disappearance */
 | 
			
		||||
            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)
 | 
			
		||||
            /* Default to white text on black background */
 | 
			
		||||
            OTHERWISE DO
 | 
			
		||||
                clrset=0
 | 
			
		||||
@ -97,8 +99,8 @@
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
 | 
			
		||||
        menu_height = 21
 | 
			
		||||
        menu_width = 40
 | 
			
		||||
        menu_height = 16
 | 
			
		||||
        menu_width = 30
 | 
			
		||||
        start_y = (max_y - menu_height) % 2
 | 
			
		||||
        start_x = (max_x - menu_width) % 2
 | 
			
		||||
        clrset=1
 | 
			
		||||
@ -106,8 +108,8 @@
 | 
			
		||||
        with_box = .true
 | 
			
		||||
 | 
			
		||||
        menuwin = self~DrawSubPanel(menu_height, menu_width, start_y, start_x, clrset, title, with_box)
 | 
			
		||||
        menu_items = .array~of("[A]dd Contact", "[D]elete Contact", "[E]dit Contact", "[S]earch", "[L]ist All", "[Q]uit")
 | 
			
		||||
        menu_keys = .array~of("a", "d", "e", "s", "l", "q")
 | 
			
		||||
        menu_items = .array~of("[V]iew Contact", "[A]dd Contact", "[D]elete Contact", "[E]dit Contact", "[S]earch", "[L]ist All", "[Q]uit")
 | 
			
		||||
        menu_keys = .array~of("v", "a", "d", "e", "s", "l", "q")
 | 
			
		||||
 | 
			
		||||
        .environment~selected = 1
 | 
			
		||||
        self~DrawMenu(menuwin, menu_items, .environment~selected, win)
 | 
			
		||||
@ -148,7 +150,7 @@
 | 
			
		||||
        win~refresh
 | 
			
		||||
        self~setupMainMenu(win)
 | 
			
		||||
        menuwin~refresh()
 | 
			
		||||
        RETURN
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
     /**********************
 | 
			
		||||
     * Add new contact     *
 | 
			
		||||
@ -261,7 +263,7 @@
 | 
			
		||||
            end
 | 
			
		||||
        end /* add contact */
 | 
			
		||||
        self~dropWindow(formwin)
 | 
			
		||||
    return
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /****************************
 | 
			
		||||
     * Delete Contact Panel     *
 | 
			
		||||
@ -272,21 +274,21 @@
 | 
			
		||||
        /* Create a form panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        form_height = 14
 | 
			
		||||
        form_height = 12
 | 
			
		||||
        form_width = 35
 | 
			
		||||
        start_y = (max_y - form_height) % 2
 | 
			
		||||
        start_x = (max_x - form_width) % 2
 | 
			
		||||
        delwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 0, "Delete A Contact", .true)
 | 
			
		||||
        delwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 10, "Delete A Contact", .true)
 | 
			
		||||
 | 
			
		||||
        delwin~mvaddstr(3, 2, "Contact ID: ")
 | 
			
		||||
        delwin~mvaddstr(form_height-2, 2, "[Enter] to save, [Esc] to cancel")
 | 
			
		||||
        delwin~mvaddstr(4, 2, "Contact ID: ")
 | 
			
		||||
        delwin~mvaddstr(form_height-1, 2, "[Enter] to del, [Esc] to cancel")
 | 
			
		||||
        delwin~refresh()
 | 
			
		||||
 | 
			
		||||
        contactId = self~getInputField(delwin, 3, 14, 10)
 | 
			
		||||
        contactId = self~getInputField(delwin, 4, 14, 10)
 | 
			
		||||
        if contactId = .nil then do
 | 
			
		||||
            self~dropWindow(delwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
        END
 | 
			
		||||
 | 
			
		||||
        result = db~deleteContact(contactId)
 | 
			
		||||
 | 
			
		||||
@ -303,17 +305,95 @@
 | 
			
		||||
        self~dropWindow(delwin)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /********************************
 | 
			
		||||
     * View Contact Selection Panel *
 | 
			
		||||
     ********************************/
 | 
			
		||||
    ::METHOD viewContactSelectPanel
 | 
			
		||||
        expose win db menuwin viewselectwin
 | 
			
		||||
 | 
			
		||||
        /* 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
 | 
			
		||||
        viewselectwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 8, "View A Contact", .true)
 | 
			
		||||
 | 
			
		||||
        viewselectwin~mvaddstr(4, 2, "Contact ID: ")
 | 
			
		||||
        viewselectwin~mvaddstr(form_height-1, 2, "[Enter] to sel., [Esc] to cancel")
 | 
			
		||||
        viewselectwin~refresh()
 | 
			
		||||
 | 
			
		||||
        contactId = self~getInputField(viewselectwin, 4, 14, 10)
 | 
			
		||||
        if contactId = .nil then do
 | 
			
		||||
            self~dropWindow(viewselectwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
        result = db~getContact(contactId)
 | 
			
		||||
 | 
			
		||||
        if result = .nil then do /* should be a result id number */
 | 
			
		||||
            viewselectwin~mvaddstr(8, 2, "Contact not found.")
 | 
			
		||||
            viewselectwin~refresh()
 | 
			
		||||
            call SysWait 0.5
 | 
			
		||||
            self~dropWindow(viewselectwin)
 | 
			
		||||
            RETURN
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        /* launch a view panel with full contact details */
 | 
			
		||||
        self~dropWindow(viewselectwin)
 | 
			
		||||
        self~viewContactDetailPanel(contactId)
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /************************
 | 
			
		||||
     * View Contact Details *
 | 
			
		||||
     ************************/
 | 
			
		||||
    ::METHOD viewContactDetailPanel
 | 
			
		||||
        expose win db menuwin detailwin viewselectwin
 | 
			
		||||
        use arg contactID
 | 
			
		||||
 | 
			
		||||
        /* Create a form panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        form_height = 14
 | 
			
		||||
        form_width = 40
 | 
			
		||||
        start_y = (max_y - form_height) % 2
 | 
			
		||||
        start_x = (max_x - form_width) % 2
 | 
			
		||||
        detailwin = self~DrawSubPanel(form_height, form_width, start_y, start_x, 1, "View Contact Details", .true)
 | 
			
		||||
 | 
			
		||||
        contactDetails = db~getContactDetails(contactId)
 | 
			
		||||
 | 
			
		||||
        /* Detail fields */
 | 
			
		||||
        detailwin~mvaddstr(4, 3, contactDetails~first_name);
 | 
			
		||||
        detailwin~mvaddstr(4, LENGTH(contactDetails~first_name)+1+3, contactDetails~last_name);
 | 
			
		||||
        detailwin~mvaddstr(5, 3, contactDetails~street)
 | 
			
		||||
        detailwin~mvaddstr(6, 3, contactDetails~city);
 | 
			
		||||
        detailwin~mvaddstr(6, LENGTH(contactDetails~city)+4, contactDetails~state);
 | 
			
		||||
        detailwin~mvaddstr(6, LENGTH(contactDetails~city)+LENGTH(contactDetails~state)+5, contactDetails~postal_code);
 | 
			
		||||
        detailwin~mvaddstr(6, LENGTH(contactDetails~city)+LENGTH(contactDetails~state)+LENGTH(contactDetails~postal_code)+6, contactDetails~country)
 | 
			
		||||
        detailwin~mvaddstr(7, 3, contactDetails~email_address)
 | 
			
		||||
        detailwin~mvaddstr(8, 3, contactDetails~phone_number)
 | 
			
		||||
 | 
			
		||||
        detailwin~mvaddstr(form_height-1, 2, "[Esc] to cancel")
 | 
			
		||||
        detailwin~refresh()
 | 
			
		||||
 | 
			
		||||
        detailwin~getch()
 | 
			
		||||
        self~dropWindow(detailwin)
 | 
			
		||||
        RETURN
 | 
			
		||||
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
    /****************************
 | 
			
		||||
     * List all contacts        *
 | 
			
		||||
     ****************************/
 | 
			
		||||
    ::method listAllContactsPanel
 | 
			
		||||
    ::METHOD listAllContactsPanel
 | 
			
		||||
        expose win db menuwin
 | 
			
		||||
 | 
			
		||||
        /* Create a list panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        list_height = max_y - 5
 | 
			
		||||
        list_width = max_x - 23
 | 
			
		||||
        list_height = max_y - 10
 | 
			
		||||
        list_width = max_x - 30
 | 
			
		||||
        start_y = (max_y - list_height) % 2
 | 
			
		||||
        start_x = (max_x - list_width) % 2
 | 
			
		||||
 | 
			
		||||
@ -324,11 +404,11 @@
 | 
			
		||||
        /* Display column headers */
 | 
			
		||||
        listwin~attron(listwin~A_BOLD)
 | 
			
		||||
        listwin~mvaddstr(4, 2, "ID")
 | 
			
		||||
        listwin~mvaddstr(4, 6, "First Name")
 | 
			
		||||
        listwin~mvaddstr(4, 18, "Last Name")
 | 
			
		||||
        listwin~mvaddstr(4, 30, "Phone")
 | 
			
		||||
        listwin~mvaddstr(4, 50, "Email")
 | 
			
		||||
        listwin~mvaddstr(5, 2, "--  ----------  ---------   ---------------     -------------------------")
 | 
			
		||||
        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~attroff(listwin~A_BOLD)
 | 
			
		||||
 | 
			
		||||
        contacts = db~getAllContacts()
 | 
			
		||||
@ -338,10 +418,10 @@
 | 
			
		||||
            do i = 1 to contacts~items
 | 
			
		||||
                contact = contacts[i]
 | 
			
		||||
                listwin~mvaddstr(i+5, 2, contact['ID'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 6, contact['FIRST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 18, contact['LAST_NAME'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 30, contact['PHONE_NUMBER'])
 | 
			
		||||
                listwin~mvaddstr(i+5, 50, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                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'])
 | 
			
		||||
                /* Break if we run out of screen space */
 | 
			
		||||
                if i > list_height-7 then LEAVE
 | 
			
		||||
            end
 | 
			
		||||
@ -358,7 +438,7 @@
 | 
			
		||||
    /****************************
 | 
			
		||||
     * Search for contact       *
 | 
			
		||||
     ****************************/
 | 
			
		||||
    ::method searchContactPanel
 | 
			
		||||
    ::METHOD searchContactPanel
 | 
			
		||||
        expose win db menuwin menu_items
 | 
			
		||||
 | 
			
		||||
        /* Create a search panel */
 | 
			
		||||
@ -401,23 +481,23 @@
 | 
			
		||||
        /* Create a list panel */
 | 
			
		||||
        max_y = win~lines
 | 
			
		||||
        max_x = win~cols
 | 
			
		||||
        list_height = max_y - 5
 | 
			
		||||
        list_width = max_x - 23
 | 
			
		||||
        list_height = max_y - 15
 | 
			
		||||
        list_width = max_x - 30
 | 
			
		||||
        start_y = (max_y - list_height) % 2
 | 
			
		||||
        start_x = (max_x - list_width) % 2
 | 
			
		||||
 | 
			
		||||
        searchoutwin = self~DrawSubPanel(list_height, list_width, start_y, start_x, 1, "All Contacts", .true)
 | 
			
		||||
        searchoutwin~scrollok(.true)
 | 
			
		||||
        searchoutwin~Setscrreg(4,18)
 | 
			
		||||
        searchoutwin = self~DrawSubPanel(list_height, list_width, start_y, start_x, 1, "Search Results", .true)
 | 
			
		||||
        /* searchoutwin~scrollok(.true)
 | 
			
		||||
        searchoutwin~Setscrreg(4,18) */
 | 
			
		||||
 | 
			
		||||
        /* Display column headers */
 | 
			
		||||
        searchoutwin~attron(searchoutwin~A_BOLD)
 | 
			
		||||
        searchoutwin~mvaddstr(4, 2, "ID")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 6, "First Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 18, "Last Name")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 30, "Phone")
 | 
			
		||||
        searchoutwin~mvaddstr(4, 50, "Email")
 | 
			
		||||
        searchoutwin~mvaddstr(5, 2, "--  ----------  ---------   ---------------     -------------------------")
 | 
			
		||||
        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~attroff(searchoutwin~A_BOLD)
 | 
			
		||||
 | 
			
		||||
        contacts = db~searchContacts(term)
 | 
			
		||||
@ -427,10 +507,10 @@
 | 
			
		||||
            do i = 1 to contacts~items
 | 
			
		||||
                contact = contacts[i]
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 2, contact['ID'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 6, contact['FIRST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 18, contact['LAST_NAME'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 30, contact['PHONE_NUMBER'])
 | 
			
		||||
                searchoutwin~mvaddstr(i+5, 50, contact['EMAIL_ADDRESS'])
 | 
			
		||||
                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'])
 | 
			
		||||
                /* Break if we run out of screen space */
 | 
			
		||||
                if i > list_height-7 then LEAVE
 | 
			
		||||
            end
 | 
			
		||||
@ -444,7 +524,6 @@
 | 
			
		||||
 | 
			
		||||
    RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /************************
 | 
			
		||||
     * Get Input From Field *
 | 
			
		||||
     ************************/
 | 
			
		||||
@ -567,7 +646,7 @@
 | 
			
		||||
                self~deleteContactPanel()
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 'e' then do
 | 
			
		||||
                menuwin~mvaddstr(19 - 3, 5, "TODO: Create an Edit Panel    ");
 | 
			
		||||
                menuwin~mvaddstr(menuwin~lines-15, 3, "TODO: Create Edit Panel");
 | 
			
		||||
                menuwin~refresh
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 's' then do
 | 
			
		||||
@ -576,6 +655,9 @@
 | 
			
		||||
            when key_char = 'l' then do
 | 
			
		||||
                self~listAllContactsPanel()
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 'v' then do
 | 
			
		||||
                self~viewContactSelectPanel()
 | 
			
		||||
                END
 | 
			
		||||
            when key_char = 'q' then do
 | 
			
		||||
                menuwin~mvaddstr(19 - 3, 5, "Exiting the application...        ")
 | 
			
		||||
                menuwin~refresh
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user