From 46c887537e891c925de9d0739a7eac8f6f55adcc Mon Sep 17 00:00:00 2001
From: YFdyh000 <yfdyh000@gmail.com>
Date: Sat, 18 Apr 2020 20:43:25 +0800
Subject: [PATCH] remember columns order

---
 v2rayN/v2rayN/Forms/MainForm.Designer.cs |  1 +
 v2rayN/v2rayN/Forms/MainForm.cs          | 20 ++++++++++++++++++++
 v2rayN/v2rayN/Forms/MainForm.resx        |  6 +++---
 v2rayN/v2rayN/Mode/Config.cs             |  3 +--
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
index 72592c43..aff2d35f 100644
--- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
@@ -167,6 +167,7 @@
             this.lvServers.UseCompatibleStateImageBehavior = false;
             this.lvServers.View = System.Windows.Forms.View.Details;
             this.lvServers.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvServers_ColumnClick);
+            this.lvServers.ColumnReordered += new System.Windows.Forms.ColumnReorderedEventHandler(this.lvServers_ColumnReordered);
             this.lvServers.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.lvServers_ColumnWidthChanged);
             this.lvServers.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged);
             this.lvServers.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick);
diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs
index d6331f58..e8344603 100644
--- a/v2rayN/v2rayN/Forms/MainForm.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.cs
@@ -12,6 +12,7 @@ using System.Diagnostics;
 using System.Drawing;
 using System.Net;
 using System.Threading.Tasks;
+using System.Linq;
 
 namespace v2rayN.Forms
 {
@@ -196,6 +197,13 @@ namespace v2rayN.Forms
                 lvServers.Columns[EServerColName.totalDown.ToString()].Tag = Global.sortMode.Numeric.ToString();
                 lvServers.Columns[EServerColName.totalUp.ToString()].Tag = Global.sortMode.Numeric.ToString();
             }
+
+            foreach (ColumnHeader c in lvServers.Columns)
+            {
+                if (config.uiItem.mainLvColLayout == null) break;
+                int i = config.uiItem.mainLvColLayout.IndexOf(c.Name);
+                if (i >= 0) c.DisplayIndex = i;
+            }
             lvServers.EndUpdate();
         }
 
@@ -1681,11 +1689,23 @@ namespace v2rayN.Forms
         {
             ColumnHeader c = lvServers.Columns[e.ColumnIndex];
             ConfigHandler.AddformMainLvColWidth(ref config, c.Name, c.Width);
+            Task.Run(() => ConfigHandler.SaveConfig(ref config));
         }
 
         private void MainForm_ResizeEnd(object sender, EventArgs e)
         {
             config.uiItem.mainSize = new Size(this.Width, this.Height);
+            Task.Run(() => ConfigHandler.SaveConfig(ref config));
+        }
+
+        private async void lvServers_ColumnReordered(object sender, ColumnReorderedEventArgs e)
+        {
+            await Task.Delay(500);
+            var names = (from col in lvServers.Columns.Cast<ColumnHeader>()
+                         orderby col.DisplayIndex
+                         select col.Name).ToList();
+            config.uiItem.mainLvColLayout = names;
+            _ = Task.Run(() => ConfigHandler.SaveConfig(ref config));
         }
     }
 }
diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx
index 43d513f5..2fa0a97a 100644
--- a/v2rayN/v2rayN/Forms/MainForm.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.resx
@@ -882,7 +882,7 @@
     <value>toolSslBlank1</value>
   </data>
   <data name="toolSslBlank1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>160, 21</value>
+    <value>170, 21</value>
   </data>
   <data name="&gt;&gt;toolSslBlank1.Type" xml:space="preserve">
     <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -891,7 +891,7 @@
     <value>toolSslBlank2</value>
   </data>
   <data name="toolSslBlank2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>160, 21</value>
+    <value>170, 21</value>
   </data>
   <data name="&gt;&gt;toolSslBlank2.Type" xml:space="preserve">
     <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -900,7 +900,7 @@
     <value>toolSslBlank3</value>
   </data>
   <data name="toolSslBlank3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>160, 21</value>
+    <value>170, 21</value>
   </data>
   <data name="&gt;&gt;toolSslBlank3.Type" xml:space="preserve">
     <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs
index 65f74893..d473462f 100644
--- a/v2rayN/v2rayN/Mode/Config.cs
+++ b/v2rayN/v2rayN/Mode/Config.cs
@@ -544,9 +544,8 @@ namespace v2rayN.Mode
     [Serializable]
     public class UIItem
     {
-         
-
         public System.Drawing.Size mainSize { get; set; }
         public Dictionary<string, int> mainLvColWidth { get; set; }
+        public List<string> mainLvColLayout { get; set; }
     }
 }