/// <summary> /// This method is used to load the VisibleData collection with the proper set of sequences. /// </summary> public void ReloadSequences() { INotificationVisualizer wait = Resolve <INotificationVisualizer>(); Debug.Assert(wait != null); using (wait.BeginWait("Refreshing View", "Loading Data")) { _groupedList.Clear(); // No entities? if (GroupedEntities == null) { if (_taxonomyJumper != null) { _taxonomyJumper.RaiseCloseRequest(); } VisibleData.Clear(); return; } // Add all the entries var seqCollection = new AlignmentEntityViewModel[GroupedEntities.Count]; Parallel.For(0, GroupedEntities.Count, i => seqCollection[i] = new AlignmentEntityViewModel(this, GroupedEntities[i], i)); // Push it to the UI VisibleData.Clear(); foreach (var item in seqCollection) { VisibleData.Add(item); } // Add in the proper line numbers var sequences = VisibleData.Where(vd => vd.IsSequence).ToList(); Parallel.For(0, sequences.Count, i => { sequences[i].DisplayIndex = i + 1; }); // If the taxonomy view is alive, refresh it. if (_taxonomyJumper != null) { if (IsGrouped) { _taxonomyJumper.ChangedGrouping(_data.Entities, Options.MinGroupingRange); } else { _taxonomyJumper.RaiseCloseRequest(); } } } }
/// <summary> /// This is invoked when the user selects a "jump" in the taxonomy view /// </summary> /// <param name="e">Name of taxonomy group to jump to</param> private void OnJumpToTaxonomyGroup(TaxonomyJumpEventArgs e) { var groupHeader = VisibleData.FirstOrDefault(vd => vd.IsGroupHeader && vd.Header == e.Name); if (groupHeader != null) { // De-select everything VisibleData.Where(vd => vd.IsSelected).ForEach(vd => vd.IsSelected = false); // Reposition and select this specific grouping TopRow = groupHeader.Position; if (e.SelectRows) { Enumerable.Range(groupHeader.Position + 1, TotalRows - groupHeader.Position - 1).TakeWhile( i => VisibleData[i].IsSequence).Select(i => VisibleData[i]).ForEach(vd => vd.IsSelected = true); } } }