using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.Utils; using IStation.Untity; namespace IStation.WinFormUI.MonitorDataSet { /// /// 测点树列表控件 /// public partial class MonitorPointExSignalListTreeCtrl : XtraUserControl { public MonitorPointExSignalListTreeCtrl() { InitializeComponent(); this.treeList1.InitialDefaultSettings(); this.treeList1.SelectImageList = CurrentViewModel.Image16Store; this.layoutControl1.SetupLayoutControl(); } #region 当前视图 public class CurrentViewModel { public CurrentViewModel() { } public CurrentViewModel(Model.MonitorPointGroup rhs) { this.ID = $"{IStation.ObjectType.MonitorPointGroup}_{rhs.Id}"; this.ParentID = $"{IStation.ObjectType.MonitorPointGroup}_{TreeParentIdsHelper.GetLastParentID(rhs.ParentIds)}"; this.Name = rhs.Name; this.ObjectType = IStation.ObjectType.MonitorPointGroup; this.ObjectID = rhs.Id; this.SortCode = rhs.SortCode; this.Description = rhs.Description; this.ImageIndex = 0; this.Model = rhs; } public CurrentViewModel(Model.MonitorPointExSignalList rhs) { this.ID = $"{IStation.ObjectType.MonitorPoint}_{rhs.Id}"; this.ParentID = $"{IStation.ObjectType.MonitorPointGroup}_{rhs.GroupId}"; this.Name = rhs.Name; this.ObjectType = IStation.ObjectType.MonitorPoint; this.ObjectID = rhs.Id; this.SortCode = rhs.SortCode; this.Description = rhs.Description; this.ImageIndex = 1; this.Model = rhs; } public string ID { get; set; } public string ParentID { get; set; } public string Name { get; set; } public string ObjectType { get; set; } public long ObjectID { get; set; } public int SortCode { get; set; } public string Description { get; set; } public int ImageIndex { get; set; } public object Model { get; set; } /// /// 图标仓库 /// public static ImageCollection Image16Store { get { if (_image16Store == null) { _image16Store = new ImageCollection(); _image16Store.ImageSize = new Size(16, 16); _image16Store.Images.Add(WinFormUI.Properties.Resource.Group, "Group"); _image16Store.Images.Add(WinFormUI.Properties.Resource.MonitorPoint, "MonitorPoint"); //_image16Store.Images.Add(WinFormUI.Properties.Resource.Signal, "Signal"); } return _image16Store; } } private static ImageCollection _image16Store; public static Image Get16ObjectTypeImage(string objectType) { Image img = null; switch (objectType) { case IStation.ObjectType.MonitorPointGroup: img = Image16Store.Images["Group"]; break; case IStation.ObjectType.MonitorPoint: img = Image16Store.Images["MonitorPoint"]; break; case IStation.ObjectType.Signal: img = Image16Store.Images["Signal"]; break; } if (img == null) img = Image16Store.Images["Question"]; return img; } //获取 public static int Get16ObjectTypeImageIndex(string objectId) { var img = Get16ObjectTypeImage(objectId); return Image16Store.Images.IndexOf(img); } } #endregion /// /// 聚焦改变事件 /// public event Action FocusedChangedEvent; /// /// 选择事件 /// public event Action SelectEvent; private long _projectId;//项目标识 private List _allBindingList = null;//所有绑定列表 private CurrentViewModel _focused = null;//当前聚焦 /// /// 绑定数据 /// public void SetBindingData(long projectId) { _projectId = projectId; var group_list = new BLL.MonitorPointGroup().GetAll(_projectId); var point_list = new BLL.MonitorPoint().GetExSignalList(_projectId); this.SetBindingData(group_list, point_list); } /// /// 绑定数据 /// public void SetBindingData(long projectId, string belongType, long belongId) { _projectId = projectId; var group_list = new BLL.MonitorPointGroup().GetByBelongTypeAndBelongId(_projectId,belongType,belongId); var point_list = new BLL.MonitorPoint().GetExSignalListByBelongTypeAndBelongId(_projectId, belongType,belongId); this.SetBindingData(group_list, point_list); } /// /// 绑定数据 /// public void SetBindingData(List group_list, List point_list) { _allBindingList = new List(); if (group_list != null && group_list.Count > 0) { group_list = group_list.OrderBy(x => x.SortCode).ToList(); group_list.ForEach(x => _allBindingList.Add(new CurrentViewModel(x))); } else { var group = new Model.MonitorPointGroup(); group.Id = -1; group.Name = "未分组"; group.SortCode = int.MaxValue; group.Description = "虚拟分组"; _allBindingList.Add(new CurrentViewModel(group)); } if (point_list != null && point_list.Count > 0) { point_list = point_list.OrderBy(x => x.SortCode).ToList(); foreach (var point in point_list) { _allBindingList.Add(new CurrentViewModel(point)); } } this.treeList1.DataSource = _allBindingList; this.treeList1.ForceInitialize(); this.treeList1.ExpandAll(); if (_allBindingList.Count < 1) { if (_focused != null) { _focused = null; this.FocusedChangedEvent?.Invoke(string.Empty, null); } } } /// /// 绑定数据 /// public void SetBindingData(long projectId, long groupId) { if (groupId < 1) return; _allBindingList = new List(); var group = new BLL.MonitorPointGroup().GetById(projectId, groupId); _allBindingList.Add(new CurrentViewModel(group)); var point_list = new BLL.MonitorPoint().GetExSignalListByGroupId(projectId, groupId); if (point_list != null && point_list.Count > 0) { point_list = point_list.OrderBy(x => x.SortCode).ToList(); point_list.ForEach(x => _allBindingList.Add(new CurrentViewModel(x))); } this.treeList1.DataSource = _allBindingList; this.treeList1.ForceInitialize(); this.treeList1.ExpandAll(); if (_allBindingList.Count < 1) { if (_focused != null) { _focused = null; this.FocusedChangedEvent?.Invoke(string.Empty, null); } } } /// /// 获取聚焦 /// public object GetFocused() { var vm = this.treeList1.GetFocusedRow() as CurrentViewModel; return vm?.Model; } /// /// 设置聚焦 /// public bool SetFocused(string objectType,long objectId) { var key = $"{objectType}_{objectId}"; var node = this.treeList1.FindNodeByKeyID(key); if (node == null) return false; this.treeList1.FocusedNode = node; return true; } //全部展开 private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.ExpandAll(); } //全部折叠 private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.CollapseAll(); } //检索(menu) private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.layoutControlItem1.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always) this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; else this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; } //树线 private void barCkTreeLine_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.OptionsView.ShowTreeLines = this.barCkTreeLine.Checked ? DefaultBoolean.True : DefaultBoolean.False; } //聚焦改变 private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e) { var vm = this.treeList1.GetFocusedRow() as CurrentViewModel; this.FocusedChangedEvent?.Invoke(vm.ObjectType, vm?.Model); } //鼠标点击 private void treeList1_RowCellClick(object sender, DevExpress.XtraTreeList.RowCellClickEventArgs e) { if (e.Button == MouseButtons.Left) { var vm = this.treeList1.GetDataRecordByNode(e.Node) as CurrentViewModel; this.SelectEvent?.Invoke(vm.ObjectType, vm.Model, e); } } public List GetMonitorPointGroups() { if (_allBindingList == null || _allBindingList.Count < 1) return default; return _allBindingList.Where(x => x.ObjectType == IStation.ObjectType.MonitorPointGroup).Select(x => x.Model as Model.MonitorPointGroup).ToList(); } public List GetMonitorPointExSignalList() { if (_allBindingList == null || _allBindingList.Count < 1) return default; return _allBindingList.Where(x => x.ObjectType == IStation.ObjectType.MonitorPoint).Select(x => x.Model as Model.MonitorPointExSignalList).ToList(); } } }