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

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: ContainerOptions.cs,v 1.2 2005/04/20 08:45:44 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.Globalization;
  13. using System.Windows.Forms;
  14. using Poderosa.Toolkit;
  15. using Poderosa.Communication;
  16. using Poderosa.Terminal;
  17. namespace Poderosa.Config {
  18. internal class ContainerOptions : CommonOptions {
  19. protected Language _envLanguage; //Windows偺娐嫬偵婎偯偔尵岅 曐懚偼偝傟側偄
  20. protected Commands _commands;
  21. protected Rectangle _framePosition;
  22. [ConfigEnumElement(typeof(OptionPreservePlace), InitialAsInt=(int)OptionPreservePlace.InstalledDir)]
  23.                                    protected OptionPreservePlace _optionPreservePlace;
  24. [ConfigStringElement(Initial="")]  protected string _defaultKeyDir;
  25. [ConfigStringElement(Initial="")]  protected string _defaultFileDir;
  26. [ConfigEnumElement(typeof(FormWindowState), InitialAsInt=(int)FormWindowState.Normal)]
  27.                                    protected FormWindowState _frameState;
  28. [ConfigBoolElement(Initial=false)] protected bool _guevaraMode;
  29. [ConfigBoolElement(Initial=true)]  protected bool _showWelcomeDialog;
  30. [ConfigBoolElement(Initial=false)] protected bool _hideDialogForSP1Issue;
  31. [ConfigEnumElement(typeof(GFrameStyle), InitialAsInt=(int)GFrameStyle.Single)]
  32.                                    protected GFrameStyle _frameStyle;
  33. [ConfigEnumElement(typeof(TabBarStyle), InitialAsInt=(int)TabBarStyle.MultiRow)] 
  34.                                    protected TabBarStyle _tabBarStyle;
  35. [ConfigBoolElement(Initial=false)] protected bool _splitterPreservesRatio; //僼儗乕儉傪儕僒僀僘偟偨偲偒僗僾儕僢僞偑楢摦偡傞偐偳偆偐
  36. [ConfigBoolElement(Initial=true)]  protected bool _showToolBar;
  37. [ConfigBoolElement(Initial=true)]  protected bool _showTabBar;
  38. [ConfigBoolElement(Initial=true)]  protected bool _showStatusBar;
  39. [ConfigIntElement(Initial=8)]      protected int _MRUSize;
  40. [ConfigIntElement(Initial=4)]      protected int _serialCount;
  41. [ConfigEnumElement(typeof(CID), InitialAsInt=(int)CID.NOP)]  protected CID _actionOnLaunch;
  42. private static ArrayList _configAttributes;
  43. public Commands Commands {
  44. get {
  45. return _commands;
  46. }
  47. set {
  48. _commands = value;
  49. GApp.Frame.ApplyHotKeys(value);
  50. }
  51. }
  52. public bool GuevaraMode {
  53. get {
  54. return _guevaraMode;
  55. }
  56. set {
  57. _guevaraMode = value;
  58. }
  59. }
  60. public bool HideDialogForSP1Issue {
  61. get {
  62. return _hideDialogForSP1Issue;
  63. }
  64. set {
  65. _hideDialogForSP1Issue = value;
  66. }
  67. }
  68. public GFrameStyle FrameStyle {
  69. get {
  70. return _frameStyle;
  71. }
  72. set {
  73. _frameStyle = value;
  74. }
  75. }
  76. public Rectangle FramePosition {
  77. get {
  78. return _framePosition;
  79. }
  80. set {
  81. _framePosition = value;
  82. }
  83. }
  84. public string DefaultKeyDir {
  85. get {
  86. return _defaultKeyDir;
  87. }
  88. set {
  89. _defaultKeyDir = value;
  90. }
  91. }
  92. public string DefaultFileDir {
  93. get {
  94. return _defaultFileDir;
  95. }
  96. set {
  97. _defaultFileDir = value;
  98. }
  99. }
  100. public FormWindowState FrameState {
  101. get {
  102. return _frameState;
  103. }
  104. set {
  105. _frameState = value;
  106. }
  107. }
  108. public OptionPreservePlace OptionPreservePlace {
  109. get {
  110. return _optionPreservePlace;
  111. }
  112. set {
  113. _optionPreservePlace = value;
  114. }
  115. }
  116. public int MRUSize {
  117. get {
  118. return _MRUSize;
  119. }
  120. set {
  121. if(value<0 || value>20)
  122. throw new InvalidOptionException(GApp.Strings.GetString("Message.MRULimit"));
  123. _MRUSize = value;
  124. }
  125. }
  126. public int SerialCount {
  127. get {
  128. return _serialCount;
  129. }
  130. set {
  131. if(value<1 || value>99)
  132. throw new InvalidOptionException(GApp.Strings.GetString("Message.SerialLimit"));
  133. _serialCount = value;
  134. }
  135. }
  136. public CID ActionOnLaunch {
  137. get {
  138. return _actionOnLaunch;
  139. }
  140. set {
  141. _actionOnLaunch = value;
  142. }
  143. }
  144. public bool SplitterPreservesRatio {
  145. get {
  146. return _splitterPreservesRatio;
  147. }
  148. set {
  149. _splitterPreservesRatio = value;
  150. }
  151. }
  152. public bool ShowToolBar {
  153. get {
  154. return _showToolBar;
  155. }
  156. set {
  157. _showToolBar = value;
  158. }
  159. }
  160. public bool ShowTabBar {
  161. get {
  162. return _showTabBar;
  163. }
  164. set {
  165. _showTabBar = value;
  166. }
  167. }
  168. public bool ShowStatusBar {
  169. get {
  170. return _showStatusBar;
  171. }
  172. set {
  173. _showStatusBar = value;
  174. }
  175. }
  176. public TabBarStyle TabBarStyle {
  177. get {
  178. return _tabBarStyle;
  179. }
  180. set {
  181. _tabBarStyle = value;
  182. }
  183. }
  184. public Language EnvLanguage {
  185. get {
  186. return _envLanguage;
  187. }
  188. set {
  189. _envLanguage = value;
  190. }
  191. }
  192. public bool ShowWelcomeDialog {
  193. get {
  194. return _showWelcomeDialog;
  195. }
  196. set {
  197. _showWelcomeDialog = value;
  198. }
  199. }
  200. public ContainerOptions() {
  201. _envLanguage = GUtil.CurrentLanguage;
  202. if(_configAttributes==null) InitConfigAttributes();
  203. }
  204. public override object Clone() {
  205. ContainerOptions o = new ContainerOptions();
  206. CopyTo(o);
  207. return o;
  208. }
  209. public void CopyTo(ContainerOptions o) {
  210. base.CopyTo(o);
  211. o._defaultKeyDir = _defaultKeyDir;
  212. o._defaultFileDir = _defaultFileDir;
  213. o._framePosition = _framePosition;
  214. o._frameState = _frameState;
  215. o._optionPreservePlace = _optionPreservePlace;
  216. o._frameStyle = _frameStyle;
  217. o._splitterPreservesRatio = _splitterPreservesRatio;
  218. o._showToolBar = _showToolBar;
  219. o._showTabBar = _showTabBar;
  220. o._showStatusBar = _showStatusBar;
  221. o._tabBarStyle = _tabBarStyle;
  222. o._actionOnLaunch = _actionOnLaunch;
  223. o._MRUSize = _MRUSize;
  224. o._serialCount = _serialCount;
  225. o._language = _language;
  226. o._envLanguage = _envLanguage;
  227. o._guevaraMode = _guevaraMode;
  228. o._commands = (Commands)_commands.Clone();
  229. o._showWelcomeDialog = _showWelcomeDialog;
  230. }
  231. private static void InitConfigAttributes() {
  232. FieldInfo[] fields = typeof(ContainerOptions).GetFields(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
  233. _configAttributes = new ArrayList(fields.Length);
  234. foreach(FieldInfo field in fields) {
  235. object[] attrs = field.GetCustomAttributes(typeof(ConfigElementAttribute), true);
  236. if(attrs.Length!=0) {
  237. ConfigElementAttribute attr = (ConfigElementAttribute)attrs[0];
  238. attr.FieldInfo = field;
  239. _configAttributes.Add(attr);
  240. }
  241. }
  242. }
  243. public override sealed void Save(ConfigNode parent) {
  244. ConfigNode node = new ConfigNode("poderosa-container");
  245. foreach(ConfigElementAttribute attr in _configAttributes) {
  246. attr.ExportTo(this, node);
  247. }
  248. node["framePosition"] = String.Format("{0},{1},{2},{3}", _framePosition.X, _framePosition.Y, _framePosition.Width, _framePosition.Height);
  249. parent.AddChild(node);
  250. _commands.Save(parent);
  251. base.Save(parent);
  252. }
  253. public override sealed void Load(ConfigNode parent) {
  254. ConfigNode node = parent.FindChildConfigNode("poderosa-container");
  255. if(node!=null) {
  256. //婎杮偺傾僩儕價儏乕僩
  257. foreach(ConfigElementAttribute attr in _configAttributes) {
  258. attr.ImportFrom(this, node);
  259. }
  260. }
  261. //frame state偼暿偺埖偄
  262. string frame_pos = node==null? null : node.GetValue("framePosition", null);
  263. bool frame_filled = false;
  264. if(_frameState==FormWindowState.Normal && frame_pos!=null) {
  265. string[] t = frame_pos.Split(',');
  266. if(t.Length==4) {
  267. _framePosition.X = GUtil.ParseInt(t[0], 0);
  268. _framePosition.Y = GUtil.ParseInt(t[1], 0);
  269. _framePosition.Width = GUtil.ParseInt(t[2], 640);
  270. _framePosition.Height = GUtil.ParseInt(t[3], 480);
  271. frame_filled = true;
  272. }
  273. }
  274. if(!frame_filled) {
  275. if(_frameState==FormWindowState.Minimized) _frameState = FormWindowState.Normal; //嵟彫壔偱婲摦偟偰傕巇曽側偄偺偱僲乕儅儖偵偡傞
  276. Rectangle r = Screen.PrimaryScreen.Bounds;
  277. _framePosition.X = r.Width / 6;
  278. _framePosition.Y = r.Height / 6;
  279. _framePosition.Width = r.Width*2 / 3;
  280. _framePosition.Height = r.Height*2 / 3;
  281. }
  282. _commands = new Commands();
  283. _commands.Load(parent);
  284. base.Load(parent);
  285. }
  286. public override void Init() {
  287. foreach(ConfigElementAttribute attr in _configAttributes) {
  288. attr.Reset(this);
  289. }
  290. Rectangle r = Screen.PrimaryScreen.Bounds;
  291. _framePosition.X = r.Width / 6;
  292. _framePosition.Y = r.Height / 6;
  293. _framePosition.Width = r.Width*2 / 3;
  294. _framePosition.Height = r.Height*2 / 3;
  295. _commands = new Commands();
  296. _commands.Init();
  297. base.Init();
  298. }
  299. }
  300. /// <summary>
  301. /// 僼儗乕儉偺僗僞僀儖
  302. /// </summary>
  303. /// <remarks>
  304. /// GFrameStyle偲偄偆柤慜偵側偭偰偄傞偺偼丄System.Windows.Forms偵FrameStyle偲偄偆柤慜偺楍嫇懱偑偡偱偵偁傞偐傜偱偡丅
  305. /// </remarks>
  306. [EnumDesc(typeof(GFrameStyle))]
  307. public enum GFrameStyle {
  308. /// <summary>
  309. /// 僔儞僌儖
  310. /// </summary>
  311. [EnumValue(Description="Enum.GFrameStyle.Single")]   Single,             //侾搙偵堦偮偺傒昞帵
  312. /// <summary>
  313. /// 嵍塃偵俀暘妱
  314. /// </summary>
  315. [EnumValue(Description="Enum.GFrameStyle.DivVertical")] DivVertical,        //嵍塃暘妱
  316. /// <summary>
  317. /// 忋壓偵俀暘妱
  318. /// </summary>
  319. [EnumValue(Description="Enum.GFrameStyle.DivHorizontal")]  DivHorizontal,      //忋壓暘妱
  320. [EnumValue(Description="Enum.GFrameStyle.DivVertical3")]   DivVertical3,       //嵍塃俁暘妱
  321. [EnumValue(Description="Enum.GFrameStyle.DivHorizontal3")] DivHorizontal3,     //忋壓俁暘妱
  322. [EnumValue(Description="Enum.GFrameStyle.DivQuad")]        DivQuad             //係暘妱
  323. }
  324. [EnumDesc(typeof(TabBarStyle))]
  325. public enum TabBarStyle {
  326. [EnumValue(Description="Enum.TabBarStyle.MultiRow")] MultiRow,
  327. [EnumValue(Description="Enum.TabBarStyle.ScrollButton")] ScrollButton
  328. }
  329. [EnumDesc(typeof(OptionPreservePlace))]
  330. public enum OptionPreservePlace {
  331. [EnumValue(Description="Enum.OptionPreservePlace.InstalledDir")] InstalledDir,
  332. [EnumValue(Description="Enum.OptionPreservePlace.AppData")] AppData
  333. }
  334. }