PageRenderTime 60ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/src/ChooseToolDefaultsDialog.cs

https://bitbucket.org/tuldok89/openpdn
C# | 469 lines | 363 code | 71 blank | 35 comment | 29 complexity | b9644a76ea11d5f5c4a392367b5c0c8c MD5 | raw file
  1. /////////////////////////////////////////////////////////////////////////////////
  2. // Paint.NET //
  3. // Copyright (C) dotPDN LLC, Rick Brewster, Tom Jackson, and contributors. //
  4. // Portions Copyright (C) Microsoft Corporation. All Rights Reserved. //
  5. // See src/Resources/Files/License.txt for full licensing and attribution //
  6. // details. //
  7. // . //
  8. /////////////////////////////////////////////////////////////////////////////////
  9. using PaintDotNet.Base;
  10. using PaintDotNet.SystemLayer;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Drawing;
  14. using System.Windows.Forms;
  15. namespace PaintDotNet
  16. {
  17. internal class ChooseToolDefaultsDialog
  18. : PdnBaseForm
  19. {
  20. private Button _cancelButton;
  21. private Button _saveButton;
  22. private Label _introText;
  23. private Label _defaultToolText;
  24. private Button _resetButton;
  25. private Button _loadFromToolBarButton;
  26. private ToolChooserStrip _toolChooserStrip;
  27. private Type _toolType = Tool.DefaultToolType;
  28. private AppEnvironment _toolBarAppEnvironment;
  29. private Type _toolBarToolType;
  30. private HeaderLabel _bottomSeparator;
  31. private readonly List<ToolConfigRow> _toolConfigRows = new List<ToolConfigRow>();
  32. private sealed class ToolConfigRow
  33. {
  34. private readonly ToolConfigStrip _toolConfigStrip;
  35. private readonly HeaderLabel _headerLabel;
  36. private readonly ToolBarConfigItems _toolBarConfigItems;
  37. public ToolBarConfigItems ToolBarConfigItems
  38. {
  39. get
  40. {
  41. return _toolBarConfigItems;
  42. }
  43. }
  44. public HeaderLabel HeaderLabel
  45. {
  46. get
  47. {
  48. return _headerLabel;
  49. }
  50. }
  51. public ToolConfigStrip ToolConfigStrip
  52. {
  53. get
  54. {
  55. return _toolConfigStrip;
  56. }
  57. }
  58. private string GetHeaderResourceName()
  59. {
  60. string resName1 = _toolBarConfigItems.ToString();
  61. string resName2 = resName1.Replace(", ", "");
  62. return "ChooseToolDefaultsDialog.ToolConfigRow." + resName2 + ".HeaderLabel.Text";
  63. }
  64. public ToolConfigRow(ToolBarConfigItems toolBarConfigItems)
  65. {
  66. _toolBarConfigItems = toolBarConfigItems;
  67. _headerLabel = new HeaderLabel
  68. {
  69. Name = "headerLabel:" + toolBarConfigItems,
  70. Text = PdnResources.GetString(GetHeaderResourceName()),
  71. RightMargin = 0
  72. };
  73. _toolConfigStrip = new ToolConfigStrip
  74. {
  75. Name = "toolConfigStrip:" + toolBarConfigItems,
  76. AutoSize = true,
  77. Dock = DockStyle.None,
  78. GripStyle = ToolStripGripStyle.Hidden,
  79. LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow,
  80. ToolBarConfigItems = _toolBarConfigItems
  81. };
  82. }
  83. }
  84. public void SetToolBarSettings(Type newToolType, AppEnvironment newToolBarAppEnvironment)
  85. {
  86. _toolBarToolType = newToolType;
  87. _toolBarAppEnvironment = newToolBarAppEnvironment.Clone();
  88. }
  89. public void LoadUIFromAppEnvironment(AppEnvironment newAppEnvironment)
  90. {
  91. SuspendLayout();
  92. foreach (ToolConfigRow row in _toolConfigRows)
  93. {
  94. row.ToolConfigStrip.LoadFromAppEnvironment(newAppEnvironment);
  95. }
  96. ResumeLayout();
  97. }
  98. public void SetDefaultToolType(Type newDefaultToolType)
  99. {
  100. _toolChooserStrip.SelectTool(newDefaultToolType);
  101. }
  102. public AppEnvironment CreateAppEnvironmentFromUI()
  103. {
  104. var newAppEnvironment = new AppEnvironment();
  105. foreach (ToolConfigRow row in _toolConfigRows)
  106. {
  107. if ((row.ToolBarConfigItems & ToolBarConfigItems.AlphaBlending) != 0)
  108. {
  109. newAppEnvironment.AlphaBlending = row.ToolConfigStrip.AlphaBlending;
  110. }
  111. if ((row.ToolBarConfigItems & ToolBarConfigItems.Antialiasing) != 0)
  112. {
  113. newAppEnvironment.AntiAliasing = row.ToolConfigStrip.AntiAliasing;
  114. }
  115. if ((row.ToolBarConfigItems & ToolBarConfigItems.Brush) != 0)
  116. {
  117. newAppEnvironment.BrushInfo = row.ToolConfigStrip.BrushInfo;
  118. }
  119. if ((row.ToolBarConfigItems & ToolBarConfigItems.ColorPickerBehavior) != 0)
  120. {
  121. newAppEnvironment.ColorPickerClickBehavior = row.ToolConfigStrip.ColorPickerClickBehavior;
  122. }
  123. if ((row.ToolBarConfigItems & ToolBarConfigItems.FloodMode) != 0)
  124. {
  125. newAppEnvironment.FloodMode = row.ToolConfigStrip.FloodMode;
  126. }
  127. if ((row.ToolBarConfigItems & ToolBarConfigItems.Gradient) != 0)
  128. {
  129. newAppEnvironment.GradientInfo = row.ToolConfigStrip.GradientInfo;
  130. }
  131. if ((row.ToolBarConfigItems & ToolBarConfigItems.Pen) != 0 ||
  132. (row.ToolBarConfigItems & ToolBarConfigItems.PenCaps) != 0)
  133. {
  134. newAppEnvironment.PenInfo = row.ToolConfigStrip.PenInfo;
  135. }
  136. if ((row.ToolBarConfigItems & ToolBarConfigItems.Resampling) != 0)
  137. {
  138. newAppEnvironment.ResamplingAlgorithm = row.ToolConfigStrip.ResamplingAlgorithm;
  139. }
  140. if ((row.ToolBarConfigItems & ToolBarConfigItems.SelectionCombineMode) != 0)
  141. {
  142. newAppEnvironment.SelectionCombineMode = row.ToolConfigStrip.SelectionCombineMode;
  143. }
  144. if ((row.ToolBarConfigItems & ToolBarConfigItems.SelectionDrawMode) != 0)
  145. {
  146. newAppEnvironment.SelectionDrawModeInfo = row.ToolConfigStrip.SelectionDrawModeInfo;
  147. }
  148. if ((row.ToolBarConfigItems & ToolBarConfigItems.ShapeType) != 0)
  149. {
  150. newAppEnvironment.ShapeDrawType = row.ToolConfigStrip.ShapeDrawType;
  151. }
  152. if ((row.ToolBarConfigItems & ToolBarConfigItems.Text) != 0)
  153. {
  154. newAppEnvironment.FontInfo = row.ToolConfigStrip.FontInfo;
  155. newAppEnvironment.FontSmoothing = row.ToolConfigStrip.FontSmoothing;
  156. newAppEnvironment.TextAlignment = row.ToolConfigStrip.FontAlignment;
  157. }
  158. if ((row.ToolBarConfigItems & ToolBarConfigItems.Tolerance) != 0)
  159. {
  160. newAppEnvironment.Tolerance = row.ToolConfigStrip.Tolerance;
  161. }
  162. }
  163. return newAppEnvironment;
  164. }
  165. public Type ToolType
  166. {
  167. get
  168. {
  169. return _toolType;
  170. }
  171. set
  172. {
  173. _toolChooserStrip.SelectTool(value);
  174. _toolType = value;
  175. }
  176. }
  177. public ChooseToolDefaultsDialog()
  178. {
  179. UI.InitScaling(this);
  180. SuspendLayout();
  181. InitializeComponent();
  182. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.ShapeType | ToolBarConfigItems.Brush | ToolBarConfigItems.Pen | ToolBarConfigItems.PenCaps));
  183. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.SelectionCombineMode | ToolBarConfigItems.SelectionDrawMode));
  184. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.Text));
  185. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.Gradient));
  186. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.Tolerance | ToolBarConfigItems.FloodMode));
  187. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.ColorPickerBehavior));
  188. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.Resampling));
  189. _toolConfigRows.Add(new ToolConfigRow(ToolBarConfigItems.AlphaBlending | ToolBarConfigItems.Antialiasing));
  190. foreach (ToolConfigRow t in _toolConfigRows)
  191. {
  192. Controls.Add(t.HeaderLabel);
  193. Controls.Add(t.ToolConfigStrip);
  194. }
  195. ResumeLayout();
  196. PerformLayout();
  197. _toolChooserStrip.SetTools(DocumentWorkspace.ToolInfos);
  198. RegisterFormHotKey(
  199. Keys.Escape,
  200. delegate
  201. {
  202. _cancelButton.PerformClick();
  203. return true;
  204. });
  205. }
  206. protected override void OnLoad(EventArgs e)
  207. {
  208. _saveButton.Select();
  209. base.OnLoad(e);
  210. }
  211. public override void LoadResources()
  212. {
  213. Text = PdnResources.GetString("ChooseToolDefaultsDialog.Text");
  214. Icon = Utility.ImageToIcon(PdnResources.GetImageResource("Icons.MenuLayersLayerPropertiesIcon.png").Reference);
  215. _introText.Text = PdnResources.GetString("ChooseToolDefaultsDialog.IntroText.Text");
  216. _defaultToolText.Text = PdnResources.GetString("ChooseToolDefaultsDialog.DefaultToolText.Text");
  217. _loadFromToolBarButton.Text = PdnResources.GetString("ChooseToolDefaultsDialog.LoadFromToolBarButton.Text");
  218. _cancelButton.Text = PdnResources.GetString("Form.CancelButton.Text");
  219. _saveButton.Text = PdnResources.GetString("Form.SaveButton.Text");
  220. _resetButton.Text = PdnResources.GetString("Form.ResetButton.Text");
  221. base.LoadResources();
  222. }
  223. protected override void OnLayout(LayoutEventArgs levent)
  224. {
  225. int leftMargin = UI.ScaleWidth(8);
  226. int rightMargin = UI.ScaleWidth(8);
  227. int topMargin = UI.ScaleHeight(8);
  228. int bottomMargin = UI.ScaleHeight(8);
  229. int buttonHMargin = UI.ScaleWidth(7);
  230. int afterIntroTextVMargin = UI.ScaleHeight(16);
  231. int afterHeaderVMargin = UI.ScaleHeight(3);
  232. int hMargin = UI.ScaleWidth(7);
  233. int vMargin = UI.ScaleHeight(7);
  234. int insetWidth = ClientSize.Width - leftMargin - rightMargin;
  235. _introText.Location = new Point(leftMargin, topMargin);
  236. _introText.Width = insetWidth;
  237. _introText.Height = _introText.GetPreferredSize(_introText.Size).Height;
  238. _defaultToolText.Location = new Point(
  239. leftMargin,
  240. _introText.Bottom + afterIntroTextVMargin);
  241. _toolChooserStrip.Location = new Point(
  242. _defaultToolText.Right + hMargin,
  243. _defaultToolText.Top + (_defaultToolText.Height - _toolChooserStrip.Height) / 2);
  244. int y = vMargin + Math.Max(_defaultToolText.Bottom, _toolChooserStrip.Bottom);
  245. int maxInsetWidth = insetWidth;
  246. foreach (ToolConfigRow t in _toolConfigRows)
  247. {
  248. t.HeaderLabel.Location = new Point(leftMargin, y);
  249. t.HeaderLabel.Width = insetWidth;
  250. y = t.HeaderLabel.Bottom + afterHeaderVMargin;
  251. t.ToolConfigStrip.Location = new Point(leftMargin + 3, y);
  252. Size preferredSize = t.ToolConfigStrip.GetPreferredSize(
  253. new Size(t.ToolConfigStrip.Width, 1));
  254. t.ToolConfigStrip.Size = preferredSize;
  255. maxInsetWidth = Math.Max(maxInsetWidth, t.ToolConfigStrip.Width);
  256. y = t.ToolConfigStrip.Bottom + vMargin;
  257. }
  258. y += vMargin;
  259. _bottomSeparator.Location = new Point(leftMargin, y);
  260. _bottomSeparator.Width = insetWidth;
  261. _bottomSeparator.Visible = false;
  262. y += _bottomSeparator.Height;
  263. _cancelButton.Location = new Point(ClientSize.Width - rightMargin - _cancelButton.Width, y);
  264. _saveButton.Location = new Point(
  265. _cancelButton.Left - buttonHMargin - _saveButton.Width,
  266. _cancelButton.Top);
  267. _resetButton.Location = new Point(leftMargin, _saveButton.Top);
  268. _loadFromToolBarButton.Location = new Point(_resetButton.Right + buttonHMargin, _resetButton.Top);
  269. y = _resetButton.Bottom + bottomMargin;
  270. ClientSize = new Size(leftMargin + maxInsetWidth + rightMargin, y);
  271. if (IsHandleCreated && maxInsetWidth > insetWidth)
  272. {
  273. BeginInvoke(new Procedure(PerformLayout), null);
  274. }
  275. base.OnLayout(levent);
  276. }
  277. private void InitializeComponent()
  278. {
  279. _cancelButton = new Button();
  280. _saveButton = new Button();
  281. _introText = new Label();
  282. _defaultToolText = new Label();
  283. _resetButton = new Button();
  284. _loadFromToolBarButton = new Button();
  285. _toolChooserStrip = new ToolChooserStrip();
  286. _bottomSeparator = new HeaderLabel();
  287. SuspendLayout();
  288. //
  289. // cancelButton
  290. //
  291. _cancelButton.Name = "_cancelButton";
  292. _cancelButton.AutoSize = true;
  293. _cancelButton.Click += CancelButtonClick;
  294. _cancelButton.TabIndex = 3;
  295. _cancelButton.FlatStyle = FlatStyle.System;
  296. //
  297. // saveButton
  298. //
  299. _saveButton.Name = "_saveButton";
  300. _saveButton.AutoSize = true;
  301. _saveButton.Click += SaveButtonClick;
  302. _saveButton.TabIndex = 2;
  303. _saveButton.FlatStyle = FlatStyle.System;
  304. //
  305. // introText
  306. //
  307. _introText.Name = "_introText";
  308. _introText.TabStop = false;
  309. //
  310. // defaultToolText
  311. //
  312. _defaultToolText.Name = "_defaultToolText";
  313. _defaultToolText.AutoSize = true;
  314. _defaultToolText.TabStop = false;
  315. //
  316. // resetButton
  317. //
  318. _resetButton.Name = "_resetButton";
  319. _resetButton.AutoSize = true;
  320. _resetButton.Click += ResetButtonClick;
  321. _resetButton.TabIndex = 0;
  322. _resetButton.FlatStyle = FlatStyle.System;
  323. //
  324. // loadFromToolBarButton
  325. //
  326. _loadFromToolBarButton.Name = "_loadFromToolBarButton";
  327. _loadFromToolBarButton.AutoSize = true;
  328. _loadFromToolBarButton.Click += LoadFromToolBarButtonClick;
  329. _loadFromToolBarButton.FlatStyle = FlatStyle.System;
  330. _loadFromToolBarButton.TabIndex = 1;
  331. //
  332. // toolChooserStrip
  333. //
  334. _toolChooserStrip.Name = "_toolChooserStrip";
  335. _toolChooserStrip.Dock = DockStyle.None;
  336. _toolChooserStrip.GripStyle = ToolStripGripStyle.Hidden;
  337. _toolChooserStrip.ShowChooseDefaults = false;
  338. _toolChooserStrip.UseToolNameForLabel = true;
  339. _toolChooserStrip.ToolClicked += ToolChooserStripToolClicked;
  340. //
  341. // bottomSeparator
  342. //
  343. _bottomSeparator.Name = "_bottomSeparator";
  344. _bottomSeparator.RightMargin = 0;
  345. //
  346. // ChooseToolDefaultsDialog
  347. //
  348. AcceptButton = _saveButton;
  349. AutoScaleDimensions = new SizeF(96F, 96F);
  350. AutoScaleMode = AutoScaleMode.Dpi;
  351. CancelButton = _cancelButton;
  352. ClientSize = new Size(448, 173);
  353. Controls.Add(_resetButton);
  354. Controls.Add(_loadFromToolBarButton);
  355. Controls.Add(_introText);
  356. Controls.Add(_defaultToolText);
  357. Controls.Add(_saveButton);
  358. Controls.Add(_cancelButton);
  359. Controls.Add(_toolChooserStrip);
  360. Controls.Add(_bottomSeparator);
  361. FormBorderStyle = FormBorderStyle.FixedDialog;
  362. Location = new Point(0, 0);
  363. MinimizeBox = false;
  364. MaximizeBox = false;
  365. Name = "ChooseToolDefaultsDialog";
  366. ShowInTaskbar = false;
  367. StartPosition = FormStartPosition.CenterParent;
  368. ResumeLayout(false);
  369. PerformLayout();
  370. }
  371. private void LoadFromToolBarButtonClick(object sender, EventArgs e)
  372. {
  373. ToolType = _toolBarToolType;
  374. LoadUIFromAppEnvironment(_toolBarAppEnvironment);
  375. }
  376. private void ToolChooserStripToolClicked(object sender, ToolClickedEventArgs e)
  377. {
  378. ToolType = e.ToolType;
  379. }
  380. private void ResetButtonClick(object sender, EventArgs e)
  381. {
  382. var defaults = new AppEnvironment();
  383. defaults.SetToDefaults();
  384. ToolType = Tool.DefaultToolType;
  385. LoadUIFromAppEnvironment(defaults);
  386. }
  387. private void CancelButtonClick(object sender, EventArgs e)
  388. {
  389. DialogResult = DialogResult.Cancel;
  390. Close();
  391. }
  392. private void SaveButtonClick(object sender, EventArgs e)
  393. {
  394. DialogResult = DialogResult.Yes;
  395. Close();
  396. }
  397. }
  398. }