using MECF.Framework.UI.Client.ClientBase; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory; using Sicentury.Core.Collections; using Sicentury.Core.Tree; namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory { public class SelectUserDefineViewModel : UIViewModelBase { #region private const int MAX_PARAMETERS = 50; public ObservableRangeCollection ParameterNodes { get; } public ObservableRangeCollection SelectedParameters { get; set; } public ObservableRangeCollection ParameterNodes1 = new ObservableRangeCollection(); object _lockSelection = new object(); public ObservableRangeCollection SourcePM { get; set; } public string SelectedValuePM { get; set; } public string SelectedItem { get; set; } #endregion #region Popup window public SelectUserDefineViewModel() { SelectedParameters = new ObservableRangeCollection(); ParameterNodes = new ObservableRangeCollection(ProcessHistoryProvider.Instance.GetParameters()); SourcePM = new ObservableRangeCollection(new[] { "PMA", "PMB" }); } protected override void OnViewLoaded(object _view) { base.OnViewLoaded(_view); this.view = (SelectUserDefineView)_view; } protected override void OnActivate() { base.OnActivate(); ParameterNodes.Clear(); ParameterNodes.AddRange(ProcessHistoryProvider.Instance.GetParameters()); SetParameterNode(ParameterNodes, true); } private void SetParameterNode(ObservableCollection nodes, bool isCheck) { foreach (TreeNode n in nodes) { if (isCheck) { if (SelectedParameters.Any(x => x == n.Name)) n.IsSelected = true; } else n.IsSelected = false; SetParameterNode(n.ChildNodes, isCheck); } } private SelectUserDefineView view; public void Preset() { } public void UnSelect() { } //public void ParameterCheck(TreeNode node) //{ // bool result = RefreshTreeStatusToChild(node); // if (!result) // node.Selected = !node.Selected; // else // RefreshTreeStatusToParent(node); //} ///// ///// Refresh tree node status from current to children, and add data to SelectedData ///// //private bool RefreshTreeStatusToChild(TreeNode node) //{ // if (node.ChildNodes.Count > 0) // { // for (int i = 0; i < node.ChildNodes.Count; i++) // { // TreeNode n = node.ChildNodes[i]; // n.Selected = node.Selected; // //for (int j = 0; j < SelectedParameters.Count; j++) // //{ // // if ((SelectedParameters[j].Contains("PMA.") && node.Name.Contains("PMB")) || (SelectedParameters[j].Contains("PMB.") && node.Name.Contains("PMA"))) // // { // // n.Selected = !node.Selected; // // DialogBox.ShowWarning("PMA,PMB you can only choose one or the other"); // // return false; // // } // //} // if (!RefreshTreeStatusToChild(n)) // { // //uncheck left node // for (int j = i; j < node.ChildNodes.Count; j++) // { // node.ChildNodes[j].Selected = !node.Selected; // } // node.Selected = !node.Selected; // return false; // } // } // } // else //leaf node // { // lock (_lockSelection) // { // bool flag = SelectedParameters.Contains(node.Name); // if (node.Selected && !flag) // { // if (SelectedParameters.Count < MAX_PARAMETERS) // { // SelectedParameters.Add(node.Name); // } // else // { // DialogBox.ShowWarning($"The max number of parameters is {MAX_PARAMETERS}."); // return false; // } // } // else if (!node.Selected && flag) // { // SelectedParameters.Remove(node.Name); // } // } // } // return true; //} ///// ///// Refresh tree node status from current to parent ///// ///// ///// //private void RefreshTreeStatusToParent(TreeNode node) //{ // if (node.ParentNode != null) // { // if (node.Selected) // { // bool flag = true; // for (int i = 0; i < node.ParentNode.ChildNodes.Count; i++) // { // if (!node.ParentNode.ChildNodes[i].Selected) // { // flag = false; //as least one child is unselected // break; // } // } // if (flag) // node.ParentNode.Selected = true; // } // else // { // node.ParentNode.Selected = false; // } // RefreshTreeStatusToParent(node.ParentNode); // } //} public void OnTreeSelectedChanged(object obj) { } public void OK() { this.TryClose(true); } public void DeleteAll() { SelectedParameters.Clear(); SetParameterNode(ParameterNodes, false); } public void Delete() { if (view._selectListBox.SelectedItems != null) { List temp = new List(); foreach (var item in view._selectListBox.SelectedItems) { temp.Add(item.ToString()); } foreach (var item in temp) { SelectedParameters.Remove(item.ToString()); } SetParameterNode(ParameterNodes, false); SetParameterNode(ParameterNodes, true); } } public void Cancel() { this.TryClose(false); } #endregion } }