#Region Project Attributes
#MainFormWidth: 600
#MainFormHeight: 600
#End Region
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private xui As XUI
Private Button1 As B4XView
Private SearchTextField As TextField
Private SearchListView As ListView
Dim Showable() As String 'appears in displayed list
Dim Searchable() As String 'actually searched
Dim Show As List 'list of Showables to show in SearchListView
Dim DiagnosticToggleButton As ToggleButton
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
'''MainForm.RootPane.LoadLayout("Layout1")
MainForm.Show
SearchTextField.Initialize("SearchTextField")
MainForm.RootPane.addnode(SearchTextField, 10, 10, 200, 20)
SearchListView.Initialize("SearchListView")
MainForm.RootPane.addnode(SearchListView, 10, 40, 200, 520)
DiagnosticToggleButton.Initialize("DiagnosticToggleButton")
DiagnosticToggleButton.Text = "Diagnostic Mode"
MainForm.RootPane.addnode(DiagnosticToggleButton, 10, 570, 150, 20)
LoadData
FillShowAll
UpdateSearchListView
End Sub
Private Sub SearchTextField_TextChanged (Old As String, New As String)
'''Log("TextChanged" & TAB & Old & TAB & New)
If New.EndsWith(" ") Then 'shortcut to clear string
SearchTextField.Text = ""
Return
End If
Dim LookFor() As String = StringToWords(New)
For I = 0 To LookFor.Length - 1
LookFor(I) = " " & LookFor(I) 'add space to start of each word (to prevent mid-word matches)
Next
Show.Initialize
For I = 0 To Searchable.Length - 1
If CountMatchingWords(Searchable(I), LookFor) = LookFor.Length Then
Show.Add(I)
End If
Next
UpdateSearchListView
End Sub
Sub CountMatchingWords(LookIn As String, LookFor() As String) As Int
'both LookIn and LookFor are all lowercase, and start with a space
Dim N As Int = 0
For I = 0 To LookFor.Length - 1
If LookIn.Contains(LookFor(I)) Then
N = N + 1
End If
Next
Return N
End Sub
Sub FillShowAll
Show.Initialize
For I = 0 To Showable.Length - 1
Show.Add(I)
Next
End Sub
Sub UpdateSearchListView
If DiagnosticToggleButton.Selected Then
SearchListView.PrefWidth = 580
Else
SearchListView.PrefWidth = 200
End If
SearchListView.Items.Clear
For I = 0 To Show.Size - 1
If DiagnosticToggleButton.Selected Then
SearchListView.Items.Add(Showable(Show.Get(I)) & TAB & TAB & Searchable(Show.Get(I)))
Else
SearchListView.Items.Add(Showable(Show.Get(I)))
End If
Next
End Sub
Private Sub DiagnosticToggleButton_SelectedChange(Selected As Boolean)
UpdateSearchListView
End Sub
Sub TidyUpSearchString(S As String) As String
Dim ReplaceWithSpaces As String = "-=;:()[]{}<>,./\|'?!#$*&%" 'hmm pretty much every non-alphanumeric
For I = 0 To ReplaceWithSpaces.Length - 1
Dim F As String = ReplaceWithSpaces.CharAt(I)
S = S.Replace(F, " ")
Next
Do While S.Contains(" ")
S = S.Replace(" ", " ")
Loop
Return S.Trim.ToLowerCase
End Sub
Sub StringToWords(S As String) As String()
If S.Trim.Length = 0 Then
Return Array As String()
Else
Return Regex.Split(" ", TidyUpSearchString(S))
End If
End Sub
Sub LoadData
Dim ShowableList As List
Dim SearchableList As List
ShowableList.Initialize
SearchableList.Initialize
Dim Lin() As String = Regex.Split("\n", SampleData) 'split sample data into lines
For L = 0 To Lin.Length - 1
If Lin(L).Trim.Length <> 0 Then
Dim Col() As String = Regex.Split(",", Lin(L)) 'split line into fields / columns
If Col.Length >= 2 Then
Dim FirstLastName As String = Col(0).Trim & " " & Col(1).Trim
ShowableList.Add(FirstLastName.Trim)
SearchableList.Add(" " & TidyUpSearchString(Lin(L))) 'search all words on line
Else
Log("WTF" & TAB & L & TAB & Lin(L))
End If
End If
Next
'now we know how many, can Dim arrays
Dim Showable(ShowableList.Size) As String
Dim Searchable(ShowableList.Size) As String
'copy lists to arrays
For I = 0 To ShowableList.Size - 1
Showable(I) = ShowableList.Get(I)
Searchable(I) = SearchableList.Get(I)
Next
If True Then 'sort if you like
Dim Gap As Int = Showable.Length
Do While True
Gap = Floor(Gap / 1.3)
If Gap < 1 Then
Gap = 1
End If
Dim DoneFlag As Boolean = (Gap = 1)
For I = 0 To Showable.Length - 1 - Gap
If Showable(I).CompareTo(Showable(I + Gap)) > 0 Then
Dim Swapper As String = Showable(I)
Showable(I) = Showable(I + Gap)
Showable(I + Gap) = Swapper
Dim Swapper As String = Searchable(I)
Searchable(I) = Searchable(I + Gap)
Searchable(I + Gap) = Swapper
DoneFlag = False
End If
Next
If DoneFlag Then
Exit
End If
Loop
End If
End Sub
Sub SampleData As String
Return $"Alexander, Jones, Sales, Analyst, Associate, 24, Turkey, Ankara
Maria, Cox, Marketing, Representative, Assistant Manager, 55, Chad, N'Djamena
Tyler, Ross, Sales, Representative, Team Lead, 25, Kazakhstan, Nur-Sultan
Julie, Bennett, Production, Representative, Director, 56, Indonesia, Jakarta
Olivia, Roberts, Quality Control, Developer, Manager, 51, Jordan, Amman
Joyce, Martin, Sales, Developer, Assistant Manager, 53, Australia, Perth
Jennifer, Phillips, Customer Support, Dogsbody, Director, 35, Laos, Vientiane
Brian, Lopez, Customer Support, Analyst, Director, 23, UK, London
Paul, Robinson, Customer Support, Manager, Director, 48, Thailand, Bangkok
Austin, Jackson, Customer Support, Representative, Associate, 25, Niger, Niamey
Brittany, Bell, Sales, Analyst, Associate, 21, Latvia, Riga
Christina, White, Documentation, Manager, Associate, 40, Monaco, Monaco
Jack, Brooks, Software, Analyst, Assistant Manager, 43, Egypt, Cairo
Christopher, Rivera, Software, Manager, Director, 56, Morocco, Rabat
Mary, Bennett, Customer Support, Representative, Team Lead, 53, Micronesia, Palikir
Linda, Morales, Human Resources, Representative, Director, 23, Syria, Damascus
Noah, Miller, Software, Developer, Assistant Manager, 35, Tuvalu, Funafuti
Rachel, Roberts, Quality Control, Coordinator, Director, 27, Saint Vincent and the Grenadines, Kingstown
Ronald, Wilson, Software, Representative, Team Lead, 19, Cuba, Havana
Teresa, Flores, Marketing, Coordinator, Team Lead, 37, Kenya, Nairobi
Edward, Robinson, Production, Dogsbody, Assistant Manager, 20, Slovenia, Ljubljana
Timothy, Hernandez, Human Resources, Manager, Manager, 43, Cambodia, Phnom Penh
Sharon, Reed, Human Resources, Dogsbody, Team Lead, 31, Guinea, Conakry
Melissa, Scott, Marketing, Developer, Director, 56, Vanuatu, Port Vila
Ralph, Evans, Documentation, Analyst, Associate, 39, Libya, Tripoli
Carolyn, Nguyen, Production, Coordinator, Assistant Manager, 33, Tonga, Nuku'alofa
Janice, Richardson, Marketing, Coordinator, Assistant Manager, 36, Cape Verde, Praia
Harold, Perez, Customer Support, Coordinator, Assistant Manager, 21, Ivory Coast, Yamoussoukro
Willie, Fisher, Customer Support, Manager, Team Lead, 46, Montenegro, Podgorica
Susan, Gutierrez, Production, Analyst, Team Lead, 52, Seychelles, Victoria
Kathryn, Clark, Sales, Developer, Manager, 46, Trinidad and Tobago, Port of Spain
Megan, Russell, Documentation, Manager, Director, 34, Germany, Berlin
Donna, Gray, Customer Support, Representative, Team Lead, 42, Burundi, Gitega
Louis, Bell, Marketing, Analyst, Associate, 21, Togo, Lome
John, Gonzalez, Human Resources, Developer, Assistant Manager, 36, Brunei, Bandar Seri Begawan
Peter, Thomas, Human Resources, Analyst, Team Lead, 38, Afghanistan, Kabul
Doris, Hernandez, Software, Analyst, Assistant Manager, 20, Singapore, Singapore
Kelly, Davis, Customer Support, Coordinator, Manager, 49, Rwanda, Kigali
Benjamin, Anderson, Quality Control, Manager, Associate, 29, Antigua, Saint John's
Jerry, Smith, Documentation, Representative, Manager, 30, San Marino, San Marino
Christian, Ward, Sales, Coordinator, Assistant Manager, 36, Venezuela, Caracas
Terry, Jackson, Quality Control, Analyst, Team Lead, 22, Zimbabwe, Harare
Virginia, Foster, Software, Manager, Assistant Manager, 49, Philippines, Manila
Victoria, Flores, Sales, Analyst, Manager, 41, Yemen, Sana'a
James, Rivera, Marketing, Dogsbody, Director, 27, Panama, Panama City
Arthur, Wilson, Production, Analyst, Associate, 27, Japan, Tokyo
Anthony, Johnson, Customer Support, Developer, Team Lead, 26, Fiji, Suva
Danielle, Cooper, Quality Control, Analyst, Director, 37, Maldives, Male
Jean, Clark, Marketing, Analyst, Team Lead, 45, Kuwait, Kuwait City
Bruce, Young, Sales, Representative, Manager, 45, Serbia, Belgrade
Jordan, Myers, Customer Support, Coordinator, Team Lead, 41, Belize, Belmopan
Jeremy, Baker, Human Resources, Developer, Manager, 26, Uruguay, Montevideo
Diana, Martinez, Sales, Coordinator, Assistant Manager, 37, Jamaica, Kingston
Madison, Lewis, Customer Support, Analyst, Associate, 54, Ghana, Accra
Wayne, Campbell, Sales, Analyst, Team Lead, 26, Australia, Brisbane
Sophia, Jones, Human Resources, Manager, Manager, 50, Tunisia, Tunis
Stephen, Watson, Customer Support, Manager, Associate, 34, South Africa, Pretoria
Jane, Rogers, Documentation, Dogsbody, Associate, 41, Czech Republic, Prague
Lori, Wood, Documentation, Coordinator, Team Lead, 37, Bosnia, Sarajevo
Sandra, Butler, Marketing, Analyst, Assistant Manager, 18, Israel, Jerusalem
Natalie, Murphy, Human Resources, Developer, Manager, 35, Australia, Melbourne
Ethan, Phillips, Production, Representative, Manager, 33, El Salvador, San Salvador
Amber, Nelson, Human Resources, Coordinator, Team Lead, 18, Spain, Madrid
Hannah, Cruz, Documentation, Analyst, Associate, 56, Canada, Ottawa
Evelyn, Collins, Sales, Developer, Team Lead, 25, Palestine, Jerusalem
John, Turner, Sales, Analyst, Assistant Manager, 55, USA, Melbourne
Vincent, Carter, Quality Control, Representative, Team Lead, 45, Ecuador, Quito
Samantha, Hill, Software, Representative, Team Lead, 35, Sweden, Stockholm
Lisa, Peterson, Production, Representative, Manager, 54, Wales, Cardiff
Alexis, Harris, Customer Support, Manager, Director, 32, Guatemala, Guatemala City
Frances, Edwards, Quality Control, Manager, Team Lead, 21, Mauritius, Port Louis
Kayla, Thomas, Software, Coordinator, Assistant Manager, 31, India, New Delhi
Barbara, Myers, Production, Manager, Manager, 23, Somalia, Mogadishu
Patrick, Sanders, Software, Representative, Director, 38, Ireland, Dublin
Judy, Evans, Software, Manager, Manager, 37, South Korea, Seoul
Gregory, Murphy, Production, Developer, Assistant Manager, 49, Dominican Republic, Santo Domingo
Laura, Powell, Sales, Analyst, Director, 35, Brazil, Brasilia
Brandon, Young, Production, Representative, Manager, 56, Saint Lucia, Castries
Andrew, Walker, Software, Representative, Associate, 48, Tajikistan, Dushanbe
Debra, Davis, Production, Developer, Team Lead, 25, Mali, Bamako
Alice, Walker, Quality Control, Representative, Assistant Manager, 52, Nicaragua, Managua
Ruth, Taylor, Software, Analyst, Director, 28, Luxembourg, Luxembourg
Helen, Diaz, Sales, Developer, Director, 18, Saudi Arabia, Riyadh
Jacqueline, Thompson, Marketing, Manager, Director, 27, South Sudan, Juba
Dorothy, Hall, Documentation, Coordinator, Director, 39, Congo, Brazzaville
Patricia, Scott, Software, Developer, Manager, 48, Turkmenistan, Ashgabat
Marie, Brooks, Software, Manager, Team Lead, 51, Malaysia, Kuala Lumpur
Jesse, Kelly, Quality Control, Developer, Manager, 45, Colombia, Bogota
Jessica, James, Production, Coordinator, Assistant Manager, 24, Chile, Santiago
Bryan, Ramirez, Documentation, Coordinator, Director, 30, Belgium, Brussels
Gloria, Mitchell, Sales, Analyst, Associate, 51, Australia, Sydney
Alan, Turner, Documentation, Analyst, Director, 34, Guinea-Bissau, Bissau
Cynthia, Lee, Quality Control, Representative, Director, 24, Vatican City, Vatican City
Richard, Cook, Human Resources, Dogsbody, Team Lead, 51, Hungary, Budapest
Joan, Green, Human Resources, Analyst, Associate, 49, Mozambique, Maputo
Ryan, Martin, Human Resources, Coordinator, Associate, 43, Swaziland, Mbabana
Kimberly, Bailey, Documentation, Developer, Assistant Manager, 20, Kosovo, Pristina
Jessica, Anderson, Customer Support, Coordinator, Director, 28, New Zealand, Wellington
Jeffrey, Brown, Documentation, Manager, Assistant Manager, 45, Eritrea, Asmara
Steven, Perry, Documentation, Manager, Director, 44, Samoa, Apia
Matthew, Howard, Sales, Dogsbody, Manager, 56, Namibia, Windhoek
Anna, King, Production, Manager, Associate, 18, United Arab Emirates, Abu Dhabi
Judith, Johnson, Software, Developer, Director, 32, Nigeria, Abuja
Gary, Nelson, Human Resources, Coordinator, Associate, 54, Kyrgyzstan, Bishkek
Thomas, Butler, Quality Control, Developer, Director, 36, Iran, Tehran
Amanda, Mitchell, Documentation, Coordinator, Manager, 44, Guyana, Georgetown
Lawrence, Cruz, Documentation, Manager, Assistant Manager, 34, Iraq, Baghdad
William, Collins, Quality Control, Developer, Team Lead, 28, Burma, Nay Pyi Taw
Carol, Trump, Software, Developer, Associate, 56, Qatar, Doha
Deborah, Long, Human Resources, Coordinator, Manager, 18, Paraguay, Asuncion
Jose, Adams, Sales, Coordinator, Manager, 44, Peru, Lima
Douglas, Williams, Human Resources, Manager, Team Lead, 38, Scotland, Edinburgh
Emma, Morris, Sales, Coordinator, Team Lead, 56, Northern Ireland, Belfast
Andrea, Hill, Documentation, Manager, Team Lead, 49, Sierra Leone, Freetown
Mason, Morales, Marketing, Coordinator, Team Lead, 36, Netherlands, Amsterdam
Raymond, Ramirez, Marketing, Developer, Manager, 33, Azerbaijan, Baku
Keith, Cook, Marketing, Manager, Assistant Manager, 48, Bahrain, Manama
Adam, Watson, Human Resources, Representative, Associate, 27, Sao Tome and Principe, Sao Tome
Gabriel, Thompson, Marketing, Analyst, Assistant Manager, 39, East Timor, Dili
Pamela, Moore, Production, Developer, Assistant Manager, 36, Slovakia, Bratislava
Denise, Edwards, Customer Support, Coordinator, Associate, 33, Barbados, Bridgetown
Elizabeth, Perry, Production, Analyst, Director, 44, Nepal, Kathmandu
Charlotte, Williams, Production, Analyst, Manager, 50, Lithuania, Vilnius
Brenda, Torres, Marketing, Developer, Team Lead, 22, Honduras, Tegucigalpa
Elijah, Russell, Software, Representative, Team Lead, 22, Finland, Helsinki
Juan, Allen, Documentation, Coordinator, Director, 46, Malta, Valletta
Dylan, Gutierrez, Customer Support, Developer, Director, 27, Taiwan, Taipei
Kyle, Jenkins, Software, Dogsbody, Team Lead, 37, Algeria, Algiers
Philip, Sanders, Production, Developer, Manager, 57, Angola, Luanda
Roy, Gonzalez, Customer Support, Manager, Assistant Manager, 32, Georgia, Tbilisi
Kenneth, Sullivan, Human Resources, Dogsbody, Team Lead, 48, Poland, Warsaw
Christine, Williams, Human Resources, Coordinator, Team Lead, 40, Gambia, Banjul
Theresa, Ward, Human Resources, Developer, Manager, 45, Liechtenstein, Vaduz
Samuel, Reed, Customer Support, Analyst, Assistant Manager, 33, Bolivia, Sucre
Frank, Reyes, Customer Support, Manager, Director, 25, Papua New Guinea, Port Moresby
Nicole, Rogers, Marketing, Dogsbody, Director, 54, Dominica, Roseau
Eugene, Sullivan, Documentation, Representative, Manager, 21, Lebanon, Beirut
Carl, Sanchez, Marketing, Representative, Associate, 55, Bhutan, Thimphu
Daniel, Adams, Quality Control, Representative, Director, 53, Equatorial Guinea, Malabo
Aaron, Perez, Customer Support, Coordinator, Team Lead, 22, Mexico, Mexico City
Scott, Barnes, Quality Control, Manager, Associate, 25, North Macedonia, Skopje
Amy, Diaz, Marketing, Coordinator, Director, 49, Oman, Muscat
Shirley, Lopez, Software, Developer, Associate, 31, Moldova, Chisinau
Robert, Parker, Customer Support, Coordinator, Manager, 24, Greece, Athens
Ashley, Hughes, Documentation, Developer, Assistant Manager, 20, Armenia, Yerevan
Mark, Long, Software, Developer, Assistant Manager, 55, Russia, Moscow
Sean, Garcia, Sales, Dogsbody, Manager, 37, Switzerland, Bern
Robert, Parker, Software, Representative, Assistant Manager, 41, China, Beijing
Jason, Fisher, Marketing, Coordinator, Assistant Manager, 41, Djibouti, Djibouti
Michael, Garcia, Customer Support, Analyst, Assistant Manager, 21, Austria, Vienna
Russell, Rodriguez, Software, Analyst, Assistant Manager, 57, Liberia, Monrovia
Donald, Johnson, Customer Support, Manager, Associate, 26, Bangladesh, Dhaka
Zachary, King, Sales, Analyst, Manager, 51, Iceland, Reykjavik
Michelle, Morgan, Human Resources, Representative, Associate, 30, Lesotho, Maseru
Angela, Richardson, Production, Analyst, Director, 18, Ethiopia, Addis Ababa
Kevin, Lee, Customer Support, Coordinator, Manager, 52, USA, Washington
Abigail, Jenkins, Human Resources, Developer, Team Lead, 50, Norway, Oslo
Emily, Ortiz, Human Resources, Manager, Associate, 57, Gabon, Libreville
Randy, Barnes, Production, Representative, Director, 26, Mongolia, Ulaanbaatar
Lauren, Cox, Production, Representative, Assistant Manager, 25, Malawi, Lilongwe
Nathan, Price, Documentation, Dogsbody, Team Lead, 24, Italy, Rome
Joshua, Ross, Quality Control, Manager, Associate, 32, Uganda, Kampala
Janet, Smith, Human Resources, Developer, Associate, 40, USA, Seattle
George, Baker, Customer Support, Representative, Associate, 39, France, Paris
Michael, Allen, Marketing, Coordinator, Team Lead, 43, Solomon Islands, Honiara
Heather, Stewart, Quality Control, Coordinator, Manager, 39, Mauritania, Nouakchott
Karen, White, Documentation, Dogsbody, Associate, 24, Congo, Kinshasa
Marilyn, Ortiz, Sales, Manager, Manager, 41, Pakistan, Islamabad
Diane, Kelly, Production, Manager, Assistant Manager, 44, Comoros, Moroni
Kathleen, Howard, Quality Control, Coordinator, Team Lead, 52, Grenada, Saint George's
Billy, Stewart, Sales, Representative, Assistant Manager, 43, Saint Kitts and Nevis, Basseterre
Sara, Wright, Documentation, Representative, Manager, 55, Marshall Islands, Majuro
Cheryl, Smith, Marketing, Manager, Manager, 47, Cameroon, Yaounde
Bobby, Rodriguez, Human Resources, Manager, Associate, 38, Romania, Bucharest
Betty, Martinez, Production, Manager, Director, 23, Ukraine, Kyiv or Kiev
Justin, Sanchez, Software, Representative, Associate, 56, England, London
Joseph, Morris, Software, Developer, Associate, 18, Andorra, Andorra la Vella
Margaret, Hughes, Production, Developer, Assistant Manager, 19, Portugal, Lisbon
Grace, Gomez, Sales, Manager, Director, 34, Sudan, Khartoum
Catherine, Wright, Production, Representative, Assistant Manager, 19, Kiribati, Tarawa Atoll
Joe, Peterson, Documentation, Dogsbody, Associate, 55, Botswana, Gaborone
Logan, Price, Marketing, Manager, Manager, 38, Sri Lanka, Sri Jayawardenapura Kotte
Jacob, James, Software, Coordinator, Associate, 40, Cyprus, Nicosia
Ann, Miller, Documentation, Analyst, Manager, 27, Senegal, Dakar
Roger, Foster, Human Resources, Analyst, Team Lead, 27, Madagascar, Antananarivo
Gerald, Nguyen, Marketing, Analyst, Associate, 41, Bulgaria, Sofia
Donald, Trump, Marketing, Developer, Team Lead, 51, Haiti, Port au Prince
Katherine, Morgan, Quality Control, Coordinator, Associate, 34, Croatia, Zagreb
David, Cooper, Software, Analyst, Assistant Manager, 50, Vietnam, Hanoi
Nancy, Taylor, Quality Control, Developer, Assistant Manager, 39, Tanzania, Dodoma
Albert, Hall, Documentation, Analyst, Associate, 28, Palau, Melekeok
Jonathan, Lewis, Production, Representative, Manager, 20, Central African Republic, Bangui
Martha, Gray, Marketing, Coordinator, Manager, 18, Albania, Tirana
Julia, Green, Human Resources, Representative, Team Lead, 39, Zambia, Lusaka
Henry, Carter, Quality Control, Dogsbody, Director, 57, Uzbekistan, Tashkent
Walter, Harris, Sales, Coordinator, Director, 20, Costa Rica, San Jose
Eric, Brown, Quality Control, Representative, Assistant Manager, 29, Denmark, Copenhagen
Beverly, Bailey, Marketing, Manager, Associate, 18, North Korea, Pyongyang
Rebecca, Torres, Quality Control, Developer, Manager, 47, Suriname, Paramaribo
Nicholas, Reyes, Sales, Analyst, Director, 28, Estonia, Tallinn
Dennis, Powell, Marketing, Developer, Associate, 48, Belarus, Minsk
Sarah, Moore, Quality Control, Representative, Manager, 40, Australia, Canberra
Larry, Wood, Quality Control, Representative, Manager, 28, Argentina, Buenos Aires
Isabella, Gomez, Quality Control, Developer, Director, 53, Benin, Porto Novo
Stephanie, Campbell, Sales, Manager, Director, 47, Bahamas, Nassau
"$
End Sub