/// <summary> /// Compares two objects and returns a value indicating whether one is less than, equal to or greater than the other. /// </summary> /// <param name="x">First argument.</param> /// <param name="y">Second argument.</param> /// <returns>a value indicating whether one is less than, equal to or greater than the other.</returns> public int Compare(object obj0, object obj1) { IListItem item0 = (IListItem)obj0, item1 = (IListItem)obj1; // If both objects are ThumbnailListItems - check for file/folder comparison. // Folders always should be first in sort order. ThumbnailListItem thumbnailListItem0 = obj0 as ThumbnailListItem, thumbnailListItem1 = obj1 as ThumbnailListItem; if (thumbnailListItem0 != null && thumbnailListItem1 != null) { if (thumbnailListItem0.Pidl.Type == PidlType.File && thumbnailListItem1.Pidl.Type == PidlType.Folder) { return(_sortAscending ? 1 : -1); } else if (thumbnailListItem0.Pidl.Type == PidlType.Folder && thumbnailListItem1.Pidl.Type == PidlType.File) { return(_sortAscending ? -1 : 1); } } string str0 = item0.GetText(_textInfoId), str1 = item1.GetText(_textInfoId); int result; if (_textInfoId == ThumbnailListItem.TextInfoIdFileSize) { try { int int0 = StringToInt(str0); int int1 = StringToInt(str1); if (int0 > int1) { result = 1; } else if (int0 < int1) { result = -1; } else { result = 0; } } catch { result = str0.CompareTo(str1); } } else if (_textInfoId == ThumbnailListItem.TextInfoIdCreationDate) { try { System.DateTime date0 = System.DateTime.Parse(str0, CultureInfo.CurrentCulture), date1 = System.DateTime.Parse(str1, CultureInfo.CurrentCulture); result = date0.CompareTo(date1); } catch { result = str0.CompareTo(str1); } } else { result = str0.CompareTo(str1); } if (_sortAscending) { return(result); } else { return(result * -1); } }