using Hydro.MapView;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Drawing.Imaging;
|
using System.Linq;
|
using System.Runtime.CompilerServices;
|
using System.Security.Policy;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using static Hydro.MapView.MapViewEnum;
|
using Hydro.MapView.Common;
|
|
namespace CloudWaterNetwork
|
{
|
|
|
public partial class PropertyForm : UserControl
|
{
|
private IBaseViewModel _selectedObject;
|
private MapObjectType _selectedType= MapObjectType.全部;
|
private List<SelectionSet> selectionSets;
|
public SelectionSet selectionSet=new SelectionSet();
|
private Form fr = null;
|
public PropertyForm()
|
{
|
InitializeComponent();
|
}
|
public void SetEnabled(bool isReadOnly)
|
{
|
_isEnable = isReadOnly;
|
}
|
|
public void SetWindows(Form mg)
|
{
|
if (mg.WindowState == FormWindowState.Maximized)
|
{
|
//this.StartPosition = FormStartPosition.Manual; //设置窗体位置由程序控制
|
this.Height = mg.Height-50;
|
this.Location = new Point(mg.Left + mg.Width -this.Width, mg.Top+50); //设置新窗体位置,当前窗体的右侧(X轴方向)
|
}
|
else
|
{
|
//this.StartPosition = FormStartPosition.Manual; //设置窗体位置由程序控制
|
this.Height = mg.Height;
|
this.Location = new Point(mg.Left + mg.Width - 15, mg.Top); //设置新窗体位置,当前窗体的右侧(X轴方向)
|
}
|
fr = mg;
|
|
//GlobalObject.PropertyForm.Show();
|
}
|
public Form GetWindow()
|
{
|
return this.fr;
|
}
|
public void SetObj(object o)
|
{
|
propertyGrid.SelectedObject = o;
|
this.Text= o.GetType().Name;
|
}
|
public void SetObj(IBaseViewModel selectedObject)
|
{
|
|
//_selectedObject = selectedObject;
|
|
|
if (_selectedObject is JunctionViewModel junc)
|
{
|
_selectedType = MapObjectType.节点;
|
propertyGrid.SelectedObject = junc;
|
}
|
else if (_selectedObject is ReservoirViewModel reser)
|
{
|
_selectedType = MapObjectType.水池;
|
propertyGrid.SelectedObject = reser;
|
}
|
else if (_selectedObject is TankViewModel tank)
|
{
|
_selectedType = MapObjectType.水池;
|
propertyGrid.SelectedObject =tank;
|
}
|
|
else if (_selectedObject is PipeViewModel pipe)
|
{
|
_selectedType = MapObjectType.管线;
|
propertyGrid.SelectedObject = pipe;
|
}
|
else if (_selectedObject is RepeaterViewModel repeater)
|
{
|
_selectedType = MapObjectType.重复器;
|
propertyGrid.SelectedObject = repeater;
|
}
|
else if (_selectedObject is ValveViewModel valve)
|
{
|
_selectedType = MapObjectType.水池;
|
propertyGrid.SelectedObject = valve;
|
}
|
else
|
{
|
_selectedType = MapObjectType.全部;
|
propertyGrid.SelectedObject = selectedObject;
|
}
|
switch (_selectedType)
|
{
|
case MapObjectType.节点:
|
Text = "节点 Properties";
|
break;
|
case MapObjectType.水库:
|
Text = "水库 Properties";
|
break;
|
case MapObjectType.水池:
|
Text = "水池 Properties";
|
break;
|
case MapObjectType.管线:
|
Text = "管线 Properties";
|
break;
|
case MapObjectType.阀门:
|
Text = "阀门 Properties";
|
break;
|
case MapObjectType.重复器:
|
Text = "重复器 Properties";
|
break;
|
}
|
}
|
public void SetNet(MapViewNetWork net)
|
{
|
selectionSet.net = net;
|
}
|
public void SetObjs(List<IBaseViewModel> selectedObjects)
|
{
|
|
selectionSet.selectedObjects = selectedObjects.ToList();
|
if (selectedObjects.Count ==1)
|
SetObj(selectedObjects[0]);
|
else
|
ShowProperties(selectedObjects);
|
|
if (selectionSet.OnlyViewSelected)
|
RefleshListBox();
|
//listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
|
|
////listBox1.DataSource = null;
|
////listBox1.DataSource = selectionSet.View;
|
//listBox1.DataSource = null;
|
//listBox1.DisplayMember = "ID";
|
//listBox1.DataSource = selectionSet.View;
|
|
////listBox1.DisplayMember = "ID";
|
|
//listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
|
}
|
|
private void PropertyForm_Load_1(object sender, EventArgs e)
|
{
|
comboBox_type.DataSource = Enum.GetValues(typeof(MapObjectType));
|
comboBox_type.SelectedIndex = 0;
|
selectionSets = new List<SelectionSet>();
|
selectionSet = new SelectionSet();
|
listBox1.DataSource = selectionSet.View;
|
//listBox1.DisplayMember = "IDType";
|
}
|
|
private void comboBox_type_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
RefleshListBox();
|
}
|
void RefleshListBox()
|
{
|
if (selectionSet == null) return;
|
string txt = comboBox_type.SelectedItem.ToString();
|
MapObjectType selectedType = (MapObjectType)Enum.Parse(typeof(MapObjectType), txt);
|
// 使用 LINQ 查询筛选选择集
|
selectionSet.filterType = selectedType;
|
selectionSet.FilterString = textBox_search.Text;
|
|
|
listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
|
|
|
|
//listBox1.DisplayMember = "ID";
|
//// 重新绑定选择集列表
|
//listBox1.DataSource = selectionSet.View;
|
listBox1.DataSource = null;
|
//listBox1.DisplayMember = "IDType";
|
listBox1.DataSource = selectionSet.View;
|
|
listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
|
}
|
|
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
|
if (listBox1.SelectedItems.Count == 0)
|
{
|
return;
|
}
|
else if (listBox1.SelectedItems.Count == 1)
|
{
|
var objID=listBox1.SelectedItems[0];
|
IBaseViewModel mapObject =selectionSet. net.MapObjects.FindAll(o =>o.ID== objID)[0];// selectionSet.selectedObjects.Find(obj => obj.ID == ((MapObject)listBox1.SelectedItems[0]).ID);
|
if (mapObject != null) SetObj(mapObject);
|
GlobalObject.map.selectedObjs.ForEach(o => o.Selected = false); ;
|
GlobalObject.map.selectedObjs.Clear();
|
GlobalObject.map.selectedObjs.Add(mapObject);
|
mapObject.Selected = true;
|
GlobalObject.map.SetInvalidated();
|
}
|
else
|
{
|
List<IBaseViewModel> list = new List<IBaseViewModel>();
|
foreach (var o in listBox1.SelectedItems)
|
{
|
var objID = listBox1.SelectedItems[0];
|
IBaseViewModel mapObject = selectionSet. net.MapObjects.FindAll(obj => obj.ID == objID)[0];
|
list.Add(mapObject);
|
}
|
ShowProperties( list);
|
GlobalObject.map.selectedObjs.ForEach(o => o.Selected = false); ;
|
GlobalObject.map.selectedObjs.Clear();
|
list.ForEach(o=>o.Selected=true);
|
GlobalObject.map.selectedObjs.AddRange(list);
|
GlobalObject.map.SetInvalidated();
|
//if (selectedObjects.Count == 1)
|
// SetObj(selectedObjects[0]);
|
//else
|
// ShowProperties(selectedObjects);
|
}
|
|
|
|
}
|
private void listBox1_DoubleClick(object sender, EventArgs e)
|
{
|
if (listBox1.SelectedItems.Count == 1)
|
{
|
//IBaseViewModel mapObject = (IBaseViewModel)listBox1.SelectedItems[0];
|
var objID = listBox1.SelectedItems[0];
|
IBaseViewModel mapObject = selectionSet.net.MapObjects.FindAll(obj => obj.ID == objID)[0];
|
GlobalObject.map.setCenter (mapObject);
|
|
|
GlobalObject.map.SetInvalidated();
|
}
|
}
|
private void PropertyForm_FormClosing(object sender, FormClosingEventArgs e)
|
{
|
e.Cancel = true;
|
this.Hide();
|
}
|
|
bool _isEnable = true;
|
|
private static Dictionary<object, List<object>> _selectedObjectsDict = new Dictionary<object, List<object>>();
|
private void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
|
{
|
//foreach (var item in listBox1.SelectedItems)
|
//{
|
|
// var mapObject = selectionSet.selectedObjects.Find(obj => obj.ID == ((MapObject)item).ID);
|
// if (e.ChangedItem.Label == " 批次编号 ")
|
// {
|
// mapObject.Level = (int)e.ChangedItem.Value;
|
// }
|
//}
|
if (!_isEnable)
|
{
|
MessageBox.Show("当前状态的修改将不会被保存","重复器展开中");
|
_isEnable = true;
|
}
|
|
|
object firstObj = selectionSet.selectedObjects.First();
|
|
|
//if (_selectedObjectsDict[firstObj].Contains(e.ChangedItem.Label))
|
//{
|
// foreach (var obj in selectionSet.selectedObjects)
|
// {
|
// var props = TypeDescriptor.GetProperties(obj);
|
// foreach (PropertyDescriptor prop in props)
|
// {
|
// if (prop.Name == e.ChangedItem.Label)
|
// {
|
// prop.SetValue(obj, e.ChangedItem.Value);
|
// break;
|
// }
|
// }
|
// }
|
//}
|
GlobalObject.map.SetInvalidated();
|
}
|
|
|
|
public void ShowProperties(IEnumerable<IBaseViewModel> selectedObjects)
|
{
|
var pg = this.propertyGrid;
|
if(pg!=null && selectedObjects!=null)
|
{ pg.SelectedObjects = selectedObjects.ToArray(); }
|
|
//var objs = selectedObjects.ToList();
|
//objs.Sort((a, b) => { return String.Compare(a.ID, b.ID); });
|
//pg.SelectedObjects = objs.ToArray();
|
|
// 设置 PropertyGrid 的 PropertyValueChanged 事件处理程序
|
|
|
}
|
|
private void textBox_search_TextChanged(object sender, EventArgs e)
|
{
|
RefleshListBox();
|
}
|
|
private void checkBox_OnlyShowSelected_CheckedChanged(object sender, EventArgs e)
|
{
|
selectionSet.OnlyViewSelected = checkBox_OnlyShowSelected.Checked;
|
RefleshListBox();
|
}
|
|
|
}
|
|
public class SelectionSet
|
{
|
public string Name;
|
public MapObjectType filterType=MapObjectType.全部;
|
|
public string FilterString { get; set; } = "";
|
|
public MapViewNetWork net { get; set; } = null;
|
public bool OnlyViewSelected { get; set; } = true;
|
|
public List<IBaseViewModel> selectedObjects=new List<IBaseViewModel>();
|
public List<string> View
|
{
|
get
|
{
|
List<IBaseViewModel> originList;
|
List<IBaseViewModel> list;
|
List<string> list_result=new List<string>();
|
if (!OnlyViewSelected && net != null)
|
{
|
originList = net.MapObjects;
|
}
|
else
|
{
|
originList = selectedObjects;
|
}
|
|
|
if (filterType == MapObjectType.全部)
|
{
|
list = originList;
|
}
|
|
else
|
{
|
|
var filteredSets = from obj in originList
|
where obj.GetType() == filterType.GetObjType()
|
select obj;
|
list = filteredSets?.ToList();
|
}
|
|
|
|
if (FilterString!=null && FilterString!="")
|
{
|
list = list?.FindAll(o => o.ID.IndexOf(FilterString) >= 0);
|
}
|
list_result = list.Select(o => o.ID).ToList();
|
return list_result;
|
|
|
}
|
}
|
|
|
}
|
|
|
|
}
|