using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PaintDotNet.Base.SettingModel;
using PaintDotNet.Base.CommTool;
using System.IO;
namespace PaintDotNet.Instrument.CustomInterface
{
internal class ShortKeys : UserControl
{
private AppWorkspace appWorkspace;
///
/// 右侧树形菜单
///
private ToolStripItemCollection collectionRight;
///
/// 设置热键的标记
///
private bool setHotKey = false;
///
/// 为当前菜单设置的热键的list
///
private List hotKeys = new List();
private Panel panel1;
private GroupBox groupBox3;
private Label label1;
private Button button7;
private GroupBox groupBox4;
private Label label3;
private TextBox textBox1;
private Button button8;
private GroupBox groupBox5;
private Label label2;
private GroupBox groupBox7;
private TreeView treeViewRight;
private ListView listView2;
private GroupBox groupBox6;
private HotkeyModel hotkeyModel = Startup.instance.hotkeyModel;
private string txtPath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\ModuleConfig.txt";
private string[] menuIdArr;
public ShortKeys(AppWorkspace appWorkspace)
{
this.appWorkspace = appWorkspace;
InitializeComponent();
InitializeLanguageText();
InitVisibleMenuId();
InitializeTreeData();
listView2.View = View.Details;
listView2.Columns.Add("0", 0, HorizontalAlignment.Center);
listView2.Columns.Add(PdnResources.GetString("Menu.tool.Generateshortcut.function.text"), 150, HorizontalAlignment.Center);
listView2.Columns.Add(PdnResources.GetString("Menu.hotkey.text"), 200, HorizontalAlignment.Center);
listView2.BeginUpdate();
foreach (HotkeyModel.Item s in hotkeyModel.items)
{
var lv = new ListViewItem();
lv.Tag = s.HotKeys;
lv.Text = "1";
lv.SubItems.Add(s.MenuName);
lv.SubItems.Add(s.HotKeys);
lv.SubItems.Add("");
listView2.Items.Add(lv);
}
listView2.EndUpdate();
}
///
/// 获取txt文件中已保存的菜单可用id
///
private void InitVisibleMenuId()
{
if (System.IO.File.Exists(txtPath))
{
string str = System.IO.File.ReadAllText(txtPath);
if (str.IndexOf(',') != -1)
{
menuIdArr = str.Split(',');
}
else
{
if (!string.IsNullOrEmpty(str))
{
menuIdArr = new string[] { str };
}
}
}
}
///
/// 初始化树形菜单数据
///
private void InitializeTreeData()
{
this.collectionRight = this.appWorkspace.ToolBar.MainMenu.Items;
TreeNode anime = new TreeNode(PdnResources.GetString("Menu.menu.Text"));
this.RecursiveData(collectionRight, anime);
anime.Expand();
this.treeViewRight.Nodes.Add(anime);
}
///
/// 递归进行数据组织
///
private void RecursiveData(ToolStripItemCollection collection, TreeNode anime)
{
//for (int i = 0; i < collection.Count; i++)
//{
// //排除掉最近打开的文件,或者可以用数字id判断更准确
// if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection"))
// {
// if (collection[i].GetType() != typeof(ToolStripSeparator) && ((PdnMenuItem)collection[i]).CanShowInSenseShield)
// {
// TreeNode node = new TreeNode();
// node.Name = collection[i].Name;
// node.Text = collection[i].Text;
// node.Tag = ((PdnMenuItem)collection[i]).MenuId;
// anime.Nodes.Add(node);
// RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node);
// }
// }
//}
for (int i = 0; i < collection.Count; i++)
{
//排除掉最近打开的文件,或者可以用数字id判断更准确
if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection"))
{
TreeNode node = new TreeNode(/*collection[i].Text*/);
if (collection[i] is PdnMenuItem)
{
PdnMenuItem item = (PdnMenuItem)collection[i];
if (!item.CanShowInSenseShield)
continue;
node.Tag = item.MenuId;
if (menuIdArr != null && menuIdArr.Length > 0)
{
if (Array.IndexOf(menuIdArr, item.MenuId.ToString()) != -1)
{
node.Name = collection[i].Name;
node.Text = collection[i].Text;
node.Tag = ((PdnMenuItem)collection[i]).MenuId;
node.Checked = true;
}
else
{
node.Checked = false;
}
}
if (node.Checked)
{
anime.Nodes.Add(node);
}
if (collection[i].Name.Equals("OpenRecent") || collection[i].Name.Equals("CameraSelection"))
continue;
RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node);
}
}
}
}
#region 组件设计器生成的代码
private void InitializeLanguageText()
{
this.groupBox3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Theselectcutkey.text");
this.button7.Text = PdnResources.GetString("Menu.Edit.Delete.Text");
this.groupBox4.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Maintainshortcut.text");
this.label3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.ThehotkeorAlt:orF*.text");
this.button8.Text = PdnResources.GetString("Menu.Setting.Text");
this.groupBox5.Text = PdnResources.GetString("Menu.Thisshortcutkeyhasbeenappliedto.text");
this.groupBox7.Text = PdnResources.GetString("Menu.Availablefunctions.text");
this.groupBox6.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Listofallfortcutkeys.text");
}
///
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
///
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.label1 = new System.Windows.Forms.Label();
this.button7 = new System.Windows.Forms.Button();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.label3 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.button8 = new System.Windows.Forms.Button();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.label2 = new System.Windows.Forms.Label();
this.groupBox7 = new System.Windows.Forms.GroupBox();
this.treeViewRight = new System.Windows.Forms.TreeView();
this.listView2 = new System.Windows.Forms.ListView();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.panel1.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox4.SuspendLayout();
this.groupBox5.SuspendLayout();
this.groupBox7.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.groupBox3);
this.panel1.Controls.Add(this.groupBox4);
this.panel1.Controls.Add(this.groupBox5);
this.panel1.Controls.Add(this.groupBox7);
this.panel1.Controls.Add(this.groupBox6);
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(623, 398);
this.panel1.TabIndex = 0;
//
// groupBox3
//
this.groupBox3.Controls.Add(this.label1);
this.groupBox3.Controls.Add(this.button7);
this.groupBox3.Location = new System.Drawing.Point(0, 3);
this.groupBox3.Margin = new System.Windows.Forms.Padding(0);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(361, 58);
this.groupBox3.TabIndex = 9;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "所选功能快捷键";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 29);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(0, 12);
this.label1.TabIndex = 1;
//
// button7
//
this.button7.Location = new System.Drawing.Point(267, 20);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(75, 23);
this.button7.TabIndex = 0;
this.button7.Text = "删除";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += button7_Click;
//
// groupBox4
//
this.groupBox4.Controls.Add(this.label3);
this.groupBox4.Controls.Add(this.textBox1);
this.groupBox4.Controls.Add(this.button8);
this.groupBox4.Location = new System.Drawing.Point(0, 67);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(361, 76);
this.groupBox4.TabIndex = 10;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "维护快捷键";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(9, 50);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(293, 12);
this.label3.TabIndex = 2;
this.label3.Text = "快捷键必须包含Ctrl或Alt; 或F*";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(9, 22);
this.textBox1.Name = "textBox1";
this.textBox1.ReadOnly = true;
this.textBox1.Size = new System.Drawing.Size(252, 21);
this.textBox1.TabIndex = 1;
this.textBox1.KeyUp += textBox1_KeyUp;
this.textBox1.PreviewKeyDown += textBox1_PreviewKeyDown;
//this.textBox1.KeyDown += textBox1_KeyDown;
//
// button8
//
this.button8.Enabled = false;
this.button8.Location = new System.Drawing.Point(267, 22);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(75, 23);
this.button8.TabIndex = 0;
this.button8.Text = "设置";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += Button8_Click;
//
// groupBox5
//
this.groupBox5.Controls.Add(this.label2);
this.groupBox5.Location = new System.Drawing.Point(0, 149);
this.groupBox5.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(361, 58);
this.groupBox5.TabIndex = 11;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "此快捷键已应用至";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(9, 29);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(0, 12);
this.label2.TabIndex = 0;
//
// groupBox7
//
this.groupBox7.Controls.Add(this.treeViewRight);
this.groupBox7.Location = new System.Drawing.Point(367, 0);
this.groupBox7.Name = "groupBox7";
this.groupBox7.Size = new System.Drawing.Size(256, 401);
this.groupBox7.TabIndex = 13;
this.groupBox7.TabStop = false;
this.groupBox7.Text = "可用功能";
//
// treeView1
//
this.treeViewRight.Location = new System.Drawing.Point(7, 20);
this.treeViewRight.Name = "treeView1";
this.treeViewRight.Size = new System.Drawing.Size(243, 372);
this.treeViewRight.TabIndex = 0;
this.treeViewRight.NodeMouseClick += treeView1_NodeMouseClick;
this.treeViewRight.HideSelection = false;
this.treeViewRight.DrawMode = TreeViewDrawMode.OwnerDrawText;
this.treeViewRight.DrawNode += new DrawTreeNodeEventHandler(this.treeViewRight_DrawNode);
//
// groupBox6
//
this.groupBox6.Controls.Add(this.listView2);
this.groupBox6.Location = new System.Drawing.Point(0, 211);
this.groupBox6.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
this.groupBox6.Name = "groupBox6";
this.groupBox6.Size = new System.Drawing.Size(361, 187);
this.groupBox6.TabIndex = 12;
this.groupBox6.TabStop = false;
this.groupBox6.Text = "所有已指派快捷键的功能列表";
//
// listView2
//
this.listView2.FullRowSelect = true;
this.listView2.HideSelection = false;
this.listView2.Location = new System.Drawing.Point(6, 20);
this.listView2.MultiSelect = false;
this.listView2.Name = "listView2";
this.listView2.Size = new System.Drawing.Size(355/*382*/, 181/*441*/);
this.listView2.TabIndex = 24;
this.listView2.UseCompatibleStateImageBehavior = false;
this.listView2.ItemSelectionChanged += ListView2_ItemSelectionChanged;
//
// ShortKeys
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panel1);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ShortKeys";
this.Size = new System.Drawing.Size(623, 398);
this.panel1.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.groupBox4.ResumeLayout(false);
this.groupBox4.PerformLayout();
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
this.groupBox7.ResumeLayout(false);
this.ResumeLayout(false);
}
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (!setHotKey)
{
setHotKey = true;
this.textBox1.Text = "";
this.hotKeys.Clear();
}
string keyString = e.KeyCode.ToString();
if (keyString.Equals("ControlKey"))
{
keyString = "Control";
}
if (keyString.Equals("ShiftKey"))
{
keyString = "Shift";
}
if (keyString.Equals("Menu"))
{
keyString = "Alt";
}
if (setHotKey && !keyString.Equals("") && this.hotKeys.IndexOf(keyString) == -1)
{
this.hotKeys.Add(keyString);
if (this.textBox1.Text.Equals(""))
{
this.textBox1.Text = keyString;
}
else
{
this.textBox1.Text += " + " + keyString;
}
}
this.button8.Enabled = !this.textBox1.Text.Equals("");
}
///
/// 自定义绘制
/// 参考https://www.cnblogs.com/JiYF/p/6693503.html
///
///
///
private void treeViewRight_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
/**用默认颜色
e.DrawDefault = true;
return;
**/
//以下是自定义颜色
if ((e.State & TreeNodeStates.Selected) != 0)
{
//演示为蓝(绿)底白字
e.Graphics.FillRectangle(SystemBrushes.Highlight/*Brushes.Green*/, e.Node.Bounds);
Font nodeFont = e.Node.NodeFont;
if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(e.Bounds, 2, 0));
}
else
{
e.DrawDefault = true;
}
if ((e.State & TreeNodeStates.Focused) != 0)
{
using (Pen focusPen = new Pen(Color.Black))
{
focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle focusBounds = e.Node.Bounds;
focusBounds.Size = new Size(focusBounds.Width - 1,
focusBounds.Height - 1);
e.Graphics.DrawRectangle(focusPen, focusBounds);
}
}
}
///
/// 设置
///
///
///
private void Button8_Click(object sender, EventArgs e)
{
try
{
//throw new NotImplementedException();
TreeNode node = this.treeViewRight.SelectedNode;
if (node != null)
{
//判断快捷键是否已经被使用
HotkeyModel.Item isExsit = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text));
if(isExsit != null)
{
MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysarealreadyiuse.text"));
return;
}
int menuId = (int)this.treeViewRight.SelectedNode.Tag;
string desc = this.treeViewRight.SelectedNode.Name;
string name = this.treeViewRight.SelectedNode.Text;
//设置快捷键
ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(desc, true);
if (menu != null && menu.Length > 0)
{
((PdnMenuItem)menu[0]).resetShortcutKeys(this.textBox1.Text);
}
SaveShortcutKeys();
//处理界面数据
HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
if (item != null)
{
foreach (ListViewItem item1 in listView2.Items)
{
if (item1.SubItems[2].Text.Equals(item.HotKeys))
{
item1.SubItems[2].Text = this.textBox1.Text;
break;
}
}
item.HotKeys = this.textBox1.Text;
}
else
{
HotkeyModel.Item item1 = new HotkeyModel.Item();
item1.MenuId = menuId;
item1.MenuName = name;
item1.Description = desc;
item1.HotKeys = this.textBox1.Text;
Startup.instance.hotkeyModel.items.Add(item1);
this.hotkeyModel = Startup.instance.hotkeyModel;
SaveShortcutKeys();
var lv = new ListViewItem();
lv.Tag = this.textBox1.Text;
lv.Text = "1";
lv.SubItems.Add(name);
lv.SubItems.Add(this.textBox1.Text);
lv.SubItems.Add("");
listView2.Items.Add(lv);
}
}
}
catch (Exception)
{
MessageBox.Show(PdnResources.GetString("Menu.conformtotherulespleasecheck.text")+"!");
}
}
private void ListView2_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
//throw new NotImplementedException();
listView2.FullRowSelect = true;
if (this.listView2.SelectedItems.Count > 0)
{
foreach (ListViewItem item in listView2.Items)
{
if (item.Selected)
{
this.label1.Text = item.Tag as string;
break;
}
}
}
}
#endregion
///
/// 按键抬起事件,需判断是否合法
/// 快捷键必须包含ctrl或alt;或back、delete、esc、F*
///
///
///
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
setHotKey = false;
//检测合法性
//e.Handled = true;
e.SuppressKeyPress = true;
//检测是否被占用
HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text));
if (item != null)
{
this.label2.Text = item.MenuName;
this.button8.Enabled = false;
}
else
{
this.label2.Text = PdnResources.GetString("Menu.Nofunctionaluse.text");
List> keysAll = new List>()
{
new List() { Keys.Alt, Keys.D0 },
new List() { Keys.Alt, Keys.D1},
new List() { Keys.Alt, Keys.D2},
new List() { Keys.Alt, Keys.D3},
new List() { Keys.Alt, Keys.D4},
new List() { Keys.Alt, Keys.D5},
new List() { Keys.Alt, Keys.D6},
new List() { Keys.Alt, Keys.D7},
new List() { Keys.Alt, Keys.D8},
new List() { Keys.Alt, Keys.D9},
new List() { Keys.Alt, Keys.Back},
new List() { Keys.Alt, Keys.Down},
new List() { Keys.Alt, Keys.F1},
new List() { Keys.Alt, Keys.F10},
new List() { Keys.Alt, Keys.F11},
new List() { Keys.Alt, Keys.F12},
new List() { Keys.Alt, Keys.F2},
new List() { Keys.Alt, Keys.F3},
new List() { Keys.Alt, Keys.F4},
new List() { Keys.Alt, Keys.F5},
new List() { Keys.Alt, Keys.F6},
new List() { Keys.Alt, Keys.F7},
new List() { Keys.Alt, Keys.F8},
new List() { Keys.Alt, Keys.F9},
new List() { Keys.Alt, Keys.Left},
new List() { Keys.Alt, Keys.Right},
new List() { Keys.Alt, Keys.Up},
new List() { Keys.Control, Keys.D0},
new List() { Keys.Control, Keys.D1},
new List() { Keys.Control, Keys.D2},
new List() { Keys.Control, Keys.D3},
new List() { Keys.Control, Keys.D4},
new List() { Keys.Control, Keys.D5},
new List() { Keys.Control, Keys.D6},
new List() { Keys.Control, Keys.D7},
new List() { Keys.Control, Keys.D8},
new List() { Keys.Control, Keys.D9},
new List() { Keys.Control, Keys.A},
new List() { Keys.Control, Keys.B},
new List() { Keys.Control, Keys.C},
new List() { Keys.Control, Keys.D},
new List() { Keys.Control, Keys.Delete},
new List() { Keys.Control, Keys.E},
new List() { Keys.Control, Keys.F},
new List() { Keys.Control, Keys.F1},
new List() { Keys.Control, Keys.F10},
new List() { Keys.Control, Keys.F11},
new List() { Keys.Control, Keys.F12},
new List() { Keys.Control, Keys.F2},
new List() { Keys.Control, Keys.F3},
new List() { Keys.Control, Keys.F4},
new List() { Keys.Control, Keys.F5},
new List() { Keys.Control, Keys.F6},
new List() { Keys.Control, Keys.F7},
new List() { Keys.Control, Keys.F8},
new List() { Keys.Control, Keys.F9},
new List() { Keys.Control, Keys.G},
new List() { Keys.Control, Keys.H},
new List() { Keys.Control, Keys.I},
new List() { Keys.Control, Keys.Insert},
new List() { Keys.Control, Keys.J},
new List() { Keys.Control, Keys.K},
new List() { Keys.Control, Keys.L},
new List() { Keys.Control, Keys.M},
new List() { Keys.Control, Keys.N},
new List() { Keys.Control, Keys.O},
new List() { Keys.Control, Keys.P},
new List() { Keys.Control, Keys.Q},
new List() { Keys.Control, Keys.R},
new List() { Keys.Control, Keys.S},
new List() { Keys.Control, Keys.Shift, Keys.D0},
new List() { Keys.Control, Keys.Shift, Keys.D1},
new List() { Keys.Control, Keys.Shift, Keys.D2},
new List() { Keys.Control, Keys.Shift, Keys.D3},
new List() { Keys.Control, Keys.Shift, Keys.D4},
new List() { Keys.Control, Keys.Shift, Keys.D5},
new List() { Keys.Control, Keys.Shift, Keys.D6},
new List() { Keys.Control, Keys.Shift, Keys.D7},
new List() { Keys.Control, Keys.Shift, Keys.D8},
new List() { Keys.Control, Keys.Shift, Keys.D9},
new List() { Keys.Control, Keys.Shift, Keys.A},
new List() { Keys.Control, Keys.Shift, Keys.B},
new List() { Keys.Control, Keys.Shift, Keys.C},
new List() { Keys.Control, Keys.Shift, Keys.D},
new List() { Keys.Control, Keys.Shift, Keys.E},
new List() { Keys.Control, Keys.Shift, Keys.F},
new List() { Keys.Control, Keys.Shift, Keys.F1},
new List() { Keys.Control, Keys.Shift, Keys.F10},
new List() { Keys.Control, Keys.Shift, Keys.F11},
new List() { Keys.Control, Keys.Shift, Keys.F12},
new List() { Keys.Control, Keys.Shift, Keys.F2},
new List() { Keys.Control, Keys.Shift, Keys.F3},
new List() { Keys.Control, Keys.Shift, Keys.F4},
new List() { Keys.Control, Keys.Shift, Keys.F5},
new List() { Keys.Control, Keys.Shift, Keys.F6},
new List() { Keys.Control, Keys.Shift, Keys.F7},
new List() { Keys.Control, Keys.Shift, Keys.F8},
new List() { Keys.Control, Keys.Shift, Keys.F9},
new List() { Keys.Control, Keys.Shift, Keys.G},
new List() { Keys.Control, Keys.Shift, Keys.H},
new List() { Keys.Control, Keys.Shift, Keys.I},
new List() { Keys.Control, Keys.Shift, Keys.J},
new List() { Keys.Control, Keys.Shift, Keys.K},
new List() { Keys.Control, Keys.Shift, Keys.L},
new List() { Keys.Control, Keys.Shift, Keys.M},
new List() { Keys.Control, Keys.Shift, Keys.N},
new List() { Keys.Control, Keys.Shift, Keys.O},
new List() { Keys.Control, Keys.Shift, Keys.P},
new List() { Keys.Control, Keys.Shift, Keys.Q},
new List() { Keys.Control, Keys.Shift, Keys.R},
new List() { Keys.Control, Keys.Shift, Keys.S},
new List() { Keys.Control, Keys.Shift, Keys.T},
new List() { Keys.Control, Keys.Shift, Keys.U},
new List() { Keys.Control, Keys.Shift, Keys.V},
new List() { Keys.Control, Keys.Shift, Keys.W},
new List() { Keys.Control, Keys.Shift, Keys.X},
new List() { Keys.Control, Keys.Shift, Keys.Y},
new List() { Keys.Control, Keys.Shift, Keys.Z},
new List() { Keys.Control, Keys.T},
new List() { Keys.Control, Keys.U},
new List() { Keys.Control, Keys.V},
new List() { Keys.Control, Keys.W},
new List() { Keys.Control, Keys.X},
new List() { Keys.Control, Keys.Y},
new List() { Keys.Control, Keys.Z},
new List() { Keys.Delete},
new List() { Keys.F1},
new List() { Keys.F10},
new List() { Keys.F11},
new List() { Keys.F12},
new List() { Keys.F2},
new List() { Keys.F3},
new List() { Keys.F4},
new List() { Keys.F5},
new List() { Keys.F6},
new List() { Keys.F7},
new List() { Keys.F8},
new List() { Keys.F9},
new List() { Keys.Insert},
new List() { Keys.None},
new List() { Keys.Shift | Keys.Delete},
new List() { Keys.Shift | Keys.F1},
new List() { Keys.Shift | Keys.F10},
new List() { Keys.Shift | Keys.F11},
new List() { Keys.Shift | Keys.F12},
new List() { Keys.Shift | Keys.F2},
new List() { Keys.Shift | Keys.F3},
new List() { Keys.Shift | Keys.F4},
new List() { Keys.Shift | Keys.F5},
new List() { Keys.Shift | Keys.F6},
new List() { Keys.Shift | Keys.F7},
new List() { Keys.Shift | Keys.F8},
new List() { Keys.Shift | Keys.F9},
new List() { Keys.Shift | Keys.Insert}
};
string itemHotKeys = this.textBox1.Text;
List> keysFound = new List>();
if (itemHotKeys != null && !itemHotKeys.Equals(""))
{
string[] keys = itemHotKeys.Trim().Split('+');
Keys Key = Keys.None;
//寻找匹配的按键组合
int keyIndex = 0;
foreach (string key in keys)
{
if (Key == Keys.None)
{
Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim()));
//寻找可能匹配的按键组合
foreach (var itemList in keysAll)
{
if (itemList.Contains(Key) && itemList.IndexOf(Key) == keyIndex && itemList.Count == keys.Length)
keysFound.Add(itemList);
}
}
else
{
Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim()));
//删除不匹配的按键组合
for (int i = keysFound.Count - 1; i >= 0 ; i--)
{
var itemList = keysFound[i];
if (!itemList.Contains(Key) || itemList.IndexOf(Key) != keyIndex)
keysFound.RemoveAt(i);
}
}
keyIndex++;
}
//没有找到匹配的按键组合
if (keysFound.Count != 1)
{
this.textBox1.Text = "";
}
}
this.button8.Enabled = !this.textBox1.Text.Equals("");
}
}
///
/// 维护快捷键的textbox的按键按下事件
///
///
///
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!setHotKey)
{
setHotKey = true;
this.textBox1.Text = "";
this.hotKeys.Clear();
}
string keyString = e.KeyCode.ToString();
if (keyString.Equals("ControlKey"))
{
keyString = "Control";
}
if (keyString.Equals("ShiftKey"))
{
keyString = "Shift";
}
if (keyString.Equals("Menu"))
{
keyString = "Alt";
}
if (setHotKey && !keyString.Equals("") && this.hotKeys.IndexOf(keyString) == -1)
{
this.hotKeys.Add(keyString);
if (this.textBox1.Text.Equals(""))
{
this.textBox1.Text = keyString;
}
else
{
this.textBox1.Text += " + " + keyString;
}
}
this.button8.Enabled = !this.textBox1.Text.Equals("");
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
int menuId = (e.Node.Tag != null) ? (int)(e.Node.Tag) : 0;
if (menuId > 0)
{
if (Startup.instance.hotkeyModel != null
&& Startup.instance.hotkeyModel.items != null
&& Startup.instance.hotkeyModel.items.Count > 0)
{
HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
if (item != null)
{
this.label1.Text = item.HotKeys;
}
else
{
this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text");
}
}
}
}
///
/// 设置快捷键
///
///
///
private void button8_MouseClick(object sender, MouseEventArgs e)
{
TreeNode node = this.treeViewRight.SelectedNode;
if (node != null)
{
int menuId = (int)this.treeViewRight.SelectedNode.Tag;
string desc = this.treeViewRight.SelectedNode.Name;
string name = this.treeViewRight.SelectedNode.Text;
HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
if (item != null)
{
item.HotKeys = this.textBox1.Text;
}
else
{
HotkeyModel.Item item1 = new HotkeyModel.Item();
item1.MenuId = menuId;
item1.MenuName = name;
item1.Description = desc;
item1.HotKeys = this.textBox1.Text;
Startup.instance.hotkeyModel.items.Add(item1);
}
var lv = new ListViewItem();
lv.Text = "1";
lv.SubItems.Add(name);
lv.SubItems.Add(this.textBox1.Text);
lv.SubItems.Add("");
listView2.Items.Add(lv);
this.hotkeyModel = Startup.instance.hotkeyModel;
SaveShortcutKeys();
}
}
///
/// 保存快捷键
///
private void SaveShortcutKeys()
{
string hotkeyModelXml = XmlSerializeHelper.XmlSerialize(hotkeyModel);
string filePath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\Hotkey.xml";
if (!FileOperationHelper.WriteStringToFile(hotkeyModelXml, filePath, FileMode.Create))
{
MessageBox.Show(PdnResources.GetString("Menu.Failedtosaveshortcutkeyinformation.text"));
}
}
///
/// 删除快捷键
///
///
///
private void button7_Click(object sender, EventArgs e)
{
//TreeNode node = this.treeViewRight.SelectedNode;
if (!this.label1.Text.Equals(PdnResources.GetString("Menu.arenotmaintained.text")) && !this.label1.Text.Equals(""))
{
HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.label1.Text));
if (item == null)
return;
if (MessageBox.Show(PdnResources.GetString("Menu.suretodeletethesho.text")+"?", PdnResources.GetString("Menu.suredeletit.Text"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK)
{
if (item != null && item.HotKeys == this.label1.Text)
{
foreach (ListViewItem item22 in listView2.Items)
{
if (item22.Tag.ToString().Equals(item.HotKeys))
{
listView2.Items.Remove(item22);
break;
}
}
Startup.instance.hotkeyModel.items.Remove(item);
ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
if (menu != null && menu.Length > 0)
{
((PdnMenuItem)menu[0]).resetShortcutKeys("");
}
SaveShortcutKeys();
this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text");
return;
}
}
}
//<<- //#18266
//TreeNode node = this.treeViewRight.SelectedNode;
//if (node != null)
//{
// if (MessageBox.Show("确认删除快捷键吗,删除后不可恢复?", "确定", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK)
// {
// int menuId = (int)this.treeViewRight.SelectedNode.Tag;
// HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
// if (item != null && item.HotKeys == this.label1.Text)
// {
// foreach (ListViewItem item22 in listView2.Items)
// {
// if (item22.Tag.ToString().Equals(item.HotKeys))
// {
// listView2.Items.Remove(item22);
// break;
// }
// }
// Startup.instance.hotkeyModel.items.Remove(item);
// ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
// if (menu != null && menu.Length > 0)
// {
// ((PdnMenuItem)menu[0]).resetShortcutKeys("");
// }
// SaveShortcutKeys();
// this.label1.Text = "暂未维护快捷键";
// return;
// }
// }
//}
//if (this.listView2.SelectedItems.Count > 0)
//{
// foreach (ListViewItem item1 in listView2.SelectedItems)
// {
// HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys == item1.Tag);
// if (item != null)
// {
// listView2.Items.Remove(item1);
// Startup.instance.hotkeyModel.items.Remove(item);
// ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
// if (menu != null && menu.Length > 0)
// {
// ((PdnMenuItem)menu[0]).resetShortcutKeys("");
// }
// SaveShortcutKeys();
// this.label1.Text = "暂未维护快捷键";
// break;
// }
// }
//}
}
///
/// 导出配置
///
///
public void ExportToolbarXml()
{
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
saveFileDialog.Filter = "Xml(*.xml)|*.xml";
saveFileDialog.DefaultExt = "xml";
saveFileDialog.FilterIndex = 1;
saveFileDialog.CheckFileExists = false;
saveFileDialog.AddExtension = true;
saveFileDialog.FileName = "Hotkey";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = saveFileDialog.FileName;
string toolbarXml = XmlSerializeHelper.XmlSerialize(Startup.instance.hotkeyModel);
if (FileOperationHelper.WriteStringToFile(toolbarXml, filePath, FileMode.Create))
MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysuccessfully.text"));
else
MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeyconfigurationfilefailedtosave.text"));
}
}
}
///
/// 导入配置
///
///
public void ImportToolbarXml()
{
using (var openFileDialog = new OpenFileDialog { Filter = "*.xml|*.xml" })
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
using (Stream shortKeyStream = System.IO.File.OpenRead(openFileDialog.FileName))
{
StreamReader sr = new StreamReader(shortKeyStream);
string xmlNotes = sr.ReadToEnd();
HotkeyModel toolbarXml = XmlSerializeHelper.DESerializer(xmlNotes);
if (toolbarXml.items.Count > 0)
{
try
{
Startup.instance.hotkeyModel = toolbarXml;
this.hotkeyModel = toolbarXml;
this.listView2.Items.Clear();
this.listView2.BeginUpdate();
foreach (HotkeyModel.Item s in toolbarXml.items)
{
var lv = new ListViewItem();
lv.Tag = s.HotKeys;
lv.Text = "1";
lv.SubItems.Add(s.MenuName);
lv.SubItems.Add(s.HotKeys);
lv.SubItems.Add("");
this.listView2.Items.Add(lv);
ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(s.Description, true);
if (menu != null && menu.Length > 0)
{
((PdnMenuItem)menu[0]).resetShortcutKeys(s.HotKeys);
}
}
this.listView2.EndUpdate();
SaveShortcutKeys();
MessageBox.Show(PdnResources.GetString("Menu.Shortcutprofileimportedsuccessfully.text"));
}
catch(Exception)
{
MessageBox.Show(PdnResources.GetString("Menu.Theshortcutconfigurationfileimportfailed.text"));
}
}
else
{
MessageBox.Show(PdnResources.GetString("Menu.onfiguratiofilesavedconfiguratio.text"));
}
}
}
}
}
}
}