ProcessLayoutManager.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Aitex.Common.Util;
  2. using Aitex.Core.RT.DataCenter;
  3. using Aitex.Core.RT.Log;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.ToolLayout;
  6. using CyberX8_Core;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Markup;
  14. namespace MECF.Framework.Common.Layout
  15. {
  16. public class ProcessLayoutManager : Singleton<ProcessLayoutManager>
  17. {
  18. #region 常量
  19. private const int MARGIN_LEFT = 10;
  20. #endregion
  21. #region 内部变量
  22. /// <summary>
  23. /// Process Layout cell名称字典(key-cell Id,value-layout item对象)
  24. /// </summary>
  25. private Dictionary<int, ProcessLayoutCellItem> _idProcessLayoutCellItemDic = new Dictionary<int, ProcessLayoutCellItem>();
  26. /// <summary>
  27. /// 名称与Cell字典(key-Cell Id,value-cell 名称)
  28. /// </summary>
  29. private Dictionary<string, ProcessLayoutCellItem> _nameProcessLayoutCellItemDic = new Dictionary<string, ProcessLayoutCellItem>();
  30. /// <summary>
  31. /// 模块名称与cell字典(key-模块名称,value-cell对象)
  32. /// </summary>
  33. private Dictionary<string, ProcessLayoutCellItem> _moduleNameProcessLayoutCellItemDic = new Dictionary<string, ProcessLayoutCellItem>();
  34. /// <summary>
  35. /// xml地址
  36. /// </summary>
  37. private string _xmlPath = "";
  38. /// <summary>
  39. /// process layout对象
  40. /// </summary>
  41. private ProcessLayout _processLayout;
  42. #endregion
  43. /// <summary>
  44. /// 初始化
  45. /// </summary>
  46. /// <param name="xmlPath"></param>
  47. public void Initialize()
  48. {
  49. try
  50. {
  51. _xmlPath = PathManager.GetCfgDir() + "Layout\\Layout.xml";
  52. _processLayout = CustomXmlSerializer.Deserialize<ProcessLayout>(new FileInfo(_xmlPath));
  53. if (_processLayout != null)
  54. {
  55. DATA.Subscribe("System.Layout", () => _processLayout, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  56. foreach (ProcessLayoutCellItem item in _processLayout.Items)
  57. {
  58. if (item.Name != "Loader")
  59. {
  60. item.ModuleName = CellItemManager.Instance.GetModuleNameByCellId($"Cell{item.CellId}");
  61. }
  62. else
  63. {
  64. item.ModuleName = item.Name;
  65. }
  66. if (!string.IsNullOrEmpty(item.ModuleName))
  67. {
  68. _moduleNameProcessLayoutCellItemDic[item.ModuleName] = item;
  69. }
  70. _idProcessLayoutCellItemDic[item.CellId] = item;
  71. _nameProcessLayoutCellItemDic[item.Name] = item;
  72. }
  73. }
  74. }
  75. catch(Exception ex)
  76. {
  77. LOG.WriteLog(eEvent.ERR_EXCEPTION, "System", ex.Message);
  78. }
  79. }
  80. /// <summary>
  81. /// 获取ProcessLayout cell项
  82. /// </summary>
  83. /// <param name="name"></param>
  84. /// <returns></returns>
  85. public ProcessLayoutCellItem GetProcessLayoutCellItemByName(string cellName)
  86. {
  87. return _nameProcessLayoutCellItemDic.ContainsKey(cellName) ? _nameProcessLayoutCellItemDic[cellName] : null;
  88. }
  89. /// <summary>
  90. /// 获取ProcessLayout cell项
  91. /// </summary>
  92. /// <param name="name"></param>
  93. /// <returns></returns>
  94. public ProcessLayoutCellItem GetProcessLayoutCellItemByModuleName(string moduleName)
  95. {
  96. return _moduleNameProcessLayoutCellItemDic.ContainsKey(moduleName) ? _moduleNameProcessLayoutCellItemDic[moduleName] : null;
  97. }
  98. /// <summary>
  99. /// 保存Process Layout
  100. /// </summary>
  101. /// <returns></returns>
  102. public void SaveProcessLayout()
  103. {
  104. CustomXmlSerializer.Serialize(_processLayout, _xmlPath);
  105. }
  106. }
  107. }