cloudflight
2024-06-17 b62f5f0104845c2a3a74707792ebf28a506e24f1
Hydraulic/Hydro.MapUI/WindowsForm/propertyform.cs
@@ -13,8 +13,7 @@
using System.Windows.Forms;
using static Hydro.MapView.MapViewEnum;
using Hydro.MapView.Common;
using DevExpress.XtraEditors;
using System.Threading;
namespace Hydro.MapUI
{
@@ -35,7 +34,7 @@
        {
            _isEnable = isReadOnly;
        }
        public void SetWindows(Form mg)
        {
            if (mg.WindowState == FormWindowState.Maximized)
@@ -65,67 +64,89 @@
        }
        public void SetObj(IBaseViewModel selectedObject)
        {
            lock(selectedObject)
            {
                _selectedObject = selectedObject;
            _selectedObject = selectedObject;
                if (_selectedObject is JunctionViewModel junc)
                {
                    _selectedType = MapObjectType.节点;
                    propertyGrid.SelectedObjects = new JunctionViewModel[] { junc };
                }
                else if (_selectedObject is ReservoirViewModel res)
                {
                    _selectedType = MapObjectType.水库;
                    propertyGrid.SelectedObjects = new ReservoirViewModel[] { res };
                }
                else if (_selectedObject is TankViewModel tank)
                {
                    _selectedType = MapObjectType.水池;
                    propertyGrid.SelectedObjects = new TankViewModel[] { tank };
                }
                else if (_selectedObject is PipeViewModel pipe)
                {
                    _selectedType = MapObjectType.管线;
                    propertyGrid.SelectedObjects = new PipeViewModel[] { pipe };
                }
                else if (_selectedObject is ValveViewModel valve)
                {
                    _selectedType = MapObjectType.阀门;
                    propertyGrid.SelectedObjects = new ValveViewModel[] { valve };
                }
                else if (_selectedObject is RepeaterViewModel repeater)
                {
                    _selectedType = MapObjectType.重复器;
                    propertyGrid.SelectedObjects = new RepeaterViewModel[] { repeater };
                }
                //水表
                else if (_selectedObject is MeterViewModel meter)
                {
                    _selectedType = MapObjectType.水表;
                    propertyGrid.SelectedObjects = new MeterViewModel[] { meter };
                }
                //水泵
                else if (_selectedObject is PumpViewModel pump)
                {
                    _selectedType = MapObjectType.水泵;
                    propertyGrid.SelectedObjects = new PumpViewModel[] { pump };
                }
                //喷头Nozzle
                else if (_selectedObject is NozzleViewModel nozzle)
                {
                    _selectedType = MapObjectType.喷头;
                    propertyGrid.SelectedObjects = new NozzleViewModel[] { nozzle };
                } else
                {
                    _selectedType = MapObjectType.全部;
                    propertyGrid.SelectedObjects =new IBaseViewModel[] { 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;
                }
            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)
        {
@@ -158,12 +179,12 @@
        {
            foreach (var item in Enum.GetValues(typeof(MapObjectType)))
            {
                //comboBox_type.Properties.Items.Add(item);
                comboBox_type.Items.Add(item);
            }
            //comboBox_type.SelectedIndex = 0;
            comboBox_type.SelectedIndex = 0;
            selectionSets = new List<SelectionSet>();
            selectionSet = new SelectionSet();
            //listBox1.DataSource = selectionSet.View;
            listBox1.DataSource = selectionSet.View;
            //listBox1.DisplayMember = "IDType";
        }
@@ -174,79 +195,79 @@
        void RefreshListBox()
        {
            if (selectionSet == null) return;
            //string txt = comboBox_type.SelectedItem.ToString();
            //MapObjectType selectedType = (MapObjectType)Enum.Parse(typeof(MapObjectType), txt);
            string txt = comboBox_type.SelectedItem.ToString();
            MapObjectType selectedType = (MapObjectType)Enum.Parse(typeof(MapObjectType), txt);
            // 使用 LINQ 查询筛选选择集
            //selectionSet.filterType = selectedType;
            //selectionSet.FilterString = textBox_search.Text;
            selectionSet.filterType = selectedType;
            selectionSet.FilterString = textBox_search.Text;
            //listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
            listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
            //listBox1.DisplayMember = "ID";
            //// 重新绑定选择集列表
            //listBox1.DataSource = selectionSet.View;
            //listBox1.DataSource = null;
            listBox1.DataSource = null;
            //listBox1.DisplayMember = "IDType";
            //listBox1.DataSource = selectionSet.View;
            listBox1.DataSource = selectionSet.View;
            //listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
            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];
            //    var findlist = selectionSet.net.MapObjects.FindAll(o => o.ID == objID);
            //    if (findlist.Count <= 0) return;
            //    IBaseViewModel mapObject = findlist[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 (listBox1.SelectedItems.Count == 0)
            {
                return;
            }
            else if (listBox1.SelectedItems.Count == 1)
            {
                var objID = listBox1.SelectedItems[0];
                var findlist = selectionSet.net.MapObjects.FindAll(o => o.ID == objID);
                if (findlist.Count <= 0) return;
                IBaseViewModel mapObject = findlist[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.SetMapInvalidate();
            }
            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.SetMapInvalidate();
            }
        }
        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);
            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();
            //}
                GlobalObject.map.SetMapInvalidate();
            }
        }
        private void PropertyForm_FormClosing(object sender, FormClosingEventArgs e)
        {
@@ -323,13 +344,13 @@
        private void checkBox_OnlyShowSelected_CheckedChanged(object sender, EventArgs e)
        {
            //selectionSet.OnlyViewSelected = checkBox_OnlyShowSelected.Checked;
            selectionSet.OnlyViewSelected = checkBox_OnlyShowSelected.Checked;
            RefreshListBox();
        }
        
        private void label_lock_Click(object sender, EventArgs e)
        {
            var label_lock = (LabelControl)sender;
            var label_lock = (Label)sender;
            GlobalObject.LockSelect=!GlobalObject.LockSelect;
            if (GlobalObject.LockSelect)
@@ -345,11 +366,12 @@
        }
        private void label_filter_Click(object sender, EventArgs e)
        {
            var label_lock = (LabelControl)sender;
            var label_lock = (Label)sender;
           
            TagList tags = new TagList();
            foreach (var item in selectionSet.selectedObjects)
            var mobjs=selectionSet.OnlyViewSelected? selectionSet.selectedObjects:selectionSet.net.MapObjects;
            foreach (var item in mobjs)
            {
                tags.AddRange(item.Tags);
            }
@@ -387,33 +409,33 @@
            //Ctrl+A,则选中当前listbox中的所有项
            if (e.Control && e.KeyCode == Keys.A)
            {
                //for (int i = 0; i < listBox1.Items.Count; i++)
                //{
                //    listBox1.SetSelected(i, true);
                //}
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    listBox1.SetSelected(i, true);
                }
            }
        }
        private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
            //for (int i = 0; i < listBox1.Items.Count; i++)
            //{
            //    listBox1.SetSelected(i, true);
            //}
            //listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
            //this.propertyGrid.SelectedObjects =selectionSet. CurrentSelectedObjects?.ToArray();
            //GlobalObject.map.selectedObjs.ForEach(o => o.Selected = false);
            //if (selectionSet.CurrentSelectedObjects!=null)
            //{
            //    GlobalObject.map.selectedObjs.AddRange(selectionSet.CurrentSelectedObjects);
            //    selectionSet.CurrentSelectedObjects.ForEach(o =>
            //    {
            //        o.Selected = true;
            //    });
            //}
            //GlobalObject.map.Invalidate();
            listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                listBox1.SetSelected(i, true);
            }
            listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
            this.propertyGrid.SelectedObjects =selectionSet. CurrentSelectedObjects?.ToArray();
            GlobalObject.map.selectedObjs.ForEach(o => o.Selected = false);
            if (selectionSet.CurrentSelectedObjects!=null)
            {
                GlobalObject.map.selectedObjs.AddRange(selectionSet.CurrentSelectedObjects);
                selectionSet.CurrentSelectedObjects.ForEach(o =>
                {
                    o.Selected = true;
                });
            }
            GlobalObject.map.SetMapInvalidate();
@@ -422,13 +444,13 @@
        private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            //if (e.Button == MouseButtons.Right)
            //{
            //    if (listBox1.SelectedItems.Count > 0)
            //    {
            //        contextMenuStrip1.Show(listBox1, e.Location);
            //    }
            //}
            if (e.Button == MouseButtons.Right)
            {
                if (listBox1.SelectedItems.Count > 0)
                {
                    contextMenuStrip1.Show(listBox1, e.Location);
                }
            }
        }
    }