using CommonAI.Zone; using CommonFroms.G2D.DataGrid; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace CommonAIEditor { public partial class FormTerrainDefinition : Form { private TerrainDefinitionMap data; public TerrainDefinitionMap Data { get { return data; } } public FormTerrainDefinition() { InitializeComponent(); this.data = Editor.Instance.TerrainDefinition.Clone() as TerrainDefinitionMap; this.Refresh(); } //--------------------------------------------------------------------------------------------------------------------------- #region ui_event private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { var selected = SelectedBrush; if (selected != null) { g2DPropertyGrid1.SelectedObject = new G2DPropertyDescriptor(selected); } else { g2DPropertyGrid1.SelectedObject = null; } } private void g2DPropertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { Refresh(SelectedBrush); } private void btn_Add_Click(object sender, EventArgs e) { AddBrush(); } private void btn_Remove_Click(object sender, EventArgs e) { RemoveBrush(SelectedBrush); } private void listView1_DoubleClick(object sender, EventArgs e) { this.Close(); } private void button_OK_Click(object sender, EventArgs e) { this.Close(); } #endregion //--------------------------------------------------------------------------------------------------------------------------- public TerrainDefinitionMap.MapBlockBrush SelectedBrush { get { if (listView1.SelectedItems.Count > 0 && listView1.SelectedItems[0].Tag is TerrainDefinitionMap.MapBlockBrush) { return listView1.SelectedItems[0].Tag as TerrainDefinitionMap.MapBlockBrush; } return null; } set { listView1.SelectedItems.Clear(); foreach (ListViewItem item in listView1.Items) { if (item.Tag is TerrainDefinitionMap.MapBlockBrush) { var d = item.Tag as TerrainDefinitionMap.MapBlockBrush; if (d.Value == value.Value) { item.Selected = true; } } } } } public int SelectedColor { get { var brush = SelectedBrush; if (brush != null) { return brush.Value; } return 0; } set { listView1.SelectedItems.Clear(); foreach (ListViewItem item in listView1.Items) { if (item.Tag is TerrainDefinitionMap.MapBlockBrush) { var d = item.Tag as TerrainDefinitionMap.MapBlockBrush; if (d.Value == value) { item.Selected = true; } } } } } private void AddBrush() { ColorDialog cd = new ColorDialog(); if (cd.ShowDialog() == DialogResult.OK) { var value = cd.Color.ToArgb(); if (data.ContainsValue(value)) { MessageBox.Show("已存在地块颜色: " + cd.Color); } else { TerrainDefinitionMap.MapBlockBrush block = new TerrainDefinitionMap.MapBlockBrush(); data.Brushes.Add(block); Refresh(block); } } } private void RemoveBrush(TerrainDefinitionMap.MapBlockBrush selected) { if (selected != null) { int index = data.Brushes.IndexOf(selected); if (index >= 0) { data.Brushes.Remove(selected); if (index < data.Brushes.Count) { var next = data.Brushes[index]; Refresh(next); } else if (data.Brushes.Count > 0) { var next = data.Brushes[index - 1]; Refresh(next); } else { Refresh(); } } } } private void Refresh(TerrainDefinitionMap.MapBlockBrush selected = null) { listView1.SuspendLayout(); try { listView1.Items.Clear(); foreach (var d in data.Brushes) { ListViewItem add = new ListViewItem(); add.SubItems.Add(d.Value.ToString("X8") + "(" + d.Value + ")"); add.SubItems.Add(d.IsBlock.ToString()); add.SubItems.Add(d.Name + ""); add.SubItems.Add(d.Desc + ""); add.UseItemStyleForSubItems = false; add.BackColor = Color.FromArgb(d.Value); add.Tag = d; add.ToolTipText = d.Desc + ""; listView1.Items.Add(add); if (selected != null && selected.Value == d.Value) { add.Selected = true; } } } finally { listView1.ResumeLayout(); } } } }