private async void SaveSearch_Click(object sender, RoutedEventArgs e) { if (String.IsNullOrWhiteSpace(NewSearch.Species)) { return; } try { NewSearch.Order = ListSearches.Where(sc => sc.Group == NewSearch.Group).Max(sc => sc.Order) + 100; } catch (InvalidOperationException) // no entries for .Max - ignore { } IsLoading = true; try { StatusText = $"Loading {NewSearch.Species}..."; await arkReaderWild.EnsureSpeciesIsLoaded(NewSearch.Species); StatusText = $"Ready"; } finally { IsLoading = false; } ListSearches.Add(NewSearch); NewSearch = null; NewSearchActive = false; CreateSearchAvailable = true; MarkSearchesChanged(); }
protected override void SetListSearches() { base.SetListSearches(); IFieldInfo title = GetFieldInfo("Title"); ListSearches.Add(title, new TwoFieldListSearch(title, GetFieldInfo("KeyWord"))); }
private void CreateSearch_Click(object sender, RoutedEventArgs e) { NewSearch = new SearchCriteria(); NewSearchActive = true; CreateSearchAvailable = false; speciesCombo.ItemsSource = arkReader.AllSpecies; groupsCombo.ItemsSource = ListSearches.Select(sc => sc.Group).Distinct().OrderBy(g => g).ToArray(); }
protected override void SetListSearches() { base.SetListSearches(); IFieldInfo nameField = GetFieldInfo("Name"); MultipleFieldListSearch search = new MultipleFieldListSearch( nameField, GetFieldInfo("Mobile"), GetFieldInfo("Weixin")); ListSearches.Add(nameField, search); }
void IDropTarget.Drop(IDropInfo dropInfo) { var sourceItem = (SearchCriteria)dropInfo.Data; var targetItem = (SearchCriteria)dropInfo.TargetItem; var ii = dropInfo.InsertIndex; var ip = dropInfo.InsertPosition; // Change source item's group sourceItem.Group = targetItem.Group; // Try to figure out the other item to insert between, or pick a boundary var options = ListSearches .Where(sc => sc != sourceItem) .Where(sc => sc.Group == targetItem.Group) .OrderBy(sc => sc.Order) .ToArray(); // Make no changes if it was dropped on itself if (options.Length == 0) { return; } var above = options.Where(sc => sc.Order < targetItem.Order).OrderByDescending(sc => sc.Order).FirstOrDefault(); var below = options.Where(sc => sc.Order > targetItem.Order).OrderBy(sc => sc.Order).FirstOrDefault(); var aboveOrder = (above == null) ? options.Min(sc => sc.Order) - 1 : above.Order; var belowOrder = (below == null) ? options.Max(sc => sc.Order) + 1 : below.Order; // Update the order to be mid-way between either above or below, based on drag insert position sourceItem.Order = (targetItem.Order + (ip.HasFlag(RelativeInsertPosition.AfterTargetItem) ? belowOrder : aboveOrder)) / 2; // Renumber the results var orderedSearches = ListSearches .OrderBy(sc => sc.Group) .ThenBy(sc => sc.Order) .ToArray(); for (var i = 0; i < orderedSearches.Length; i++) { orderedSearches[i].Order = i; } // Force binding update CollectionViewSource.GetDefaultView(searchesList.ItemsSource).Refresh(); // Save list MarkSearchesChanged(); }
private void SetupTamedSearches() { var wildcard = new string[] { null }; var speciesList = wildcard.Concat(arkReaderTamed.AllSpecies).ToList(); var orderList = Enumerable.Range(0, speciesList.Count); var searches = speciesList.Zip(orderList, (species, order) => new SearchCriteria { Species = species, Order = order }); ListSearches.Clear(); foreach (var search in searches) { ListSearches.Add(search); } }
private void RemoveSearch_Click(object sender, RoutedEventArgs e) { if (ShowTames) { return; } var button = sender as Button; if (button?.DataContext is SearchCriteria search) { ListSearches.Remove(search); } UpdateCurrentSearch(); MarkSearchesChanged(); }
private void SaveSearch_Click(object sender, RoutedEventArgs e) { if (String.IsNullOrWhiteSpace(NewSearch.Species)) { return; } try { NewSearch.Order = ListSearches.Where(sc => sc.Group == NewSearch.Group).Max(sc => sc.Order) + 100; } catch (InvalidOperationException) // no entries for .Max - ignore { } ListSearches.Add(NewSearch); NewSearch = null; NewSearchActive = false; CreateSearchAvailable = true; MarkSearchesChanged(); }
private void LoadSavedSearches() { if (!String.IsNullOrWhiteSpace(Properties.Settings.Default.SavedSearches)) { Collection <SearchCriteria> searches; try { searches = JsonConvert.DeserializeObject <Collection <SearchCriteria> >(Properties.Settings.Default.SavedSearches); } catch (Exception e) { Console.WriteLine("Exception reading saved searches: " + e.ToString()); return; } ListSearches.Clear(); foreach (var search in searches) { ListSearches.Add(search); } } }
void IDropTarget.Drop(IDropInfo dropInfo) { var sourceItem = (SearchCriteria)dropInfo.Data; var targetItem = (SearchCriteria)dropInfo.TargetItem; var ii = dropInfo.InsertIndex; var ip = dropInfo.InsertPosition; // Change source item's group sourceItem.Group = targetItem.Group; // Try to figure out the other item to insert between, or pick a boundary var options = ListSearches .OrderBy(sc => sc.Group).ThenBy(sc => sc.Order).ThenBy(sc => sc.Species).ThenBy(sc => sc.MinLevel).ThenBy(sc => sc.MaxLevel) .Where(sc => (ip == RelativeInsertPosition.BeforeTargetItem) ? sc.Order <targetItem.Order : sc.Order> targetItem.Order).ToArray(); double bound; if (options.Length > 0) { var otherItem = (ip == RelativeInsertPosition.BeforeTargetItem) ? options.Last() : options.First(); bound = otherItem.Order; } else { bound = targetItem.Order + ((ip == RelativeInsertPosition.BeforeTargetItem) ? -100 : 100); } // Update the order to be mid-way between the two sourceItem.Order = (targetItem.Order + bound) / 2; // Force binding update CollectionViewSource.GetDefaultView(searchesList.ItemsSource).Refresh(); // Save list MarkSearchesChanged(); }
private void SaveSearch_Click(object sender, RoutedEventArgs e) { if (String.IsNullOrWhiteSpace(NewSearch.Species)) { return; } List <String> NewSearchList = new List <String>(AllSpecies.Where(species => species.Contains(NewSearch.Species))); SearchCriteria tempSearch; int order = 100; //If we lose our selection default back to Shopping List try { Properties.Settings.Default.LastGroup = groupsCombo.Text; } catch { Properties.Settings.Default.LastGroup = "Shopping List"; } //Set and save property Properties.Settings.Default.GroupSearch = NewSearch.GroupSearch; Properties.Settings.Default.Save(); if (NewSearchList.Count == 0 && !NewSearch.GroupSearch) // No matches { //Trigger default values so the user knows we did search to match NewSearch = null; tempSearch = null; NewSearchActive = false; CreateSearchAvailable = true; return; } ObservableCollection <SearchCriteria> tempListSearch = new ObservableCollection <SearchCriteria>(ListSearches.Where(sc => sc.Group == (String)groupsCombo.SelectedValue)); if (tempListSearch.Count > 0) { order = (int)ListSearches.Where(sc => sc.Group == NewSearch.Group).Max(sc => sc.Order) + 100; } //Check for group based search if (NewSearch.GroupSearch) { tempSearch = new SearchCriteria(NewSearch); tempSearch.Species = NewSearch.Species; tempSearch.Order = order; //Sort order tempSearch.GroupSearch = NewSearch.GroupSearch; ListSearches.Add(tempSearch); } else { try { foreach (String newDino in NewSearchList) { if (tempListSearch.Count == 0 || tempListSearch.Where(dino => dino.Species == newDino).Count() == 0) { tempSearch = new SearchCriteria(NewSearch); tempSearch.Species = newDino; tempSearch.Order = order; tempSearch.GroupSearch = NewSearch.GroupSearch; ListSearches.Add(tempSearch); order += 100; } } } catch (InvalidOperationException) // no entries for .Max - ignore { } } NewSearch = null; tempSearch = null; NewSearchActive = false; CreateSearchAvailable = true; MarkSearchesChanged(); }