diff --git a/Netch/Forms/SubscribeForm.Designer.cs b/Netch/Forms/SubscribeForm.Designer.cs index 83698bdf..8188fad1 100644 --- a/Netch/Forms/SubscribeForm.Designer.cs +++ b/Netch/Forms/SubscribeForm.Designer.cs @@ -40,11 +40,13 @@ this.RemarkTextBox = new System.Windows.Forms.TextBox(); this.RemarkLabel = new System.Windows.Forms.Label(); this.SubscribeLinkListView = new System.Windows.Forms.ListView(); + this.EnableColumnHeader = new System.Windows.Forms.ColumnHeader(); this.RemarkColumnHeader = new System.Windows.Forms.ColumnHeader(); this.LinkColumnHeader = new System.Windows.Forms.ColumnHeader(); this.UserAgentHeader = new System.Windows.Forms.ColumnHeader(); this.pContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.DeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.CopyLinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.UseSelectedServerCheckBox = new System.Windows.Forms.CheckBox(); this.MainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); @@ -143,19 +145,29 @@ // SubscribeLinkListView // this.SubscribeLinkListView.AllowColumnReorder = true; - this.SubscribeLinkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {this.RemarkColumnHeader, this.LinkColumnHeader, this.UserAgentHeader}); + this.SubscribeLinkListView.CheckBoxes = true; + this.SubscribeLinkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] + { + this.EnableColumnHeader, this.RemarkColumnHeader, this.LinkColumnHeader, this.UserAgentHeader + }); this.SubscribeLinkListView.Dock = System.Windows.Forms.DockStyle.Fill; this.SubscribeLinkListView.FullRowSelect = true; this.SubscribeLinkListView.HideSelection = false; this.SubscribeLinkListView.Location = new System.Drawing.Point(8, 8); + this.SubscribeLinkListView.MultiSelect = false; this.SubscribeLinkListView.Name = "SubscribeLinkListView"; this.SubscribeLinkListView.Size = new System.Drawing.Size(668, 200); this.SubscribeLinkListView.TabIndex = 0; this.SubscribeLinkListView.UseCompatibleStateImageBehavior = false; this.SubscribeLinkListView.View = System.Windows.Forms.View.Details; + this.SubscribeLinkListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.SubscribeLinkListView_ItemChecked); this.SubscribeLinkListView.SelectedIndexChanged += new System.EventHandler(this.SubscribeLinkListView_SelectedIndexChanged); this.SubscribeLinkListView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.SubscribeLinkListView_MouseUp); // + // EnableColumnHeader + // + this.EnableColumnHeader.Text = "Status"; + // // RemarkColumnHeader // this.RemarkColumnHeader.Text = "Remark"; @@ -164,7 +176,7 @@ // LinkColumnHeader // this.LinkColumnHeader.Text = "Link"; - this.LinkColumnHeader.Width = 400; + this.LinkColumnHeader.Width = 364; // // UserAgentHeader // @@ -173,21 +185,31 @@ // // pContextMenuStrip // - this.pContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.DeleteToolStripMenuItem, this.CopyLinkToolStripMenuItem}); + this.pContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] + { + this.DeleteToolStripMenuItem, this.deleteServerToolStripMenuItem, this.CopyLinkToolStripMenuItem + }); this.pContextMenuStrip.Name = "pContextMenuStrip"; - this.pContextMenuStrip.Size = new System.Drawing.Size(130, 48); + this.pContextMenuStrip.Size = new System.Drawing.Size(151, 70); // // DeleteToolStripMenuItem // this.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem"; - this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(129, 22); + this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.DeleteToolStripMenuItem.Text = "Delete"; this.DeleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click); // + // deleteServerToolStripMenuItem + // + this.deleteServerToolStripMenuItem.Name = "deleteServerToolStripMenuItem"; + this.deleteServerToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.deleteServerToolStripMenuItem.Text = "DeleteServer"; + this.deleteServerToolStripMenuItem.Click += new System.EventHandler(this.deleteServerToolStripMenuItem_Click); + // // CopyLinkToolStripMenuItem // this.CopyLinkToolStripMenuItem.Name = "CopyLinkToolStripMenuItem"; - this.CopyLinkToolStripMenuItem.Size = new System.Drawing.Size(129, 22); + this.CopyLinkToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.CopyLinkToolStripMenuItem.Text = "CopyLink"; this.CopyLinkToolStripMenuItem.Click += new System.EventHandler(this.CopyLinkToolStripMenuItem_Click); // @@ -253,6 +275,7 @@ this.ControlsPanel.PerformLayout(); this.ResumeLayout(false); } + private System.Windows.Forms.ColumnHeader EnableColumnHeader; private System.Windows.Forms.Panel ControlsPanel; private System.Windows.Forms.TableLayoutPanel MainTableLayoutPanel; @@ -275,5 +298,7 @@ private System.Windows.Forms.CheckBox UseSelectedServerCheckBox; #endregion + + private System.Windows.Forms.ToolStripMenuItem deleteServerToolStripMenuItem; } } \ No newline at end of file diff --git a/Netch/Forms/SubscribeForm.cs b/Netch/Forms/SubscribeForm.cs index aa80bd27..e9fef796 100644 --- a/Netch/Forms/SubscribeForm.cs +++ b/Netch/Forms/SubscribeForm.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel; using System.Linq; using System.Windows.Forms; using Netch.Models; @@ -21,12 +22,15 @@ namespace Netch.Forms foreach (var item in Global.Settings.SubscribeLink) { - SubscribeLinkListView.Items.Add(new ListViewItem(new[] + var viewItem = new ListViewItem(new[] { + "", item.Remark, item.Link, !string.IsNullOrEmpty(item.UserAgent) ? item.UserAgent : WebUtil.DefaultUserAgent - })); + }); + viewItem.Checked = item.Enable; + SubscribeLinkListView.Items.Add(viewItem); } } @@ -119,6 +123,7 @@ namespace Netch.Forms Global.Settings.SubscribeLink.Add(new SubscribeLink { + Enable = true, Remark = RemarkTextBox.Text, Link = LinkTextBox.Text, UserAgent = UserAgentTextBox.Text @@ -135,7 +140,9 @@ namespace Netch.Forms { RenameServersGroup(target.Remark, RemarkTextBox.Text); } + ListViewItem listViewItem = SubscribeLinkListView.Items[_editingIndex]; + target.Enable = listViewItem.Checked; target.Link = LinkTextBox.Text; target.Remark = RemarkTextBox.Text; target.UserAgent = UserAgentTextBox.Text; @@ -173,31 +180,21 @@ namespace Netch.Forms /// private void SubscribeLinkListView_SelectedIndexChanged(object sender, EventArgs e) { - var editingCanOverwrite = true; - if (_editingIndex != -1) + var listView = (ListView) sender; + if (listView.SelectedItems.Count == 0) { - var targetItem = SubscribeLinkListView.Items[_editingIndex].SubItems; - editingCanOverwrite = RemarkTextBox.Text == targetItem[0].Text && - LinkTextBox.Text == targetItem[1].Text && - UserAgentTextBox.Text == targetItem[2].Text; - } - - if (SubscribeLinkListView.SelectedItems.Count == 1) - { - if (editingCanOverwrite) - { - SelectEditing(SubscribeLinkListView.SelectedItems[0].Index); - } - } - else if (SubscribeLinkListView.SelectedItems.Count > 1) - { - } - else if (editingCanOverwrite) - { - // 不选 // 重置 ResetEditingGroup(); + return; } + _editingIndex = listView.SelectedItems[0].Index; + + ListViewItem target = SubscribeLinkListView.Items[_editingIndex]; + + AddSubscriptionBox.Text = target.SubItems[1].Text; + RemarkTextBox.Text = target.SubItems[1].Text; + LinkTextBox.Text = target.SubItems[2].Text; + UserAgentTextBox.Text = target.SubItems[3].Text; } private void SubscribeLinkListView_MouseUp(object sender, MouseEventArgs e) @@ -211,17 +208,6 @@ namespace Netch.Forms } } - private void SelectEditing(int index) - { - _editingIndex = index; - ListViewItem target; - target = SubscribeLinkListView.Items[index]; - AddSubscriptionBox.Text = target.SubItems[0].Text; - RemarkTextBox.Text = target.SubItems[0].Text; - LinkTextBox.Text = target.SubItems[1].Text; - UserAgentTextBox.Text = target.SubItems[2].Text; - } - private void ResetEditingGroup() { _editingIndex = -1; @@ -235,5 +221,36 @@ namespace Netch.Forms { ResetEditingGroup(); } + + private void SubscribeLinkListView_ItemChecked(object sender, ItemCheckedEventArgs e) + { + _editingIndex = e.Item.Index; + ListViewItem listViewItem = SubscribeLinkListView.Items[e.Item.Index]; + + AddSubscriptionBox.Text = listViewItem.SubItems[1].Text; + RemarkTextBox.Text = listViewItem.SubItems[1].Text; + LinkTextBox.Text = listViewItem.SubItems[2].Text; + UserAgentTextBox.Text = listViewItem.SubItems[3].Text; + + var settingSub = Global.Settings.SubscribeLink[_editingIndex]; + settingSub.Enable = listViewItem.Checked; + settingSub.Remark = listViewItem.SubItems[1].Text; + settingSub.Link = listViewItem.SubItems[2].Text; + settingSub.UserAgent = listViewItem.SubItems[3].Text; + + Configuration.Save(); + } + + private void deleteServerToolStripMenuItem_Click(object sender, EventArgs e) + { + if (SubscribeLinkListView.SelectedItems.Count > 0) + { + var item = SubscribeLinkListView.SelectedItems[0]; + + if (MessageBoxX.Show(i18N.Translate("Confirm deletion?"), confirm: true) != DialogResult.OK) + return; + DeleteServersInGroup(item.SubItems[1].Text); + } + } } } \ No newline at end of file diff --git a/Netch/Models/SubscribeLink.cs b/Netch/Models/SubscribeLink.cs index 6c5f865a..67e15042 100644 --- a/Netch/Models/SubscribeLink.cs +++ b/Netch/Models/SubscribeLink.cs @@ -2,6 +2,11 @@ { public class SubscribeLink { + /// + /// 启用状态 + /// + public bool Enable; + /// /// 备注 /// @@ -17,4 +22,4 @@ /// public string UserAgent; } -} +} \ No newline at end of file diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN index 1a7b2e8c..46b1a1c3 100644 --- a/Netch/Resources/zh-CN +++ b/Netch/Resources/zh-CN @@ -70,6 +70,13 @@ "Updating in the background": "正在后台更新中", "Update {1} server(s) from {0}": "从 {0} 更新 {1} 个服务器", "Update servers error from {0}": "从 {0} 更新服务器失败", + "Delete the corresponding group of items in the server list?": "是否删除订阅对应服务器?", + "Confirm deletion?": "确认删除?", + "DeleteServer": "删除订阅节点", + "Status": "状态", + "Remark": "备注", + "Link": "链接", + "Unselect": "取消选择", "Options": "选项", "NF Service": "NF 服务", @@ -81,16 +88,16 @@ "Modes have been reload": "模式已重载", "Clean DNS Cache": "清理 DNS 缓存", "DNS cache cleanup succeeded": "DNS 缓存清理成功", - + "Update PAC": "更新 PAC", "PAC updated successfully": "PAC 更新成功", "PAC update failed": "PAC 更新失败", - + "Update ACL": "更新 ACL 规则", "Update ACL with proxy": "使用代理更新 ACL 规则", "ACL updated successfully": "ACL 更新成功", "ACL update failed": "ACL 更新失败", - + "Open Directory": "打开目录", "About": "关于", diff --git a/Netch/Utils/Subscription.cs b/Netch/Utils/Subscription.cs index e0f980a7..c886a40d 100644 --- a/Netch/Utils/Subscription.cs +++ b/Netch/Utils/Subscription.cs @@ -24,6 +24,10 @@ namespace Netch.Utils { try { + if (!item.Enable) + { + return; + } var request = WebUtil.CreateRequest(item.Link); if (!string.IsNullOrEmpty(item.UserAgent)) request.UserAgent = item.UserAgent; diff --git a/Netch/Utils/Utils.cs b/Netch/Utils/Utils.cs index 7baeda19..b8019c0a 100644 --- a/Netch/Utils/Utils.cs +++ b/Netch/Utils/Utils.cs @@ -216,6 +216,14 @@ namespace Netch.Utils func.Invoke(component); switch (component) { + case ListView listView: + // ListView sub item + foreach (var item in listView.Columns.Cast()) + { + ComponentIterator(item, func); + } + + break; case ToolStripMenuItem toolStripMenuItem: // Iterator Menu strip sub item foreach (var item in toolStripMenuItem.DropDownItems.Cast()) diff --git a/Netch/Utils/i18N.cs b/Netch/Utils/i18N.cs index 588fefe3..cdd4b9a6 100644 --- a/Netch/Utils/i18N.cs +++ b/Netch/Utils/i18N.cs @@ -121,6 +121,9 @@ namespace Netch.Utils case ToolStripItem c: c.Text = Translate(c.Text); break; + case ColumnHeader c: + c.Text = Translate(c.Text); + break; } }); }