MacroList.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:15k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: MacroList.cs,v 1.2 2005/04/20 08:45:45 okajima Exp $
  4. */
  5. using System;
  6. using System.Drawing;
  7. using System.Collections;
  8. using System.ComponentModel;
  9. using System.Windows.Forms;
  10. using Poderosa.MacroEnv;
  11. using Poderosa.Config;
  12. using Poderosa.Toolkit;
  13. using Poderosa.UI;
  14. namespace Poderosa.Forms
  15. {
  16. /// <summary>
  17. /// MacroList 偺奣梫偺愢柧偱偡丅
  18. /// </summary>
  19. internal class MacroList : System.Windows.Forms.Form, IMacroEventListener
  20. {
  21. private System.Windows.Forms.Button _runButton;
  22. private System.Windows.Forms.Button _stopButton;
  23. private System.Windows.Forms.Button _propButton;
  24. private System.Windows.Forms.Button _addButton;
  25. private System.Windows.Forms.Button _deleteButton;
  26. private System.Windows.Forms.ListView _list;
  27. private System.Windows.Forms.ColumnHeader _titleHeader;
  28. private System.Windows.Forms.ColumnHeader _pathHeader;
  29. private System.Windows.Forms.ColumnHeader _shortCutHeader;
  30. private System.Windows.Forms.ColumnHeader _infoHeader;
  31. private System.Windows.Forms.Button _environmentButton;
  32. private System.Windows.Forms.Button _okButton;
  33. private System.Windows.Forms.Button _downButton;
  34. private System.Windows.Forms.Button _upButton;
  35. /// <summary>
  36. /// 昁梫側僨僓僀僫曄悢偱偡丅
  37. /// </summary>
  38. private System.ComponentModel.Container components = null;
  39. //捠忢偼僉乕僶僀儞僪偼index儀乕僗偱娭楢偯偗傜傟偰偄傞偑丄儅僋儘偺愝掕帪偵偼偙傟偼偪傚偭偲柺搢側偺偱偙偺僼僅乕儉偺拞偱暿搑娗棟偡傞
  40. private Hashtable _keyToModule;
  41. //弴彉偑偐傢偭偨傜弶婜幚峴儅僋儘偼彍嫀
  42. private bool _macroOrderUpdated;
  43. public MacroList()
  44. {
  45. //
  46. // Windows 僼僅乕儉 僨僓僀僫 僒億乕僩偵昁梫偱偡丅
  47. //
  48. InitializeComponent();
  49. this._titleHeader.Text = GApp.Strings.GetString("Form.MacroList._titleHeader");
  50. this._pathHeader.Text = GApp.Strings.GetString("Form.MacroList._pathHeader");
  51. this._shortCutHeader.Text = GApp.Strings.GetString("Form.MacroList._shortCutHeader");
  52. this._infoHeader.Text = GApp.Strings.GetString("Form.MacroList._infoHeader");
  53. this._runButton.Text = GApp.Strings.GetString("Form.MacroList._runButton");
  54. this._stopButton.Text = GApp.Strings.GetString("Form.MacroList._stopButton");
  55. this._propButton.Text = GApp.Strings.GetString("Form.MacroList._propButton");
  56. this._downButton.Text = GApp.Strings.GetString("Form.MacroList._downButton");
  57. this._upButton.Text = GApp.Strings.GetString("Form.MacroList._upButton");
  58. this._addButton.Text = GApp.Strings.GetString("Form.MacroList._addButton");
  59. this._deleteButton.Text = GApp.Strings.GetString("Form.MacroList._deleteButton");
  60. this._environmentButton.Text = GApp.Strings.GetString("Form.MacroList._environmentButton");
  61. this._okButton.Text = GApp.Strings.GetString("Common.OK");
  62. this.Text = GApp.Strings.GetString("Form.MacroList.Text");
  63. //
  64. // TODO: InitializeComponent 屇傃弌偟偺屻偵丄僐儞僗僩儔僋僞 僐乕僪傪捛壛偟偰偔偩偝偄丅
  65. //
  66. InitUI();
  67. _macroOrderUpdated = false;
  68. }
  69. /// <summary>
  70. /// 巊梡偝傟偰偄傞儕僜乕僗偵屻張棟傪幚峴偟傑偡丅
  71. /// </summary>
  72. protected override void Dispose( bool disposing )
  73. {
  74. if( disposing )
  75. {
  76. if(components != null)
  77. {
  78. components.Dispose();
  79. }
  80. }
  81. base.Dispose( disposing );
  82. }
  83. //儅僋儘曇廤僼僅乕儉偐傜屇偽傟傞丅key偵妱傝摉偰嵪傒偺僐儅儞僪柤偑偁傞側傜偦傟傪曉偟丄側偗傟偽null傪曉偡丅
  84. public string FindCommandDescription(Keys key) {
  85. MacroModule mod = (MacroModule)_keyToModule[key];
  86. if(mod!=null)
  87. return mod.Title;
  88. else {
  89. Commands.Entry e = GApp.Options.Commands.FindEntry(key);
  90. if(e!=null && e.Category!=Commands.Category.Macro)
  91. return e.Description;
  92. else
  93. return null;
  94. }
  95. }
  96. #region Windows Form Designer generated code
  97. /// <summary>
  98. /// 僨僓僀僫 僒億乕僩偵昁梫側儊僜僢僪偱偡丅偙偺儊僜僢僪偺撪梕傪
  99. /// 僐乕僪 僄僨傿僞偱曄峏偟側偄偱偔偩偝偄丅
  100. /// </summary>
  101. private void InitializeComponent()
  102. {
  103. this._list = new System.Windows.Forms.ListView();
  104. this._titleHeader = new System.Windows.Forms.ColumnHeader();
  105. this._pathHeader = new System.Windows.Forms.ColumnHeader();
  106. this._shortCutHeader = new System.Windows.Forms.ColumnHeader();
  107. this._infoHeader = new System.Windows.Forms.ColumnHeader();
  108. this._runButton = new System.Windows.Forms.Button();
  109. this._stopButton = new System.Windows.Forms.Button();
  110. this._propButton = new System.Windows.Forms.Button();
  111. this._downButton = new System.Windows.Forms.Button();
  112. this._upButton = new System.Windows.Forms.Button();
  113. this._addButton = new System.Windows.Forms.Button();
  114. this._deleteButton = new System.Windows.Forms.Button();
  115. this._environmentButton = new System.Windows.Forms.Button();
  116. this._okButton = new System.Windows.Forms.Button();
  117. this.SuspendLayout();
  118. // 
  119. // _list
  120. // 
  121. this._list.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
  122. this._titleHeader,
  123. this._pathHeader,
  124. this._shortCutHeader,
  125. this._infoHeader});
  126. this._list.FullRowSelect = true;
  127. this._list.GridLines = true;
  128. this._list.MultiSelect = false;
  129. this._list.Name = "_list";
  130. this._list.Size = new System.Drawing.Size(408, 280);
  131. this._list.TabIndex = 0;
  132. this._list.View = System.Windows.Forms.View.Details;
  133. this._list.DoubleClick += new System.EventHandler(this.OnListDoubleClicked);
  134. this._list.SelectedIndexChanged += new System.EventHandler(this.OnSelectedIndexChanged);
  135. // 
  136. // _titleHeader
  137. // 
  138. this._titleHeader.Width = 90;
  139. // 
  140. // _pathHeader
  141. // 
  142. this._pathHeader.Width = 160;
  143. // 
  144. // _shortCutHeader
  145. // 
  146. this._shortCutHeader.Width = 80;
  147. // 
  148. // _infoHeader
  149. // 
  150. // 
  151. // _runButton
  152. // 
  153. this._runButton.Location = new System.Drawing.Point(416, 8);
  154. this._runButton.Name = "_runButton";
  155. this._runButton.FlatStyle = FlatStyle.System;
  156. this._runButton.Size = new System.Drawing.Size(88, 23);
  157. this._runButton.TabIndex = 1;
  158. this._runButton.Click += new System.EventHandler(this.OnRunButtonClicked);
  159. // 
  160. // _stopButton
  161. // 
  162. this._stopButton.Location = new System.Drawing.Point(416, 40);
  163. this._stopButton.Name = "_stopButton";
  164. this._stopButton.FlatStyle = FlatStyle.System;
  165. this._stopButton.Size = new System.Drawing.Size(88, 23);
  166. this._stopButton.TabIndex = 2;
  167. this._stopButton.Click += new System.EventHandler(this.OnStopButtonClicked);
  168. // 
  169. // _propButton
  170. // 
  171. this._propButton.Location = new System.Drawing.Point(416, 72);
  172. this._propButton.Name = "_propButton";
  173. this._propButton.FlatStyle = FlatStyle.System;
  174. this._propButton.Size = new System.Drawing.Size(88, 23);
  175. this._propButton.TabIndex = 3;
  176. this._propButton.Click += new System.EventHandler(this.OnPropButtonClicked);
  177. // 
  178. // _downButton
  179. // 
  180. this._downButton.Location = new System.Drawing.Point(416, 104);
  181. this._downButton.Name = "_downButton";
  182. this._downButton.FlatStyle = FlatStyle.System;
  183. this._downButton.Size = new System.Drawing.Size(40, 23);
  184. this._downButton.TabIndex = 4;
  185. this._downButton.Click += new EventHandler(OnDownButtonClicked);
  186. // 
  187. // _upButton
  188. // 
  189. this._upButton.Location = new System.Drawing.Point(464, 104);
  190. this._upButton.Name = "_upButton";
  191. this._upButton.FlatStyle = FlatStyle.System;
  192. this._upButton.Size = new System.Drawing.Size(40, 23);
  193. this._upButton.TabIndex = 5;
  194. this._upButton.Click += new EventHandler(OnUpButtonClicked);
  195. // 
  196. // _addButton
  197. // 
  198. this._addButton.Location = new System.Drawing.Point(416, 152);
  199. this._addButton.Name = "_addButton";
  200. this._addButton.FlatStyle = FlatStyle.System;
  201. this._addButton.Size = new System.Drawing.Size(88, 23);
  202. this._addButton.TabIndex = 6;
  203. this._addButton.Click += new System.EventHandler(this.OnAddButtonClicked);
  204. // 
  205. // _deleteButton
  206. // 
  207. this._deleteButton.Location = new System.Drawing.Point(416, 184);
  208. this._deleteButton.Name = "_deleteButton";
  209. this._deleteButton.FlatStyle = FlatStyle.System;
  210. this._deleteButton.Size = new System.Drawing.Size(88, 23);
  211. this._deleteButton.TabIndex = 7;
  212. this._deleteButton.Click += new System.EventHandler(this.OnDeleteButtonClicked);
  213. // 
  214. // _environmentButton
  215. // 
  216. this._environmentButton.Location = new System.Drawing.Point(416, 216);
  217. this._environmentButton.Name = "_environmentButton";
  218. this._environmentButton.FlatStyle = FlatStyle.System;
  219. this._environmentButton.Size = new System.Drawing.Size(88, 23);
  220. this._environmentButton.TabIndex = 8;
  221. this._environmentButton.Click += new System.EventHandler(this.OnEnvironmentButtonClicked);
  222. // 
  223. // _okButton
  224. // 
  225. this._okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  226. this._okButton.Location = new System.Drawing.Point(416, 248);
  227. this._okButton.Name = "_okButton";
  228. this._okButton.FlatStyle = FlatStyle.System;
  229. this._okButton.Size = new System.Drawing.Size(88, 23);
  230. this._okButton.TabIndex = 9;
  231. // 
  232. // MacroList
  233. // 
  234. this.AcceptButton = this._okButton;
  235. this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
  236. this.ClientSize = new System.Drawing.Size(506, 279);
  237. this.Controls.AddRange(new System.Windows.Forms.Control[] {
  238.   this._upButton,
  239.   this._downButton,
  240.   this._environmentButton,
  241.   this._okButton,
  242.   this._deleteButton,
  243.   this._addButton,
  244.   this._propButton,
  245.   this._stopButton,
  246.   this._runButton,
  247.   this._list});
  248. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  249. this.MaximizeBox = false;
  250. this.MinimizeBox = false;
  251. this.Name = "MacroList";
  252. this.ShowInTaskbar = false;
  253. this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  254. this.ResumeLayout(false);
  255. }
  256. #endregion
  257. private void InitUI() {
  258. _keyToModule = new Hashtable();
  259. foreach(MacroModule mod in GApp.MacroManager.Modules) {
  260. AddListItem(mod, mod.ShortCut);
  261. if(mod.ShortCut!=Keys.None) _keyToModule[mod.ShortCut] = mod;
  262. }
  263. AdjustUI();
  264. }
  265. private void AddListItem(MacroModule mod, Keys shortcut) {
  266. ListViewItem li = new ListViewItem(mod.Title);
  267. li = _list.Items.Add(li);
  268. li.SubItems.Add(mod.Path);
  269. li.SubItems.Add(UILibUtil.KeyString(shortcut & Keys.Modifiers, shortcut & Keys.KeyCode, '+'));
  270. li.SubItems.Add(GetInfoString(mod));
  271. }
  272. private void OnSelectedIndexChanged(object sender, EventArgs args) {
  273. AdjustUI();
  274. }
  275. private void OnListDoubleClicked(object sender, EventArgs args) {
  276. ShowProp(_list.SelectedItems[0].Index);
  277. }
  278. private void OnRunButtonClicked(object sender, EventArgs args) {
  279. GApp.MacroManager.SetMacroEventListener(this);
  280. GApp.MacroManager.Execute(this, GApp.MacroManager.GetModule(_list.SelectedItems[0].Index));
  281. }
  282. private void OnStopButtonClicked(object sender, EventArgs args) {
  283. GApp.GlobalCommandTarget.StopMacro();
  284. }
  285. private void OnPropButtonClicked(object sender, EventArgs args) {
  286. ShowProp(_list.SelectedItems[0].Index);
  287. }
  288. private void OnAddButtonClicked(object sender, EventArgs args) {
  289. ModuleProperty dlg = new ModuleProperty(this, null, Keys.None);
  290. if(GCUtil.ShowModalDialog(this, dlg)==DialogResult.OK) {
  291. AddListItem(dlg.Module, dlg.ShortCut);
  292. GApp.MacroManager.AddModule(dlg.Module);
  293. if(dlg.ShortCut!=Keys.None) _keyToModule.Add(dlg.ShortCut, dlg.Module);
  294. AdjustUI();
  295. }
  296. }
  297. private void OnDeleteButtonClicked(object sender, EventArgs args) {
  298. MacroModule mod = GApp.MacroManager.GetModule(_list.SelectedItems[0].Index);
  299. GApp.MacroManager.RemoveModule(mod);
  300. IDictionaryEnumerator ie = _keyToModule.GetEnumerator();
  301. while(ie.MoveNext()) {
  302. if(ie.Value==mod) {
  303. _keyToModule.Remove(ie.Key);
  304. break;
  305. }
  306. }
  307. _list.Items.Remove(_list.SelectedItems[0]);
  308. _macroOrderUpdated = true;
  309. AdjustUI();
  310. }
  311. private void OnEnvironmentButtonClicked(object sender, EventArgs args) {
  312. EnvVariableList dlg = new EnvVariableList();
  313. GCUtil.ShowModalDialog(this, dlg);
  314. }
  315. private void OnDownButtonClicked(object sender, EventArgs args) {
  316. int n = _list.SelectedItems[0].Index;
  317. if(n==_list.Items.Count-1) return;
  318. ListViewItem li = _list.Items[n];
  319. _list.Items.RemoveAt(n);
  320. _list.Items.Insert(n+1, li);
  321. MacroModule mod = GApp.MacroManager.GetModule(n);
  322. GApp.MacroManager.RemoveAt(n);
  323. GApp.MacroManager.InsertModule(n+1, mod);
  324. _macroOrderUpdated = true;
  325. }
  326. private void OnUpButtonClicked(object sender, EventArgs args) {
  327. int n = _list.SelectedItems[0].Index;
  328. if(n==0) return;
  329. ListViewItem li = _list.Items[n];
  330. _list.Items.RemoveAt(n);
  331. _list.Items.Insert(n-1, li);
  332. MacroModule mod = GApp.MacroManager.GetModule(n);
  333. GApp.MacroManager.RemoveAt(n);
  334. GApp.MacroManager.InsertModule(n-1, mod);
  335. _macroOrderUpdated = true;
  336. }
  337. private void AdjustUI() {
  338. bool e = _list.SelectedItems.Count>0;
  339. _runButton.Enabled = e;
  340. _stopButton.Enabled = false;
  341. _propButton.Enabled = e;
  342. _addButton.Enabled = true;
  343. _deleteButton.Enabled = e;
  344. _downButton.Enabled = e;
  345. _upButton.Enabled = e;
  346. }
  347. private void ShowProp(int index) {
  348. MacroModule mod = GApp.MacroManager.GetModule(index);
  349. Keys key = Keys.None;
  350. IDictionaryEnumerator ie = _keyToModule.GetEnumerator();
  351. while(ie.MoveNext()) {
  352. if(ie.Value==mod) {
  353. key = (Keys)(ie.Key);
  354. break;
  355. }
  356. }
  357. ModuleProperty dlg = new ModuleProperty(this, mod, key);
  358. if(GCUtil.ShowModalDialog(this, dlg)==DialogResult.OK) {
  359. GApp.MacroManager.ReplaceModule(GApp.MacroManager.GetModule(index), dlg.Module);
  360. GApp.Options.Commands.ModifyMacroKey(dlg.Module.Index, dlg.ShortCut & Keys.Modifiers, dlg.ShortCut & Keys.KeyCode);
  361. ListViewItem li = _list.Items[index];
  362. li.Text = dlg.Module.Title;
  363. li.SubItems[1].Text = dlg.Module.Path;
  364. li.SubItems[2].Text = UILibUtil.KeyString(dlg.ShortCut);
  365. li.SubItems[3].Text = GetInfoString(dlg.Module);
  366. _keyToModule.Remove(key);
  367. if(dlg.ShortCut!=Keys.None) _keyToModule.Add(dlg.ShortCut, dlg.Module);
  368. AdjustUI();
  369. }
  370. }
  371. protected override void OnClosing(CancelEventArgs args) { //偙傟傪暵偠傞偲偒柍忦審偱峏怴偡傞偑丄偄偄偺偐丠 OK/Cancel曽幃偵偡傋偒丠
  372. base.OnClosed(args);
  373. GApp.Options.Commands.ClearVariableEntries();
  374. int c = 0;
  375. Hashtable ht = CollectionUtil.ReverseHashtable(_keyToModule);
  376. foreach(MacroModule mod in GApp.MacroManager.Modules) {
  377. mod.Index = c;
  378. object t = ht[mod];
  379. Keys key = t==null? Keys.None : (Keys)t;
  380. GApp.Options.Commands.AddEntry(new Commands.MacroEntry(mod.Title, key & Keys.Modifiers, key & Keys.KeyCode, c));
  381. c++;
  382. }
  383. if(_macroOrderUpdated) {
  384. if(GApp.Options.ActionOnLaunch==CID.ExecMacro) GApp.Options.ActionOnLaunch = CID.NOP;
  385. }
  386. GApp.Frame.AdjustMacroMenu();
  387. GApp.MacroManager.SetMacroEventListener(null);
  388. }
  389. public void IndicateMacroStarted() {
  390. _runButton.Enabled = false;
  391. _stopButton.Enabled = true;
  392. }
  393. public void IndicateMacroFinished() {
  394. _runButton.Enabled = true;
  395. _stopButton.Enabled = false;
  396. }
  397. private string GetInfoString(MacroModule mod) {
  398. return mod.DebugMode? GApp.Strings.GetString("Caption.MacroList.Trace") : ""; //偲傝偁偊偢偼僨僶僢僌偐偳偆偐偩偗
  399. }
  400. }
  401. }