ShortKeys.cs 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043
  1. using Resources;
  2. using SmartCoalApplication.Base.CommTool;
  3. using SmartCoalApplication.Base.SettingModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. namespace SmartCoalApplication.Instrument.CustomInterface
  15. {
  16. internal class ShortKeys : UserControl
  17. {
  18. private AppWorkspace appWorkspace;
  19. /// <summary>
  20. /// 右侧树形菜单
  21. /// </summary>
  22. private ToolStripItemCollection collectionRight;
  23. /// <summary>
  24. /// 设置热键的标记
  25. /// </summary>
  26. private bool setHotKey = false;
  27. /// <summary>
  28. /// 为当前菜单设置的热键的list
  29. /// </summary>
  30. private List<string> hotKeys = new List<string>();
  31. private Panel panel1;
  32. private GroupBox groupBox3;
  33. private Label label1;
  34. private Button button7;
  35. private GroupBox groupBox4;
  36. private Label label3;
  37. private TextBox textBox1;
  38. private Button button8;
  39. private GroupBox groupBox5;
  40. private Label label2;
  41. private GroupBox groupBox7;
  42. private TreeView treeViewRight;
  43. private ListView listView2;
  44. private GroupBox groupBox6;
  45. private HotkeyModel hotkeyModel = Program.instance.hotkeyModel;
  46. private string txtPath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\ModuleConfig.txt";
  47. private string[] menuIdArr;
  48. public ShortKeys(AppWorkspace appWorkspace)
  49. {
  50. this.appWorkspace = appWorkspace;
  51. InitializeComponent();
  52. InitializeLanguageText();
  53. InitVisibleMenuId();
  54. InitializeTreeData();
  55. listView2.View = View.Details;
  56. listView2.Columns.Add("0", 0, HorizontalAlignment.Center);
  57. listView2.Columns.Add(PdnResources.GetString("Menu.tool.Generateshortcut.function.text"), 150, HorizontalAlignment.Center);
  58. listView2.Columns.Add(PdnResources.GetString("Menu.hotkey.text"), 200, HorizontalAlignment.Center);
  59. listView2.BeginUpdate();
  60. foreach (HotkeyModel.Item s in hotkeyModel.items)
  61. {
  62. var lv = new ListViewItem();
  63. lv.Tag = s.HotKeys;
  64. lv.Text = "1";
  65. lv.SubItems.Add(s.MenuName);
  66. lv.SubItems.Add(s.HotKeys);
  67. lv.SubItems.Add("");
  68. listView2.Items.Add(lv);
  69. }
  70. listView2.EndUpdate();
  71. }
  72. /// <summary>
  73. /// 获取txt文件中已保存的菜单可用id
  74. /// </summary>
  75. private void InitVisibleMenuId()
  76. {
  77. if (System.IO.File.Exists(txtPath))
  78. {
  79. string str = System.IO.File.ReadAllText(txtPath);
  80. if (str.IndexOf(',') != -1)
  81. {
  82. menuIdArr = str.Split(',');
  83. }
  84. else
  85. {
  86. if (!string.IsNullOrEmpty(str))
  87. {
  88. menuIdArr = new string[] { str };
  89. }
  90. }
  91. }
  92. }
  93. /// <summary>
  94. /// 初始化树形菜单数据
  95. /// </summary>
  96. private void InitializeTreeData()
  97. {
  98. this.collectionRight = this.appWorkspace.ToolBar.MainMenu.Items;
  99. TreeNode anime = new TreeNode(PdnResources.GetString("Menu.menu.Text"));
  100. this.RecursiveData(collectionRight, anime);
  101. anime.Expand();
  102. this.treeViewRight.Nodes.Add(anime);
  103. }
  104. /// <summary>
  105. /// 递归进行数据组织
  106. /// </summary>
  107. private void RecursiveData(ToolStripItemCollection collection, TreeNode anime)
  108. {
  109. //for (int i = 0; i < collection.Count; i++)
  110. //{
  111. // //排除掉最近打开的文件,或者可以用数字id判断更准确
  112. // if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection"))
  113. // {
  114. // if (collection[i].GetType() != typeof(ToolStripSeparator) && ((PdnMenuItem)collection[i]).CanShowInSenseShield)
  115. // {
  116. // TreeNode node = new TreeNode();
  117. // node.Name = collection[i].Name;
  118. // node.Text = collection[i].Text;
  119. // node.Tag = ((PdnMenuItem)collection[i]).MenuId;
  120. // anime.Nodes.Add(node);
  121. // RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node);
  122. // }
  123. // }
  124. //}
  125. for (int i = 0; i < collection.Count; i++)
  126. {
  127. //排除掉最近打开的文件,或者可以用数字id判断更准确
  128. if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection"))
  129. {
  130. TreeNode node = new TreeNode(/*collection[i].Text*/);
  131. if (collection[i].GetType() != typeof(ToolStripSeparator))
  132. {
  133. PdnMenuItem item = (PdnMenuItem)collection[i];
  134. if (!item.CanShowInSenseShield)
  135. continue;
  136. node.Tag = item.MenuId;
  137. if (menuIdArr != null && menuIdArr.Length > 0)
  138. {
  139. if (Array.IndexOf(menuIdArr, item.MenuId.ToString()) != -1)
  140. {
  141. node.Name = collection[i].Name;
  142. node.Text = collection[i].Text;
  143. node.Tag = ((PdnMenuItem)collection[i]).MenuId;
  144. node.Checked = true;
  145. }
  146. else
  147. {
  148. node.Checked = false;
  149. }
  150. }
  151. if (node.Checked)
  152. {
  153. anime.Nodes.Add(node);
  154. }
  155. if (collection[i].Name.Equals("OpenRecent") || collection[i].Name.Equals("CameraSelection"))
  156. continue;
  157. RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node);
  158. }
  159. }
  160. }
  161. }
  162. #region 组件设计器生成的代码
  163. private void InitializeLanguageText()
  164. {
  165. this.groupBox3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Theselectcutkey.text");
  166. this.button7.Text = PdnResources.GetString("Menu.Edit.Delete.Text");
  167. this.groupBox4.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Maintainshortcut.text");
  168. this.label3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.ThehotkeorAlt:orF*.text");
  169. this.button8.Text = PdnResources.GetString("Menu.Setting.Text");
  170. this.groupBox5.Text = PdnResources.GetString("Menu.Thisshortcutkeyhasbeenappliedto.text");
  171. this.groupBox7.Text = PdnResources.GetString("Menu.Availablefunctions.text");
  172. this.groupBox6.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Listofallfortcutkeys.text");
  173. }
  174. /// <summary>
  175. /// 设计器支持所需的方法 - 不要修改
  176. /// 使用代码编辑器修改此方法的内容。
  177. /// </summary>
  178. private void InitializeComponent()
  179. {
  180. this.panel1 = new System.Windows.Forms.Panel();
  181. this.groupBox3 = new System.Windows.Forms.GroupBox();
  182. this.label1 = new System.Windows.Forms.Label();
  183. this.button7 = new System.Windows.Forms.Button();
  184. this.groupBox4 = new System.Windows.Forms.GroupBox();
  185. this.label3 = new System.Windows.Forms.Label();
  186. this.textBox1 = new System.Windows.Forms.TextBox();
  187. this.button8 = new System.Windows.Forms.Button();
  188. this.groupBox5 = new System.Windows.Forms.GroupBox();
  189. this.label2 = new System.Windows.Forms.Label();
  190. this.groupBox7 = new System.Windows.Forms.GroupBox();
  191. this.treeViewRight = new System.Windows.Forms.TreeView();
  192. this.listView2 = new System.Windows.Forms.ListView();
  193. this.groupBox6 = new System.Windows.Forms.GroupBox();
  194. this.panel1.SuspendLayout();
  195. this.groupBox3.SuspendLayout();
  196. this.groupBox4.SuspendLayout();
  197. this.groupBox5.SuspendLayout();
  198. this.groupBox7.SuspendLayout();
  199. this.SuspendLayout();
  200. //
  201. // panel1
  202. //
  203. this.panel1.Controls.Add(this.groupBox3);
  204. this.panel1.Controls.Add(this.groupBox4);
  205. this.panel1.Controls.Add(this.groupBox5);
  206. this.panel1.Controls.Add(this.groupBox7);
  207. this.panel1.Controls.Add(this.groupBox6);
  208. this.panel1.Location = new System.Drawing.Point(0, 0);
  209. this.panel1.Name = "panel1";
  210. this.panel1.Size = new System.Drawing.Size(623, 398);
  211. this.panel1.TabIndex = 0;
  212. //
  213. // groupBox3
  214. //
  215. this.groupBox3.Controls.Add(this.label1);
  216. this.groupBox3.Controls.Add(this.button7);
  217. this.groupBox3.Location = new System.Drawing.Point(0, 3);
  218. this.groupBox3.Margin = new System.Windows.Forms.Padding(0);
  219. this.groupBox3.Name = "groupBox3";
  220. this.groupBox3.Size = new System.Drawing.Size(361, 58);
  221. this.groupBox3.TabIndex = 9;
  222. this.groupBox3.TabStop = false;
  223. this.groupBox3.Text = "所选功能快捷键";
  224. //
  225. // label1
  226. //
  227. this.label1.AutoSize = true;
  228. this.label1.Location = new System.Drawing.Point(9, 29);
  229. this.label1.Name = "label1";
  230. this.label1.Size = new System.Drawing.Size(0, 12);
  231. this.label1.TabIndex = 1;
  232. //
  233. // button7
  234. //
  235. this.button7.Location = new System.Drawing.Point(267, 20);
  236. this.button7.Name = "button7";
  237. this.button7.Size = new System.Drawing.Size(75, 23);
  238. this.button7.TabIndex = 0;
  239. this.button7.Text = "删除";
  240. this.button7.UseVisualStyleBackColor = true;
  241. this.button7.Click += button7_Click;
  242. //
  243. // groupBox4
  244. //
  245. this.groupBox4.Controls.Add(this.label3);
  246. this.groupBox4.Controls.Add(this.textBox1);
  247. this.groupBox4.Controls.Add(this.button8);
  248. this.groupBox4.Location = new System.Drawing.Point(0, 67);
  249. this.groupBox4.Name = "groupBox4";
  250. this.groupBox4.Size = new System.Drawing.Size(361, 76);
  251. this.groupBox4.TabIndex = 10;
  252. this.groupBox4.TabStop = false;
  253. this.groupBox4.Text = "维护快捷键";
  254. //
  255. // label3
  256. //
  257. this.label3.AutoSize = true;
  258. this.label3.Location = new System.Drawing.Point(9, 50);
  259. this.label3.Name = "label3";
  260. this.label3.Size = new System.Drawing.Size(293, 12);
  261. this.label3.TabIndex = 2;
  262. this.label3.Text = "快捷键必须包含Ctrl或Alt; 或F*";
  263. //
  264. // textBox1
  265. //
  266. this.textBox1.Location = new System.Drawing.Point(9, 22);
  267. this.textBox1.Name = "textBox1";
  268. this.textBox1.ReadOnly = true;
  269. this.textBox1.Size = new System.Drawing.Size(252, 21);
  270. this.textBox1.TabIndex = 1;
  271. this.textBox1.KeyUp += textBox1_KeyUp;
  272. this.textBox1.KeyDown += textBox1_KeyDown;
  273. //
  274. // button8
  275. //
  276. this.button8.Enabled = false;
  277. this.button8.Location = new System.Drawing.Point(267, 22);
  278. this.button8.Name = "button8";
  279. this.button8.Size = new System.Drawing.Size(75, 23);
  280. this.button8.TabIndex = 0;
  281. this.button8.Text = "设置";
  282. this.button8.UseVisualStyleBackColor = true;
  283. this.button8.Click += Button8_Click;
  284. //
  285. // groupBox5
  286. //
  287. this.groupBox5.Controls.Add(this.label2);
  288. this.groupBox5.Location = new System.Drawing.Point(0, 149);
  289. this.groupBox5.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
  290. this.groupBox5.Name = "groupBox5";
  291. this.groupBox5.Size = new System.Drawing.Size(361, 58);
  292. this.groupBox5.TabIndex = 11;
  293. this.groupBox5.TabStop = false;
  294. this.groupBox5.Text = "此快捷键已应用至";
  295. //
  296. // label2
  297. //
  298. this.label2.AutoSize = true;
  299. this.label2.Location = new System.Drawing.Point(9, 29);
  300. this.label2.Name = "label2";
  301. this.label2.Size = new System.Drawing.Size(0, 12);
  302. this.label2.TabIndex = 0;
  303. //
  304. // groupBox7
  305. //
  306. this.groupBox7.Controls.Add(this.treeViewRight);
  307. this.groupBox7.Location = new System.Drawing.Point(367, 0);
  308. this.groupBox7.Name = "groupBox7";
  309. this.groupBox7.Size = new System.Drawing.Size(256, 401);
  310. this.groupBox7.TabIndex = 13;
  311. this.groupBox7.TabStop = false;
  312. this.groupBox7.Text = "可用功能";
  313. //
  314. // treeView1
  315. //
  316. this.treeViewRight.Location = new System.Drawing.Point(7, 20);
  317. this.treeViewRight.Name = "treeView1";
  318. this.treeViewRight.Size = new System.Drawing.Size(243, 372);
  319. this.treeViewRight.TabIndex = 0;
  320. this.treeViewRight.NodeMouseClick += treeView1_NodeMouseClick;
  321. this.treeViewRight.HideSelection = false;
  322. this.treeViewRight.DrawMode = TreeViewDrawMode.OwnerDrawText;
  323. this.treeViewRight.DrawNode += new DrawTreeNodeEventHandler(this.treeViewRight_DrawNode);
  324. //
  325. // groupBox6
  326. //
  327. this.groupBox6.Controls.Add(this.listView2);
  328. this.groupBox6.Location = new System.Drawing.Point(0, 211);
  329. this.groupBox6.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
  330. this.groupBox6.Name = "groupBox6";
  331. this.groupBox6.Size = new System.Drawing.Size(361, 187);
  332. this.groupBox6.TabIndex = 12;
  333. this.groupBox6.TabStop = false;
  334. this.groupBox6.Text = "所有已指派快捷键的功能列表";
  335. //
  336. // listView2
  337. //
  338. this.listView2.FullRowSelect = true;
  339. this.listView2.HideSelection = false;
  340. this.listView2.Location = new System.Drawing.Point(6, 20);
  341. this.listView2.MultiSelect = false;
  342. this.listView2.Name = "listView2";
  343. this.listView2.Size = new System.Drawing.Size(355/*382*/, 181/*441*/);
  344. this.listView2.TabIndex = 24;
  345. this.listView2.UseCompatibleStateImageBehavior = false;
  346. this.listView2.ItemSelectionChanged += ListView2_ItemSelectionChanged;
  347. //
  348. // ShortKeys
  349. //
  350. this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
  351. this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  352. this.Controls.Add(this.panel1);
  353. this.Margin = new System.Windows.Forms.Padding(0);
  354. this.Name = "ShortKeys";
  355. this.Size = new System.Drawing.Size(623, 398);
  356. this.panel1.ResumeLayout(false);
  357. this.groupBox3.ResumeLayout(false);
  358. this.groupBox3.PerformLayout();
  359. this.groupBox4.ResumeLayout(false);
  360. this.groupBox4.PerformLayout();
  361. this.groupBox5.ResumeLayout(false);
  362. this.groupBox5.PerformLayout();
  363. this.groupBox7.ResumeLayout(false);
  364. this.ResumeLayout(false);
  365. }
  366. /// <summary>
  367. /// 自定义绘制
  368. /// 参考https://www.cnblogs.com/JiYF/p/6693503.html
  369. /// </summary>
  370. /// <param name="sender"></param>
  371. /// <param name="e"></param>
  372. private void treeViewRight_DrawNode(object sender, DrawTreeNodeEventArgs e)
  373. {
  374. /**用默认颜色
  375. e.DrawDefault = true;
  376. return;
  377. **/
  378. //以下是自定义颜色
  379. if ((e.State & TreeNodeStates.Selected) != 0)
  380. {
  381. //演示为蓝(绿)底白字
  382. e.Graphics.FillRectangle(SystemBrushes.Highlight/*Brushes.Green*/, e.Node.Bounds);
  383. Font nodeFont = e.Node.NodeFont;
  384. if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
  385. e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width + 2, e.Bounds.Height), 0, 0));
  386. }
  387. else
  388. {
  389. e.DrawDefault = true;
  390. }
  391. if ((e.State & TreeNodeStates.Focused) != 0)
  392. {
  393. using (Pen focusPen = new Pen(Color.Black))
  394. {
  395. focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
  396. Rectangle focusBounds = e.Node.Bounds;
  397. focusBounds.Size = new Size(focusBounds.Width - 1,
  398. focusBounds.Height - 1);
  399. e.Graphics.DrawRectangle(focusPen, focusBounds);
  400. }
  401. }
  402. }
  403. /// <summary>
  404. /// 设置
  405. /// </summary>
  406. /// <param name="sender"></param>
  407. /// <param name="e"></param>
  408. private void Button8_Click(object sender, EventArgs e)
  409. {
  410. try
  411. {
  412. //throw new NotImplementedException();
  413. TreeNode node = this.treeViewRight.SelectedNode;
  414. if (node != null)
  415. {
  416. //判断快捷键是否已经被使用
  417. HotkeyModel.Item isExsit = Program.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text));
  418. if (isExsit != null)
  419. {
  420. MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysarealreadyiuse.text"));
  421. return;
  422. }
  423. int menuId = (int)this.treeViewRight.SelectedNode.Tag;
  424. string desc = this.treeViewRight.SelectedNode.Name;
  425. string name = this.treeViewRight.SelectedNode.Text;
  426. //设置快捷键
  427. ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(desc, true);
  428. if (menu != null && menu.Length > 0)
  429. {
  430. ((PdnMenuItem)menu[0]).resetShortcutKeys(this.textBox1.Text);
  431. }
  432. SaveShortcutKeys();
  433. //处理界面数据
  434. HotkeyModel.Item item = Program.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
  435. if (item != null)
  436. {
  437. foreach (ListViewItem item1 in listView2.Items)
  438. {
  439. if (item1.SubItems[2].Text.Equals(item.HotKeys))
  440. {
  441. item1.SubItems[2].Text = this.textBox1.Text;
  442. break;
  443. }
  444. }
  445. item.HotKeys = this.textBox1.Text;
  446. }
  447. else
  448. {
  449. HotkeyModel.Item item1 = new HotkeyModel.Item();
  450. item1.MenuId = menuId;
  451. item1.MenuName = name;
  452. item1.Description = desc;
  453. item1.HotKeys = this.textBox1.Text;
  454. Program.instance.hotkeyModel.items.Add(item1);
  455. this.hotkeyModel = Program.instance.hotkeyModel;
  456. SaveShortcutKeys();
  457. var lv = new ListViewItem();
  458. lv.Tag = this.textBox1.Text;
  459. lv.Text = "1";
  460. lv.SubItems.Add(name);
  461. lv.SubItems.Add(this.textBox1.Text);
  462. lv.SubItems.Add("");
  463. listView2.Items.Add(lv);
  464. }
  465. }
  466. }
  467. catch (Exception)
  468. {
  469. MessageBox.Show(PdnResources.GetString("Menu.conformtotherulespleasecheck.text") + "!");
  470. }
  471. }
  472. private void ListView2_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
  473. {
  474. //throw new NotImplementedException();
  475. listView2.FullRowSelect = true;
  476. if (this.listView2.SelectedItems.Count > 0)
  477. {
  478. foreach (ListViewItem item in listView2.Items)
  479. {
  480. if (item.Selected)
  481. {
  482. this.label1.Text = item.Tag as string;
  483. break;
  484. }
  485. }
  486. }
  487. }
  488. #endregion
  489. /// <summary>
  490. /// 按键抬起事件,需判断是否合法
  491. /// 快捷键必须包含ctrl或alt;或back、delete、esc、F*
  492. /// </summary>
  493. /// <param name="sender"></param>
  494. /// <param name="e"></param>
  495. private void textBox1_KeyUp(object sender, KeyEventArgs e)
  496. {
  497. setHotKey = false;
  498. //检测合法性
  499. //e.Handled = true;
  500. e.SuppressKeyPress = true;
  501. //检测是否被占用
  502. HotkeyModel.Item item = Program.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text));
  503. if (item != null)
  504. {
  505. this.label2.Text = item.MenuName;
  506. this.button8.Enabled = false;
  507. }
  508. else
  509. {
  510. this.label2.Text = PdnResources.GetString("Menu.Nofunctionaluse.text");
  511. List<List<Keys>> keysAll = new List<List<Keys>>()
  512. {
  513. new List<Keys>() { Keys.Alt, Keys.D0 },
  514. new List<Keys>() { Keys.Alt, Keys.D1},
  515. new List<Keys>() { Keys.Alt, Keys.D2},
  516. new List<Keys>() { Keys.Alt, Keys.D3},
  517. new List<Keys>() { Keys.Alt, Keys.D4},
  518. new List<Keys>() { Keys.Alt, Keys.D5},
  519. new List<Keys>() { Keys.Alt, Keys.D6},
  520. new List<Keys>() { Keys.Alt, Keys.D7},
  521. new List<Keys>() { Keys.Alt, Keys.D8},
  522. new List<Keys>() { Keys.Alt, Keys.D9},
  523. new List<Keys>() { Keys.Alt, Keys.Back},
  524. new List<Keys>() { Keys.Alt, Keys.Down},
  525. new List<Keys>() { Keys.Alt, Keys.F1},
  526. new List<Keys>() { Keys.Alt, Keys.F10},
  527. new List<Keys>() { Keys.Alt, Keys.F11},
  528. new List<Keys>() { Keys.Alt, Keys.F12},
  529. new List<Keys>() { Keys.Alt, Keys.F2},
  530. new List<Keys>() { Keys.Alt, Keys.F3},
  531. new List<Keys>() { Keys.Alt, Keys.F4},
  532. new List<Keys>() { Keys.Alt, Keys.F5},
  533. new List<Keys>() { Keys.Alt, Keys.F6},
  534. new List<Keys>() { Keys.Alt, Keys.F7},
  535. new List<Keys>() { Keys.Alt, Keys.F8},
  536. new List<Keys>() { Keys.Alt, Keys.F9},
  537. new List<Keys>() { Keys.Alt, Keys.Left},
  538. new List<Keys>() { Keys.Alt, Keys.Right},
  539. new List<Keys>() { Keys.Alt, Keys.Up},
  540. new List<Keys>() { Keys.Control, Keys.D0},
  541. new List<Keys>() { Keys.Control, Keys.D1},
  542. new List<Keys>() { Keys.Control, Keys.D2},
  543. new List<Keys>() { Keys.Control, Keys.D3},
  544. new List<Keys>() { Keys.Control, Keys.D4},
  545. new List<Keys>() { Keys.Control, Keys.D5},
  546. new List<Keys>() { Keys.Control, Keys.D6},
  547. new List<Keys>() { Keys.Control, Keys.D7},
  548. new List<Keys>() { Keys.Control, Keys.D8},
  549. new List<Keys>() { Keys.Control, Keys.D9},
  550. new List<Keys>() { Keys.Control, Keys.A},
  551. new List<Keys>() { Keys.Control, Keys.B},
  552. new List<Keys>() { Keys.Control, Keys.C},
  553. new List<Keys>() { Keys.Control, Keys.D},
  554. new List<Keys>() { Keys.Control, Keys.Delete},
  555. new List<Keys>() { Keys.Control, Keys.E},
  556. new List<Keys>() { Keys.Control, Keys.F},
  557. new List<Keys>() { Keys.Control, Keys.F1},
  558. new List<Keys>() { Keys.Control, Keys.F10},
  559. new List<Keys>() { Keys.Control, Keys.F11},
  560. new List<Keys>() { Keys.Control, Keys.F12},
  561. new List<Keys>() { Keys.Control, Keys.F2},
  562. new List<Keys>() { Keys.Control, Keys.F3},
  563. new List<Keys>() { Keys.Control, Keys.F4},
  564. new List<Keys>() { Keys.Control, Keys.F5},
  565. new List<Keys>() { Keys.Control, Keys.F6},
  566. new List<Keys>() { Keys.Control, Keys.F7},
  567. new List<Keys>() { Keys.Control, Keys.F8},
  568. new List<Keys>() { Keys.Control, Keys.F9},
  569. new List<Keys>() { Keys.Control, Keys.G},
  570. new List<Keys>() { Keys.Control, Keys.H},
  571. new List<Keys>() { Keys.Control, Keys.I},
  572. new List<Keys>() { Keys.Control, Keys.Insert},
  573. new List<Keys>() { Keys.Control, Keys.J},
  574. new List<Keys>() { Keys.Control, Keys.K},
  575. new List<Keys>() { Keys.Control, Keys.L},
  576. new List<Keys>() { Keys.Control, Keys.M},
  577. new List<Keys>() { Keys.Control, Keys.N},
  578. new List<Keys>() { Keys.Control, Keys.O},
  579. new List<Keys>() { Keys.Control, Keys.P},
  580. new List<Keys>() { Keys.Control, Keys.Q},
  581. new List<Keys>() { Keys.Control, Keys.R},
  582. new List<Keys>() { Keys.Control, Keys.S},
  583. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D0},
  584. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D1},
  585. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D2},
  586. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D3},
  587. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D4},
  588. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D5},
  589. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D6},
  590. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D7},
  591. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D8},
  592. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D9},
  593. new List<Keys>() { Keys.Control, Keys.Shift, Keys.A},
  594. new List<Keys>() { Keys.Control, Keys.Shift, Keys.B},
  595. new List<Keys>() { Keys.Control, Keys.Shift, Keys.C},
  596. new List<Keys>() { Keys.Control, Keys.Shift, Keys.D},
  597. new List<Keys>() { Keys.Control, Keys.Shift, Keys.E},
  598. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F},
  599. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F1},
  600. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F10},
  601. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F11},
  602. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F12},
  603. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F2},
  604. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F3},
  605. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F4},
  606. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F5},
  607. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F6},
  608. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F7},
  609. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F8},
  610. new List<Keys>() { Keys.Control, Keys.Shift, Keys.F9},
  611. new List<Keys>() { Keys.Control, Keys.Shift, Keys.G},
  612. new List<Keys>() { Keys.Control, Keys.Shift, Keys.H},
  613. new List<Keys>() { Keys.Control, Keys.Shift, Keys.I},
  614. new List<Keys>() { Keys.Control, Keys.Shift, Keys.J},
  615. new List<Keys>() { Keys.Control, Keys.Shift, Keys.K},
  616. new List<Keys>() { Keys.Control, Keys.Shift, Keys.L},
  617. new List<Keys>() { Keys.Control, Keys.Shift, Keys.M},
  618. new List<Keys>() { Keys.Control, Keys.Shift, Keys.N},
  619. new List<Keys>() { Keys.Control, Keys.Shift, Keys.O},
  620. new List<Keys>() { Keys.Control, Keys.Shift, Keys.P},
  621. new List<Keys>() { Keys.Control, Keys.Shift, Keys.Q},
  622. new List<Keys>() { Keys.Control, Keys.Shift, Keys.R},
  623. new List<Keys>() { Keys.Control, Keys.Shift, Keys.S},
  624. new List<Keys>() { Keys.Control, Keys.Shift, Keys.T},
  625. new List<Keys>() { Keys.Control, Keys.Shift, Keys.U},
  626. new List<Keys>() { Keys.Control, Keys.Shift, Keys.V},
  627. new List<Keys>() { Keys.Control, Keys.Shift, Keys.W},
  628. new List<Keys>() { Keys.Control, Keys.Shift, Keys.X},
  629. new List<Keys>() { Keys.Control, Keys.Shift, Keys.Y},
  630. new List<Keys>() { Keys.Control, Keys.Shift, Keys.Z},
  631. new List<Keys>() { Keys.Control, Keys.T},
  632. new List<Keys>() { Keys.Control, Keys.U},
  633. new List<Keys>() { Keys.Control, Keys.V},
  634. new List<Keys>() { Keys.Control, Keys.W},
  635. new List<Keys>() { Keys.Control, Keys.X},
  636. new List<Keys>() { Keys.Control, Keys.Y},
  637. new List<Keys>() { Keys.Control, Keys.Z},
  638. new List<Keys>() { Keys.Delete},
  639. new List<Keys>() { Keys.F1},
  640. new List<Keys>() { Keys.F10},
  641. new List<Keys>() { Keys.F11},
  642. new List<Keys>() { Keys.F12},
  643. new List<Keys>() { Keys.F2},
  644. new List<Keys>() { Keys.F3},
  645. new List<Keys>() { Keys.F4},
  646. new List<Keys>() { Keys.F5},
  647. new List<Keys>() { Keys.F6},
  648. new List<Keys>() { Keys.F7},
  649. new List<Keys>() { Keys.F8},
  650. new List<Keys>() { Keys.F9},
  651. new List<Keys>() { Keys.Insert},
  652. new List<Keys>() { Keys.None},
  653. new List<Keys>() { Keys.Shift | Keys.Delete},
  654. new List<Keys>() { Keys.Shift | Keys.F1},
  655. new List<Keys>() { Keys.Shift | Keys.F10},
  656. new List<Keys>() { Keys.Shift | Keys.F11},
  657. new List<Keys>() { Keys.Shift | Keys.F12},
  658. new List<Keys>() { Keys.Shift | Keys.F2},
  659. new List<Keys>() { Keys.Shift | Keys.F3},
  660. new List<Keys>() { Keys.Shift | Keys.F4},
  661. new List<Keys>() { Keys.Shift | Keys.F5},
  662. new List<Keys>() { Keys.Shift | Keys.F6},
  663. new List<Keys>() { Keys.Shift | Keys.F7},
  664. new List<Keys>() { Keys.Shift | Keys.F8},
  665. new List<Keys>() { Keys.Shift | Keys.F9},
  666. new List<Keys>() { Keys.Shift | Keys.Insert}
  667. };
  668. string itemHotKeys = this.textBox1.Text;
  669. List<List<Keys>> keysFound = new List<List<Keys>>();
  670. if (itemHotKeys != null && !itemHotKeys.Equals(""))
  671. {
  672. string[] keys = itemHotKeys.Trim().Split('+');
  673. Keys Key = Keys.None;
  674. //寻找匹配的按键组合
  675. int keyIndex = 0;
  676. foreach (string key in keys)
  677. {
  678. if (Key == Keys.None)
  679. {
  680. Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim()));
  681. //寻找可能匹配的按键组合
  682. foreach (var itemList in keysAll)
  683. {
  684. if (itemList.Contains(Key) && itemList.IndexOf(Key) == keyIndex && itemList.Count == keys.Length)
  685. keysFound.Add(itemList);
  686. }
  687. }
  688. else
  689. {
  690. Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim()));
  691. //删除不匹配的按键组合
  692. for (int i = keysFound.Count - 1; i >= 0; i--)
  693. {
  694. var itemList = keysFound[i];
  695. if (!itemList.Contains(Key) || itemList.IndexOf(Key) != keyIndex)
  696. keysFound.RemoveAt(i);
  697. }
  698. }
  699. keyIndex++;
  700. }
  701. //没有找到匹配的按键组合
  702. if (keysFound.Count != 1)
  703. {
  704. this.textBox1.Text = "";
  705. }
  706. }
  707. this.button8.Enabled = !this.textBox1.Text.Equals("");
  708. }
  709. }
  710. /// <summary>
  711. /// 维护快捷键的textbox的按键按下事件
  712. /// </summary>
  713. /// <param name="sender"></param>
  714. /// <param name="e"></param>
  715. private void textBox1_KeyDown(object sender, KeyEventArgs e)
  716. {
  717. if (!setHotKey)
  718. {
  719. setHotKey = true;
  720. this.textBox1.Text = "";
  721. this.hotKeys.Clear();
  722. }
  723. string keyString = e.KeyCode.ToString();
  724. if (keyString.Equals("ControlKey"))
  725. {
  726. keyString = "Control";
  727. }
  728. if (keyString.Equals("ShiftKey"))
  729. {
  730. keyString = "Shift";
  731. }
  732. if (keyString.Equals("Menu"))
  733. {
  734. keyString = "Alt";
  735. }
  736. if (setHotKey && !keyString.Equals("") && this.hotKeys.IndexOf(keyString) == -1)
  737. {
  738. this.hotKeys.Add(keyString);
  739. if (this.textBox1.Text.Equals(""))
  740. {
  741. this.textBox1.Text = keyString;
  742. }
  743. else
  744. {
  745. this.textBox1.Text += " + " + keyString;
  746. }
  747. }
  748. this.button8.Enabled = !this.textBox1.Text.Equals("");
  749. }
  750. private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
  751. {
  752. int menuId = (e.Node.Tag != null) ? (int)(e.Node.Tag) : 0;
  753. if (menuId > 0)
  754. {
  755. if (Program.instance.hotkeyModel != null
  756. && Program.instance.hotkeyModel.items != null
  757. && Program.instance.hotkeyModel.items.Count > 0)
  758. {
  759. HotkeyModel.Item item = Program.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
  760. if (item != null)
  761. {
  762. this.label1.Text = item.HotKeys;
  763. }
  764. else
  765. {
  766. this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text");
  767. }
  768. }
  769. }
  770. }
  771. /// <summary>
  772. /// 设置快捷键
  773. /// </summary>
  774. /// <param name="sender"></param>
  775. /// <param name="e"></param>
  776. private void button8_MouseClick(object sender, MouseEventArgs e)
  777. {
  778. TreeNode node = this.treeViewRight.SelectedNode;
  779. if (node != null)
  780. {
  781. int menuId = (int)this.treeViewRight.SelectedNode.Tag;
  782. string desc = this.treeViewRight.SelectedNode.Name;
  783. string name = this.treeViewRight.SelectedNode.Text;
  784. HotkeyModel.Item item = Program.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
  785. if (item != null)
  786. {
  787. item.HotKeys = this.textBox1.Text;
  788. }
  789. else
  790. {
  791. HotkeyModel.Item item1 = new HotkeyModel.Item();
  792. item1.MenuId = menuId;
  793. item1.MenuName = name;
  794. item1.Description = desc;
  795. item1.HotKeys = this.textBox1.Text;
  796. Program.instance.hotkeyModel.items.Add(item1);
  797. }
  798. var lv = new ListViewItem();
  799. lv.Text = "1";
  800. lv.SubItems.Add(name);
  801. lv.SubItems.Add(this.textBox1.Text);
  802. lv.SubItems.Add("");
  803. listView2.Items.Add(lv);
  804. this.hotkeyModel = Program.instance.hotkeyModel;
  805. SaveShortcutKeys();
  806. }
  807. }
  808. /// <summary>
  809. /// 保存快捷键
  810. /// </summary>
  811. private void SaveShortcutKeys()
  812. {
  813. string hotkeyModelXml = XmlSerializeHelper.XmlSerialize<HotkeyModel>(hotkeyModel);
  814. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\Hotkey.xml";
  815. if (!FileOperationHelper.WriteStringToFile(hotkeyModelXml, filePath, FileMode.Create))
  816. {
  817. MessageBox.Show(PdnResources.GetString("Menu.Failedtosaveshortcutkeyinformation.text"));
  818. }
  819. }
  820. /// <summary>
  821. /// 删除快捷键
  822. /// </summary>
  823. /// <param name="sender"></param>
  824. /// <param name="e"></param>
  825. private void button7_Click(object sender, EventArgs e)
  826. {
  827. //TreeNode node = this.treeViewRight.SelectedNode;
  828. if (!this.label1.Text.Equals(PdnResources.GetString("Menu.arenotmaintained.text")) && !this.label1.Text.Equals(""))
  829. {
  830. HotkeyModel.Item item = Program.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.label1.Text));
  831. if (item == null)
  832. return;
  833. if (MessageBox.Show(PdnResources.GetString("Menu.suretodeletethesho.text") + "?", PdnResources.GetString("Menu.suredeletit.Text"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK)
  834. {
  835. if (item != null && item.HotKeys == this.label1.Text)
  836. {
  837. foreach (ListViewItem item22 in listView2.Items)
  838. {
  839. if (item22.Tag.ToString().Equals(item.HotKeys))
  840. {
  841. listView2.Items.Remove(item22);
  842. break;
  843. }
  844. }
  845. Program.instance.hotkeyModel.items.Remove(item);
  846. ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
  847. if (menu != null && menu.Length > 0)
  848. {
  849. ((PdnMenuItem)menu[0]).resetShortcutKeys("");
  850. }
  851. SaveShortcutKeys();
  852. this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text");
  853. return;
  854. }
  855. }
  856. }
  857. //<<- //#18266
  858. //TreeNode node = this.treeViewRight.SelectedNode;
  859. //if (node != null)
  860. //{
  861. // if (MessageBox.Show("确认删除快捷键吗,删除后不可恢复?", "确定", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK)
  862. // {
  863. // int menuId = (int)this.treeViewRight.SelectedNode.Tag;
  864. // HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId);
  865. // if (item != null && item.HotKeys == this.label1.Text)
  866. // {
  867. // foreach (ListViewItem item22 in listView2.Items)
  868. // {
  869. // if (item22.Tag.ToString().Equals(item.HotKeys))
  870. // {
  871. // listView2.Items.Remove(item22);
  872. // break;
  873. // }
  874. // }
  875. // Startup.instance.hotkeyModel.items.Remove(item);
  876. // ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
  877. // if (menu != null && menu.Length > 0)
  878. // {
  879. // ((PdnMenuItem)menu[0]).resetShortcutKeys("");
  880. // }
  881. // SaveShortcutKeys();
  882. // this.label1.Text = "暂未维护快捷键";
  883. // return;
  884. // }
  885. // }
  886. //}
  887. //if (this.listView2.SelectedItems.Count > 0)
  888. //{
  889. // foreach (ListViewItem item1 in listView2.SelectedItems)
  890. // {
  891. // HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys == item1.Tag);
  892. // if (item != null)
  893. // {
  894. // listView2.Items.Remove(item1);
  895. // Startup.instance.hotkeyModel.items.Remove(item);
  896. // ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true);
  897. // if (menu != null && menu.Length > 0)
  898. // {
  899. // ((PdnMenuItem)menu[0]).resetShortcutKeys("");
  900. // }
  901. // SaveShortcutKeys();
  902. // this.label1.Text = "暂未维护快捷键";
  903. // break;
  904. // }
  905. // }
  906. //}
  907. }
  908. /// <summary>
  909. /// 导出配置
  910. /// </summary>
  911. /// <returns></returns>
  912. public void ExportToolbarXml()
  913. {
  914. using (SaveFileDialog saveFileDialog = new SaveFileDialog())
  915. {
  916. saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  917. saveFileDialog.Filter = "Xml(*.xml)|*.xml";
  918. saveFileDialog.DefaultExt = "xml";
  919. saveFileDialog.FilterIndex = 1;
  920. saveFileDialog.CheckFileExists = false;
  921. saveFileDialog.AddExtension = true;
  922. saveFileDialog.FileName = "Hotkey";
  923. if (saveFileDialog.ShowDialog() == DialogResult.OK)
  924. {
  925. string filePath = saveFileDialog.FileName;
  926. string toolbarXml = XmlSerializeHelper.XmlSerialize<HotkeyModel>(Program.instance.hotkeyModel);
  927. if (FileOperationHelper.WriteStringToFile(toolbarXml, filePath, FileMode.Create))
  928. MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysuccessfully.text"));
  929. else
  930. MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeyconfigurationfilefailedtosave.text"));
  931. }
  932. }
  933. }
  934. /// <summary>
  935. /// 导入配置
  936. /// </summary>
  937. /// <returns></returns>
  938. public void ImportToolbarXml()
  939. {
  940. using (var openFileDialog = new OpenFileDialog { Filter = "*.xml|*.xml" })
  941. {
  942. if (openFileDialog.ShowDialog() == DialogResult.OK)
  943. {
  944. using (Stream shortKeyStream = System.IO.File.OpenRead(openFileDialog.FileName))
  945. {
  946. StreamReader sr = new StreamReader(shortKeyStream);
  947. string xmlNotes = sr.ReadToEnd();
  948. HotkeyModel toolbarXml = XmlSerializeHelper.DESerializer<HotkeyModel>(xmlNotes);
  949. if (toolbarXml.items.Count > 0)
  950. {
  951. try
  952. {
  953. Program.instance.hotkeyModel = toolbarXml;
  954. this.hotkeyModel = toolbarXml;
  955. this.listView2.Items.Clear();
  956. this.listView2.BeginUpdate();
  957. foreach (HotkeyModel.Item s in toolbarXml.items)
  958. {
  959. var lv = new ListViewItem();
  960. lv.Tag = s.HotKeys;
  961. lv.Text = "1";
  962. lv.SubItems.Add(s.MenuName);
  963. lv.SubItems.Add(s.HotKeys);
  964. lv.SubItems.Add("");
  965. this.listView2.Items.Add(lv);
  966. ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(s.Description, true);
  967. if (menu != null && menu.Length > 0)
  968. {
  969. ((PdnMenuItem)menu[0]).resetShortcutKeys(s.HotKeys);
  970. }
  971. }
  972. this.listView2.EndUpdate();
  973. SaveShortcutKeys();
  974. MessageBox.Show(PdnResources.GetString("Menu.Shortcutprofileimportedsuccessfully.text"));
  975. }
  976. catch (Exception)
  977. {
  978. MessageBox.Show(PdnResources.GetString("Menu.Theshortcutconfigurationfileimportfailed.text"));
  979. }
  980. }
  981. else
  982. {
  983. MessageBox.Show(PdnResources.GetString("Menu.onfiguratiofilesavedconfiguratio.text"));
  984. }
  985. }
  986. }
  987. }
  988. }
  989. }
  990. }