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

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: XModemDialog.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 System.Diagnostics;
  11. using Poderosa.Communication;
  12. using Poderosa.Connection;
  13. using Poderosa.Terminal;
  14. namespace Poderosa.Forms
  15. {
  16. /// <summary>
  17. /// XModemDialog 偺奣梫偺愢柧偱偡丅
  18. /// </summary>
  19. internal class XModemDialog : System.Windows.Forms.Form
  20. {
  21. private bool _receiving; //庴怣側傜true,憲怣側傜false 偙傟偼昞帵慜偵偺傒愝掕壜擻
  22. private bool _executing;
  23. private ConnectionTag _connectionTag;
  24. private XModem _xmodemTask;
  25. private System.Windows.Forms.Button _okButton;
  26. private System.Windows.Forms.Button _cancelButton;
  27. private System.Windows.Forms.Label _fileNameLabel;
  28. private System.Windows.Forms.TextBox _fileNameBox;
  29. private System.Windows.Forms.Button _selectButton;
  30. private System.Windows.Forms.Label _progressText;
  31. /// <summary>
  32. /// 昁梫側僨僓僀僫曄悢偱偡丅
  33. /// </summary>
  34. private System.ComponentModel.Container components = null;
  35. public XModemDialog()
  36. {
  37. //
  38. // Windows 僼僅乕儉 僨僓僀僫 僒億乕僩偵昁梫偱偡丅
  39. //
  40. InitializeComponent();
  41. //
  42. // TODO: InitializeComponent 屇傃弌偟偺屻偵丄僐儞僗僩儔僋僞 僐乕僪傪捛壛偟偰偔偩偝偄丅
  43. //
  44. ReloadLanguage();
  45. }
  46. public bool Receiving {
  47. get {
  48. return _receiving;
  49. }
  50. set {
  51. _receiving = value;
  52. }
  53. }
  54. public bool Executing {
  55. get {
  56. return _executing;
  57. }
  58. }
  59. public ConnectionTag ConnectionTag {
  60. get {
  61. return _connectionTag;
  62. }
  63. set {
  64. if(_executing) throw new Exception("illegal!");
  65. _connectionTag = value;
  66. FormatText();
  67. }
  68. }
  69. public void ReloadLanguage() {
  70. this._okButton.Text = GApp.Strings.GetString("Form.XModemDialog._okButton");
  71. this._cancelButton.Text = GApp.Strings.GetString("Common.Cancel");
  72. this._fileNameLabel.Text = GApp.Strings.GetString("Form.XModemDialog._fileNameLabel");
  73. }
  74. /// <summary>
  75. /// 巊梡偝傟偰偄傞儕僜乕僗偵屻張棟傪幚峴偟傑偡丅
  76. /// </summary>
  77. protected override void Dispose( bool disposing )
  78. {
  79. if( disposing )
  80. {
  81. if(components != null)
  82. {
  83. components.Dispose();
  84. }
  85. }
  86. base.Dispose( disposing );
  87. }
  88. #region Windows 僼僅乕儉 僨僓僀僫偱惗惉偝傟偨僐乕僪 
  89. /// <summary>
  90. /// 僨僓僀僫 僒億乕僩偵昁梫側儊僜僢僪偱偡丅偙偺儊僜僢僪偺撪梕傪
  91. /// 僐乕僪 僄僨傿僞偱曄峏偟側偄偱偔偩偝偄丅
  92. /// </summary>
  93. private void InitializeComponent()
  94. {
  95. this._okButton = new System.Windows.Forms.Button();
  96. this._cancelButton = new System.Windows.Forms.Button();
  97. this._fileNameLabel = new System.Windows.Forms.Label();
  98. this._fileNameBox = new System.Windows.Forms.TextBox();
  99. this._selectButton = new System.Windows.Forms.Button();
  100. this._progressText = new System.Windows.Forms.Label();
  101. this.SuspendLayout();
  102. // 
  103. // _okButton
  104. // 
  105. this._okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
  106. this._okButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
  107. this._okButton.Location = new System.Drawing.Point(152, 64);
  108. this._okButton.Name = "_okButton";
  109. this._okButton.TabIndex = 0;
  110. this._okButton.Click += new EventHandler(OnOK);
  111. // 
  112. // _cancelButton
  113. // 
  114. this._cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  115. this._cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
  116. this._cancelButton.Location = new System.Drawing.Point(240, 64);
  117. this._cancelButton.Name = "_cancelButton";
  118. this._cancelButton.TabIndex = 1;
  119. this._cancelButton.Click += new EventHandler(OnCancel);
  120. // 
  121. // _fileNameLabel
  122. // 
  123. this._fileNameLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
  124. this._fileNameLabel.Location = new System.Drawing.Point(8, 8);
  125. this._fileNameLabel.Name = "_fileNameLabel";
  126. this._fileNameLabel.Size = new System.Drawing.Size(80, 16);
  127. this._fileNameLabel.TabIndex = 2;
  128. // 
  129. // _fileNameBox
  130. // 
  131. this._fileNameBox.Location = new System.Drawing.Point(96, 8);
  132. this._fileNameBox.Name = "_fileNameBox";
  133. this._fileNameBox.Size = new System.Drawing.Size(192, 19);
  134. this._fileNameBox.TabIndex = 3;
  135. this._fileNameBox.Text = "";
  136. // 
  137. // _selectButton
  138. // 
  139. this._selectButton.Location = new System.Drawing.Point(296, 8);
  140. this._selectButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
  141. this._selectButton.Name = "_selectButton";
  142. this._selectButton.Size = new System.Drawing.Size(19, 19);
  143. this._selectButton.TabIndex = 4;
  144. this._selectButton.Text = "...";
  145. this._selectButton.Click += new EventHandler(OnSelectFile);
  146. // 
  147. // _progressText
  148. // 
  149. this._progressText.Location = new System.Drawing.Point(8, 28);
  150. this._progressText.Name = "_progressText";
  151. this._progressText.Size = new System.Drawing.Size(296, 32);
  152. this._progressText.TabIndex = 5;
  153. this._progressText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  154. // 
  155. // XModemDialog
  156. // 
  157. this.AcceptButton = this._okButton;
  158. this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
  159. this.CancelButton = this._cancelButton;
  160. this.ClientSize = new System.Drawing.Size(328, 86);
  161. this.Controls.Add(this._progressText);
  162. this.Controls.Add(this._selectButton);
  163. this.Controls.Add(this._fileNameBox);
  164. this.Controls.Add(this._fileNameLabel);
  165. this.Controls.Add(this._cancelButton);
  166. this.Controls.Add(this._okButton);
  167. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  168. this.MaximizeBox = false;
  169. this.MinimizeBox = false;
  170. this.Name = "XModemDialog";
  171. this.ShowInTaskbar = false;
  172. this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
  173. this.ResumeLayout(false);
  174. }
  175. #endregion
  176. private void FormatText() {
  177. this.Text = String.Format(GApp.Strings.GetString("Caption.XModemDialog.DialogTitle"), GApp.Strings.GetString(_receiving? "Common.Reception" : "Common.Transmission"), _connectionTag.FormatTabText());
  178. this._progressText.Text = String.Format(GApp.Strings.GetString("Caption.XModemDialog.InitialPrompt"), GApp.Strings.GetString(_receiving? "Common.Transmission" : "Common.Reception").ToLower());
  179. }
  180. private void OnSelectFile(object sender, EventArgs args) {
  181. FileDialog dlg = null;
  182. if(_receiving) {
  183. SaveFileDialog sf = new SaveFileDialog();
  184. sf.Title = GApp.Strings.GetString("Caption.XModemDialog.ReceptionFileSelect");
  185. dlg = sf;
  186. }
  187. else {
  188. OpenFileDialog of = new OpenFileDialog();
  189. of.Title = GApp.Strings.GetString("Caption.XModemDialog.TransmissionFileSelect");
  190. of.CheckFileExists = true;
  191. of.Multiselect = false;
  192. dlg = of;
  193. }
  194. dlg.Filter = "All Files(*)|*";
  195. if(GCUtil.ShowModalDialog(this, dlg)==DialogResult.OK)
  196. _fileNameBox.Text = dlg.FileName;
  197. }
  198. private void OnOK(object sedner, EventArgs args) {
  199. Debug.Assert(!_executing);
  200. this.DialogResult = DialogResult.None;
  201. if(_receiving) {
  202. if(!StartReceive()) return;
  203. }
  204. else {
  205. if(!StartSend()) return;
  206. }
  207. _executing = true;
  208. _okButton.Enabled = false;
  209. _fileNameBox.Enabled = false;
  210. _selectButton.Enabled = false;
  211. _progressText.Text = GApp.Strings.GetString("Caption.XModemDialog.Negotiating");
  212. }
  213. private bool StartReceive() {
  214. try {
  215. _xmodemTask = new XModemReceiver(_connectionTag, _fileNameBox.Text);
  216. _xmodemTask.NotifyTarget = this.Handle;
  217. _xmodemTask.Start();
  218. return true;
  219. }
  220. catch(Exception ex) {
  221. GUtil.Warning(this, ex.Message);
  222. return false;
  223. }
  224. }
  225. private bool StartSend() {
  226. try {
  227. _xmodemTask = new XModemSender(_connectionTag, _fileNameBox.Text);
  228. _xmodemTask.NotifyTarget = this.Handle;
  229. _xmodemTask.Start();
  230. return true;
  231. }
  232. catch(Exception ex) {
  233. GUtil.Warning(this, ex.Message);
  234. return false;
  235. }
  236. }
  237. private void Exit() {
  238. if(_xmodemTask!=null) {
  239. _xmodemTask.Abort();
  240. _xmodemTask = null;
  241. }
  242. _executing = false;
  243. _okButton.Enabled = true;
  244. _fileNameBox.Enabled = true;
  245. _selectButton.Enabled = true;
  246. }
  247. private void OnCancel(object sender, EventArgs args) {
  248. if(_executing)
  249. Exit();
  250. else
  251. Close();
  252. }
  253. protected override void OnClosed(EventArgs e) {
  254. base.OnClosed (e);
  255. if(_executing) Exit();
  256. GApp.Frame.XModemDialog = null;
  257. }
  258. private void UpdateStatusText(int wparam, int lparam) {
  259. if(wparam==XModem.NOTIFY_PROGRESS) {
  260. if(_receiving)
  261. _progressText.Text = String.Format(GApp.Strings.GetString("Caption.XModemDialog.ReceptionProgress"), lparam);
  262. else
  263. _progressText.Text = String.Format(GApp.Strings.GetString("Caption.XModemDialog.TransmissionProgress"), lparam);
  264. }
  265. else {
  266. //PROGRESS埲奜偼扨偵暵偠傞丅僟僀傾儘僌儃僢僋僗偺昞帵側偳偼僾儘僩僐儖幚憰懁偑傗傞
  267. this.DialogResult = DialogResult.Abort;
  268. this._progressText.Text = String.Format(GApp.Strings.GetString("Caption.XModemDialog.InitialPrompt"), GApp.Strings.GetString(_receiving? "Common.Transmission" : "Common.Reception").ToLower());
  269. Exit();
  270. if(wparam==XModem.NOTIFY_SUCCESS)
  271. Close();
  272. }
  273. }
  274. protected override void WndProc(ref Message m) {
  275. base.WndProc (ref m);
  276. if(m.Msg==GConst.WMG_XMODEM_UPDATE_STATUS)
  277. UpdateStatusText(m.WParam.ToInt32(), m.LParam.ToInt32());
  278. }
  279. }
  280. }