123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- using Aitex.Core.RT.Log;
- using Caliburn.Micro;
- using MECF.Framework.Common.CommonData;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.UI.Client.CenterViews.Editors;
- using MECF.Framework.UI.Client.ClientBase;
- using OpenSEMI.ClientBase;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Xml;
- using SciChart.Core.Extensions;
- namespace MECF.Framework.UI.Client.CenterViews.Configs.DataConfig
- {
- public class DataGroupItem : NotifiableItem
- {
- private string _name;
- public string Name
- {
- get { return _name; }
- set { _name = value; InvokePropertyChanged(nameof(Name)); }
- }
- private bool _isFix;
- public bool IsFix
- {
- get { return _isFix; }
- set { _isFix = value; InvokePropertyChanged(nameof(IsFix)); }
- }
- private bool _isVisible;
- public bool IsVisible
- {
- get { return _isVisible; }
- set { _isVisible = value; InvokePropertyChanged(nameof(IsVisible)); }
- }
- }
- public class DataConfigViewModel : ModuleUiViewModelBase, ISupportMultipleSystem
- {
- public class DataItem : NotifiableItem
- {
- private string _name;
- public string Name
- {
- get { return _name; }
- set { _name = value; InvokePropertyChanged(nameof(Name)); }
- }
- private bool _isSelected;
- public bool IsSelected
- {
- get { return _isSelected; }
- set { _isSelected = value; InvokePropertyChanged(nameof(IsSelected)); }
- }
- private bool _isChecked;
- public bool IsChecked
- {
- get { return _isChecked; }
- set { _isChecked = value; InvokePropertyChanged(nameof(IsChecked)); }
- }
- }
- #region Properties
- public ObservableCollection<DataGroupItem> GroupData { get; set; }
- private DataGroupItem _currentSelection;
- public DataGroupItem CurrentSelection
- {
- get { return _currentSelection; }
- set
- {
- _currentSelection = value;
- ChangeGroupSelection(_currentSelection);
- NotifyOfPropertyChange(nameof(CurrentSelection));
- }
- }
- private string _content;
- private XmlDocument _xmlContent;
-
- public ObservableCollection<DataItem> Unselections { get; set; }
- public ObservableCollection<DataItem> Selections { get; set; }
- public string NewGroupName { get; set; }
- #endregion
- #region Functions
- public DataConfigViewModel()
- {
- this.DisplayName = "Data Config";
- GroupData = new ObservableCollection<DataGroupItem>();
- Unselections = new ObservableCollection<DataItem>();
- Selections = new ObservableCollection<DataItem>();
- }
- protected override void OnInitialize()
- {
- base.OnInitialize();
- var lstItems = (List<string>)QueryDataClient.Instance.Service.GetConfig("System.NumericDataList");
- lstItems.Sort();
- var selection = new ObservableCollection<DataItem>();
- var unselection = new ObservableCollection<DataItem>();
- foreach (var item in lstItems)
- {
- unselection.Add(new DataItem() { Name = item, IsChecked = false, IsSelected = false });
- selection.Add(new DataItem() { Name = item, IsChecked = false, IsSelected = false });
- }
- Unselections = unselection;
- Selections = selection;
- NotifyOfPropertyChange(nameof(Unselections));
- NotifyOfPropertyChange(nameof(Selections));
- }
- protected override void OnActivate()
- {
- base.OnActivate();
- UpdateData();
- }
- private void UpdateData()
- {
- string content = QueryDataClient.Instance.Service.GetTypedConfigContent("DataGroup", "");
- if (_content == content)
- return;
-
- GroupData.Clear();
- try
- {
- _xmlContent = new XmlDocument();
- _xmlContent.LoadXml(content);
- _content = content;
- var groups = _xmlContent.SelectNodes("DataGroupConfig/DataGroup");
- foreach (var item in groups)
- {
- XmlElement element = item as XmlElement;
- string strFix = element.GetAttribute("fix");
- bool bFix = false;
- if (!string.IsNullOrEmpty(strFix))
- {
- bool.TryParse(strFix, out bFix);
- }
- string strVisible = element.GetAttribute("visible");
- bool bVisible = true;
- if (!string.IsNullOrEmpty(strVisible))
- {
- bool.TryParse(strVisible, out bVisible) ;
- }
- if (!bVisible)
- continue;
- string name = element.GetAttribute("name");
- GroupData.Add(new DataGroupItem() { Name = name, IsFix = bFix});
- }
- }
- catch (Exception ex)
- {
- LOG.Write(ex);
- }
- }
- public void NewGroup()
- {
- if (string.IsNullOrEmpty(NewGroupName))
- {
- DialogBox.ShowWarning($"Please input new data group name");
- return;
- }
- NewGroupName = NewGroupName.Trim();
- var nodeGroup = _xmlContent.SelectSingleNode($"DataGroupConfig/DataGroup[@name='{NewGroupName}']");
- if (nodeGroup != null)
- {
- DialogBox.ShowWarning($"{NewGroupName} Already exist");
- return;
- }
- var nodeRoot = _xmlContent.SelectSingleNode($"DataGroupConfig");
- var node = _xmlContent.CreateElement("DataGroup");
- node.SetAttribute("name", NewGroupName);
- nodeRoot.AppendChild(node);
- var item = new DataGroupItem()
- {
- IsFix = false,
- Name = NewGroupName
- };
- GroupData.Add(item);
- CurrentSelection = item;
- QueryDataClient.Instance.Service.SetTypedConfigContent("DataGroup", "", _xmlContent.InnerXml);
- }
- public void RenameGroup(DataGroupItem group)
- {
- InputFileNameDialogViewModel dialog = new InputFileNameDialogViewModel("Input New Config Name");
- dialog.FileName = group.Name;
- WindowManager wm = new WindowManager();
- bool? dialogReturn = wm.ShowDialog(dialog);
- if (!dialogReturn.HasValue || !dialogReturn.Value)
- return;
- string name = dialog.FileName.Trim();
- if (string.IsNullOrEmpty(name))
- {
- DialogBox.ShowWarning("Folder name should not be empty");
- return;
- }
- var nodeGroup = _xmlContent.SelectSingleNode($"DataGroupConfig/DataGroup[@name='{name}']");
- if (nodeGroup != null)
- {
- DialogBox.ShowWarning($"{name} Already exist");
- return;
- }
- nodeGroup = _xmlContent.SelectSingleNode($"DataGroupConfig/DataGroup[@name='{group.Name}']");
- (nodeGroup as XmlElement).SetAttribute("name", name);
- group.Name = name;
- QueryDataClient.Instance.Service.SetTypedConfigContent("DataGroup", "", _xmlContent.InnerXml);
- }
- public void DeleteGroup(DataGroupItem group)
- {
- if (!DialogBox.Confirm($"Are you sure you want to delete {group.Name}?"))
- return;
- var nodeGroup = _xmlContent.SelectSingleNode($"DataGroupConfig/DataGroup[@name='{group.Name}']");
- nodeGroup.ParentNode.RemoveChild(nodeGroup);
- QueryDataClient.Instance.Service.SetTypedConfigContent("DataGroup", "", _xmlContent.InnerXml);
- GroupData.RemoveWhere(x=>x.Name == group.Name);
- //CurrentSelection = null;
- }
- public void Select()
- {
- foreach (var unselection in Unselections)
- {
- if (unselection.IsChecked)
- {
- unselection.IsSelected = false;
- unselection.IsChecked = false;
- foreach (var selection in Selections)
- {
- if (selection.Name == unselection.Name)
- {
- selection.IsChecked = false;
- selection.IsSelected = true;
- break;
- }
- }
- }
- }
- }
- public void Unselect()
- {
- foreach (var selection in Selections)
- {
- if (selection.IsChecked)
- {
- selection.IsSelected = false;
- selection.IsChecked = false;
- foreach (var unselection in Unselections)
- {
- if (unselection.Name == selection.Name)
- {
- unselection.IsChecked = false;
- unselection.IsSelected = true;
- break;
- }
- }
- }
- }
- }
- public void SaveSelection()
- {
- var nodeGroup = _xmlContent.SelectSingleNode($"DataGroupConfig/DataGroup[@name='{CurrentSelection.Name}']");
- var nodeItem = _xmlContent.SelectNodes($"DataGroupConfig/DataGroup[@name='{CurrentSelection.Name}']/DataItem");
- foreach (var nodeGroupChildNode in nodeItem)
- {
- var node = nodeGroupChildNode as XmlElement;
- nodeGroup.RemoveChild(node);
- }
- foreach (var item in Selections)
- {
- if (item.IsSelected)
- {
- var node = _xmlContent.CreateElement("DataItem");
- node.SetAttribute("name", item.Name);
- nodeGroup.AppendChild(node);
- }
- }
- QueryDataClient.Instance.Service.SetTypedConfigContent("DataGroup", "", _xmlContent.InnerXml);
- }
- public void CancelSelection()
- {
- ChangeGroupSelection(CurrentSelection);
- }
- protected void ChangeGroupSelection(DataGroupItem group)
- {
- if (group == null)
- {
- foreach (var unselection in Unselections)
- {
- unselection.IsSelected = false;
- }
- foreach (var selection in Selections)
- {
- selection.IsSelected = false;
- }
- return;
- }
- var items = _xmlContent.SelectNodes($"DataGroupConfig/DataGroup[@name='{group.Name}']/DataItem");
- List<string> names = new List<string>();
- foreach (var item in items)
- {
- var node = item as XmlElement;
- names.Add(node.GetAttribute("name"));
- }
- foreach (var unselection in Unselections)
- {
- unselection.IsSelected = !names.Contains(unselection.Name);
- }
- foreach (var selection in Selections)
- {
- selection.IsSelected = names.Contains(selection.Name);
- }
- }
- #endregion
- }
- }
|