diff options
Diffstat (limited to 'UVtools.GUI/Controls/ListViewColumnSorter.cs')
-rw-r--r-- | UVtools.GUI/Controls/ListViewColumnSorter.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/UVtools.GUI/Controls/ListViewColumnSorter.cs b/UVtools.GUI/Controls/ListViewColumnSorter.cs new file mode 100644 index 0000000..de0d344 --- /dev/null +++ b/UVtools.GUI/Controls/ListViewColumnSorter.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace UVtools.GUI.Controls +{ + /// <summary> + /// This class is an implementation of the 'IComparer' interface. + /// </summary> + public class ListViewColumnSorter : IComparer + { + /// <summary> + /// Case insensitive comparer object + /// </summary> + private readonly CaseInsensitiveComparer _objectCompare; + + /// <summary> + /// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0'). + /// </summary> + public int SortColumn { set; get; } + + /// <summary> + /// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending'). + /// </summary> + public SortOrder Order { set; get; } + + /// <summary> + /// Class constructor. Initializes various elements + /// </summary> + public ListViewColumnSorter() + { + // Initialize the column to '0' + SortColumn = 0; + + // Initialize the sort order to 'none' + Order = SortOrder.None; + + // Initialize the CaseInsensitiveComparer object + _objectCompare = new CaseInsensitiveComparer(); + } + + /// <summary> + /// This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison. + /// </summary> + /// <param name="x">First object to be compared</param> + /// <param name="y">Second object to be compared</param> + /// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns> + public int Compare(object x, object y) + { + // Cast the objects to be compared to ListViewItem objects + var listviewX = (ListViewItem)x; + var listviewY = (ListViewItem)y; + + // Compare the two items + var compareResult = _objectCompare.Compare(listviewX.SubItems[SortColumn].Text, listviewY.SubItems[SortColumn].Text); + + switch (Order) + { + // Calculate correct return value based on object comparison + case SortOrder.Ascending: + // Ascending sort is selected, return normal result of compare operation + return compareResult; + case SortOrder.Descending: + // Descending sort is selected, return negative result of compare operation + return (-compareResult); + default: + // Return '0' to indicate they are equal + return 0; + } + } + } +} |