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.UseCompatibleStateImageBehavior = false;
|
||||||
this.lvServers.View = System.Windows.Forms.View.Details;
|
this.lvServers.View = System.Windows.Forms.View.Details;
|
||||||
this.lvServers.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvServers_ColumnClick);
|
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.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged);
|
||||||
this.lvServers.Click += new System.EventHandler(this.lvServers_Click);
|
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.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick);
|
||||||
this.lvServers.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvServers_KeyDown);
|
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 groupBox1;
|
||||||
private System.Windows.Forms.GroupBox gbMsgTitle;
|
private System.Windows.Forms.GroupBox gbMsgTitle;
|
||||||
|
|
|
@ -214,6 +214,7 @@ namespace v2rayN.Forms
|
||||||
lvServers.View = View.Details;
|
lvServers.View = View.Details;
|
||||||
lvServers.Scrollable = true;
|
lvServers.Scrollable = true;
|
||||||
lvServers.MultiSelect = true;
|
lvServers.MultiSelect = true;
|
||||||
|
lvServers.AllowDrop = true;
|
||||||
lvServers.HeaderStyle = ColumnHeaderStyle.Clickable;
|
lvServers.HeaderStyle = ColumnHeaderStyle.Clickable;
|
||||||
|
|
||||||
lvServers.Columns.Add("", 30);
|
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>
|
||||||
/// 刷新托盘服务器菜单
|
/// 刷新托盘服务器菜单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1587,5 +1608,95 @@ namespace v2rayN.Forms
|
||||||
}
|
}
|
||||||
#endregion
|
#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