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

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: Options.cs,v 1.2 2005/04/20 08:45:46 okajima Exp $
  4. */
  5. using System;
  6. using System.IO;
  7. using System.Diagnostics;
  8. using System.Collections;
  9. using System.Drawing;
  10. using System.Text;
  11. using System.Reflection;
  12. using System.Windows.Forms;
  13. using Poderosa.ConnectionParam;
  14. using Poderosa.Communication;
  15. using Poderosa.Terminal;
  16. using Poderosa.Toolkit;
  17. using Poderosa.SSH;
  18. //婲摦偺崅懍壔偺偨傔丄偙偙偱偼Granados傪屇偽側偄傛偆偵拲堄偡傞
  19. //怴偟偄僆僾僔儑儞傪捛壛偟偨傜丄Load/Save/Init/Clone傪偦傟偧傟廋惓偡傞偙偲両
  20. namespace Poderosa.Config
  21. {
  22. public class CommonOptions : ICloneable {
  23. //尵岅愝掕 (偙偺儊儞僶偼嵟弶偱偁傞偙偲両乯
  24. [ConfigEnumElement(typeof(Language))] protected Language _language;
  25. //昞帵
  26. [ConfigStringElement(Initial="Courier New")]   protected string _fontName;
  27. [ConfigStringElement(Initial="俵俽 僑僔僢僋")] protected string _japaneseFontName;
  28. [ConfigFloatElement(Initial=9)]                protected float _fontSize;
  29. //偙偺俀偮偼忋婰梫慺偐傜嶌惉
  30. protected Font _font;
  31. protected Font _japaneseFont;
  32. [ConfigBoolElement(Initial=true)]              protected bool _useClearType;
  33. [ConfigColorElement(Initial=LateBindColors.Window)]     protected Color _bgColor;
  34. [ConfigColorElement(Initial=LateBindColors.WindowText)] protected Color _textColor;
  35. /* Special Handlings Required */                        protected EscapesequenceColorSet _esColorSet;
  36. [ConfigStringElement(Initial="")]                       protected string _backgroundImageFileName;
  37. [ConfigEnumElement(typeof(ImageStyle), InitialAsInt=(int)ImageStyle.Center)] protected ImageStyle _imageStyle;
  38. [ConfigColorElement(Initial=LateBindColors.Empty)] protected Color _caretColor; //Color.Empty偺偲偒偼捠忢僥僉僗僩傪斀揮偡傞偺傒
  39. //僞乕儈僫儖
  40. [ConfigFlagElement(typeof(CaretType), Initial=(int)(CaretType.Blink|CaretType.Box), Max=(int)CaretType.Max)]
  41.                                     protected CaretType _caretType;
  42. [ConfigBoolElement(Initial=true)]   protected bool _closeOnDisconnect;
  43. [ConfigBoolElement(Initial=false)]  protected bool _beepOnBellChar;
  44. [ConfigBoolElement(Initial=false)]  protected bool _askCloseOnExit;
  45. [ConfigBoolElement(Initial=false)]  protected bool _quitAppWithLastPane;
  46. [ConfigEnumElement(typeof(DisconnectNotification), InitialAsInt=(int)DisconnectNotification.StatusBar)]
  47.                                     protected DisconnectNotification _disconnectNotification;
  48. [ConfigIntElement(Initial=100)]     protected int _terminalBufferSize;
  49. [ConfigBoolElement(Initial=false)]  protected bool _send0x7FByDel;
  50. [ConfigEnumElement(typeof(LogType), InitialAsInt=(int)LogType.None)]
  51.                                     protected LogType _defaultLogType;
  52. [ConfigStringElement(Initial="")]   protected string  _defaultLogDirectory;
  53. [ConfigEnumElement(typeof(WarningOption), InitialAsInt=(int)WarningOption.MessageBox)]
  54.                                     protected WarningOption _warningOption;
  55. [ConfigBoolElement(Initial=false)]  protected bool _adjustsTabTitleToWindowTitle;
  56. [ConfigBoolElement(Initial=false)]  protected bool _allowsScrollInAppMode;
  57. [ConfigIntElement(Initial=0)]       protected int  _keepAliveInterval;
  58. [ConfigEnumElement(typeof(Keys), InitialAsInt=(int)Keys.None)]
  59.                                     protected Keys _localBufferScrollModifier;
  60. //儅僂僗偲僉乕儃乕僪
  61. [ConfigEnumElement(typeof(AltKeyAction), InitialAsInt=(int)AltKeyAction.Menu)]
  62.                                             protected AltKeyAction _leftAltKey;
  63. [ConfigEnumElement(typeof(AltKeyAction), InitialAsInt=(int)AltKeyAction.Menu)]
  64.                                     protected AltKeyAction _rightAltKey;
  65. [ConfigBoolElement(Initial=false)]  protected bool _autoCopyByLeftButton;
  66. [ConfigEnumElement(typeof(RightButtonAction), InitialAsInt=(int)RightButtonAction.ContextMenu)]
  67.                                     protected RightButtonAction _rightButtonAction;
  68. [ConfigIntElement(Initial=3)]       protected int _wheelAmount;
  69. [ConfigStringElement(Initial="")]   protected string _additionalWordElement;
  70. //SSH
  71. [ConfigBoolElement(Initial=false)]  protected bool _retainsPassphrase;
  72. [ConfigStringArrayElement(Initial = new string[] { "AES128", "Blowfish", "TripleDES" })]
  73.                                     protected string[] _cipherAlgorithmOrder;
  74. [ConfigStringArrayElement(Initial = new string[] { "DSA", "RSA" })]
  75.                                     protected string[] _hostKeyAlgorithmOrder;
  76. [ConfigIntElement(Initial=4096)]    protected int _sshWindowSize;
  77. [ConfigBoolElement(Initial=true)]   protected bool _sshCheckMAC;
  78. //SOCKS娭學
  79. [ConfigBoolElement(Initial=false)]  protected bool  _useSocks;
  80. [ConfigStringElement(Initial="")]   protected string _socksServer;
  81. [ConfigIntElement(Initial=1080)]    protected int _socksPort;
  82. [ConfigStringElement(Initial="")]   protected string _socksAccount;
  83. [ConfigStringElement(Initial="")]   protected string _socksPassword;
  84. [ConfigStringElement(Initial="")]   protected string _socksNANetworks;
  85. private static ArrayList _configAttributes;
  86. public CommonOptions() {
  87. _esColorSet = new EscapesequenceColorSet();
  88. if(_configAttributes==null) InitConfigAttributes();
  89. }
  90. public Language Language {
  91. get {
  92. return _language;
  93. }
  94. set {
  95. _language = value;
  96. }
  97. }
  98. public bool CloseOnDisconnect {
  99. get {
  100. return _closeOnDisconnect;
  101. }
  102. set {
  103. _closeOnDisconnect = value;
  104. }
  105. }
  106. public DisconnectNotification DisconnectNotification {
  107. get {
  108. return _disconnectNotification;
  109. }
  110. set {
  111. _disconnectNotification = value;
  112. }
  113. }
  114. public bool BeepOnBellChar {
  115. get {
  116. return _beepOnBellChar;
  117. }
  118. set {
  119. _beepOnBellChar = value;
  120. }
  121. }
  122. public bool AskCloseOnExit {
  123. get {
  124. return _askCloseOnExit;
  125. }
  126. set {
  127. _askCloseOnExit = value;
  128. }
  129. }
  130. public bool QuitAppWithLastPane {
  131. get {
  132. return _quitAppWithLastPane;
  133. }
  134. set {
  135. _quitAppWithLastPane = value;
  136. }
  137. }
  138. public bool Send0x7FByDel {
  139. get {
  140. return _send0x7FByDel;
  141. }
  142. set {
  143. _send0x7FByDel = value;
  144. }
  145. }
  146. public AltKeyAction LeftAltKey {
  147. get {
  148. return _leftAltKey;
  149. }
  150. set {
  151. _leftAltKey = value;
  152. }
  153. }
  154. public AltKeyAction RightAltKey {
  155. get {
  156. return _rightAltKey;
  157. }
  158. set {
  159. _rightAltKey = value;
  160. }
  161. }
  162. public bool AutoCopyByLeftButton {
  163. get {
  164. return _autoCopyByLeftButton;
  165. }
  166. set {
  167. _autoCopyByLeftButton = value;
  168. }
  169. }
  170. public RightButtonAction RightButtonAction {
  171. get {
  172. return _rightButtonAction;
  173. }
  174. set {
  175. _rightButtonAction = value;
  176. }
  177. }
  178. public string AdditionalWordElement {
  179. get {
  180. return _additionalWordElement;
  181. }
  182. set {
  183. _additionalWordElement = value;
  184. }
  185. }
  186. public bool AdjustsTabTitleToWindowTitle {
  187. get {
  188. return _adjustsTabTitleToWindowTitle;
  189. }
  190. set {
  191. _adjustsTabTitleToWindowTitle = value;
  192. }
  193. }
  194. public bool AllowsScrollInAppMode {
  195. get {
  196. return _allowsScrollInAppMode;
  197. }
  198. set {
  199. _allowsScrollInAppMode = value;
  200. }
  201. }
  202. public int WheelAmount {
  203. get {
  204. return _wheelAmount;
  205. }
  206. set {
  207. if(value<1 || value>99)
  208. throw new InvalidOptionException(GEnv.Strings.GetString("Message.Options.WheelAmountRange"));
  209. _wheelAmount = value;
  210. }
  211. }
  212. public int TerminalBufferSize {
  213. get {
  214. return _terminalBufferSize;
  215. }
  216. set {
  217. if(value<0 || value>9999)
  218. throw new InvalidOptionException(GEnv.Strings.GetString("Message.Options.BufferSizeRange"));
  219. _terminalBufferSize = value;
  220. }
  221. }
  222. public Font Font {
  223. get {
  224. if(_font==null) _font = GUtil.CreateFont(_fontName, _fontSize);
  225. return _font;
  226. }
  227. set {
  228. _font = value;
  229. _fontName = _font.FontFamily.Name;
  230. _fontSize = _font.Size;
  231. }
  232. }
  233. public Font JapaneseFont {
  234. get {
  235. if(_japaneseFont==null) _japaneseFont = GUtil.CreateFont(_japaneseFontName, _fontSize);
  236. return _japaneseFont;
  237. }
  238. set {
  239. _japaneseFont = value;
  240. _japaneseFontName = _japaneseFont.FontFamily.Name;
  241. }
  242. }
  243. //偙傟傜偼RenderProfile偑庢摼偡傞栚揑
  244. public string FontName {
  245. get {
  246. return _fontName;
  247. }
  248. }
  249. public string JapaneseFontName {
  250. get {
  251. return _japaneseFontName;
  252. }
  253. }
  254. public float FontSize {
  255. get {
  256. return _fontSize;
  257. }
  258. }   
  259. public bool UseClearType {
  260. get {
  261. return _useClearType;
  262. }
  263. set {
  264. _useClearType = value;
  265. }
  266. }
  267. public Color BGColor {
  268. get {
  269. return _bgColor;
  270. }
  271. set {
  272. _bgColor = value;
  273. }
  274. }
  275. public Color TextColor {
  276. get {
  277. return _textColor;
  278. }
  279. set {
  280. _textColor = value;
  281. }
  282. }
  283. public EscapesequenceColorSet ESColorSet {
  284. get {
  285. return _esColorSet;
  286. }
  287. set {
  288. _esColorSet = value;
  289. }
  290. }
  291. public string BackgroundImageFileName {
  292. get {
  293. return _backgroundImageFileName;
  294. }
  295. set {
  296. _backgroundImageFileName = value;
  297. }
  298. }
  299. public ImageStyle ImageStyle {
  300. get {
  301. return _imageStyle;
  302. }
  303. set {
  304. _imageStyle = value;
  305. }
  306. }
  307. public CaretType CaretType {
  308. get {
  309. return _caretType;
  310. }
  311. set {
  312. _caretType = value;
  313. }
  314. }
  315. public Color CaretColor {
  316. get {
  317. return _caretColor;
  318. }
  319. set {
  320. _caretColor = value;
  321. }
  322. }
  323. public string[] CipherAlgorithmOrder {
  324. get {
  325. return _cipherAlgorithmOrder;
  326. }
  327. set {
  328. _cipherAlgorithmOrder = value;
  329. }
  330. }
  331. public string[] HostKeyAlgorithmOrder {
  332. get {
  333. return _hostKeyAlgorithmOrder;
  334. }
  335. set {
  336. _hostKeyAlgorithmOrder = value;
  337. }
  338. }
  339. public int SSHWindowSize {
  340. get {
  341. return _sshWindowSize;
  342. }
  343. set {
  344. _sshWindowSize = value;
  345. }
  346. }
  347. public bool SSHCheckMAC {
  348. get {
  349. return _sshCheckMAC;
  350. }
  351. set {
  352. _sshCheckMAC = value;
  353. }
  354. }
  355. public bool RetainsPassphrase {
  356. get {
  357. return _retainsPassphrase;
  358. }
  359. set {
  360. _retainsPassphrase = value;
  361. }
  362. }
  363. public WarningOption WarningOption {
  364. get {
  365. return _warningOption;
  366. }
  367. set {
  368. _warningOption = value;
  369. }
  370. }
  371. public LogType DefaultLogType {
  372. get {
  373. return _defaultLogType;
  374. }
  375. set {
  376. _defaultLogType = value;
  377. }
  378. }
  379. public string DefaultLogDirectory {
  380. get {
  381. return _defaultLogDirectory;
  382. }
  383. set {
  384. _defaultLogDirectory = value;
  385. }
  386. }
  387. public bool  UseSocks {
  388. get {
  389. return _useSocks;
  390. }
  391. set {
  392. _useSocks = value;
  393. }
  394. }
  395. public string SocksServer {
  396. get {
  397. return _socksServer;
  398. }
  399. set {
  400. _socksServer = value;
  401. }
  402. }
  403. public int SocksPort {
  404. get {
  405. return _socksPort;
  406. }
  407. set {
  408. _socksPort = value;
  409. }
  410. }
  411. public string SocksAccount {
  412. get {
  413. return _socksAccount;
  414. }
  415. set {
  416. _socksAccount = value;
  417. }
  418. }
  419. public string SocksPassword {
  420. get {
  421. return _socksPassword;
  422. }
  423. set {
  424. _socksPassword = value;
  425. }
  426. }
  427. public string SocksNANetworks {
  428. get {
  429. return _socksNANetworks;
  430. }
  431. set {
  432. _socksNANetworks = value;
  433. }
  434. }
  435. public int KeepAliveInterval {
  436. get {
  437. return _keepAliveInterval;
  438. }
  439. set {
  440. _keepAliveInterval = value;
  441. }
  442. }
  443. public Keys LocalBufferScrollModifier {
  444. get {
  445. return _localBufferScrollModifier;
  446. }
  447. set {
  448. _localBufferScrollModifier = value;
  449. }
  450. }
  451. public virtual object Clone() {
  452. CommonOptions o = new CommonOptions();
  453. CopyTo(o);
  454. return o;
  455. }
  456. public void CopyTo(CommonOptions o) {
  457. o._closeOnDisconnect = _closeOnDisconnect;
  458. o._disconnectNotification = _disconnectNotification;
  459. o._beepOnBellChar = _beepOnBellChar;
  460. o._askCloseOnExit = _askCloseOnExit;
  461. o._quitAppWithLastPane = _quitAppWithLastPane;
  462. o._autoCopyByLeftButton = _autoCopyByLeftButton;
  463. o._send0x7FByDel = _send0x7FByDel;
  464. o._keepAliveInterval = _keepAliveInterval;
  465. o._adjustsTabTitleToWindowTitle = _adjustsTabTitleToWindowTitle;
  466. o._allowsScrollInAppMode = _allowsScrollInAppMode;
  467. o._wheelAmount = _wheelAmount;
  468. o._terminalBufferSize = _terminalBufferSize;
  469. o._retainsPassphrase = _retainsPassphrase;
  470. o._warningOption = _warningOption;
  471. o._localBufferScrollModifier = _localBufferScrollModifier;
  472. o._rightButtonAction = _rightButtonAction;
  473. o._leftAltKey = _leftAltKey;
  474. o._rightAltKey = _rightAltKey;
  475. o._additionalWordElement = _additionalWordElement;
  476. o._font = null;
  477. o._japaneseFont = null;
  478. o._fontName = _fontName;
  479. o._japaneseFontName = _japaneseFontName;
  480. o._useClearType = _useClearType;
  481. o._fontSize = _fontSize;
  482. o._bgColor = _bgColor;
  483. o._textColor = _textColor;
  484. o._esColorSet = (EscapesequenceColorSet)_esColorSet.Clone();
  485. o._backgroundImageFileName = _backgroundImageFileName;
  486. o._caretType = _caretType;
  487. o._caretColor = _caretColor;
  488. o._imageStyle = _imageStyle;
  489. o._cipherAlgorithmOrder = (string[])_cipherAlgorithmOrder.Clone();
  490. o._hostKeyAlgorithmOrder = (string[])_hostKeyAlgorithmOrder.Clone();
  491. o._sshWindowSize = _sshWindowSize;
  492. o._sshCheckMAC = _sshCheckMAC;
  493. o._defaultLogType = _defaultLogType;
  494. o._defaultLogDirectory = _defaultLogDirectory;
  495. o._useSocks = _useSocks;
  496. o._socksServer = _socksServer;
  497. o._socksPort = _socksPort;
  498. o._socksAccount = _socksAccount;
  499. o._socksPassword = _socksPassword;
  500. o._socksNANetworks = _socksNANetworks;
  501. }
  502. private static void InitConfigAttributes() {
  503. FieldInfo[] fields = typeof(CommonOptions).GetFields(BindingFlags.NonPublic|BindingFlags.Instance);
  504. _configAttributes = new ArrayList(fields.Length);
  505. bool language_found = false;
  506. foreach(FieldInfo field in fields) {
  507. object[] attrs = field.GetCustomAttributes(typeof(ConfigElementAttribute), true);
  508. if(attrs.Length!=0) {
  509. ConfigElementAttribute attr = (ConfigElementAttribute)attrs[0];
  510. attr.FieldInfo = field;
  511. if(!language_found) {
  512. Debug.Assert(field.Name=="_language");
  513. //Language偺弶婜抣偼幚峴帪偱側偄偲寛傑傜側偄
  514. (attr as ConfigEnumElementAttribute).InitialAsInt = (int)GUtil.CurrentLanguage;
  515. language_found = true;
  516. }
  517. _configAttributes.Add(attr);
  518. }
  519. }
  520. }
  521. public virtual void Save(ConfigNode parent) {
  522. ConfigNode node = new ConfigNode("poderosa-terminal");
  523. foreach(ConfigElementAttribute attr in _configAttributes) {
  524. attr.ExportTo(this, node);
  525. }
  526. if(!_esColorSet.IsDefault)
  527. node["escape-sequence-color"] = _esColorSet.Format();
  528. parent.AddChild(node);
  529. }
  530. public virtual void Load(ConfigNode parent) {
  531. ConfigNode node = parent.FindChildConfigNode("poderosa-terminal");
  532. if(node!=null) {
  533. foreach(ConfigElementAttribute attr in _configAttributes) {
  534. attr.ImportFrom(this, node);
  535. }
  536. string es = node["escape-sequence-color"];
  537. if(es!=null) _esColorSet.Load(es);
  538. }
  539. else
  540. Init();
  541. }
  542. public virtual void Init() {
  543. foreach(ConfigElementAttribute attr in _configAttributes) {
  544. attr.Reset(this);
  545. }
  546. }
  547. }
  548. /// <summary>
  549. /// 儁僀儞偺埵抲傪巜掕偟傑偡丅
  550. /// </summary>
  551. public enum PanePosition {
  552. /// <summary>
  553. /// 忋壓暘妱偺偲偒偺忋丄嵍塃暘妱偺偲偒偺嵍偺埵抲偱偡丅
  554. /// </summary>
  555. First,
  556. /// <summary>
  557. /// 忋壓暘妱偺偲偒偺壓丄嵍塃暘妱偺偲偒偺塃偺埵抲偱偡丅
  558. /// </summary>
  559. Second
  560. }
  561. [EnumDesc(typeof(Language))]
  562. public enum Language {
  563. [EnumValue(Description="Enum.Language.English")] English,
  564. [EnumValue(Description="Enum.Language.Japanese")] Japanese
  565. }
  566. //偍偐偟側暥帤偑棃偨偲偒偳偆偡傞偐
  567. [EnumDesc(typeof(WarningOption))]
  568. public enum WarningOption {
  569. [EnumValue(Description="Enum.WarningOption.Ignore")] Ignore,     
  570. [EnumValue(Description="Enum.WarningOption.StatusBar")] StatusBar,
  571. [EnumValue(Description="Enum.WarningOption.MessageBox")] MessageBox
  572. }
  573. [EnumDesc(typeof(DisconnectNotification))]
  574. public enum DisconnectNotification {
  575. [EnumValue(Description="Enum.DisconnectNotification.MessageBox")] MessageBox,
  576. [EnumValue(Description="Enum.DisconnectNotification.StatusBar")] StatusBar
  577. }
  578. [EnumDesc(typeof(AltKeyAction))]
  579. public enum AltKeyAction {
  580. [EnumValue(Description="Enum.AltKeyAction.Menu")] Menu,
  581. [EnumValue(Description="Enum.AltKeyAction.ESC")] ESC,
  582. [EnumValue(Description="Enum.AltKeyAction.Meta")] Meta
  583. }
  584. [EnumDesc(typeof(RightButtonAction))]
  585. public enum RightButtonAction {
  586. [EnumValue(Description="Enum.RightButtonAction.ContextMenu")] ContextMenu,
  587. [EnumValue(Description="Enum.RightButtonAction.Paste")] Paste
  588. }
  589. [Flags]
  590. public enum CaretType {
  591. None = 0,
  592. Blink = 1,
  593. Line = 0,
  594. Box = 2,
  595. Underline = 4,
  596. StyleMask = Box|Underline,
  597. Max = Blink|Box|Underline
  598. }
  599. public class InvalidOptionException : Exception {
  600. public InvalidOptionException(string msg) : base(msg) {}
  601. }
  602. }