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

Telnet服务器

开发平台:

C#

  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Text;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using System.Diagnostics;
  8. using Microsoft.Win32;
  9. using Poderosa.Config;
  10. using Poderosa.ConnectionParam;
  11. namespace Poderosa.Forms
  12. {
  13. /// <summary>
  14. /// ConfigConverter 偺奣梫偺愢柧偱偡丅
  15. /// </summary>
  16. internal class WelcomeDialog : Form
  17. {
  18. private CID _cid;
  19. private System.Windows.Forms.Label _welcomeMessage;
  20. private System.Windows.Forms.RadioButton _optNewConnection;
  21. private System.Windows.Forms.RadioButton _optCygwin;
  22. private System.Windows.Forms.RadioButton _optConvert;
  23. private System.Windows.Forms.Button _cancelButton;
  24. private System.Windows.Forms.Button _okButton;
  25. private System.Windows.Forms.CheckBox _checkNext;
  26. private void InitializeComponent() {
  27. this._welcomeMessage = new System.Windows.Forms.Label();
  28. this._optNewConnection = new System.Windows.Forms.RadioButton();
  29. this._optCygwin = new System.Windows.Forms.RadioButton();
  30. this._optConvert = new System.Windows.Forms.RadioButton();
  31. this._cancelButton = new System.Windows.Forms.Button();
  32. this._okButton = new System.Windows.Forms.Button();
  33. this._checkNext = new System.Windows.Forms.CheckBox();
  34. this.SuspendLayout();
  35. // 
  36. // _welcomeMessage
  37. // 
  38. this._welcomeMessage.Location = new System.Drawing.Point(8, 8);
  39. this._welcomeMessage.Name = "_welcomeMessage";
  40. this._welcomeMessage.Size = new System.Drawing.Size(336, 56);
  41. this._welcomeMessage.TabIndex = 0;
  42. // 
  43. // _optNewConnection
  44. // 
  45. this._optNewConnection.Checked = true;
  46. this._optNewConnection.FlatStyle = System.Windows.Forms.FlatStyle.System;
  47. this._optNewConnection.Location = new System.Drawing.Point(16, 72);
  48. this._optNewConnection.Name = "_optNewConnection";
  49. this._optNewConnection.Size = new System.Drawing.Size(320, 24);
  50. this._optNewConnection.TabIndex = 1;
  51. this._optNewConnection.TabStop = true;
  52. // 
  53. // _optCygwin
  54. // 
  55. this._optCygwin.FlatStyle = System.Windows.Forms.FlatStyle.System;
  56. this._optCygwin.Location = new System.Drawing.Point(16, 96);
  57. this._optCygwin.Name = "_optCygwin";
  58. this._optCygwin.Size = new System.Drawing.Size(320, 24);
  59. this._optCygwin.TabIndex = 2;
  60. // 
  61. // _optConvert
  62. // 
  63. this._optConvert.FlatStyle = System.Windows.Forms.FlatStyle.System;
  64. this._optConvert.Location = new System.Drawing.Point(16, 120);
  65. this._optConvert.Name = "_optConvert";
  66. this._optConvert.Size = new System.Drawing.Size(320, 24);
  67. this._optConvert.TabIndex = 3;
  68. // 
  69. // _cancelButton
  70. // 
  71. this._cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  72. this._cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
  73. this._cancelButton.Location = new System.Drawing.Point(264, 184);
  74. this._cancelButton.Name = "_cancelButton";
  75. this._cancelButton.TabIndex = 4;
  76. // 
  77. // _okButton
  78. // 
  79. this._okButton.DialogResult = DialogResult.OK;
  80. this._okButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
  81. this._okButton.Location = new System.Drawing.Point(168, 184);
  82. this._okButton.Name = "_okButton";
  83. this._okButton.TabIndex = 5;
  84. this._okButton.Click += new System.EventHandler(this.OnOK);
  85. // 
  86. // _checkNext
  87. // 
  88. this._checkNext.FlatStyle = System.Windows.Forms.FlatStyle.System;
  89. this._checkNext.Location = new System.Drawing.Point(144, 160);
  90. this._checkNext.Name = "_checkNext";
  91. this._checkNext.Size = new System.Drawing.Size(200, 16);
  92. this._checkNext.TabIndex = 6;
  93. // 
  94. // WelcomeDialog
  95. // 
  96. this.AcceptButton = this._okButton;
  97. this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
  98. this.CancelButton = this._cancelButton;
  99. this.ClientSize = new System.Drawing.Size(354, 216);
  100. this.Controls.Add(this._checkNext);
  101. this.Controls.Add(this._okButton);
  102. this.Controls.Add(this._cancelButton);
  103. this.Controls.Add(this._optConvert);
  104. this.Controls.Add(this._optCygwin);
  105. this.Controls.Add(this._optNewConnection);
  106. this.Controls.Add(this._welcomeMessage);
  107. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  108. this.MaximizeBox = false;
  109. this.MinimizeBox = false;
  110. this.Name = "WelcomeDialog";
  111. this.ShowInTaskbar = false;
  112. this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  113. this.ResumeLayout(false);
  114. }
  115. public CID CID {
  116. get {
  117. return _cid;
  118. }
  119. }
  120. public WelcomeDialog()
  121. {
  122. _cid = CID.NOP;
  123. InitializeComponent();
  124. InitializeText();
  125. // 
  126. // TODO: 僐儞僗僩儔僋僞 儘僕僢僋傪偙偙偵捛壛偟偰偔偩偝偄丅
  127. //
  128. _checkNext.Checked = GApp.Options.ShowWelcomeDialog;
  129. }
  130. private void InitializeText() {
  131. this.Text = GApp.Strings.GetString("Form.WelcomeDialog.Text");
  132. _welcomeMessage.Text = GApp.Strings.GetString("Form.WelcomeDialog._welcomeMessage");
  133. _optNewConnection.Text = GApp.Strings.GetString("Form.WelcomeDialog._optNewConnection");
  134. _optCygwin.Text = GApp.Strings.GetString("Form.WelcomeDialog._optCygwin");
  135. _optConvert.Text = GApp.Strings.GetString("Form.WelcomeDialog._optConvert");
  136. _cancelButton.Text = GApp.Strings.GetString("Common.Cancel");
  137. _okButton.Text = GApp.Strings.GetString("Common.OK");
  138. _checkNext.Text = GApp.Strings.GetString("Form.WelcomeDialog._checkNext");
  139. }
  140. private void OnOK(object sender, EventArgs args) {
  141. if(_optNewConnection.Checked)
  142. _cid = CID.NewConnection;
  143. else if(_optCygwin.Checked)
  144. _cid = CID.NewCygwinConnection;
  145. else if(_optConvert.Checked)
  146. StartConvert();
  147. }
  148. protected override void OnClosed(EventArgs e) {
  149. base.OnClosed (e);
  150. GApp.Options.ShowWelcomeDialog = _checkNext.Checked;
  151. }
  152. private void StartConvert() {
  153. string dir = SelectDirectory();
  154. if(dir==null) {
  155. this.DialogResult = DialogResult.None;
  156. return;
  157. }
  158. try {
  159. ImportConfig(dir + "\options.conf");
  160. }      
  161. catch(Exception ex) {
  162. Debug.WriteLine(ex.StackTrace);
  163. GUtil.Warning(this, ex.Message);
  164. this.DialogResult = DialogResult.None;
  165. return;
  166. }
  167. }
  168. public string SelectDirectory() {
  169. FolderBrowserDialog dlg = new FolderBrowserDialog();
  170. dlg.ShowNewFolderButton = false;
  171. dlg.Description = GApp.Strings.GetString("Caption.WelcomeDialog.SelectConfigDirectory");
  172. string initial_dir = GuessVaraTermDir();
  173. if(initial_dir!=null) dlg.SelectedPath = initial_dir;
  174. if(GCUtil.ShowModalDialog(this, dlg)==DialogResult.OK)
  175. return dlg.SelectedPath;
  176. else
  177. return null;
  178. }
  179. private void ImportConfig(string filename) {
  180. TextReader reader = null;
  181. try {
  182. GApp.ConnectionHistory.Clear();
  183. reader = new StreamReader(filename, Encoding.Default);
  184. reader.ReadLine(); //skip header
  185. string line = reader.ReadLine();
  186. int mru_count = 0;
  187. while(line != null) {
  188. //慡愝掕傪僀儞億乕僩偡傞傢偗偱偼側偄
  189. if(line.EndsWith("section terminal {"))
  190. ImportTerminalSettings(ReadStringPair(reader));
  191. else if(line.EndsWith("section key-definition {"))
  192. ImportKeySettings(ReadStringPair(reader));
  193. else if(line.EndsWith("section connection {")) {
  194. Hashtable t = ReadStringPair(reader);
  195. if(t.Contains("type")) { //socks愝掕偲崿摨偟側偄傛偆偵
  196. ImportConnectionSettings(t);
  197. mru_count++;
  198. }
  199. }
  200. line = reader.ReadLine();
  201. }
  202. GApp.Options.MRUSize = Math.Max(mru_count, 4);
  203. GApp.Frame.AdjustMRUMenu();
  204. GApp.Frame.ApplyHotKeys();
  205. }
  206. finally {
  207. if(reader!=null) reader.Close();
  208. }
  209. }
  210. private void ImportTerminalSettings(Hashtable values) {
  211. ContainerOptions opt = GApp.Options;
  212. opt.LeftAltKey  = (AltKeyAction)GUtil.ParseEnum(typeof(AltKeyAction), (string)values["left-alt"], opt.LeftAltKey);
  213. opt.RightAltKey = (AltKeyAction)GUtil.ParseEnum(typeof(AltKeyAction), (string)values["right-alt"], opt.RightAltKey);
  214. opt.AutoCopyByLeftButton = GUtil.ParseBool((string)values["auto-copy-by-left-button"], opt.AutoCopyByLeftButton);
  215. opt.RightButtonAction = (RightButtonAction)GUtil.ParseEnum(typeof(RightButtonAction), (string)values["right-button"], opt.RightButtonAction);
  216. opt.TerminalBufferSize = GUtil.ParseInt((string)values["buffer-size"], opt.TerminalBufferSize);
  217. string fontname = (string)values["font-family"];
  218. string ja_fontname = (string)values["japanese-font-family"];
  219. float size = GUtil.ParseFloat((string)values["font-size"], opt.FontSize);
  220. opt.Font = new Font(fontname, size);
  221. opt.JapaneseFont = new Font(ja_fontname, size);
  222. opt.UseClearType = GUtil.ParseBool((string)values["cleartype"], opt.UseClearType);
  223. opt.BGColor = GUtil.ParseColor((string)values["bg-color"], opt.BGColor);
  224. opt.TextColor = GUtil.ParseColor((string)values["text-color"], opt.TextColor);
  225. opt.ESColorSet.Load((string)values["escapesequence-color"]);
  226. opt.BackgroundImageFileName = (string)values["bg-image"];
  227. opt.ImageStyle = (ImageStyle)GUtil.ParseEnum(typeof(ImageStyle), (string)values["bg-style"], opt.ImageStyle);
  228. opt.DefaultLogType = (LogType)GUtil.ParseEnum(typeof(LogType), (string)values["default-log-type"], opt.DefaultLogType);
  229. opt.DefaultLogDirectory = (string)values["default-log-directory"];
  230. }
  231. private void ImportKeySettings(Hashtable values) {
  232. IDictionaryEnumerator ie = values.GetEnumerator();
  233. while(ie.MoveNext()) {
  234. string name = (string)ie.Key;
  235. CID cid = (CID)GUtil.ParseEnum(typeof(CID), name, CID.NOP);
  236. if(cid!=CID.NOP) {
  237. Keys k = GUtil.ParseKey(((string)ie.Value).Split(','));
  238. GApp.Options.Commands.ModifyKey(cid, k & Keys.Modifiers, k & Keys.KeyCode);
  239. }
  240. }
  241. }
  242. private void ImportConnectionSettings(Hashtable values) {
  243. ConfigNode cn = ConfigNode.CreateIndirect("", values);
  244. GApp.ConnectionHistory.Append(TerminalParam.CreateFromConfigNode(cn));
  245. }
  246. private Hashtable ReadStringPair(TextReader reader) {
  247. Hashtable r = new Hashtable();
  248. string line = reader.ReadLine();
  249. while(!line.EndsWith("}")) {
  250. int start = 0;
  251. while(line[start]=='t') start++;
  252. int eq = line.IndexOf('=', start);
  253. if(eq!=-1) {
  254. string name = line.Substring(start, eq-start);
  255. string value = line.Substring(eq+1);
  256. r[name] = value;
  257. }
  258. line = reader.ReadLine();
  259. }
  260. return r;
  261. }
  262. private string GuessVaraTermDir() {
  263. string candidate1 = Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\Terminal Emulator VaraTerm";
  264. string candidate2 = candidate1 + "\" + Environment.UserName;
  265. if(Directory.Exists(candidate2))
  266. return candidate2;
  267. else if(Directory.Exists(candidate1))
  268. return candidate1;
  269. else
  270. return null;
  271. }
  272. }
  273. }