private void _searchTimer_Tick(object sender, EventArgs e) { var oldIso = _model.ISOCode; var typedText = _searchText.Text.Trim(); if (typedText == _lastSearchedForText) { return; } _lastSearchedForText = typedText; _listView.SuspendLayout(); _listView.Items.Clear(); _listView.SelectedIndices.Clear(); var toShow = new List <ListViewItem>(); if (_searchText.Text == "?") { var description = L10NSharp.LocalizationManager.GetString("LanguageLookup.UnlistedLanguage", "Unlisted Language"); List <string> names = new List <string>(new string[] { description }); LanguageInfo unlistedLanguage = new LanguageInfo() { Code = "qaa", Country = "", Names = names }; ListViewItem item = new ListViewItem(description); item.SubItems.Add("qaa"); item.Tag = unlistedLanguage; item.Selected = true; _listView.Items.Add(item); } else { var itemSelected = false; foreach (LanguageInfo lang in _model.GetMatchingLanguages(typedText)) { ListViewItem item = new ListViewItem(lang.Names[0]); item.SubItems.Add(lang.Code); item.SubItems.Add(lang.Country); item.SubItems.Add(string.Join(", ", lang.Names.Skip(1))); item.SubItems.Add(lang.Country); item.Tag = lang; toShow.Add(item); // if (!itemSelected && typedText.Length > 1 && // (lang.Code.ToLower() == typedText || lang.Names[0].ToLower().StartsWith(typedText.ToLower()))) if (!itemSelected) { item.Selected = true; itemSelected = true; //we only want to select the first one } } if (!itemSelected) { _model.LanguageInfo = null; //_desiredLanguageDisplayName.Text = _searchText.Text; } _desiredLanguageDisplayName.Enabled = itemSelected; _listView.Items.AddRange(toShow.ToArray()); } _listView.ResumeLayout(); // if (_listView.Items.Count > 0) // { // _listView.SelectedIndices.Add(0); // } if(_model.ISOCode != oldIso) UpdateReadiness(); }
private void _searchTimer_Tick(object sender, EventArgs e) { var oldIso = _model.ISOCode; var typedText = _searchText.Text.Trim(); if (typedText == _lastSearchedForText) { return; } _lastSearchedForText = typedText; _listView.SuspendLayout(); _listView.Items.Clear(); _listView.SelectedIndices.Clear(); var toShow = new List <ListViewItem>(); var multipleCountriesLabel = LocalizationManager.GetString("LanguageLookup.CountryCount", "{0} Countries", "Shown when there are multiple countries and it is just confusing to list them all."); if (_searchText.Text == "?") { var description = L10NSharp.LocalizationManager.GetString("LanguageLookup.UnlistedLanguage", "Unlisted Language"); List <string> names = new List <string>(new string[] { description }); LanguageInfo unlistedLanguage = new LanguageInfo() { Code = "qaa", Country = "", Names = names }; ListViewItem item = new ListViewItem(description); item.SubItems.Add("qaa"); item.Tag = unlistedLanguage; item.Selected = true; _listView.Items.Add(item); } else { var itemSelected = false; foreach (LanguageInfo lang in _model.GetMatchingLanguages(typedText)) { var mainName = string.IsNullOrEmpty(lang.LocalName) ? lang.Names[0] : lang.LocalName; var item = new ListViewItem(mainName); item.SubItems.Add(lang.Code); // Users were having problems when they looked up things like "English" and were presented with "United Arab Emirates" // and such, as these colonial languages are spoken in so many countries. So this just displays the number of countries. var country = lang.Country; if (lang.CountryCount > 2) // 3 or more was chosen because generally 2 languages fit in the space allowed { country = string.Format(multipleCountriesLabel, lang.CountryCount); } item.SubItems.Add(country); var numberOfNamesAlreadyUsed = string.IsNullOrEmpty(lang.LocalName) ? 1 : 0; item.SubItems.Add(string.Join(", ", lang.Names.Skip(numberOfNamesAlreadyUsed))); item.Tag = lang; toShow.Add(item); // if (!itemSelected && typedText.Length > 1 && // (lang.Code.ToLower() == typedText || lang.Names[0].ToLower().StartsWith(typedText.ToLower()))) if (!itemSelected) { item.Selected = true; itemSelected = true; //we only want to select the first one } } if (!itemSelected) { _model.LanguageInfo = null; //_desiredLanguageDisplayName.Text = _searchText.Text; } _desiredLanguageDisplayName.Enabled = itemSelected; _listView.Items.AddRange(toShow.ToArray()); //scroll down to the selected item if (_listView.SelectedItems.Count > 0) { _listView.SelectedItems[0].EnsureVisible(); } } _listView.ResumeLayout(); // if (_listView.Items.Count > 0) // { // _listView.SelectedIndices.Add(0); // } if(_model.ISOCode != oldIso) UpdateReadiness(); }