PictureEditorForm.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using FastReport.Utils;
  5. namespace FastReport.Forms
  6. {
  7. internal partial class PictureEditorForm : BaseDialogForm
  8. {
  9. private PictureObject picture;
  10. private void SetImage(Image image)
  11. {
  12. pbPicture.Image = image;
  13. if (image != null)
  14. {
  15. if (image.Width < pbPicture.Width && image.Height < pbPicture.Height)
  16. pbPicture.SizeMode = PictureBoxSizeMode.CenterImage;
  17. else
  18. pbPicture.SizeMode = PictureBoxSizeMode.Zoom;
  19. lblSize.Text = image.Width.ToString() + " × " + image.Height.ToString();
  20. }
  21. else
  22. lblSize.Text = "";
  23. btnEdit.Enabled = btnClear.Enabled = image != null;
  24. }
  25. private void btnLoad_Click(object sender, EventArgs e)
  26. {
  27. if (Dialogs.OpenImage(out string fileName))
  28. {
  29. try
  30. {
  31. SetImage(ImageHelper.LoadFromFile(fileName));
  32. }
  33. catch (Exception ex)
  34. {
  35. FRMessageBox.Error(ex.Message);
  36. }
  37. }
  38. }
  39. private void btnPaste_Click(object sender, EventArgs e)
  40. {
  41. if (Clipboard.ContainsImage())
  42. SetImage(Clipboard.GetImage());
  43. }
  44. private void btnClear_Click(object sender, EventArgs e)
  45. {
  46. SetImage(null);
  47. }
  48. private void tbFileName_ButtonClick(object sender, EventArgs e)
  49. {
  50. if (Dialogs.OpenImage(out string fileName))
  51. {
  52. tbFileName.Text = fileName;
  53. }
  54. }
  55. private void btnEdit_Click(object sender, EventArgs e)
  56. {
  57. if (pbPicture.Image != null)
  58. {
  59. using (PictureEditorAdvancedForm f = new PictureEditorAdvancedForm(pbPicture.Image))
  60. {
  61. if (f.ShowDialog() == DialogResult.OK)
  62. {
  63. SetImage(f.Image);
  64. }
  65. }
  66. }
  67. }
  68. private void PictureEditorForm_FormClosed(object sender, FormClosedEventArgs e)
  69. {
  70. Done();
  71. }
  72. private void Init()
  73. {
  74. ProfessionalColorTable vs2005ColorTable = new ProfessionalColorTable();
  75. vs2005ColorTable.UseSystemColors = true;
  76. ts1.Renderer = new ToolStripProfessionalRenderer(vs2005ColorTable);
  77. SetImage(null);
  78. if (picture.IsDataColumn)
  79. pcPages.ActivePageIndex = 1;
  80. else if (picture.IsFileLocation)
  81. {
  82. pcPages.ActivePageIndex = 2;
  83. tbFileName.Text = picture.ImageLocation;
  84. }
  85. else if (picture.IsWebLocation)
  86. {
  87. pcPages.ActivePageIndex = 3;
  88. tbUrl.Text = picture.ImageLocation;
  89. }
  90. else
  91. {
  92. pcPages.ActivePageIndex = 0;
  93. SetImage(picture.Image);
  94. }
  95. tvData.CreateNodes(picture.Report.Dictionary);
  96. tvData.SelectedItem = picture.DataColumn;
  97. #if AVALONIA
  98. // enable when Avalonia will support clipboard bitmaps
  99. btnPaste.Enabled = false;
  100. #endif
  101. }
  102. private void Done()
  103. {
  104. if (DialogResult == DialogResult.OK)
  105. {
  106. picture.Image = null;
  107. picture.DataColumn = "";
  108. picture.ImageLocation = "";
  109. switch (pcPages.ActivePageIndex)
  110. {
  111. case 0:
  112. picture.Image = pbPicture.Image;
  113. break;
  114. case 1:
  115. picture.DataColumn = tvData.SelectedItem;
  116. break;
  117. case 2:
  118. picture.ImageLocation = tbFileName.Text;
  119. break;
  120. case 3:
  121. picture.ImageLocation = tbUrl.Text;
  122. break;
  123. }
  124. }
  125. }
  126. public override void Localize()
  127. {
  128. base.Localize();
  129. MyRes res = new MyRes("Forms,PictureEditor");
  130. Text = res.Get("");
  131. pnPicture.Text = res.Get("Picture");
  132. btnLoad.Text = res.Get("Load");
  133. btnPaste.Text = res.Get("Paste");
  134. btnClear.Text = res.Get("Clear");
  135. btnEdit.Text = res.Get("Edit");
  136. pnDataColumn.Text = res.Get("DataColumn");
  137. pnFileName.Text = res.Get("FileName");
  138. pnUrl.Text = res.Get("Url");
  139. lblFile.Text = res.Get("FileHint1");
  140. lblNote.Text = res.Get("FileHint2");
  141. lblUrl.Text = res.Get("UrlHint");
  142. }
  143. public override void UpdateDpiDependencies()
  144. {
  145. base.UpdateDpiDependencies();
  146. tvData.ImageList = GetImages();
  147. lblNote.Left = tbFileName.Left;
  148. lblNote.Width = tbFileName.Width;
  149. ts1.Size = this.LogicalToDevice(new Size(372, 25));
  150. ts1.Font = Font;
  151. tbFileName.Image = GetImage(1);
  152. btnLoad.Image = GetImage(1);
  153. btnPaste.Image = GetImage(7);
  154. btnClear.Image = GetImage(82);
  155. btnEdit.Image = GetImage(198);
  156. }
  157. public PictureEditorForm(PictureObject picture)
  158. {
  159. this.picture = picture;
  160. InitializeComponent();
  161. Localize();
  162. Init();
  163. UIUtils.CheckRTL(this);
  164. UpdateDpiDependencies();
  165. }
  166. }
  167. }