Skip to content

Commit 7b27a49

Browse files
committedSep 15, 2019
Fix column sort
1 parent a4030c3 commit 7b27a49

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
 

‎Windows/Main.cs

+79
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections;
23
using System.Collections.Generic;
34
using System.ComponentModel;
45
using System.Data;
@@ -32,6 +33,52 @@ public enum Worker
3233
Invalid = -1
3334
}
3435

36+
private class CustomSorter : IComparer, IComparer<OLVListItem>
37+
{
38+
readonly OLVColumn column;
39+
readonly SortOrder order;
40+
41+
public CustomSorter(OLVColumn column, SortOrder order)
42+
{
43+
this.column = column;
44+
this.order = order;
45+
}
46+
47+
public int Compare(object x, object y)
48+
{
49+
if (x is OLVListItem && y is OLVListItem)
50+
return Compare(x as OLVListItem, y as OLVListItem);
51+
return 0;
52+
}
53+
54+
public int Compare(OLVListItem x, OLVListItem y)
55+
{
56+
switch (column.AspectName)
57+
{
58+
case "versionString":
59+
return ((Title)x.RowObject).version.CompareTo(((Title)y.RowObject).version) * (order == SortOrder.Ascending ? 1 : -1);
60+
case "latestVersionString":
61+
return ((Title)x.RowObject).latestVersion.CompareTo(((Title)y.RowObject).latestVersion) * (order == SortOrder.Ascending ? 1 : -1);
62+
case "applicationVersionString":
63+
return ((Title)x.RowObject).applicationVersion.CompareTo(((Title)y.RowObject).applicationVersion) * (order == SortOrder.Ascending ? 1 : -1);
64+
case "filesizeString":
65+
return ((Title)x.RowObject).filesize.CompareTo(((Title)y.RowObject).filesize) * (order == SortOrder.Ascending ? 1 : -1);
66+
case "displayVersion":
67+
if (!Version.TryParse(((Title)x.RowObject).displayVersion, out Version verx))
68+
{
69+
verx = new Version();
70+
}
71+
if (!Version.TryParse(((Title)y.RowObject).displayVersion, out Version very))
72+
{
73+
very = new Version();
74+
}
75+
return verx.CompareTo(very) * (order == SortOrder.Ascending ? 1 : -1);
76+
}
77+
78+
return 0;
79+
}
80+
}
81+
3582
private List<Title> titles = new List<Title>();
3683

3784
public Main()
@@ -150,6 +197,38 @@ private void Main_Load(object sender, EventArgs e)
150197
column.Item1.Width = column.Item2;
151198
}
152199

200+
objectListView.CustomSorter = delegate (OLVColumn column, SortOrder order)
201+
{
202+
switch (column.AspectName)
203+
{
204+
case "versionString":
205+
case "latestVersionString":
206+
case "applicationVersionString":
207+
case "filesizeString":
208+
objectListView.ListViewItemSorter = new CustomSorter(column, order);
209+
break;
210+
case "displayVersion":
211+
objectListView.ListViewItemSorter = new CustomSorter(column, order);
212+
break;
213+
case "titleID":
214+
case "baseTitleID":
215+
case "titleName":
216+
case "systemUpdateString":
217+
case "systemVersionString":
218+
case "masterkeyString":
219+
case "filename":
220+
case "typeString":
221+
case "distribution":
222+
case "structureString":
223+
case "signatureString":
224+
case "permissionString":
225+
case "error":
226+
default:
227+
objectListView.ListViewItemSorter = new ColumnComparer(column, order);
228+
break;
229+
}
230+
};
231+
153232
int index = 0;
154233
foreach (ArrayOfTitle history in Common.History.Default.Titles)
155234
{

0 commit comments

Comments
 (0)
Please sign in to comment.