NetworksPage.xaml.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace WinUI
  16. {
  17. /// <summary>
  18. /// Interaction logic for NetworksPage.xaml
  19. /// </summary>
  20. public partial class NetworksPage : UserControl
  21. {
  22. public NetworksPage()
  23. {
  24. InitializeComponent();
  25. }
  26. public void setNetworks(List<ZeroTierNetwork> networks)
  27. {
  28. if (networks == null)
  29. {
  30. this.wrapPanel.Children.Clear();
  31. return;
  32. }
  33. foreach (ZeroTierNetwork network in networks)
  34. {
  35. NetworkInfoView view = ChildWithNetwork(network);
  36. if (view != null)
  37. {
  38. view.SetNetworkInfo(network);
  39. }
  40. else
  41. {
  42. wrapPanel.Children.Add(
  43. new NetworkInfoView(
  44. network));
  45. }
  46. }
  47. // remove networks we're no longer joined to.
  48. List<ZeroTierNetwork> tmpList = GetNetworksFromChildren();
  49. foreach (ZeroTierNetwork n in networks)
  50. {
  51. if (tmpList.Contains(n))
  52. {
  53. tmpList.Remove(n);
  54. }
  55. }
  56. foreach (ZeroTierNetwork n in tmpList)
  57. {
  58. NetworkInfoView view = ChildWithNetwork(n);
  59. if (view != null)
  60. {
  61. wrapPanel.Children.Remove(view);
  62. }
  63. }
  64. }
  65. private NetworkInfoView ChildWithNetwork(ZeroTierNetwork network)
  66. {
  67. List<NetworkInfoView> list = wrapPanel.Children.OfType<NetworkInfoView>().ToList();
  68. foreach (NetworkInfoView view in list)
  69. {
  70. if (view.HasNetwork(network))
  71. {
  72. return view;
  73. }
  74. }
  75. return null;
  76. }
  77. private List<ZeroTierNetwork> GetNetworksFromChildren()
  78. {
  79. List<ZeroTierNetwork> networks = new List<ZeroTierNetwork>(wrapPanel.Children.Count);
  80. List<NetworkInfoView> list = wrapPanel.Children.OfType<NetworkInfoView>().ToList();
  81. foreach (NetworkInfoView n in list)
  82. {
  83. networks.Add(n.network);
  84. }
  85. return networks;
  86. }
  87. }
  88. }