FormTerrainDefinition.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using CommonAI.Zone;
  2. using CommonFroms.G2D.DataGrid;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Windows.Forms;
  11. namespace CommonAIEditor
  12. {
  13. public partial class FormTerrainDefinition : Form
  14. {
  15. private TerrainDefinitionMap data;
  16. public TerrainDefinitionMap Data { get { return data; } }
  17. public FormTerrainDefinition()
  18. {
  19. InitializeComponent();
  20. this.data = Editor.Instance.TerrainDefinition.Clone() as TerrainDefinitionMap;
  21. this.Refresh();
  22. }
  23. //---------------------------------------------------------------------------------------------------------------------------
  24. #region ui_event
  25. private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
  26. {
  27. var selected = SelectedBrush;
  28. if (selected != null)
  29. {
  30. g2DPropertyGrid1.SelectedObject = new G2DPropertyDescriptor(selected);
  31. }
  32. else
  33. {
  34. g2DPropertyGrid1.SelectedObject = null;
  35. }
  36. }
  37. private void g2DPropertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  38. {
  39. Refresh(SelectedBrush);
  40. }
  41. private void btn_Add_Click(object sender, EventArgs e)
  42. {
  43. AddBrush();
  44. }
  45. private void btn_Remove_Click(object sender, EventArgs e)
  46. {
  47. RemoveBrush(SelectedBrush);
  48. }
  49. private void listView1_DoubleClick(object sender, EventArgs e)
  50. {
  51. this.Close();
  52. }
  53. private void button_OK_Click(object sender, EventArgs e)
  54. {
  55. this.Close();
  56. }
  57. #endregion
  58. //---------------------------------------------------------------------------------------------------------------------------
  59. public TerrainDefinitionMap.MapBlockBrush SelectedBrush
  60. {
  61. get
  62. {
  63. if (listView1.SelectedItems.Count > 0 && listView1.SelectedItems[0].Tag is TerrainDefinitionMap.MapBlockBrush)
  64. {
  65. return listView1.SelectedItems[0].Tag as TerrainDefinitionMap.MapBlockBrush;
  66. }
  67. return null;
  68. }
  69. set
  70. {
  71. listView1.SelectedItems.Clear();
  72. foreach (ListViewItem item in listView1.Items)
  73. {
  74. if (item.Tag is TerrainDefinitionMap.MapBlockBrush)
  75. {
  76. var d = item.Tag as TerrainDefinitionMap.MapBlockBrush;
  77. if (d.Value == value.Value)
  78. {
  79. item.Selected = true;
  80. }
  81. }
  82. }
  83. }
  84. }
  85. public int SelectedColor
  86. {
  87. get
  88. {
  89. var brush = SelectedBrush;
  90. if (brush != null)
  91. {
  92. return brush.Value;
  93. }
  94. return 0;
  95. }
  96. set
  97. {
  98. listView1.SelectedItems.Clear();
  99. foreach (ListViewItem item in listView1.Items)
  100. {
  101. if (item.Tag is TerrainDefinitionMap.MapBlockBrush)
  102. {
  103. var d = item.Tag as TerrainDefinitionMap.MapBlockBrush;
  104. if (d.Value == value)
  105. {
  106. item.Selected = true;
  107. }
  108. }
  109. }
  110. }
  111. }
  112. private void AddBrush()
  113. {
  114. ColorDialog cd = new ColorDialog();
  115. if (cd.ShowDialog() == DialogResult.OK)
  116. {
  117. var value = cd.Color.ToArgb();
  118. if (data.ContainsValue(value))
  119. {
  120. MessageBox.Show("已存在地块颜色: " + cd.Color);
  121. }
  122. else
  123. {
  124. TerrainDefinitionMap.MapBlockBrush block = new TerrainDefinitionMap.MapBlockBrush();
  125. data.Brushes.Add(block);
  126. Refresh(block);
  127. }
  128. }
  129. }
  130. private void RemoveBrush(TerrainDefinitionMap.MapBlockBrush selected)
  131. {
  132. if (selected != null)
  133. {
  134. int index = data.Brushes.IndexOf(selected);
  135. if (index >= 0)
  136. {
  137. data.Brushes.Remove(selected);
  138. if (index < data.Brushes.Count)
  139. {
  140. var next = data.Brushes[index];
  141. Refresh(next);
  142. }
  143. else if (data.Brushes.Count > 0)
  144. {
  145. var next = data.Brushes[index - 1];
  146. Refresh(next);
  147. }
  148. else
  149. {
  150. Refresh();
  151. }
  152. }
  153. }
  154. }
  155. private void Refresh(TerrainDefinitionMap.MapBlockBrush selected = null)
  156. {
  157. listView1.SuspendLayout();
  158. try
  159. {
  160. listView1.Items.Clear();
  161. foreach (var d in data.Brushes)
  162. {
  163. ListViewItem add = new ListViewItem();
  164. add.SubItems.Add(d.Value.ToString("X8") + "(" + d.Value + ")");
  165. add.SubItems.Add(d.IsBlock.ToString());
  166. add.SubItems.Add(d.Name + "");
  167. add.SubItems.Add(d.Desc + "");
  168. add.UseItemStyleForSubItems = false;
  169. add.BackColor = Color.FromArgb(d.Value);
  170. add.Tag = d;
  171. add.ToolTipText = d.Desc + "";
  172. listView1.Items.Add(add);
  173. if (selected != null && selected.Value == d.Value)
  174. {
  175. add.Selected = true;
  176. }
  177. }
  178. }
  179. finally
  180. {
  181. listView1.ResumeLayout();
  182. }
  183. }
  184. }
  185. }