add sort by title

This commit is contained in:
2dust
2022-04-24 16:23:30 +08:00
parent 98170488d5
commit a14d36ef77
3 changed files with 109 additions and 19 deletions

View File

@@ -72,6 +72,7 @@
this.lvProxies.Name = "lvProxies"; this.lvProxies.Name = "lvProxies";
this.lvProxies.UseCompatibleStateImageBehavior = false; this.lvProxies.UseCompatibleStateImageBehavior = false;
this.lvProxies.View = System.Windows.Forms.View.Details; this.lvProxies.View = System.Windows.Forms.View.Details;
this.lvProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvProxies_ColumnClick);
this.lvProxies.SelectedIndexChanged += new System.EventHandler(this.lvProxies_SelectedIndexChanged); this.lvProxies.SelectedIndexChanged += new System.EventHandler(this.lvProxies_SelectedIndexChanged);
// //
// lvDetail // lvDetail
@@ -86,6 +87,7 @@
this.lvDetail.Name = "lvDetail"; this.lvDetail.Name = "lvDetail";
this.lvDetail.UseCompatibleStateImageBehavior = false; this.lvDetail.UseCompatibleStateImageBehavior = false;
this.lvDetail.View = System.Windows.Forms.View.Details; this.lvDetail.View = System.Windows.Forms.View.Details;
this.lvDetail.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvDetail_ColumnClick);
this.lvDetail.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvDetail_KeyDown); this.lvDetail.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvDetail_KeyDown);
// //
// tsMain // tsMain

View File

@@ -18,10 +18,14 @@ namespace clashN.Forms
{ {
public partial class ProxiesForm : BaseForm public partial class ProxiesForm : BaseForm
{ {
Dictionary<String, ProxiesItem> proxies; private Dictionary<String, ProxiesItem> proxies;
Dictionary<String, ProvidersItem> providers; private Dictionary<String, ProvidersItem> providers;
ProxiesItem selectedProxy; private List<ProxiesItem> lstDetail;
private int sortColumn = 0;
// ProxiesItem selectedProxy;
#region Init
public ProxiesForm() public ProxiesForm()
{ {
InitializeComponent(); InitializeComponent();
@@ -39,6 +43,10 @@ namespace clashN.Forms
{ {
lvProxies.Focus(); lvProxies.Focus();
} }
#endregion
#region listview
private void InitProxiesView() private void InitProxiesView()
{ {
lvProxies.BeginUpdate(); lvProxies.BeginUpdate();
@@ -51,6 +59,7 @@ namespace clashN.Forms
lvProxies.MultiSelect = false; lvProxies.MultiSelect = false;
lvProxies.HeaderStyle = ColumnHeaderStyle.Clickable; lvProxies.HeaderStyle = ColumnHeaderStyle.Clickable;
lvProxies.Columns.Add("", 30);
lvProxies.Columns.Add(ResUI.LvAlias, 130); lvProxies.Columns.Add(ResUI.LvAlias, 130);
lvProxies.Columns.Add(ResUI.LvServiceType, 80); lvProxies.Columns.Add(ResUI.LvServiceType, 80);
lvProxies.Columns.Add(ResUI.LvActivity, 130); lvProxies.Columns.Add(ResUI.LvActivity, 130);
@@ -78,6 +87,51 @@ namespace clashN.Forms
lvDetail.EndUpdate(); lvDetail.EndUpdate();
} }
private void lvProxies_SelectedIndexChanged(object sender, EventArgs e)
{
RefreshDetail(GetLvSelectedIndex());
}
private void lvProxies_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column < 0)
{
return;
}
if (e.Column == 0)
{
foreach (ColumnHeader it in lvProxies.Columns)
{
it.Width = -2;
}
return;
}
}
private void lvDetail_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column < 0)
{
return;
}
if (e.Column == 0)
{
foreach (ColumnHeader it in lvDetail.Columns)
{
it.Width = -2;
}
return;
}
RefreshDetailSub(e.Column);
}
#endregion
#region proxy function
private void GetClashProxies(bool refreshUI) private void GetClashProxies(bool refreshUI)
{ {
MainFormHandler.Instance.GetClashProxies(config, (it, it2) => MainFormHandler.Instance.GetClashProxies(config, (it, it2) =>
@@ -114,7 +168,8 @@ namespace clashN.Forms
{ {
continue; continue;
} }
ListViewItem lvItem = new ListViewItem(kv.Key); ListViewItem lvItem = new ListViewItem("");
Utils.AddSubItem(lvItem, "Name", kv.Key);
Utils.AddSubItem(lvItem, "Type", kv.Value.type); Utils.AddSubItem(lvItem, "Type", kv.Value.type);
Utils.AddSubItem(lvItem, "Activity", kv.Value.now); Utils.AddSubItem(lvItem, "Activity", kv.Value.now);
@@ -132,7 +187,7 @@ namespace clashN.Forms
} }
private void RefreshDetail(int index) private void RefreshDetail(int index)
{ {
selectedProxy = null; //selectedProxy = null;
lvDetail.BeginUpdate(); lvDetail.BeginUpdate();
lvDetail.Items.Clear(); lvDetail.Items.Clear();
@@ -154,12 +209,9 @@ namespace clashN.Forms
{ {
return; return;
} }
selectedProxy = proxy; //selectedProxy = proxy;
lvDetail.BeginUpdate(); lstDetail = new List<ProxiesItem>();
lvDetail.Items.Clear();
List<ProxiesItem> lstDetail = new List<ProxiesItem>();
foreach (var item in proxy.all) foreach (var item in proxy.all)
{ {
var isActive = item == proxy.now; var isActive = item == proxy.now;
@@ -183,7 +235,40 @@ namespace clashN.Forms
}); });
} }
foreach (var item in lstDetail.OrderBy(t => t.delay)) RefreshDetailSub(-1);
}
private void RefreshDetailSub(int column)
{
if (lstDetail == null)
{
return;
}
if (column < 0)
{
column = sortColumn;
}
else
{
sortColumn = column;
}
lvDetail.BeginUpdate();
lvDetail.Items.Clear();
switch (column)
{
case 1:
lstDetail = lstDetail.OrderBy(x => x.name).ToList();
break;
case 2:
lstDetail = lstDetail.OrderBy(x => x.type).ToList();
break;
case 3:
lstDetail = lstDetail.OrderBy(x => x.delay).ToList();
break;
}
foreach (var item in lstDetail)
{ {
ListViewItem lvItem = new ListViewItem(item.now); ListViewItem lvItem = new ListViewItem(item.now);
Utils.AddSubItem(lvItem, "Name", item.name); Utils.AddSubItem(lvItem, "Name", item.name);
@@ -224,10 +309,6 @@ namespace clashN.Forms
return null; return null;
} }
private void lvProxies_SelectedIndexChanged(object sender, EventArgs e)
{
RefreshDetail(GetLvSelectedIndex());
}
private void lvDetail_KeyDown(object sender, KeyEventArgs e) private void lvDetail_KeyDown(object sender, KeyEventArgs e)
{ {
switch (e.KeyCode) switch (e.KeyCode)
@@ -258,7 +339,8 @@ namespace clashN.Forms
{ {
return; return;
} }
if (selectedProxy.type != "Selector") var selectedProxy = TryGetProxy(name);
if (selectedProxy == null || selectedProxy.type != "Selector")
{ {
UI.Show(ResUI.OperationFailed); UI.Show(ResUI.OperationFailed);
return; return;
@@ -273,6 +355,10 @@ namespace clashN.Forms
RefreshDetail(GetLvSelectedIndex()); RefreshDetail(GetLvSelectedIndex());
} }
#endregion
#region toolbar
private void tsbReload_Click(object sender, EventArgs e) private void tsbReload_Click(object sender, EventArgs e)
{ {
GetClashProxies(true); GetClashProxies(true);
@@ -318,5 +404,7 @@ namespace clashN.Forms
} }
} }
#endregion
} }
} }

View File

@@ -89,7 +89,7 @@
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="lvProxies.Size" type="System.Drawing.Size, System.Drawing"> <data name="lvProxies.Size" type="System.Drawing.Size, System.Drawing">
<value>400, 446</value> <value>399, 446</value>
</data> </data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lvProxies.TabIndex" type="System.Int32, mscorlib"> <data name="lvProxies.TabIndex" type="System.Int32, mscorlib">
@@ -143,7 +143,7 @@
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="lvDetail.Size" type="System.Drawing.Size, System.Drawing"> <data name="lvDetail.Size" type="System.Drawing.Size, System.Drawing">
<value>426, 446</value> <value>427, 446</value>
</data> </data>
<data name="lvDetail.TabIndex" type="System.Int32, mscorlib"> <data name="lvDetail.TabIndex" type="System.Int32, mscorlib">
<value>3</value> <value>3</value>
@@ -176,7 +176,7 @@
<value>830, 446</value> <value>830, 446</value>
</data> </data>
<data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib"> <data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib">
<value>400</value> <value>399</value>
</data> </data>
<data name="splitContainer1.TabIndex" type="System.Int32, mscorlib"> <data name="splitContainer1.TabIndex" type="System.Int32, mscorlib">
<value>5</value> <value>5</value>