mirror of
https://github.com/2dust/v2rayN.git
synced 2025-08-24 03:46:55 +00:00
主界面添加拖动排序功能
This commit is contained in:
parent
887dd8da3b
commit
5859cb7a15
2 changed files with 117 additions and 1 deletions
7
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
7
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
|
@ -185,8 +185,13 @@
|
|||
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.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.lvServers_ItemDrag);
|
||||
this.lvServers.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged);
|
||||
this.lvServers.Click += new System.EventHandler(this.lvServers_Click);
|
||||
this.lvServers.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvServers_DragDrop);
|
||||
this.lvServers.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvServers_DragEnter);
|
||||
this.lvServers.DragOver += new System.Windows.Forms.DragEventHandler(this.lvServers_DragOver);
|
||||
this.lvServers.DragLeave += new System.EventHandler(this.lvServers_DragLeave);
|
||||
this.lvServers.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick);
|
||||
this.lvServers.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvServers_KeyDown);
|
||||
//
|
||||
|
@ -959,7 +964,7 @@
|
|||
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox gbMsgTitle;
|
||||
|
|
|
@ -214,6 +214,7 @@ namespace v2rayN.Forms
|
|||
lvServers.View = View.Details;
|
||||
lvServers.Scrollable = true;
|
||||
lvServers.MultiSelect = true;
|
||||
lvServers.AllowDrop = true;
|
||||
lvServers.HeaderStyle = ColumnHeaderStyle.Clickable;
|
||||
|
||||
lvServers.Columns.Add("", 30);
|
||||
|
@ -313,6 +314,26 @@ namespace v2rayN.Forms
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 填充 ListView 背景颜色
|
||||
/// </summary>
|
||||
/// <param name="listView"></param>
|
||||
private void RefillListViewBackColor(ListView listView)
|
||||
{
|
||||
for (int i = 0; i < listView.Items.Count; i++)
|
||||
{
|
||||
ListViewItem currentItem = lvServers.Items[i];
|
||||
if (i % 2 == 1) // 隔行着色
|
||||
{
|
||||
currentItem.BackColor = Color.WhiteSmoke;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentItem.BackColor = default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新托盘服务器菜单
|
||||
/// </summary>
|
||||
|
@ -1587,5 +1608,95 @@ namespace v2rayN.Forms
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 拖动排序
|
||||
private void lvServers_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
int targetIndex = lvServers.InsertionMark.Index;
|
||||
if (targetIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (lvServers.InsertionMark.AppearsAfterItem)
|
||||
{
|
||||
targetIndex++;
|
||||
}
|
||||
string activeIndexId = config.indexId();
|
||||
|
||||
lvServers.BeginUpdate();
|
||||
foreach (ListViewItem oldItem in lvServers.SelectedItems)
|
||||
{
|
||||
if (targetIndex == oldItem.Index)
|
||||
{
|
||||
targetIndex++;
|
||||
continue;
|
||||
}
|
||||
VmessItem oldVmess = config.vmess[oldItem.Index];
|
||||
|
||||
ListViewItem cloneItem = (ListViewItem)oldItem.Clone();
|
||||
VmessItem cloneVmess = Utils.DeepCopy(oldVmess);
|
||||
|
||||
lvServers.Items.Insert(targetIndex, cloneItem);
|
||||
config.vmess.Insert(targetIndex, cloneVmess);
|
||||
|
||||
cloneItem.Selected = true;
|
||||
if (oldItem.Focused)
|
||||
{
|
||||
cloneItem.Focused = true;
|
||||
}
|
||||
|
||||
lvServers.Items.Remove(oldItem);
|
||||
config.vmess.Remove(oldVmess);
|
||||
|
||||
targetIndex = lvServers.Items.IndexOf(cloneItem) + 1;
|
||||
}
|
||||
|
||||
RefillListViewBackColor(lvServers);
|
||||
lvServers.EndUpdate();
|
||||
|
||||
config.index = config.FindIndexId(activeIndexId);
|
||||
ConfigHandler.SaveConfig(ref config, false);
|
||||
|
||||
RefreshServersMenu();
|
||||
}
|
||||
|
||||
private void lvServers_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
e.Effect = e.AllowedEffect;
|
||||
}
|
||||
|
||||
private void lvServers_DragLeave(object sender, EventArgs e)
|
||||
{
|
||||
lvServers.InsertionMark.Index = -1;
|
||||
}
|
||||
|
||||
private void lvServers_DragOver(object sender, DragEventArgs e)
|
||||
{
|
||||
Point targetPoint = lvServers.PointToClient(new Point(e.X, e.Y));
|
||||
int targetIndex = lvServers.InsertionMark.NearestIndex(targetPoint);
|
||||
|
||||
|
||||
if (targetIndex > -1)
|
||||
{
|
||||
Rectangle itemBounds = lvServers.GetItemRect(targetIndex);
|
||||
lvServers.EnsureVisible(targetIndex);
|
||||
|
||||
if (targetPoint.Y > itemBounds.Top + (itemBounds.Height / 2))
|
||||
{
|
||||
lvServers.InsertionMark.AppearsAfterItem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lvServers.InsertionMark.AppearsAfterItem = false;
|
||||
}
|
||||
}
|
||||
lvServers.InsertionMark.Index = targetIndex;
|
||||
}
|
||||
|
||||
private void lvServers_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
lvServers.DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue