FirmwareVersionPaneltem.xaml.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using InitializerModel;
  2. using Microsoft.Win32;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Input;
  14. using System.Windows.Media;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Navigation;
  17. using System.Windows.Shapes;
  18. namespace ConfigEditor.SubPage.EvseConfig
  19. {
  20. public class FirmwareVersionPaneltemViewModel : FirmwareUpdateModel, INotifyPropertyChanged
  21. {
  22. public FirmwareVersionPaneltemViewModel(FirmwareUpdateModel from) {
  23. this.Module = from.Module;
  24. this.Version = from.Version;
  25. this.FirmwareFileName = from.FirmwareFileName;
  26. this.DisplayFileName = System.IO.Path.GetFileName(FirmwareFileName);
  27. }
  28. public string DisplayFileName { get; set; }
  29. public event PropertyChangedEventHandler PropertyChanged;
  30. internal FirmwareUpdateModel GetFirmwareUpdateModel()
  31. {
  32. return new FirmwareUpdateModel()
  33. {
  34. Module = this.Module,
  35. Version = this.Version,
  36. FirmwareFileName = this.FirmwareFileName,
  37. };
  38. }
  39. public void TriggerPropertyChanged()
  40. {
  41. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Module)));
  42. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Version)));
  43. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FirmwareFileName)));
  44. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DisplayFileName)));
  45. }
  46. }
  47. /// <summary>
  48. /// FirmwareVersionPaneltem.xaml 的互動邏輯
  49. /// </summary>
  50. public partial class FirmwareVersionPaneltem : UserControl
  51. {
  52. //private FirmwareUpdateModel firmware;
  53. public FirmwareVersionPaneltem(string fileFolderPath, int evseIndex)
  54. {
  55. InitializeComponent();
  56. var firmware = new FirmwareUpdateModel();
  57. Init();
  58. //this.firmware = firmware;
  59. this.evseIndex = evseIndex;
  60. //this.DataContext = firmware;
  61. this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware);
  62. this.DataContext = this.ViewModel;
  63. }
  64. public FirmwareVersionPaneltem(string fileFolderPath, FirmwareUpdateModel firmware, int evseIndex)
  65. {
  66. InitializeComponent();
  67. Init();
  68. this.fileFolderPath = fileFolderPath;
  69. //this.firmware = firmware;
  70. this.evseIndex = evseIndex;
  71. this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware);
  72. this.DataContext = ViewModel;
  73. }
  74. public FirmwareUpdateModel GetModel()
  75. {
  76. var toReturn = new FirmwareUpdateModel();
  77. toReturn.Module = ViewModel?.Module;
  78. toReturn.Version = ViewModel?.Version;
  79. toReturn.FirmwareFileName = ViewModel?.FirmwareFileName;
  80. if (string.IsNullOrEmpty(toReturn.Module) ||
  81. string.IsNullOrEmpty(toReturn.Version))
  82. {
  83. return null;
  84. }
  85. return toReturn;
  86. }
  87. private void Init()
  88. {
  89. PredefinedVersions = PredefinedVersionPair.GetWebNames();
  90. var selectionList = PredefinedVersions.Append(customizedString);
  91. this.uxPredefinedFrimware.ItemsSource = selectionList;
  92. //fileSourcePath = firmware.FirmwareFileName;
  93. //firmware.DisplayFileName = System.IO.Path.GetFileName(firmware.FirmwareFileName);
  94. }
  95. public event EventHandler OnDeleteClicked;
  96. public FirmwareUpdateModel FrimwareModel => ViewModel.GetFirmwareUpdateModel();
  97. private string customizedString = "Customized";
  98. private IEnumerable<string> PredefinedVersions;
  99. private FirmwareVersionPaneltemViewModel ViewModel;
  100. private readonly string fileFolderPath;
  101. private readonly int evseIndex;
  102. private void uxPredefinedFrimware_SelectionChanged(object sender, SelectionChangedEventArgs e)
  103. {
  104. var selectedItem = uxPredefinedFrimware.SelectedItem as string;
  105. if (selectedItem == customizedString)
  106. {
  107. return;
  108. }
  109. if (PredefinedVersions.Contains(selectedItem))
  110. {
  111. var indexedApiVersion = EvseVersion.GetDDApiNameFromWebName(selectedItem, evseIndex);
  112. ViewModel.Module = indexedApiVersion;
  113. //uxFrimwareKey.Text = indexedApiVersion;
  114. ViewModel.TriggerPropertyChanged();
  115. //ReloadViewModel();
  116. }
  117. //uxFrimwareKey.Text =
  118. }
  119. private void uxFrimwareKey_TextChanged(object sender, TextChangedEventArgs e)
  120. {
  121. var versionKey = uxFrimwareKey.Text;
  122. var apiName = EvseVersion.GetApiNameFromDDApiName(versionKey);
  123. var webName = PredefinedVersionPair.GetWebName(apiName);
  124. if (PredefinedVersions.Contains(webName))
  125. {
  126. uxPredefinedFrimware.SelectedItem = webName;
  127. }
  128. else
  129. {
  130. uxPredefinedFrimware.SelectedItem = customizedString;
  131. }
  132. }
  133. private void Delete_Click(object sender, RoutedEventArgs e)
  134. {
  135. OnDeleteClicked?.Invoke(this, null);
  136. }
  137. private void ReloadViewModel()
  138. {
  139. this.DataContext = null;
  140. this.DataContext = ViewModel;
  141. }
  142. private void File_MouseUp(object sender, MouseButtonEventArgs e)
  143. {
  144. if (!(sender is TextBox textBox))
  145. {
  146. return;
  147. }
  148. var dlg = new OpenFileDialog();
  149. try
  150. {
  151. dlg.InitialDirectory = fileFolderPath;
  152. dlg.FileName = ViewModel.DisplayFileName;
  153. }
  154. catch
  155. {
  156. }
  157. var dlgResult = dlg.ShowDialog();
  158. if (dlgResult == true)
  159. {
  160. //TryUpdateFile(dlg.FileName);
  161. ViewModel.FirmwareFileName = dlg.FileName;
  162. ViewModel.DisplayFileName = System.IO.Path.GetFileName(dlg.FileName);
  163. this.DataContext = null;
  164. this.DataContext = ViewModel;
  165. }
  166. }
  167. //private void TryUpdateFile(string fullFilePath)
  168. //{
  169. // string folderPath = System.IO.Path.GetDirectoryName(fullFilePath);
  170. // string fileName = System.IO.Path.GetFileName(fullFilePath);
  171. // if (folderPath == fileFolderPath)
  172. // {
  173. // firmware.FirmwareFileName = fileName;
  174. // this.DataContext = null;
  175. // this.DataContext = firmware;
  176. // return;
  177. // }
  178. // var targetFilePath = System.IO.Path.Combine(fileFolderPath, fileName);
  179. // if (System.IO.File.Exists(targetFilePath))
  180. // {
  181. // MessageBox.Show("file existed");
  182. // return;
  183. // }
  184. // System.IO.File.Copy(fullFilePath, targetFilePath) ;
  185. // firmware.FirmwareFileName = fileName;
  186. // this.DataContext = null;
  187. // this.DataContext = firmware;
  188. //}
  189. }
  190. }