LayerEditorControl.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4. using System.Windows.Forms;
  5. using FastReport.Utils;
  6. using FastReport.Data;
  7. namespace FastReport.Map.Forms
  8. {
  9. internal partial class LayerEditorControl : UserControl
  10. {
  11. #region Fields
  12. private MapLayer layer;
  13. private bool updating;
  14. private ColorRangeEditorControl crColorRanges;
  15. private SizeRangeEditorControl srSizeRanges;
  16. #endregion // Fields
  17. #region Properties
  18. public event EventHandler Changed;
  19. public MapLayer Layer
  20. {
  21. get { return layer; }
  22. set
  23. {
  24. layer = value;
  25. UpdateControls();
  26. }
  27. }
  28. #endregion // Properties
  29. #region Private Methods
  30. private void OnChange()
  31. {
  32. if (Changed != null)
  33. Changed(this, EventArgs.Empty);
  34. }
  35. private void OnChange(object sender, EventArgs e)
  36. {
  37. OnChange();
  38. }
  39. private void UpdateControls()
  40. {
  41. updating = true;
  42. #region Data tab
  43. cbxDataSource.Items.Clear();
  44. cbxDataSource.Items.Add(Res.Get("Misc,None"));
  45. cbxDataSource.SelectedIndex = 0;
  46. foreach (Base c in Layer.Report.Dictionary.AllObjects)
  47. {
  48. DataSourceBase ds = c as DataSourceBase;
  49. if (ds != null && ds.Enabled)
  50. {
  51. cbxDataSource.Items.Add(ds.Alias);
  52. if (Layer.DataSource == ds)
  53. cbxDataSource.SelectedIndex = cbxDataSource.Items.Count - 1;
  54. }
  55. }
  56. tbFilter.Text = Layer.Filter;
  57. cbxSpatialColumn.Items.Clear();
  58. cbxSpatialColumn.Items.AddRange(Layer.SpatialColumns.ToArray());
  59. if (String.IsNullOrEmpty(Layer.SpatialColumn))
  60. {
  61. if (Layer.SpatialColumns.Count > 0)
  62. {
  63. if (Layer.SpatialColumns.Contains("NAME"))
  64. Layer.SpatialColumn = "NAME";
  65. else
  66. Layer.SpatialColumn = Layer.SpatialColumns[0];
  67. }
  68. }
  69. cbxSpatialColumn.SelectedItem = Layer.SpatialColumn;
  70. tbSpatialValue.Text = Layer.SpatialValue;
  71. tbLatitudeValue.Text = Layer.LatitudeValue;
  72. tbLongitudeValue.Text = Layer.LongitudeValue;
  73. tbLabelValue.Text = Layer.LabelValue;
  74. tbAnalyticalValue.Text = Layer.AnalyticalValue;
  75. cbxFunction.SelectedIndex = (int)Layer.Function;
  76. tbZoomPolygon.Text = Layer.ZoomPolygon;
  77. panShpLayer.Visible = Layer.SpatialSource == SpatialSource.ShpFile;
  78. panAppDataLayer.Visible = Layer.SpatialSource == SpatialSource.ApplicationData;
  79. lblZoomPolygon.Visible = lblZoomPolygonValue.Visible = tbZoomPolygon.Visible = Layer.Type == LayerType.Polygon;
  80. #endregion
  81. #region Appearance tab
  82. cbVisible.Checked = Layer.Visible;
  83. cbxBorderColor.Color = Layer.DefaultShapeStyle.BorderColor;
  84. cbxBorderStyle.SelectedIndex = (int)Layer.DefaultShapeStyle.BorderStyle;
  85. udBorderWidth.Value = (decimal)Layer.DefaultShapeStyle.BorderWidth;
  86. cbxFillColor.Color = Layer.DefaultShapeStyle.FillColor;
  87. cbxPalette.SelectedIndex = (int)Layer.Palette;
  88. #endregion
  89. #region Color ranges tab
  90. cbShowInColorScale.Checked = Layer.ColorRanges.ShowInColorScale;
  91. cbxStartColor.Color = Layer.ColorRanges.StartColor;
  92. cbxMiddleColor.Color = Layer.ColorRanges.MiddleColor;
  93. cbxEndColor.Color = Layer.ColorRanges.EndColor;
  94. udNumberOfRanges.Value = Layer.ColorRanges.RangeCount;
  95. UpdateColorRanges();
  96. #endregion
  97. #region Size ranges tab
  98. udStartSize.Value = (decimal)Layer.SizeRanges.StartSize;
  99. udEndSize.Value = (decimal)Layer.SizeRanges.EndSize;
  100. udSizeRanges.Value = Layer.SizeRanges.RangeCount;
  101. UpdateSizeRanges();
  102. #endregion
  103. #region Labels tab
  104. rbNone.Checked = Layer.LabelKind == MapLabelKind.None;
  105. rbName.Checked = Layer.LabelKind == MapLabelKind.Name;
  106. rbValue.Checked = Layer.LabelKind == MapLabelKind.Value;
  107. rbNameAndValue.Checked = Layer.LabelKind == MapLabelKind.NameAndValue;
  108. cbxLabelColumn.Items.Clear();
  109. cbxLabelColumn.Items.AddRange(Layer.SpatialColumns.ToArray());
  110. if (String.IsNullOrEmpty(Layer.LabelColumn))
  111. Layer.LabelColumn = Layer.SpatialColumn;
  112. cbxLabelColumn.SelectedItem = Layer.LabelColumn;
  113. cbxLabelColumn.Visible = lblLabelColumn.Visible = Layer.SpatialSource == SpatialSource.ShpFile;
  114. lblVisibleAtZoom.Visible = udVisibleAtZoom.Visible = Layer.SpatialSource == SpatialSource.ApplicationData;
  115. udVisibleAtZoom.Value = (decimal)Layer.LabelsVisibleAtZoom;
  116. tbLabelFormat.Text = Layer.LabelFormat;
  117. tbFont.Text = Converter.ToString(Layer.DefaultShapeStyle.Font);
  118. cbxTextColor.Color = Layer.DefaultShapeStyle.TextColor;
  119. #endregion
  120. updating = false;
  121. }
  122. private void UpdateColorRanges()
  123. {
  124. crColorRanges.ColorRanges = Layer.ColorRanges;
  125. lblStart.Visible = lblEnd.Visible = lblColor.Visible = Layer.ColorRanges.RangeCount > 0;
  126. }
  127. private void UpdateSizeRanges()
  128. {
  129. srSizeRanges.SizeRanges = Layer.SizeRanges;
  130. lblStart1.Visible = lblEnd1.Visible = lblSize.Visible = Layer.SizeRanges.RangeCount > 0;
  131. }
  132. private void Init()
  133. {
  134. MyRes res = null;
  135. MyRes commonRes = new MyRes("Forms,MapEditor,Common");
  136. #region Data tab
  137. res = new MyRes("Forms,MapEditor,LayerEditorControl,Data");
  138. pgData.Text = res.Get("");
  139. lblDataSource.Text = res.Get("DataSource");
  140. lblFilter.Text = res.Get("Filter");
  141. lblSpatialData.Text = res.Get("SpatialData");
  142. lblSpatialColumn.Text = res.Get("Column");
  143. lblSpatialValue.Text = res.Get("Value");
  144. lblLatitudeValue.Text = res.Get("Latitude");
  145. lblLongitudeValue.Text = res.Get("Longitude");
  146. lblLabelValue.Text = res.Get("Label");
  147. lblAnalyticalData.Text = res.Get("AnalyticalData");
  148. lblAnalyticalValue.Text = res.Get("Value");
  149. lblFunction.Text = res.Get("Function");
  150. lblZoomPolygon.Text = res.Get("ZoomPolygon");
  151. lblZoomPolygonValue.Text = res.Get("Value");
  152. res = new MyRes("Forms,TotalEditor");
  153. cbxFunction.Items.Clear();
  154. cbxFunction.Items.AddRange(new object[] {
  155. res.Get("Sum"), res.Get("Min"), res.Get("Max"), res.Get("Avg"), res.Get("Count") });
  156. #endregion
  157. #region Appearance tab
  158. res = new MyRes("Forms,MapEditor,LayerEditorControl,Appearance");
  159. pgAppearance.Text = res.Get("");
  160. cbVisible.Text = commonRes.Get("Visible");
  161. lblBorderColor.Text = commonRes.Get("BorderColor");
  162. lblBorderStyle.Text = commonRes.Get("BorderStyle");
  163. lblBorderWidth.Text = commonRes.Get("BorderWidth");
  164. lblFillColor.Text = commonRes.Get("FillColor");
  165. lblPalette.Text = res.Get("Palette");
  166. cbxBorderStyle.Items.Clear();
  167. cbxBorderStyle.Items.AddRange(Enum.GetNames(typeof(DashStyle)));
  168. cbxPalette.Items.Clear();
  169. cbxPalette.Items.AddRange(Enum.GetNames(typeof(MapPalette)));
  170. #endregion
  171. #region Color ranges tab
  172. res = new MyRes("Forms,MapEditor,LayerEditorControl,ColorScale");
  173. pgColorRanges.Text = res.Get("");
  174. cbShowInColorScale.Text = commonRes.Get("Visible");
  175. lblStartColor.Text = res.Get("StartColor");
  176. lblMiddleColor.Text = res.Get("MiddleColor");
  177. lblEndColor.Text = res.Get("EndColor");
  178. lblNumberOfRanges.Text = commonRes.Get("NumberOfRanges");
  179. lblStart.Text = commonRes.Get("Start");
  180. lblEnd.Text = commonRes.Get("End");
  181. lblColor.Text = res.Get("Color");
  182. crColorRanges = new ColorRangeEditorControl();
  183. crColorRanges.Location = new Point(lblStart.Left, lblStart.Top + 20);
  184. crColorRanges.Size = new Size(pgColorRanges.Width - crColorRanges.Left * 2, pgColorRanges.Height - crColorRanges.Top - crColorRanges.Left);
  185. crColorRanges.Parent = pgColorRanges;
  186. crColorRanges.Changed += new EventHandler(OnChange);
  187. #endregion
  188. #region Size ranges tab
  189. res = new MyRes("Forms,MapEditor,LayerEditorControl,SizeRanges");
  190. pgSizeRanges.Text = res.Get("");
  191. lblStartSize.Text = res.Get("StartSize");
  192. lblEndSize.Text = res.Get("EndSize");
  193. lblSizeRanges.Text = commonRes.Get("NumberOfRanges");
  194. lblStart1.Text = commonRes.Get("Start");
  195. lblEnd1.Text = commonRes.Get("End");
  196. lblSize.Text = res.Get("Size");
  197. srSizeRanges = new SizeRangeEditorControl();
  198. srSizeRanges.Location = new Point(lblStart1.Left, lblStart1.Top + 20);
  199. srSizeRanges.Size = new Size(pgSizeRanges.Width - srSizeRanges.Left * 2, pgSizeRanges.Height - srSizeRanges.Top - srSizeRanges.Left);
  200. srSizeRanges.Parent = pgSizeRanges;
  201. srSizeRanges.Changed += new EventHandler(OnChange);
  202. #endregion
  203. #region Labels tab
  204. res = new MyRes("Forms,MapEditor,LayerEditorControl,Labels");
  205. pgLabels.Text = res.Get("");
  206. lblLabelKind.Text = res.Get("LabelKind");
  207. rbNone.Text = res.Get("None");
  208. rbName.Text = res.Get("Name");
  209. rbValue.Text = res.Get("Value");
  210. rbNameAndValue.Text = res.Get("NameAndValue");
  211. lblLabelColumn.Text = res.Get("LabelColumn");
  212. lblVisibleAtZoom.Text = res.Get("VisibleAtZoom");
  213. lblLabelFormat.Text = commonRes.Get("Format");
  214. lblFont.Text = commonRes.Get("Font");
  215. lblTextColor.Text = commonRes.Get("TextColor");
  216. #endregion
  217. }
  218. public void UpdateDpiDependencies()
  219. {
  220. tbSpatialValue.Image = this.GetImage(52);
  221. tbAnalyticalValue.Image = this.GetImage(52);
  222. tbFilter.Image = this.GetImage(52);
  223. tbLatitudeValue.Image = this.GetImage(52);
  224. tbLongitudeValue.Image = this.GetImage(52);
  225. tbLabelValue.Image = this.GetImage(52);
  226. tbZoomPolygon.Image = this.GetImage(52);
  227. tbFont.Image = this.GetImage(59);
  228. }
  229. #endregion // Private Methods
  230. #region Data tab
  231. private void cbxDataSource_SelectedIndexChanged(object sender, EventArgs e)
  232. {
  233. if (updating)
  234. return;
  235. DataSourceBase ds = Layer.Report.GetDataSource((string)cbxDataSource.Items[cbxDataSource.SelectedIndex]);
  236. Layer.DataSource = ds;
  237. OnChange();
  238. }
  239. private void tbFilter_Leave(object sender, EventArgs e)
  240. {
  241. Layer.Filter = tbFilter.Text;
  242. OnChange();
  243. }
  244. private void tbFilter_ButtonClick(object sender, EventArgs e)
  245. {
  246. tbFilter.Text = Editors.EditExpression(Layer.Report, tbFilter.Text);
  247. }
  248. private void cbxSpatialColumn_SelectedIndexChanged(object sender, EventArgs e)
  249. {
  250. if (updating)
  251. return;
  252. Layer.SpatialColumn = cbxSpatialColumn.SelectedItem == null ? "" : (string)cbxSpatialColumn.SelectedItem;
  253. OnChange();
  254. }
  255. private void tbSpatialValue_Leave(object sender, EventArgs e)
  256. {
  257. Layer.SpatialValue = tbSpatialValue.Text;
  258. OnChange();
  259. }
  260. private void tbSpatialValue_ButtonClick(object sender, EventArgs e)
  261. {
  262. tbSpatialValue.Text = Editors.EditExpression(Layer.Report, tbSpatialValue.Text);
  263. }
  264. private void tbAnalyticalValue_Leave(object sender, EventArgs e)
  265. {
  266. Layer.AnalyticalValue = tbAnalyticalValue.Text;
  267. OnChange();
  268. }
  269. private void tbAnalyticalValue_ButtonClick(object sender, EventArgs e)
  270. {
  271. tbAnalyticalValue.Text = Editors.EditExpression(Layer.Report, tbAnalyticalValue.Text);
  272. }
  273. private void cbxFunction_SelectedIndexChanged(object sender, EventArgs e)
  274. {
  275. if (updating)
  276. return;
  277. Layer.Function = (TotalType)cbxFunction.SelectedIndex;
  278. OnChange();
  279. }
  280. private void tbLatitude_ButtonClick(object sender, EventArgs e)
  281. {
  282. tbLatitudeValue.Text = Editors.EditExpression(Layer.Report, tbLatitudeValue.Text);
  283. }
  284. private void tbLatitude_Leave(object sender, EventArgs e)
  285. {
  286. Layer.LatitudeValue = tbLatitudeValue.Text;
  287. OnChange();
  288. }
  289. private void tbLongitude_ButtonClick(object sender, EventArgs e)
  290. {
  291. tbLongitudeValue.Text = Editors.EditExpression(Layer.Report, tbLongitudeValue.Text);
  292. }
  293. private void tbLongitude_Leave(object sender, EventArgs e)
  294. {
  295. Layer.LongitudeValue = tbLongitudeValue.Text;
  296. OnChange();
  297. }
  298. private void tbLabel_ButtonClick(object sender, EventArgs e)
  299. {
  300. tbLabelValue.Text = Editors.EditExpression(Layer.Report, tbLabelValue.Text);
  301. }
  302. private void tbLabel_Leave(object sender, EventArgs e)
  303. {
  304. Layer.LabelValue = tbLabelValue.Text;
  305. OnChange();
  306. }
  307. private void tbZoomPolygon_ButtonClick(object sender, EventArgs e)
  308. {
  309. tbZoomPolygon.Text = Editors.EditExpression(Layer.Report, tbZoomPolygon.Text);
  310. }
  311. private void tbZoomPolygon_Leave(object sender, EventArgs e)
  312. {
  313. Layer.ZoomPolygon = tbZoomPolygon.Text;
  314. OnChange();
  315. }
  316. #endregion
  317. #region Appearance tab
  318. private void cbVisible_CheckedChanged(object sender, EventArgs e)
  319. {
  320. if (updating)
  321. return;
  322. Layer.Visible = cbVisible.Checked;
  323. OnChange();
  324. }
  325. private void cbxBorderColor_ColorSelected(object sender, EventArgs e)
  326. {
  327. if (updating)
  328. return;
  329. Layer.DefaultShapeStyle.BorderColor = cbxBorderColor.Color;
  330. OnChange();
  331. }
  332. private void cbxBorderStyle_SelectedIndexChanged(object sender, EventArgs e)
  333. {
  334. if (updating)
  335. return;
  336. Layer.DefaultShapeStyle.BorderStyle = (DashStyle)cbxBorderStyle.SelectedIndex;
  337. OnChange();
  338. }
  339. private void udBorderWidth_ValueChanged(object sender, EventArgs e)
  340. {
  341. if (updating)
  342. return;
  343. Layer.DefaultShapeStyle.BorderWidth = (float)udBorderWidth.Value;
  344. OnChange();
  345. }
  346. private void cbxFillColor_ColorSelected(object sender, EventArgs e)
  347. {
  348. if (updating)
  349. return;
  350. Layer.DefaultShapeStyle.FillColor = cbxFillColor.Color;
  351. OnChange();
  352. }
  353. private void cbxPalette_SelectedIndexChanged(object sender, EventArgs e)
  354. {
  355. if (updating)
  356. return;
  357. Layer.Palette = (MapPalette)cbxPalette.SelectedIndex;
  358. OnChange();
  359. }
  360. #endregion
  361. #region Color ranges tab
  362. private void cbShowInColorScale_CheckedChanged(object sender, EventArgs e)
  363. {
  364. if (updating)
  365. return;
  366. Layer.ColorRanges.ShowInColorScale = cbShowInColorScale.Checked;
  367. OnChange();
  368. }
  369. private void cbxStartColor_ColorSelected(object sender, EventArgs e)
  370. {
  371. if (updating)
  372. return;
  373. Layer.ColorRanges.StartColor = cbxStartColor.Color;
  374. OnChange();
  375. }
  376. private void cbxMiddleColor_ColorSelected(object sender, EventArgs e)
  377. {
  378. if (updating)
  379. return;
  380. Layer.ColorRanges.MiddleColor = cbxMiddleColor.Color;
  381. OnChange();
  382. }
  383. private void cbxEndColor_ColorSelected(object sender, EventArgs e)
  384. {
  385. if (updating)
  386. return;
  387. Layer.ColorRanges.EndColor = cbxEndColor.Color;
  388. OnChange();
  389. }
  390. private void udNumberOfRanges_ValueChanged(object sender, EventArgs e)
  391. {
  392. if (updating)
  393. return;
  394. Layer.ColorRanges.RangeCount = (int)udNumberOfRanges.Value;
  395. UpdateColorRanges();
  396. OnChange();
  397. }
  398. #endregion
  399. #region Size ranges tab
  400. private void udStartSize_ValueChanged(object sender, EventArgs e)
  401. {
  402. if (updating)
  403. return;
  404. Layer.SizeRanges.StartSize = (float)udStartSize.Value;
  405. OnChange();
  406. }
  407. private void udEndSize_ValueChanged(object sender, EventArgs e)
  408. {
  409. if (updating)
  410. return;
  411. Layer.SizeRanges.EndSize = (float)udEndSize.Value;
  412. OnChange();
  413. }
  414. private void udSizeRanges_ValueChanged(object sender, EventArgs e)
  415. {
  416. if (updating)
  417. return;
  418. Layer.SizeRanges.RangeCount = (int)udSizeRanges.Value;
  419. UpdateSizeRanges();
  420. OnChange();
  421. }
  422. #endregion
  423. #region Labels tab
  424. private void rbNone_CheckedChanged(object sender, EventArgs e)
  425. {
  426. if (updating)
  427. return;
  428. if (rbNone.Checked)
  429. Layer.LabelKind = MapLabelKind.None;
  430. else if (rbName.Checked)
  431. Layer.LabelKind = MapLabelKind.Name;
  432. else if (rbValue.Checked)
  433. Layer.LabelKind = MapLabelKind.Value;
  434. else if (rbNameAndValue.Checked)
  435. Layer.LabelKind = MapLabelKind.NameAndValue;
  436. OnChange();
  437. }
  438. private void cbxLabelColumn_SelectedIndexChanged(object sender, EventArgs e)
  439. {
  440. if (updating)
  441. return;
  442. Layer.LabelColumn = cbxLabelColumn.SelectedItem == null ? "" : (string)cbxLabelColumn.SelectedItem;
  443. OnChange();
  444. }
  445. private void udVisibleAtZoom_ValueChanged(object sender, EventArgs e)
  446. {
  447. if (updating)
  448. return;
  449. Layer.LabelsVisibleAtZoom = (float)udVisibleAtZoom.Value;
  450. OnChange();
  451. }
  452. private void tbLabelFormat_Leave(object sender, EventArgs e)
  453. {
  454. Layer.LabelFormat = tbLabelFormat.Text;
  455. OnChange();
  456. }
  457. private void tbFont_ButtonClick(object sender, EventArgs e)
  458. {
  459. using (FontDialog dialog = new FontDialog())
  460. {
  461. dialog.Font = Layer.DefaultShapeStyle.Font;
  462. if (dialog.ShowDialog() == DialogResult.OK)
  463. {
  464. Layer.DefaultShapeStyle.Font = dialog.Font;
  465. tbFont.Text = Converter.ToString(dialog.Font);
  466. OnChange();
  467. }
  468. }
  469. }
  470. private void cbxTextColor_ColorSelected(object sender, EventArgs e)
  471. {
  472. if (updating)
  473. return;
  474. Layer.DefaultShapeStyle.TextColor = cbxTextColor.Color;
  475. OnChange();
  476. }
  477. #endregion
  478. public LayerEditorControl()
  479. {
  480. InitializeComponent();
  481. Init();
  482. }
  483. }
  484. }