mirror of https://github.com/2dust/v2rayN
Simple and refined sorting effect
parent
a81254dfff
commit
be7d76947b
|
@ -19,8 +19,17 @@ namespace v2rayN.Base
|
||||||
int doIntSort = Sorting;
|
int doIntSort = Sorting;
|
||||||
if (doIntSort > 0) // Tag will be number
|
if (doIntSort > 0) // Tag will be number
|
||||||
{
|
{
|
||||||
ulong.TryParse(l1.SubItems[Column].Tag?.ToString(), out ulong fl1);
|
var data1 = l1.SubItems[Column].Tag;
|
||||||
ulong.TryParse(l2.SubItems[Column].Tag?.ToString(), out ulong fl2);
|
var data2 = l2.SubItems[Column].Tag;
|
||||||
|
if(data1 == null & data2 == null)
|
||||||
|
{
|
||||||
|
data1 = l1.SubItems[Column].Text;
|
||||||
|
data2 = l2.SubItems[Column].Text;
|
||||||
|
System.Diagnostics.Debug.WriteLine("Tag missing?");
|
||||||
|
}
|
||||||
|
|
||||||
|
ulong.TryParse(data1.ToString(), out ulong fl1);
|
||||||
|
ulong.TryParse(data2.ToString(), out ulong fl2);
|
||||||
|
|
||||||
if (doIntSort == 1)
|
if (doIntSort == 1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1666,30 +1666,30 @@ namespace v2rayN.Forms
|
||||||
tsbOptionSetting_Click(toolSslRouting, null);
|
tsbOptionSetting_Click(toolSslRouting, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int lastSortedColIndex = -1;
|
||||||
|
private bool lastSortedColDirection = false;
|
||||||
private void lvServers_ColumnClick(object sender, ColumnClickEventArgs e)
|
private void lvServers_ColumnClick(object sender, ColumnClickEventArgs e)
|
||||||
{
|
{
|
||||||
Sorter s = (Sorter)lvServers.ListViewItemSorter;
|
Sorter s = (Sorter)lvServers.ListViewItemSorter;
|
||||||
s.Column = e.Column;
|
s.Column = e.Column;
|
||||||
|
|
||||||
int doIntSort;
|
int doIntSort;
|
||||||
if (lvServers.Columns[e.Column].Tag?.ToString() == Global.sortMode.Numeric.ToString()) // 数字正序
|
bool isNum = lvServers.Columns[e.Column].Tag?.ToString() == Global.sortMode.Numeric.ToString();
|
||||||
|
if (lastSortedColIndex < 0 // 首次
|
||||||
|
|| (lastSortedColIndex >= 0 && lastSortedColIndex != e.Column) // 排序了其他列
|
||||||
|
|| (lastSortedColIndex == e.Column && !lastSortedColDirection) // 已排序
|
||||||
|
)
|
||||||
{
|
{
|
||||||
lvServers.Columns[e.Column].Tag = Global.sortMode.NumericB.ToString();
|
lastSortedColDirection = true;
|
||||||
doIntSort = 1;
|
doIntSort = isNum ? 1 : -1; // 正序
|
||||||
}
|
}
|
||||||
else if (lvServers.Columns[e.Column].Tag?.ToString() == Global.sortMode.NumericB.ToString()) // 数字倒序
|
else
|
||||||
{
|
{
|
||||||
lvServers.Columns[e.Column].Tag = Global.sortMode.Numeric.ToString();
|
lastSortedColDirection = false;
|
||||||
doIntSort = 2;
|
doIntSort = isNum ? 2 : -2; // 倒序
|
||||||
}
|
|
||||||
else // 非数字
|
|
||||||
{
|
|
||||||
bool bGo = bool.TryParse(lvServers.Columns[e.Column].Tag?.ToString(), out bool bOk);
|
|
||||||
// 首个转换将失败,如果Tag是null或其他。
|
|
||||||
bool flag = bOk ? bGo : false;
|
|
||||||
lvServers.Columns[e.Column].Tag = !flag; // 首次则赋值true。
|
|
||||||
doIntSort = flag ? -1 : -2; // -1正序 -2倒序
|
|
||||||
}
|
}
|
||||||
|
lastSortedColIndex = e.Column;
|
||||||
|
|
||||||
s.Sorting = doIntSort;
|
s.Sorting = doIntSort;
|
||||||
|
|
||||||
lvServers.Sort();
|
lvServers.Sort();
|
||||||
|
|
|
@ -162,7 +162,6 @@ namespace v2rayN
|
||||||
public enum sortMode
|
public enum sortMode
|
||||||
{
|
{
|
||||||
Numeric,
|
Numeric,
|
||||||
NumericB,
|
|
||||||
// More, like natural numbers, string length, visual length, etc.
|
// More, like natural numbers, string length, visual length, etc.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue