using System; using System.Windows.Forms; using PDFPatcher.Common; namespace PDFPatcher { sealed class ListViewItemComparer : System.Collections.IComparer { ///获取或指定排序列的值。 public int Col { get; } ///获取或指定是否使用智能排序。 public bool UseSmartSort { get; } ///获取或指定列表排序的方式。 public SortOrder SortOrder { get; } public ListViewItemComparer() { Col = 0; } public ListViewItemComparer(int column) { Col = column; } public ListViewItemComparer(int column, bool useSmartSort) { Col = column; UseSmartSort = useSmartSort; SortOrder = SortOrder.Ascending; } public ListViewItemComparer(int column, bool useSmartSort, SortOrder sortOrder) { Col = column; UseSmartSort = useSmartSort; SortOrder = sortOrder; } #region IComparer 成员 int System.Collections.IComparer.Compare(object x, object y) { if (SortOrder == SortOrder.None) { return 0; } var a = ((ListViewItem)x).SubItems[Col].Text; var b = ((ListViewItem)y).SubItems[Col].Text; int r = UseSmartSort ? FileHelper.NumericAwareComparePath(a, b) : String.Compare(a, b); return (SortOrder == SortOrder.Ascending) ? r : -r; } #endregion } sealed class OlvColumnSmartComparer(BrightIdeasSoftware.OLVColumn column, SortOrder sortOrder) : System.Collections.IComparer { ///获取排序列。 public BrightIdeasSoftware.OLVColumn Column { get; } = column; ///获取列表排序的方式。 public SortOrder SortOrder { get; } = sortOrder; #region IComparer 成员 int System.Collections.IComparer.Compare(object x, object y) { if (SortOrder == SortOrder.None) { return 0; } var a = Column.GetStringValue(x); var b = Column.GetStringValue(y); int r = FileHelper.NumericAwareComparePath(a, b); return (SortOrder == SortOrder.Ascending) ? r : -r; } #endregion } }