internal void SortRootRawItems( SortDescriptionInfo[] sortDescriptionInfos, List<RawItem> globalRawItems ) { Debug.Assert( this.IsBottomLevel ); int itemCount = m_sortedRawItems.Count; if( itemCount == 0 ) return; int[] indexes; indexes = new int[ itemCount + 1 ]; for( int i = 0; i < itemCount; i++ ) { indexes[ i ] = m_sortedRawItems[ i ].Index; } // "Weak heap sort" sort array[0..NUM_ELEMENTS-1] to array[1..NUM_ELEMENTS] DataGridCollectionViewSort collectionViewSort = new DataGridCollectionViewSort( indexes, sortDescriptionInfos ); collectionViewSort.Sort( itemCount ); int index = 0; for( int i = 1; i <= itemCount; i++ ) { RawItem newRawItem = globalRawItems[ indexes[ i ] ]; newRawItem.SetSortedIndex( index ); m_sortedRawItems[ index ] = newRawItem; index++; } }
public override int Compare(int xDataIndex, int yDataIndex) { ListSortDirection lastSortDirection = ListSortDirection.Ascending; if (m_sortDescriptionInfos != null) { int result = 0; int count = m_sortDescriptionInfos.Length; for (int i = 0; i < count; i++) { SortDescriptionInfo sortDescriptionInfo = m_sortDescriptionInfos[i]; lastSortDirection = sortDescriptionInfo.SortDirection; if (sortDescriptionInfo.Property == null) { continue; } IComparer sortComparer = sortDescriptionInfo.SortComparer; DataStore dataStore = sortDescriptionInfo.DataStore; if (sortComparer != null) { result = sortComparer.Compare(dataStore.GetData(xDataIndex), dataStore.GetData(yDataIndex)); } else { result = dataStore.Compare(xDataIndex, yDataIndex); } if (result != 0) { if (lastSortDirection == ListSortDirection.Descending) { result = -result; } return(result); } } } if (lastSortDirection == ListSortDirection.Descending) { return(yDataIndex - xDataIndex); } return(xDataIndex - yDataIndex); }
public bool IsReverseOf( SortDescriptionInfo sortDescriptionInfo ) { if( sortDescriptionInfo.m_property == m_property ) { switch( sortDescriptionInfo.m_direction ) { case ListSortDirection.Ascending: return m_direction == ListSortDirection.Descending; case ListSortDirection.Descending: return m_direction == ListSortDirection.Ascending; } } return false; }
public bool IsReverseOf(SortDescriptionInfo sortDescriptionInfo) { if (sortDescriptionInfo.m_property == m_property) { switch (sortDescriptionInfo.m_direction) { case ListSortDirection.Ascending: return(m_direction == ListSortDirection.Descending); case ListSortDirection.Descending: return(m_direction == ListSortDirection.Ascending); } } return(false); }
public override bool Equals(object obj) { SortDescriptionInfo sortDescriptionInfo = obj as SortDescriptionInfo; if (sortDescriptionInfo == null) { return(false); } if ((sortDescriptionInfo.m_direction == m_direction) && (sortDescriptionInfo.m_property == m_property)) { return(true); } return(false); }
internal void SortItems( SortDescriptionInfo[] sortDescriptionInfos, GroupSortComparer[] groupSortComparers, int level, List<RawItem> globalRawItems, DataGridCollectionViewGroup newSortedGroup ) { int itemCount = this.ItemCount; if( itemCount == 0 ) return; ObservableCollection<object> groupItems = this.ProtectedItems; if( this.IsBottomLevel ) { int[] indexes; indexes = new int[ itemCount + 1 ]; for( int i = 0; i < itemCount; i++ ) { indexes[ i ] = m_sortedRawItems[ i ].Index; } // "Weak heap sort" sort array[0..NUM_ELEMENTS-1] to array[1..NUM_ELEMENTS] DataGridCollectionViewSort collectionViewSort = new DataGridCollectionViewSort( indexes, sortDescriptionInfos ); collectionViewSort.Sort( itemCount ); int index = 0; for( int i = 1; i <= itemCount; i++ ) { newSortedGroup.InsertRawItem( index, globalRawItems[ indexes[ i ] ] ); index++; } } else { int[] indexes; indexes = new int[ itemCount + 1 ]; for( int i = 0; i < itemCount; i++ ) { indexes[ i ] = i; } // "Weak heap sort" sort array[0..NUM_ELEMENTS-1] to array[1..NUM_ELEMENTS] DataGridCollectionViewGroupSort collectionViewSort = new DataGridCollectionViewGroupSort( indexes, groupSortComparers[ level ], this ); collectionViewSort.Sort( itemCount ); int index = 0; level++; for( int i = 1; i <= itemCount; i++ ) { DataGridCollectionViewGroup oldGroup = ( DataGridCollectionViewGroup )groupItems[ indexes[ i ] ]; DataGridCollectionViewGroup newGroup = new DataGridCollectionViewGroup( oldGroup, newSortedGroup ); // Sort sub items oldGroup.SortItems( sortDescriptionInfos, groupSortComparers, level, globalRawItems, newGroup ); newSortedGroup.InsertGroup( index, newGroup ); index++; } } }
public DataGridCollectionViewSort( int[] dataIndexArray, SortDescriptionInfo[] sortDescriptionInfos ) : base( dataIndexArray ) { m_sortDescriptionInfos = sortDescriptionInfos; }