AllTreeViewModel.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections.Generic;
  2. using System.Collections.ObjectModel;
  3. using System.ComponentModel.Composition;
  4. using System.IO;
  5. using Helper;
  6. namespace Tree
  7. {
  8. [Export(contractType: typeof (AllTreeViewModel)),
  9. PartCreationPolicy(creationPolicy: CreationPolicy.NonShared)]
  10. public class AllTreeViewModel
  11. {
  12. private AllTreeData allTreeData;
  13. public int MaxNodeId { get; set; }
  14. public int MaxTreeId { get; set; }
  15. public Dictionary<int, List<TreeNodeData>> treeDict = new Dictionary<int, List<TreeNodeData>>();
  16. private readonly Dictionary<int, TreeViewModel> treeViewModelsDict = new Dictionary<int, TreeViewModel>();
  17. public ObservableCollection<TreeInfoViewModel> treeList = new ObservableCollection<TreeInfoViewModel>();
  18. public ObservableCollection<TreeInfoViewModel> TreeList
  19. {
  20. get
  21. {
  22. return this.treeList;
  23. }
  24. }
  25. public void Load(string file)
  26. {
  27. treeDict.Clear();
  28. treeList.Clear();
  29. byte[] bytes = File.ReadAllBytes(file);
  30. this.allTreeData = ProtobufHelper.FromBytes<AllTreeData>(bytes);
  31. this.MaxNodeId = 0;
  32. this.MaxTreeId = 0;
  33. foreach (TreeNodeData treeNodeData in allTreeData.TreeNodeDatas)
  34. {
  35. List<TreeNodeData> tree;
  36. this.treeDict.TryGetValue(treeNodeData.TreeId, out tree);
  37. if (tree == null)
  38. {
  39. tree = new List<TreeNodeData>();
  40. this.treeDict[treeNodeData.TreeId] = tree;
  41. }
  42. tree.Add(treeNodeData);
  43. if (treeNodeData.Id > this.MaxNodeId)
  44. {
  45. this.MaxNodeId = treeNodeData.Id;
  46. }
  47. if (treeNodeData.TreeId > this.MaxTreeId)
  48. {
  49. this.MaxTreeId = treeNodeData.TreeId;
  50. }
  51. treeList.Add(new TreeInfoViewModel(treeNodeData.TreeId, treeNodeData.TreeId.ToString()));
  52. }
  53. }
  54. public void Save(string file)
  55. {
  56. }
  57. public void New(TreeViewModel treeViewModel)
  58. {
  59. }
  60. public void Add(TreeViewModel treeViewModel)
  61. {
  62. treeViewModel.TreeId = ++this.MaxTreeId;
  63. treeViewModel.AllTreeViewModel = this;
  64. treeDict[treeViewModel.TreeId] = treeViewModel.TreeNodeDatas;
  65. treeViewModelsDict[treeViewModel.TreeId] = treeViewModel;
  66. this.treeList.Add(new TreeInfoViewModel(treeViewModel.TreeId, treeViewModel.TreeId.ToString()));
  67. }
  68. public TreeViewModel Get(int treeId)
  69. {
  70. if (this.treeViewModelsDict.ContainsKey(treeId))
  71. {
  72. return this.treeViewModelsDict[treeId];
  73. }
  74. var treeViewModel = new TreeViewModel(this.treeDict[treeId]);
  75. this.treeViewModelsDict[treeId] = treeViewModel;
  76. return treeViewModel;
  77. }
  78. }
  79. }