MapEditorForm.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using System;
  2. using System.Windows.Forms;
  3. using FastReport.Utils;
  4. using FastReport.Forms;
  5. using System.Drawing;
  6. using System.Reflection;
  7. namespace FastReport.Map.Forms
  8. {
  9. internal partial class MapEditorForm : BaseDialogForm
  10. {
  11. #region Fields
  12. private MapObject map;
  13. private MapObject originalMap;
  14. private MapEditorControl mapEditor;
  15. private LayerEditorControl layerEditor;
  16. #endregion // Fields
  17. #region Properties
  18. public MapObject Map
  19. {
  20. get { return map; }
  21. set
  22. {
  23. originalMap = value;
  24. map = new MapObject();
  25. map.AssignAll(originalMap, true);
  26. map.SetReport(originalMap.Report);
  27. map.SetDesigning(true);
  28. foreach (MapLayer layer in map.Layers)
  29. {
  30. if (!layer.IsShapefileEmbedded)
  31. layer.LoadShapefile(layer.Shapefile);
  32. }
  33. PopulateMapTree(map);
  34. }
  35. }
  36. #endregion // Properties
  37. #region Private Methods
  38. private void Init()
  39. {
  40. pnSample.GetType().GetMethod("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(pnSample, new object[] { ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true });
  41. }
  42. private void PopulateMapTree(object select)
  43. {
  44. tvMap.Nodes.Clear();
  45. TreeNode mapNode = tvMap.Nodes.Add(Res.Get("Forms,MapEditor,Map"));
  46. mapNode.Tag = map;
  47. mapNode.ImageIndex = 153;
  48. mapNode.SelectedImageIndex = mapNode.ImageIndex;
  49. for (int i = 0; i < map.Layers.Count; i++)
  50. {
  51. MapLayer layer = map.Layers[i];
  52. TreeNode layerNode = mapNode.Nodes.Add(Res.Get("Forms,MapEditor,Layer") + " " + (i + 1).ToString());
  53. layerNode.Tag = layer;
  54. layerNode.ImageIndex = 169;
  55. layerNode.SelectedImageIndex = layerNode.ImageIndex;
  56. if (select == layer)
  57. tvMap.SelectedNode = layerNode;
  58. }
  59. mapNode.Expand();
  60. if (select == map)
  61. tvMap.SelectedNode = mapNode;
  62. }
  63. private void ShowProperties(object selected)
  64. {
  65. SuspendLayout();
  66. if (selected is MapObject)
  67. {
  68. if (mapEditor == null)
  69. {
  70. mapEditor = new MapEditorControl();
  71. mapEditor.Map = map;
  72. mapEditor.Parent = this;
  73. mapEditor.Scale(new SizeF(this.DpiMultiplier(), this.DpiMultiplier()));
  74. UIUtils.CheckRTL(mapEditor);
  75. mapEditor.UpdateDpiDependencies();
  76. mapEditor.Location = new Point(pcMap.Right + pcMap.Left, pcMap.Top);
  77. mapEditor.Changed += new EventHandler(RefreshSample);
  78. }
  79. if (layerEditor != null)
  80. layerEditor.Hide();
  81. mapEditor.Show();
  82. }
  83. else if (selected is MapLayer)
  84. {
  85. if (layerEditor == null)
  86. {
  87. layerEditor = new LayerEditorControl();
  88. layerEditor.Parent = this;
  89. layerEditor.Scale(new SizeF(this.DpiMultiplier(), this.DpiMultiplier()));
  90. UIUtils.CheckRTL(layerEditor);
  91. layerEditor.UpdateDpiDependencies();
  92. layerEditor.Location = new Point(pcMap.Right + pcMap.Left, pcMap.Top);
  93. layerEditor.Changed += new EventHandler(RefreshSample);
  94. }
  95. if (mapEditor != null)
  96. mapEditor.Hide();
  97. layerEditor.Layer = selected as MapLayer;
  98. layerEditor.Show();
  99. }
  100. ResumeLayout();
  101. }
  102. private void RefreshSample()
  103. {
  104. pnSample.Refresh();
  105. }
  106. private void RefreshSample(object sender, EventArgs e)
  107. {
  108. RefreshSample();
  109. }
  110. #endregion // Private Methods
  111. #region Internal Methods
  112. internal void EnableMercatorProtection(bool enable)
  113. {
  114. mapEditor.EnableMercatorProtection(enable);
  115. }
  116. #endregion // Internal Methods
  117. #region Public Methods
  118. public override void Localize()
  119. {
  120. base.Localize();
  121. MyRes res = new MyRes("Forms,MapEditor");
  122. Text = res.Get("");
  123. btnAdd.Text = res.Get("Add");
  124. btnDelete.Text = res.Get("Delete");
  125. lblHint.Text = res.Get("Hint");
  126. }
  127. #endregion // Public Methods
  128. #region Events Handlers
  129. private void MapEditorForm_Shown(object sender, EventArgs e)
  130. {
  131. tvMap.Focus();
  132. }
  133. private void MapEditorForm_FormClosed(object sender, FormClosedEventArgs e)
  134. {
  135. if (DialogResult == DialogResult.OK)
  136. {
  137. originalMap.AssignAll(Map, true);
  138. foreach (MapLayer layer in originalMap.Layers)
  139. {
  140. if (!layer.IsShapefileEmbedded)
  141. layer.LoadShapefile(layer.Shapefile);
  142. }
  143. originalMap.CreateUniqueNames();
  144. }
  145. }
  146. private void btnAdd_Click(object sender, EventArgs e)
  147. {
  148. using (AddLayerForm form = new AddLayerForm())
  149. {
  150. form.Map = map;
  151. form.Tag = this;
  152. if (form.ShowDialog() == DialogResult.OK)
  153. {
  154. if (map.Layers.Count > 0)
  155. {
  156. PopulateMapTree(map.Layers[map.Layers.Count - 1]);
  157. RefreshSample();
  158. }
  159. }
  160. }
  161. }
  162. private void btnDelete_Click(object sender, EventArgs e)
  163. {
  164. MapLayer layer = tvMap.SelectedNode.Tag as MapLayer;
  165. map.Layers.Remove(layer);
  166. if (map.Layers.Count == 0)
  167. {
  168. EnableMercatorProtection(true);
  169. }
  170. if (map.Layers.Count > 0)
  171. {
  172. PopulateMapTree(map.Layers[map.Layers.Count - 1]);
  173. }
  174. else
  175. {
  176. PopulateMapTree(map);
  177. }
  178. RefreshSample();
  179. }
  180. private void btnUp_Click(object sender, EventArgs e)
  181. {
  182. MapLayer layer = tvMap.SelectedNode.Tag as MapLayer;
  183. int index = map.Layers.IndexOf(layer);
  184. map.Layers.RemoveAt(index);
  185. map.Layers.Insert(index - 1, layer);
  186. PopulateMapTree(layer);
  187. RefreshSample();
  188. }
  189. private void btnDown_Click(object sender, EventArgs e)
  190. {
  191. MapLayer layer = tvMap.SelectedNode.Tag as MapLayer;
  192. int index = map.Layers.IndexOf(layer);
  193. map.Layers.RemoveAt(index);
  194. map.Layers.Insert(index + 1, layer);
  195. PopulateMapTree(layer);
  196. RefreshSample();
  197. }
  198. private void tvMap_AfterSelect(object sender, TreeViewEventArgs e)
  199. {
  200. object selected = tvMap.SelectedNode.Tag;
  201. btnDelete.Enabled = selected is MapLayer;
  202. btnUp.Enabled = selected is MapLayer && tvMap.SelectedNode.Index > 0;
  203. btnDown.Enabled = selected is MapLayer && tvMap.SelectedNode.Index < map.Layers.Count - 1;
  204. ShowProperties(selected);
  205. }
  206. private void pnSample_Paint(object sender, PaintEventArgs e)
  207. {
  208. RectangleF saveBounds = map.Bounds;
  209. try
  210. {
  211. if (map.Layers.Count > 0)
  212. {
  213. map.Bounds = new RectangleF(1, 1, pnSample.Width - 2, pnSample.Height - 2);
  214. map.Draw(new FRPaintEventArgs(e.Graphics, 1, 1, map.Report.GraphicCache));
  215. }
  216. }
  217. catch (Exception ex)
  218. {
  219. using (StringFormat sf = new StringFormat())
  220. {
  221. sf.Alignment = StringAlignment.Center;
  222. sf.LineAlignment = StringAlignment.Center;
  223. e.Graphics.DrawString(ex.Message, Font, Brushes.Red, pnSample.DisplayRectangle, sf);
  224. }
  225. }
  226. map.Bounds = saveBounds;
  227. }
  228. #endregion // Events Handlers
  229. public override void UpdateDpiDependencies()
  230. {
  231. base.UpdateDpiDependencies();
  232. if (mapEditor != null)
  233. mapEditor.UpdateDpiDependencies();
  234. if (layerEditor != null)
  235. layerEditor.UpdateDpiDependencies();
  236. btnUp.Image = GetImage(208);
  237. btnDown.Image = GetImage(209);
  238. tvMap.ImageList = GetImages();
  239. }
  240. public MapEditorForm()
  241. {
  242. InitializeComponent();
  243. Init();
  244. Localize();
  245. UpdateDpiDependencies();
  246. }
  247. }
  248. }