123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Xml;
- using Aitex.Core.RT.Log;
- using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
- using MECF.Framework.UI.Client.CenterViews.Parameter;
- using RecipeEditorLib.DGExtension.CustomColumn;
- using RecipeEditorLib.RecipeModel.Params;
- namespace MECF.Framework.UI.Client.CenterViews.Editors.Recipe
- {
- public class ParameterFormatBuilder
- {
- public ObservableCollection<EditorDataGridTemplateColumnBase> Columns
- {
- get;
- set;
- }
- public ObservableCollection<Param> Configs
- {
- get;
- set;
- }
- public string ChamberType
- {
- get;
- set;
- }
- public string Version
- {
- get;
- set;
- }
- private int _tableNumber;
- public int TableNumber
- {
- get;
- set;
- }
- private ParameterProvider parameterProvider = new ParameterProvider();
- public ObservableCollection<EditorDataGridTemplateColumnBase> Build(string path)
- {
- var str = parameterProvider.GetParameterFormatXml(path);
- string configstr = "";
- if (path == "PM1")
- {
- configstr = "Process";
- }
- else
- {
- configstr = path;
- }
- XmlDocument doc = new XmlDocument();
- try
- {
- doc.LoadXml(str);
- XmlNode nodeRoot = doc.SelectSingleNode("TableParameterFormat");
- ChamberType = nodeRoot.Attributes["ChamberType"].Value;
- Version = nodeRoot.Attributes["Version"].Value;
- if (nodeRoot.Attributes["TableNumber"] != null)
- {
- TableNumber = Convert.ToInt32(nodeRoot.Attributes["TableNumber"].Value);
- }
- }
- catch (Exception ex)
- {
- LOG.Write(ex);
- return null;
- }
- var columns = new ObservableCollection<EditorDataGridTemplateColumnBase>();
- EditorDataGridTemplateColumnBase col = null;
- XmlNodeList nodes = doc.SelectNodes("TableParameterFormat/Catalog/Group");
- foreach (XmlNode node in nodes)
- {
- columns.Add(new ExpanderColumn()
- {
- DisplayName = node.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplateExpander",
- StringHeaderTemplate = "ParamExpander"
- });
- XmlNodeList childNodes = node.SelectNodes("Step");
- foreach (XmlNode step in childNodes)
- {
- //step number
- if (step.Attributes["ControlName"].Value == "StepNo")
- {
- col = new StepColumn()
- {
- DisplayName = "Step",
- ControlName = "StepNo",
- StringCellTemplate = "TemplateStep",
- StringHeaderTemplate = "ParamTemplate"
- };
- columns.Add(col);
- continue;
- }
- switch (step.Attributes["InputType"].Value)
- {
- case "TextInput":
- col = new TextBoxColumn()
- {
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplateText",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- columns.Add(col);
- break;
- case "ReadOnly":
- col = new TextBoxColumn()
- {
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplateText",
- StringHeaderTemplate = "ParamTemplate",
- IsReadOnly = true,
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- columns.Add(col);
- break;
- case "NumInput":
- col = new NumColumn()
- {
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- InputMode = step.Attributes["InputMode"].Value,
- Minimun = double.Parse(step.Attributes["Min"].Value),
- Maximun = double.Parse(step.Attributes["Max"].Value),
- StringCellTemplate = "TemplateNumber",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- columns.Add(col);
- break;
- case "DoubleInput":
- col = new DoubleColumn()
- {
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- InputMode = step.Attributes["InputMode"].Value,
- Minimun = double.Parse(step.Attributes["Min"].Value),
- Maximun = double.Parse(step.Attributes["Max"].Value),
- StringCellTemplate = "TemplateNumber",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- columns.Add(col);
- break;
- case "EditableSelection":
- case "ReadOnlySelection":
- col = new ComboxColumn()
- {
- IsReadOnly = step.Attributes["InputType"].Value == "ReadOnlySelection",
- ModuleName = step.Attributes["ModuleName"].Value,
- Default = step.Attributes["Default"] != null ? step.Attributes["Default"].Value : "",
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplateCombox",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- XmlNodeList items = step.SelectNodes("Item");
- foreach (XmlNode item in items)
- {
- ComboxColumn.Option opt = new ComboxColumn.Option();
- opt.ControlName = item.Attributes["ControlName"].Value;
- opt.DisplayName = item.Attributes["DisplayName"].Value;
- ((ComboxColumn)col).Options.Add(opt);
- }
- columns.Add(col);
- break;
- case "LoopSelection":
- col = new LoopComboxColumn()
- {
- IsReadOnly = false,
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplateCombox",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- XmlNodeList options = step.SelectNodes("Item");
- foreach (XmlNode item in options)
- {
- LoopComboxColumn.Option opt = new LoopComboxColumn.Option();
- opt.ControlName = item.Attributes["ControlName"].Value;
- opt.DisplayName = item.Attributes["DisplayName"].Value;
- ((LoopComboxColumn)col).Options.Add(opt);
- }
- columns.Add(col);
- break;
- case "PopSetting":
- col = new PopSettingColumn()
- {
- ModuleName = step.Attributes["ModuleName"].Value,
- ControlName = step.Attributes["ControlName"].Value,
- DisplayName = step.Attributes["DisplayName"].Value,
- StringCellTemplate = "TemplatePopSetting",
- StringHeaderTemplate = "ParamTemplate",
- EnableConfig = step.Attributes["EnableConfig"] != null && Convert.ToBoolean(step.Attributes["EnableConfig"].Value),
- EnableTolerance = step.Attributes["EnableTolerance"] != null && Convert.ToBoolean(step.Attributes["EnableTolerance"].Value),
- };
- columns.Add(col);
- break;
- }
- }
- }
- Columns = columns;
- var configs = new ObservableCollection<Param>();
- nodes = doc.SelectNodes($"TableParameterFormat/Config/Configs");
- foreach (XmlNode node in nodes)
- {
- XmlNodeList childNodes = node.SelectNodes("Config");
- foreach (XmlNode configNode in childNodes)
- {
- switch (configNode.Attributes["InputType"].Value)
- {
- case "DoubleInput":
- var config = new DoubleParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- Value = configNode.Attributes["Default"].Value,
- DisplayName = configNode.Attributes["DisplayName"].Value,
- EnableConfig = configNode.Attributes["EnableConfig"] != null && Convert.ToBoolean(configNode.Attributes["EnableConfig"].Value),
- EnableTolerance = configNode.Attributes["EnableTolerance"] != null && Convert.ToBoolean(configNode.Attributes["EnableTolerance"].Value),
- };
- if (double.TryParse(configNode.Attributes["Max"].Value, out double max))
- {
- (config as DoubleParam).Maximun = max;
- }
- if (double.TryParse(configNode.Attributes["Min"].Value, out double min))
- {
- (config as DoubleParam).Minimun = min;
- }
- configs.Add(config);
- break;
- case "NumInput":
- var numConfig = new NumParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- Value = int.Parse(configNode.Attributes["Default"].Value),
- DisplayName = configNode.Attributes["DisplayName"].Value,
- EnableConfig = configNode.Attributes["EnableConfig"] != null && Convert.ToBoolean(configNode.Attributes["EnableConfig"].Value),
- EnableTolerance = configNode.Attributes["EnableTolerance"] != null && Convert.ToBoolean(configNode.Attributes["EnableTolerance"].Value),
- };
- if (double.TryParse(configNode.Attributes["Max"].Value, out max))
- {
- (numConfig as NumParam).Maximun = max;
- }
- if (double.TryParse(configNode.Attributes["Min"].Value, out min))
- {
- (numConfig as NumParam).Minimun = min;
- }
- configs.Add(numConfig);
- break;
- case "TextInput":
- var strConfig = new StringParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- Value = configNode.Attributes["Default"].Value,
- DisplayName = configNode.Attributes["DisplayName"].Value,
- EnableConfig = configNode.Attributes["EnableConfig"] != null && Convert.ToBoolean(configNode.Attributes["EnableConfig"].Value),
- EnableTolerance = configNode.Attributes["EnableTolerance"] != null && Convert.ToBoolean(configNode.Attributes["EnableTolerance"].Value),
- };
- configs.Add(strConfig);
- break;
- }
- }
- }
- Configs = configs;
- return Columns;
- }
- private ObservableCollection<Param> GetConfig(XmlNodeList nodes)
- {
- var configs = new ObservableCollection<Param>();
- foreach (XmlNode node in nodes)
- {
- XmlNodeList childNodes = node.SelectNodes("Config");
- foreach (XmlNode configNode in childNodes)
- {
- switch (configNode.Attributes["InputType"].Value)
- {
- case "TextInput":
- var text = new StringParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- Value = configNode.Attributes["Default"].Value,
- DisplayName = configNode.Attributes["DisplayName"].Value,
- };
- configs.Add(text);
- break;
- case "DoubleInput":
- var config = new DoubleParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- Value = configNode.Attributes["Default"].Value,
- DisplayName = configNode.Attributes["DisplayName"].Value,
- };
- if (double.TryParse(configNode.Attributes["Max"].Value, out double max))
- {
- (config as DoubleParam).Maximun = max;
- }
- if (double.TryParse(configNode.Attributes["Min"].Value, out double min))
- {
- (config as DoubleParam).Minimun = min;
- }
- configs.Add(config);
- break;
- case "ReadOnlySelection":
- var col = new ComboxParam()
- {
- Name = configNode.Attributes["ControlName"].Value,
- DisplayName = configNode.Attributes["DisplayName"].Value,
- Value = configNode.Attributes["Default"] != null ? configNode.Attributes["Default"].Value : "",
- Options = new ObservableCollection<ComboxColumn.Option>(),
- IsEditable = configNode.Attributes["InputType"].Value == "ReadOnlySelection",
- EnableTolerance = configNode.Attributes["EnableTolerance"] != null && Convert.ToBoolean(configNode.Attributes["EnableTolerance"].Value),
- };
- XmlNodeList items = configNode.SelectNodes("Item");
- foreach (XmlNode item in items)
- {
- ComboxColumn.Option opt = new ComboxColumn.Option();
- opt.ControlName = item.Attributes["ControlName"].Value;
- opt.DisplayName = item.Attributes["DisplayName"].Value;
- col.Options.Add(opt);
- }
- col.Value = !string.IsNullOrEmpty(col.Value) ? col.Value : (col.Options.Count > 0 ? col.Options[0].ControlName : "");
- configs.Add(col);
- break;
- }
- }
- }
- return configs;
- }
- public static void ApplyTemplate(UserControl uc, ObservableCollection<EditorDataGridTemplateColumnBase> columns)
- {
- columns.ToList().ForEach(col =>
- {
- col.CellTemplate = (DataTemplate)uc.FindResource(col.StringCellTemplate);
- col.HeaderTemplate = (DataTemplate)uc.FindResource(col.StringHeaderTemplate);
- });
- }
- }
- }
|