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

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: DisplayOptionPanel.cs,v 1.2 2005/04/20 08:45:44 okajima Exp $
  4. */
  5. using System;
  6. using System.Windows.Forms;
  7. using System.Diagnostics;
  8. using System.Drawing;
  9. using Poderosa.Toolkit;
  10. using Poderosa.Terminal;
  11. using Poderosa.Config;
  12. using Poderosa.Communication;
  13. using Poderosa.ConnectionParam;
  14. using Poderosa.UI;
  15. using EnumDescAttributeT = Poderosa.Toolkit.EnumDescAttribute;
  16. namespace Poderosa.Forms
  17. {
  18. /// <summary>
  19. /// DisplayOptionPanel 偺奣梫偺愢柧偱偡丅
  20. /// </summary>
  21. internal class DisplayOptionPanel : OptionDialog.CategoryPanel
  22. {
  23. private EscapesequenceColorSet _ESColorSet;
  24. private string _defaultFileDir;
  25. private bool _useClearType;
  26. private Font _font;
  27. private Font _japaneseFont;
  28. private System.Windows.Forms.GroupBox _colorFontGroup;
  29. private System.Windows.Forms.Label _bgColorLabel;
  30. private ColorButton _bgColorBox;
  31. private System.Windows.Forms.Label _textColorLabel;
  32. private ColorButton _textColorBox;
  33. private Button _editColorEscapeSequence;
  34. private System.Windows.Forms.Label _fontLabel;
  35. private System.Windows.Forms.Label _fontDescription;
  36. private System.Windows.Forms.Button _fontSelectButton;
  37. private ClearTypeAwareLabel _fontSample;
  38. private Label _backgroundImageLabel;
  39. private TextBox _backgroundImageBox;
  40. private Button _backgroundImageSelectButton;
  41. private Label _imageStyleLabel;
  42. private ComboBox _imageStyleBox;
  43. private Button _applyRenderProfileButton;
  44. private System.Windows.Forms.GroupBox _caretGroup;
  45. private System.Windows.Forms.Label _caretStyleLabel;
  46. private ComboBox _caretStyleBox;
  47. private CheckBox _caretSpecifyColor;
  48. private Label _caretColorLabel;
  49. private ColorButton _caretColorBox;
  50. private CheckBox _caretBlink;
  51. public DisplayOptionPanel() {
  52. InitializeComponent();
  53. FillText();
  54. }
  55. private void InitializeComponent() {
  56. this._colorFontGroup = new System.Windows.Forms.GroupBox();
  57. this._bgColorLabel = new System.Windows.Forms.Label();
  58. this._bgColorBox = new ColorButton();
  59. this._textColorLabel = new System.Windows.Forms.Label();
  60. this._textColorBox = new ColorButton();
  61. this._editColorEscapeSequence = new Button();
  62. this._fontLabel = new System.Windows.Forms.Label();
  63. this._fontDescription = new System.Windows.Forms.Label();
  64. this._fontSelectButton = new System.Windows.Forms.Button();
  65. this._fontSample = new Poderosa.Forms.ClearTypeAwareLabel();
  66. this._backgroundImageLabel = new Label();
  67. this._backgroundImageBox = new TextBox();
  68. this._backgroundImageSelectButton = new Button();
  69. this._imageStyleLabel = new Label();
  70. this._imageStyleBox = new ComboBox();
  71. this._applyRenderProfileButton = new Button();
  72. this._caretGroup = new GroupBox();
  73. this._caretStyleLabel = new System.Windows.Forms.Label();
  74. this._caretStyleBox = new ComboBox();
  75. this._caretSpecifyColor = new CheckBox();
  76. this._caretColorLabel = new Label();
  77. this._caretColorBox = new ColorButton();
  78. this._caretBlink = new CheckBox();
  79. this._colorFontGroup.SuspendLayout();
  80. this._caretGroup.SuspendLayout();
  81. this.Controls.AddRange(new System.Windows.Forms.Control[] {
  82.    this._caretGroup,
  83.    this._colorFontGroup});
  84. // 
  85. // _colorFontGroup
  86. // 
  87. this._colorFontGroup.Controls.AddRange(new System.Windows.Forms.Control[] {
  88.   this._bgColorLabel,
  89.   this._bgColorBox,
  90.   this._textColorLabel,
  91.   this._textColorBox,
  92.   this._editColorEscapeSequence,
  93.   this._fontLabel,
  94.   this._fontDescription,
  95.   this._fontSelectButton,
  96.   this._fontSample,
  97.   this._backgroundImageLabel,
  98.   this._backgroundImageBox,
  99.   this._backgroundImageSelectButton,
  100.   this._imageStyleLabel,
  101.   this._imageStyleBox,
  102.   this._applyRenderProfileButton});
  103. this._colorFontGroup.Location = new System.Drawing.Point(9, 8);
  104. this._colorFontGroup.Name = "_colorFontGroup";
  105. this._colorFontGroup.FlatStyle = FlatStyle.System;
  106. this._colorFontGroup.Size = new System.Drawing.Size(416, 208);
  107. this._colorFontGroup.TabIndex = 0;
  108. this._colorFontGroup.TabStop = false;
  109. // 
  110. // _bgColorLabel
  111. // 
  112. this._bgColorLabel.Location = new System.Drawing.Point(16, 16);
  113. this._bgColorLabel.Name = "_bgColorLabel";
  114. this._bgColorLabel.Size = new System.Drawing.Size(72, 24);
  115. this._bgColorLabel.TabIndex = 1;
  116. this._bgColorLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  117. // 
  118. // _bgColorBox
  119. // 
  120. //this._bgColorBox.BackColor = System.Drawing.Color.White;
  121. this._bgColorBox.Location = new System.Drawing.Point(120, 16);
  122. this._bgColorBox.Name = "_bgColorBox";
  123. this._bgColorBox.Size = new System.Drawing.Size(152, 20);
  124. this._bgColorBox.TabIndex = 2;
  125. this._bgColorBox.ColorChanged += new ColorButton.NewColorEventHandler(this.OnBGColorChanged);
  126. // 
  127. // _textColorLabel
  128. // 
  129. this._textColorLabel.Location = new System.Drawing.Point(16, 40);
  130. this._textColorLabel.Name = "_textColorLabel";
  131. this._textColorLabel.Size = new System.Drawing.Size(72, 24);
  132. this._textColorLabel.TabIndex = 3;
  133. this._textColorLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  134. // 
  135. // _textColorBox
  136. // 
  137. this._textColorBox.Location = new System.Drawing.Point(120, 40);
  138. this._textColorBox.Name = "_textColorBox";
  139. this._textColorBox.Size = new System.Drawing.Size(152, 20);
  140. this._textColorBox.TabIndex = 4;
  141. this._textColorBox.ColorChanged += new ColorButton.NewColorEventHandler(this.OnTextColorChanged);
  142. //
  143. // _editColorEscapeSequence
  144. //
  145. this._editColorEscapeSequence.Location = new Point(120, 66);
  146. this._editColorEscapeSequence.Size = new Size(224, 24);
  147. this._editColorEscapeSequence.TabIndex = 5;
  148. this._editColorEscapeSequence.Click += new EventHandler(OnEditColorEscapeSequence);
  149. this._editColorEscapeSequence.FlatStyle = FlatStyle.System;
  150. // 
  151. // _fontLabel
  152. // 
  153. this._fontLabel.Location = new System.Drawing.Point(16, 96);
  154. this._fontLabel.Name = "_fontLabel";
  155. this._fontLabel.Size = new System.Drawing.Size(72, 16);
  156. this._fontLabel.TabIndex = 6;
  157. this._fontLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  158. // 
  159. // _fontDescription
  160. // 
  161. this._fontDescription.Location = new System.Drawing.Point(120, 92);
  162. this._fontDescription.Name = "_fontDescription";
  163. this._fontDescription.Size = new System.Drawing.Size(152, 24);
  164. this._fontDescription.TabIndex = 7;
  165. this._fontDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  166. // 
  167. // _fontSelectButton
  168. // 
  169. this._fontSelectButton.Location = new System.Drawing.Point(280, 92);
  170. this._fontSelectButton.Name = "_fontSelectButton";
  171. this._fontSelectButton.FlatStyle = FlatStyle.System;
  172. this._fontSelectButton.Size = new System.Drawing.Size(64, 23);
  173. this._fontSelectButton.TabIndex = 8;
  174. this._fontSelectButton.Click += new System.EventHandler(this.OnFontSelect);
  175. // 
  176. // _fontSample
  177. // 
  178. this._fontSample.BackColor = System.Drawing.Color.White;
  179. this._fontSample.BorderStyle = BorderStyle.FixedSingle;
  180. this._fontSample.ClearType = false;
  181. this._fontSample.Location = new System.Drawing.Point(280, 16);
  182. this._fontSample.Name = "_fontSample";
  183. this._fontSample.Size = new System.Drawing.Size(120, 46);
  184. this._fontSample.TabIndex = 9;
  185. this._fontSample.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  186. // 
  187. // _backgroundImageLabel
  188. // 
  189. this._backgroundImageLabel.Location = new System.Drawing.Point(16, 128);
  190. this._backgroundImageLabel.Name = "_backgroundImageLabel";
  191. this._backgroundImageLabel.Size = new System.Drawing.Size(72, 16);
  192. this._backgroundImageLabel.TabIndex = 10;
  193. this._backgroundImageLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  194. // 
  195. // _backgroundImageBox
  196. // 
  197. this._backgroundImageBox.Location = new System.Drawing.Point(120, 128);
  198. this._backgroundImageBox.Name = "_backgroundImageBox";
  199. this._backgroundImageBox.Size = new System.Drawing.Size(260, 19);
  200. this._backgroundImageBox.TabIndex = 11;
  201. // 
  202. // _backgroundImageSelectButton
  203. // 
  204. this._backgroundImageSelectButton.Location = new System.Drawing.Point(380, 128);
  205. this._backgroundImageSelectButton.Name = "_backgroundImageSelectButton";
  206. this._backgroundImageSelectButton.FlatStyle = FlatStyle.System;
  207. this._backgroundImageSelectButton.Size = new System.Drawing.Size(19, 19);
  208. this._backgroundImageSelectButton.TabIndex = 12;
  209. this._backgroundImageSelectButton.Text = "...";
  210. this._backgroundImageSelectButton.Click += new EventHandler(OnSelectBackgroundImage);
  211. // 
  212. // _imageStyleLabel
  213. // 
  214. this._imageStyleLabel.Location = new System.Drawing.Point(16, 153);
  215. this._imageStyleLabel.Name = "_imageStyleLabel";
  216. this._imageStyleLabel.Size = new System.Drawing.Size(96, 16);
  217. this._imageStyleLabel.TabIndex = 13;
  218. this._imageStyleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  219. // 
  220. // _imageStyleBox
  221. // 
  222. this._imageStyleBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
  223. this._imageStyleBox.Location = new System.Drawing.Point(120, 152);
  224. this._imageStyleBox.Name = "_imageStyleBox";
  225. this._imageStyleBox.Size = new System.Drawing.Size(112, 19);
  226. this._imageStyleBox.TabIndex = 14;
  227. // 
  228. // _applyRenderProfileButton
  229. // 
  230. this._applyRenderProfileButton.Location = new System.Drawing.Point(280, 176);
  231. this._applyRenderProfileButton.Name = "_applyRenderProfileButton";
  232. this._applyRenderProfileButton.FlatStyle = FlatStyle.System;
  233. this._applyRenderProfileButton.Size = new System.Drawing.Size(120, 24);
  234. this._applyRenderProfileButton.TabIndex = 15;
  235. this._applyRenderProfileButton.Click += new EventHandler(OnApplyRenderProfile);
  236. // 
  237. // _caretGroup
  238. // 
  239. this._caretGroup.Controls.AddRange(new System.Windows.Forms.Control[] {
  240.   this._caretStyleLabel,
  241.   this._caretStyleBox,
  242.   this._caretSpecifyColor,
  243.   this._caretColorBox,
  244.   this._caretBlink});
  245. this._caretGroup.Location = new System.Drawing.Point(9, 220);
  246. this._caretGroup.Name = "_caretGroup";
  247. this._caretGroup.FlatStyle = FlatStyle.System;
  248. this._caretGroup.Size = new System.Drawing.Size(416, 72);
  249. this._caretGroup.TabIndex = 16;
  250. this._caretGroup.TabStop = false;
  251. // 
  252. // _caretStyleLabel
  253. // 
  254. this._caretStyleLabel.Location = new System.Drawing.Point(16, 16);
  255. this._caretStyleLabel.Name = "_caretStyleLabel";
  256. this._caretStyleLabel.Size = new System.Drawing.Size(104, 23);
  257. this._caretStyleLabel.TabIndex = 17;
  258. this._caretStyleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
  259. // 
  260. // _caretStyleBox
  261. // 
  262. this._caretStyleBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
  263. this._caretStyleBox.Items.AddRange(GetCaretStyleDescriptions());
  264. this._caretStyleBox.Location = new System.Drawing.Point(120, 16);
  265. this._caretStyleBox.Name = "_caretStyle";
  266. this._caretStyleBox.Size = new System.Drawing.Size(152, 20);
  267. this._caretStyleBox.TabIndex = 18;
  268. // 
  269. // _caretBlink
  270. // 
  271. this._caretBlink.Location = new System.Drawing.Point(296, 16);
  272. this._caretBlink.Name = "_caretBlink";
  273. this._caretBlink.Size = new System.Drawing.Size(96, 20);
  274. this._caretBlink.TabIndex = 19;
  275. this._caretBlink.FlatStyle = FlatStyle.System;
  276. // 
  277. // _caretSpecifyColor
  278. // 
  279. this._caretSpecifyColor.Location = new System.Drawing.Point(16, 40);
  280. this._caretSpecifyColor.Name = "_caretSpecifyColor";
  281. this._caretSpecifyColor.Size = new System.Drawing.Size(104, 20);
  282. this._caretSpecifyColor.TabIndex = 20;
  283. this._caretSpecifyColor.FlatStyle = FlatStyle.System;
  284. this._caretSpecifyColor.CheckedChanged += new EventHandler(OnCaretSpecifyColorChanged);
  285. // 
  286. // _caretColorBox
  287. // 
  288. this._caretColorBox.Location = new System.Drawing.Point(120, 40);
  289. this._caretColorBox.Name = "_caretColor";
  290. this._caretColorBox.Size = new System.Drawing.Size(152, 20);
  291. this._caretColorBox.TabIndex = 21;
  292. this._caretColorBox.Enabled = false;
  293. this.BackColor = ThemeUtil.TabPaneBackColor;
  294. this._colorFontGroup.ResumeLayout();
  295. this._caretGroup.ResumeLayout();
  296. }
  297. private void FillText() {
  298. this._colorFontGroup.Text = GApp.Strings.GetString("Form.OptionDialog._colorFontGroup");
  299. this._bgColorLabel.Text = GApp.Strings.GetString("Form.OptionDialog._bgColorLabel");
  300. this._textColorLabel.Text = GApp.Strings.GetString("Form.OptionDialog._textColorLabel");
  301. this._editColorEscapeSequence.Text = GApp.Strings.GetString("Form.OptionDialog._editEscapeSequenceColorBox");
  302. this._fontLabel.Text = GApp.Strings.GetString("Form.OptionDialog._fontLabel");
  303. this._fontSample.Text = GApp.Strings.GetString("Common.FontSample");
  304. this._fontSelectButton.Text = GApp.Strings.GetString("Form.OptionDialog._fontSelectButton");
  305. this._backgroundImageLabel.Text = GApp.Strings.GetString("Form.OptionDialog._backgroundImageLabel");
  306. this._imageStyleLabel.Text = GApp.Strings.GetString("Form.OptionDialog._imageStyleLabel");
  307. this._applyRenderProfileButton.Text = GApp.Strings.GetString("Form.OptionDialog._applyRenderProfileButton");
  308. this._caretGroup.Text = GApp.Strings.GetString("Form.OptionDialog._caretGroup");
  309. this._caretStyleLabel.Text = GApp.Strings.GetString("Form.OptionDialog._caretStyleLabel");
  310. this._caretSpecifyColor.Text = GApp.Strings.GetString("Form.OptionDialog._caretSpecifyColor");
  311. this._caretColorLabel.Text = GApp.Strings.GetString("Form.OptionDialog._caretColorLabel");
  312. this._caretBlink.Text = GApp.Strings.GetString("Form.OptionDialog._caretBlink");
  313. _imageStyleBox.Items.AddRange(EnumDescAttributeT.For(typeof(ImageStyle)).DescriptionCollection());
  314. }
  315. public override void InitUI(ContainerOptions options) {
  316. AdjustFontDescription(options.Font, options.JapaneseFont);
  317. _fontSample.Font = options.Font;
  318. _fontSample.BackColor = options.BGColor;
  319. _fontSample.ForeColor = options.TextColor;
  320. _fontSample.ClearType = options.UseClearType;
  321. _fontSample.Invalidate(true);
  322. _backgroundImageBox.Text = options.BackgroundImageFileName;
  323. _imageStyleBox.SelectedIndex = (int)options.ImageStyle;
  324. _bgColorBox.SelectedColor = options.BGColor;
  325. _textColorBox.SelectedColor =  options.TextColor;
  326. _caretStyleBox.SelectedIndex = CaretTypeToIndex(options.CaretType);
  327. _caretSpecifyColor.Checked = !options.CaretColor.IsEmpty;
  328. _caretBlink.Checked = (options.CaretType & CaretType.Blink)==CaretType.Blink;
  329. _caretColorBox.SelectedColor =  options.CaretColor;
  330. _ESColorSet = options.ESColorSet;
  331. _defaultFileDir = options.DefaultFileDir;
  332. _useClearType = options.UseClearType;
  333. _font = options.Font;
  334. _japaneseFont = options.JapaneseFont;
  335. }
  336. public override bool Commit(ContainerOptions options) {
  337. string itemname = null;
  338. bool successful = false;
  339. try {
  340. if(_backgroundImageBox.Text.Length>0) {
  341. try {
  342. Image.FromFile(_backgroundImageBox.Text);
  343. }
  344. catch(Exception) {
  345. GUtil.Warning(this, String.Format(GApp.Strings.GetString("Message.OptionDialog.InvalidPictureFile"), _backgroundImageBox.Text));
  346. return false;
  347. }
  348. }
  349. options.BackgroundImageFileName = _backgroundImageBox.Text;
  350. options.ImageStyle = (ImageStyle)_imageStyleBox.SelectedIndex;
  351. options.BGColor = _bgColorBox.SelectedColor;
  352. options.TextColor = _textColorBox.SelectedColor;
  353. options.Font = _fontSample.Font;
  354. options.CaretColor = _caretSpecifyColor.Checked? _caretColorBox.SelectedColor : Color.Empty;
  355. options.CaretType = IndexToCaretType(_caretStyleBox.SelectedIndex) | (_caretBlink.Checked? CaretType.Blink : CaretType.None);
  356. options.ESColorSet = _ESColorSet;
  357. options.DefaultFileDir = _defaultFileDir;
  358. options.UseClearType = _useClearType;
  359. options.Font = _font;
  360. options.JapaneseFont = _japaneseFont;
  361. successful = true;
  362. }
  363. catch(FormatException) {
  364. GUtil.Warning(this, String.Format(GApp.Strings.GetString("Message.OptionDialog.InvalidItem"), itemname));
  365. }
  366. catch(InvalidOptionException ex) {
  367. GUtil.Warning(this, ex.Message);
  368. }
  369. return successful;
  370. }
  371. private void OnEditColorEscapeSequence(object sender, EventArgs args) {
  372. EditEscapeSequenceColor dlg = new EditEscapeSequenceColor(_fontSample.BackColor, _fontSample.ForeColor, _ESColorSet);
  373. if(GCUtil.ShowModalDialog(FindForm(), dlg)==DialogResult.OK) {
  374. _ESColorSet = dlg.Result;
  375. _bgColorBox.SelectedColor = dlg.GBackColor;
  376. _textColorBox.SelectedColor = dlg.GForeColor;
  377. _fontSample.ForeColor = dlg.GForeColor;
  378. _fontSample.BackColor = dlg.GBackColor;
  379. _fontSample.Invalidate();
  380. _bgColorBox.Invalidate();
  381. _textColorBox.Invalidate();
  382. }
  383. }
  384. private void OnFontSelect(object sender, EventArgs args) {
  385. GFontDialog gd = new GFontDialog();
  386. gd.SetFont(_useClearType, _font, _japaneseFont);
  387. DialogResult r = GCUtil.ShowModalDialog(FindForm(), gd);
  388. if(r==DialogResult.OK) {
  389. Font f = gd.ASCIIFont;
  390. _font = f;
  391. _japaneseFont = gd.JapaneseFont;
  392. _useClearType = gd.UseClearType;
  393. _fontSample.Font = f;
  394. AdjustFontDescription(f, gd.JapaneseFont);
  395. }
  396. }
  397. private void OnSelectBackgroundImage(object sender, EventArgs args) {
  398. string t = GCUtil.SelectPictureFileByDialog(FindForm());
  399. if(t!=null) {
  400. _backgroundImageBox.Text = t;
  401. _defaultFileDir = GUtil.FileToDir(t);
  402. }
  403. }
  404. private void OnApplyRenderProfile(object sender, EventArgs args) {
  405. if(this.Commit(GApp.Options))
  406. GApp.GlobalCommandTarget.ResetAllRenderProfiles(new RenderProfile(GApp.Options));
  407. }
  408. private void AdjustFontDescription(Font ascii, Font japanese) {
  409. int sz = (int)(ascii.Size+0.5);
  410. if(GEnv.Options.Language==Language.English || ascii.Name==japanese.Name)
  411. _fontDescription.Text = String.Format("{0},{1}pt", ascii.Name, sz); //Single傪int偵僉儍僗僩偡傞偲愗傝幪偰偩偑丄巐幪屲擖偵偟偰傎偟偄偺偱0.5傪懌偟偰偐傜愗傝幪偰傞
  412. else
  413. _fontDescription.Text = String.Format("{0}/{1},{2}pt", ascii.Name, japanese.Name, sz); 
  414. }
  415. private void OnBGColorChanged(object sender, Color e) {
  416. _fontSample.BackColor = e;
  417. }
  418. private void OnTextColorChanged(object sender, Color e) {
  419. _fontSample.ForeColor = e;
  420. }
  421. private void OnCaretSpecifyColorChanged(object sender, EventArgs args) {
  422. _caretColorBox.Enabled = _caretSpecifyColor.Checked;
  423. }
  424. private static CaretType IndexToCaretType(int index) {
  425. switch(index) {
  426. case 0:
  427. return CaretType.Box;
  428. case 1:
  429. return CaretType.Line;
  430. case 2:
  431. return CaretType.Underline;
  432. default:
  433. Debug.Assert(false);
  434. return CaretType.None;
  435. }
  436. }
  437. private static int CaretTypeToIndex(CaretType t) {
  438. int i = 0;
  439. if((t & CaretType.StyleMask)==CaretType.Box) i = 0;
  440. else if((t & CaretType.StyleMask)==CaretType.Line) i = 1;
  441. else if((t & CaretType.StyleMask)==CaretType.Underline) i = 2;
  442. return i;
  443. }
  444. private static object[] GetCaretStyleDescriptions() {
  445. object[] r = new object[3];
  446. //偙偙偺嶌傝曽偼曄懃揑
  447. for(int i=0; i<3; i++) {
  448. r[i] = GApp.Strings.GetString("Caption.OptionDialog.CaretStyle"+i.ToString());
  449. }
  450. return r;
  451. }
  452. }
  453. }